Tải bản đầy đủ (.pdf) (68 trang)

Nghiên cứu bài toán xếp thời khóa biểu của trường đại học theo tiếp cận bài toán thỏa mãn ràng buộc

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.1 MB, 68 trang )

BỘ GIÁO DỤC VÀ ĐÀO TẠO
TRƯỜNG ĐẠI HỌC VINH
_______________________________________________________

TRẦN ANH TRUNG

NGHIÊN CỨU BÀI TỐN XẾP THỜI KHĨA BIỂU
CỦA TRƯỜNG ĐẠI HỌC THEO TIẾP CẬN
BÀI TOÁN THỎA MÃN RÀNG BUỘC

LUẬN VĂN THẠC SĨ CÔNG NGHỆ THÔNG TIN

NGHỆ AN, 2017


BỘ GIÁO DỤC VÀ ĐÀO TẠO
TRƯỜNG ĐẠI HỌC VINH
_______________________________________________________

TRẦN ANH TRUNG

NGHIÊN CỨU BÀI TỐN XẾP THỜI KHĨA BIỂU
CỦA TRƯỜNG ĐẠI HỌC THEO TIẾP CẬN
BÀI TOÁN THỎA MÃN RÀNG BUỘC

Chuyên ngành: CÔNG NGHỆ THÔNG TIN
Mã số: 60.48.02.01

LUẬN VĂN THẠC SĨ CÔNG NGHỆ THƠNG TIN

Người hướng dẫn khoa học: TS. HỒNG HỮU VIỆT



NGHỆ AN, 2017


1
MỤC LỤC
LỜI NÓI ĐẦU ................................................................................................... 1
CHƯƠNG 1. TỔNG QUAN ............................................................................ 2
1.1. Đặt vấn đề ............................................................................................... 2
1.2. Tổng quan về bài tốn xếp thời khóa biểu .............................................. 2
1.2.1. Bài tốn xếp thời khóa biểu cho trường đại học (University
timetabling) ................................................................................................. 4
1.2.2. Bài toán xếp lịch thi (Examination timetabling) .............................. 4
1.3. Các hướng tiếp cận giải bài tốn xếp thời khóa biểu .............................. 5
1.3.1. Hướng tiếp cận theo phương pháp quay lui (vét cạn) ...................... 5
1.3.2. Hướng tiếp cận theo phương pháp quy hoạch động ......................... 5
1.3.3. Hướng tiếp cận theo tìm kiếm heuristic............................................ 6
1.3.4. Hướng tiếp cận giải thuật leo đồi (Hill-climbing) ............................ 7
1.3.5. Hướng tiếp cận theo giải thuật di truyền .......................................... 7
1.4. Hướng tiếp cận theo bài toán thỏa mãn ràng buộc ................................. 7
1.5. Mục tiêu, đối tượng và phạm vi nghiên cứu ........................................... 8
1.5.1. Mục tiêu nghiên cứu ......................................................................... 8
1.5.2. Đối tượng và phạm vi nghiên cứu .................................................... 9
CHƯƠNG 2. BÀI TOÁN THỎA MÃN RÀNG BUỘC ................................ 11
2.1. Định nghĩa bài toán thỏa mãn ràng buộc .............................................. 11
2.2. Phương pháp lan truyền cạnh................................................................ 12
2.2.1. Biểu diễn bài toán thỏa mãn ràng buộc theo đồ thị ........................ 12
2.2.2. Nhất quán node (node consistency) ................................................ 13
2.2.3 Nhất quán cung (arc-consistent) ...................................................... 13
2.2.4. Thuật tốn AC-3 ............................................................................. 14

2.3. Phương pháp tìm kiếm quay lui ............................................................ 15
2.3.1. Thuật tốn ....................................................................................... 17
2.3.2. Ví dụ minh họa ............................................................................... 18
2.4. Phương pháp tìm kiếm quay lui kết hợp kiểm tra tiến (nhánh cận) ..... 19


2
2.4.1. Thuật tốn ....................................................................................... 20
2.4.2. Ví dụ minh họa ............................................................................... 21
2.5. Tìm kiếm cục bộ cho bài tốn ràng buộc (phương pháp tìm kiếm heuristic)22
2.5.1. Thuật tốn ....................................................................................... 22
2.5.2. Ví dụ minh họa ............................................................................... 23
CHƯƠNG 3. BÀI TOÁN XẾP THỜI KHĨA BIỂU ..................................... 25
3.1. Đặc tả bài tốn....................................................................................... 25
3.2. Mơ hình hố bài tốn theo dạng bài tốn thỏa mãn ràng buộc ............. 26
3.3. Thuật toán giải bài toán tổng quát ........................................................ 27
3.3.1. Các phương pháp nối tiếp (sequential methods) ............................ 27
3.3.2. Các phương pháp phân cụm (cluster method) ................................ 27
3.3.3. Các phương pháp dựa trên ràng buộc ............................................. 28
3.3.4. Các phương pháp meta-heuristic .................................................... 28
3.4. Bài toán xếp lịch thi của trường đại học ............................................... 28
3.4.1. Mô tả bài toán ................................................................................. 28
3.4.2. Đề xuất thuật toán XLT (Xếp Lịch Thi) ......................................... 29
3.4.3. Các hàm chính trong thuật tốn XLT ............................................. 32
CHƯƠNG 4. CÀI ĐẶT THỬ NGHIỆM THUẬT TOÁN ............................ 36
4.1. Cài đặt thuật toán cho bài toán xếp lịch thi trường đại học .................... 36
4.1.1. Các cấu trúc dữ liệu ........................................................................ 36
4.1.2. Bộ dữ liệu thử nghiệm .................................................................... 37
4.1.3. Đánh giá thuật toán ......................................................................... 42
4.1.4. Một số nhận xét và đề xuất ............................................................. 47

KẾT LUẬN ..................................................................................................... 48
TÀI LIỆU THAM KHẢO .............................................................................. 50
PHỤ LỤC ........................................................................................................ 51


1
LỜI NĨI ĐẦU

Người đầu tiên mà tơi xin dành sự kính trọng và cảm ơn đặc biệt là
TS. Hồng Hữu Việt. Thầy không chỉ là người giảng dạy chúng tôi các môn
học liên quan đến những kiến thức về các thuật tốn và cơng nghệ hiện đại
trên thế giới hiện nay mà còn là người trực tiếp hướng dẫn tận tình cho đề tài
của tơi. Chính Thầy là người đã tin tưởng, tạo điều kiện cũng như hỗ trợ tốt
nhất cho tơi hồn thành Luận văn tốt nghiệp này.
Chắc chắn sẽ khơng thể nói hết được những tình cảm mà tơi muốn nói,
muốn cảm ơn tới Thầy - người đầu tiên đưa ra ý tưởng và song hành cùng tơi
hồn thành luận văn này. Mọi thắc mắc của tôi đều được Thầy giải đáp, tạo
điều kiện tối đa và còn hơn thế nữa. Thầy luôn coi chúng tôi như một người
bạn và với tôi Thầy là một người bạn lớn.
Tôi cũng rất muốn dành lời cảm ơn tới TS. Phan Lê Na cùng các
Thầy cô trong khoa CNTT. TS Phan Lê Na người đã trực tiếp giảng dạy
chúng tôi với tấm lịng u nghề và đầy tâm huyết ngồi ra với vai trị là
Trưởng khoa, Cơ rất cương quyết trong chỉ đạo cũng như quan tâm sát sao để
chúng tôi hồn thành đề tài kịp tiến độ.
Tơi xin cảm ơn tới tất cả thành viên CH23-CNTT - thế hệ thạc sĩ đầu
tiên của khoa CNTT trường Đại học Vinh, họ là những người bạn thân thiết,
chân thành, là nguồn động viên rất lớn cho tôi!
Cuối cùng tôi xin chân thành cảm ơn tất cả những người đã quan tâm
và đồng hành cùng chúng tôi trong suốt thời gian qua!
Nghệ An, tháng 3 năm 2017



2
CHƯƠNG 1. TỔNG QUAN
1.1. Đặt vấn đề
Bài toán xếp thời khóa biểu là bài tốn cổ điển và thuộc lớp bài tốn tối
ưu ràng buộc, khó. Bài tốn từ lâu đã thu hút được sự quan tâm, nghiên cứu
và phát triển của nhiều tổ chức giáo dục, các nhà khoa học bởi tính ứng dụng
cao và độ phức tạp của nó. Đặc biệt, ở Việt Nam, từ lâu bài tốn xếp thời
khóa biểu đã trở thành một vấn đề có tính thời sự, một bài tốn gây được sự
chú ý, quan tâm của nhiều người.
Trong nhiều thập niên qua đã có rất nhiều các phương pháp giải được
đưa ra. Tuy nhiên, tính hiệu quả của lời giải cho lớp bài tốn vẫn cịn nhiều
bàn cãi. Trong khi các thuật tốn truyền thống tỏ ra kém hiệu quả thì các thuật
tốn của lĩnh vực trí tuệ nhân tạo lại tỏ ra là phương pháp hữu hiệu nhất để
giải các bài toán như thuật tốn tìm kiếm mơ phỏng luyện kim, thuật tốn di
truyền,...
Bài tốn xếp thời khóa biểu cho trường đại học là bài tốn lập lịch. Có
rất nhiều các ràng buộc được đưa ra trong bài toán này như ràng buộc về đối
tượng tham gia (giảng viên, lớp học, sinh viên), ràng buộc về tài nguyên phục
vụ giảng dạy như (phòng lý thuyết, phòng thực hành,…), ràng buộc về thời
gian (số tiết học), ràng buộc về chuyên môn và rất nhiều các ràng buộc khác
nữa. Như vậy, bài toán xếp thời khóa biểu có thể được mơ hình thành một bài
toán thỏa mãn ràng buộc (Constraint Satisfaction Problem - CSP) và sử dụng
phương pháp giải bài toán thỏa mãn ràng buộc để giải quyết bài tốn xếp thời
khóa biểu. Từ nhận thức đó, chúng tơi đề xuất đề tài “Nghiên cứu bài tốn
xếp thời khóa biểu của trường đại học theo tiếp cận bài toán thỏa mãn ràng
buộc” làm luận văn cao học thạc sĩ.
1.2. Tổng quan về bài toán xếp thời khóa biểu
Bài tốn xếp thời khóa biểu là một trong những bài tốn tính tốn khó



3
trong lập lịch. Mục đích là tìm các khoảng thời gian thích hợp cho một số
nhiệm vụ có tài ngun giới hạn. Phụ thuộc vào bản chất bài toán, các ràng
buộc trong bài tốn có thể thay đổi và có nhiều mục đích khác nhau.
Bài tốn xếp thời khóa biểu có thể tồn tại trong nhiều tình huống khác
nhau trong thực tiễn như: xếp lịch thi đấu thể thao, xếp lịch cơng việc và đặc
biệt xếp thời khóa biểu cho các cơ sở giáo dục. Nó quan trọng bởi vì nhu cầu
cần thiết phải có một thời khóa biểu hợp lý phục vụ công việc của các tổ chức
một cách thuận lợi nhưng để có được một thời khóa biểu tối ưu thỏa mãn tất
cả các ràng buộc là điều khơng dễ, thậm chí trong một số trường hợp rất khó
để tìm một giải pháp khả thi. Thực tế cho thấy rất khó để hình thành một mơ
hình chung cho tất cả các trường hợp của bài toán xếp thời khóa biểu, vì mọi
cơ sở giáo dục có các ràng buộc và mục tiêu đặc biệt gắn với nó.
Bài tốn xếp thời khóa biểu có thể được nhóm thành 2 kiểu: bài toán
lập lịch kỳ thi và bài toán lập lịch khóa học.
Bài tốn lập lịch kỳ thi là gán các kỳ thi qua một khoảng thời gian
tương ứng với một vài ràng buộc. Mục tiêu có thể là gán các kỳ thi cho một số
khoảng thời gian tối thiểu mà khơng có xung đột. Trong một số trường hợp
khác, số lượng khoảng thời gian được cố định và mục tiêu là tối ưu một hàm
ưu tiên dựa trên số phịng, người coi thi và sinh viên.
Ví dụ một số hàm ưu tiên có thể là:
● Tối đa khoảng thời gian giữa 2 kỳ thi liên tiếp của một sinh viên
● Lập lịch các kỳ thi mà có số lượng sinh viên tham gia đông trong các
khoảng thời gian sớm.
Đối với bài tốn lập lịch khóa học, khoảng thời gian thường được cố
định trước, ví dụ trong vịng 1 tuần. Mục tiêu là tìm một lịch khóa học mà
thỏa mãn một số ràng buộc liên quan đến giảng viên, số phịng. Ví dụ lịch làm
việc của giảng viên có thể phải xếp thích hợp trong nhiều tiết học của một

ngày làm việc để tối thiểu số ngày giảng viên đi làm.


4
Bài tốn lập lịch khóa học và lập lịch kỳ thi có những đặc điểm giống
và khác nhau. Ví dụ, trong cả 2 bài tốn, một sinh viên khơng thể tham dự
nhiều hơn một kỳ thi hoặc nhiều hơn một mơn học tại một thời điểm.
Mặc dù có sự khác biệt giữa các kiểu bài toán trên nhưng các phương
pháp giải chúng là tương tự nhau. Trong luận văn này, chúng tơi sẽ tập trung
xử lý bài tốn lập lịch kỳ thi.
1.2.1. Bài tốn xếp thời khóa biểu cho trường đại học (University timetabling)
Bài tốn xếp thời khóa biểu cho trường đại học là bài toán lập lịch cho
các bài giảng (lectures) vào từng khóa học với một số lượng phịng học và tiết
học cho trước. Bài tốn này được ràng buộc bởi số phịng học, giảng viên,
sinh viên, mơn học… Ở các trường đại học, hai khóa học khác nhau có thể có
trùng sinh viên tham dự và điều đó có thể tạo ra xung đột và sẽ khơng thể lập
lịch được trong cùng một tiết học. Những trường đại học đào tạo theo hệ tín
chỉ, mỗi sinh viên có thể tham gia nhiều mơn học trong một học kỳ nên địi
hỏi có một thời khóa biểu hợp lý để tạo điều kiện lựa chọn môn học cho sinh
viên cũng là điều cần thiết. Tóm lại bài tốn xếp thời khóa biểu cho trường
đại học là một bài tốn có nhiều ràng buộc và kích thước lớn nên ảnh hưởng
đến thời gian thực hiện thuật tốn và khó đưa ra được phương án tối ưu thỏa
mãn tất cả mọi yêu cầu của đối tượng tham gia.
1.2.2. Bài toán xếp lịch thi (Examination timetabling)
Bài toán xếp lịch thi tương tự như bài tốn xếp thời khóa biểu cho
trường đại học nhưng vẫn có sự khác nhau giữa hai bài tốn này. Bài tốn xếp
lịch thi có những đặc điểm sau đây:
• Chỉ có một kỳ thi cho mỗi một mơn thi.
• Mọi sinh viên đều phải tham gia kỳ thi.


• Một sinh viên sẽ chỉ có một kỳ thi trong một ngày và khơng có nhiều
q các kỳ thi liên tiếp nhau với một sinh viên.
• Thời gian của kỳ thi có thể khác nhau.


5
• Có thể có nhiều hơn một kỳ thi trong một phịng thi (có nhiều mơn thi
được xếp trong một phịng thi).
1.3. Các hướng tiếp cận giải bài tốn xếp thời khóa biểu
Bài tốn thời khóa biểu nói riêng và các bài tốn tối ưu tổ hợp nói
chung là thuộc lớp các bài tốn ràng buộc khó. Sự khó khăn của chúng
được thể hiện ở độ phức tạp tính tốn vì vậy thời gian để giải thường tăng
theo hàm mũ của kích thước bài tốn và thường khó đạt được một kết quả
tối ưu tuyệt đối.
1.3.1. Hướng tiếp cận theo phương pháp quay lui (vét cạn)
Đặc trưng của vét cạn thường sử dụng phương pháp duyệt đệ quy để
xét hết mọi khả năng có thể có nghiệm theo nguyên tắc "thử sai" và quay lui.
Quay lui là một trong các phương pháp vét cạn trong đó các giá trị nghiệm
được chọn khơng thực hiện được bằng cách duyệt tuyến tính. Điểm tốt của
thuật toán quay lui so với vét cạn tuyến tính là hạn chế bớt các nhánh phải
duyệt mà theo những nhánh đó khơng tìm được lời giải. Tuy nhiên hạn chế
của phương pháp này là phải duyệt qua nhiều khả năng nên độ phức tạp của
chương trình thường ở mức giai thừa hay hàm mũ nên tốc độ tính tốn khá lâu
trong trường hợp kích thước của dữ liệu vào khá lớn. Vì độ phức tạp là một
hàm mũ nên phương pháp này thường khó giải quyết những bài tốn có số
phần tử lớn hơn 50. Vì vậy phương pháp đệ quy khó có thể áp dụng để giải
quyết bài tốn xếp thời khóa biểu vì ta phải phát triển một không gian trạng
thái rất lớn, trước khi đi tới trạng thái đích, do những hạn chế về thời gian tính
tốn và dung lượng bộ nhớ, khơng cho phép chúng ta làm được điều đó.
1.3.2. Hướng tiếp cận theo phương pháp quy hoạch động

Phương pháp này dùng để giải các “bài tốn tối ưu” có bản chất đệ
qui, tức là tìm phương án tối ưu cho bài tốn đó có thể đưa về tìm phương án
tối ưu của một số hữu hạn các bài toán con. Phương pháp quy hoạch động
(Dynamic Programming) là một kỹ thuật nhằm đơn giản hóa việc tính tốn


6
các cơng thức truy hồi bằng cách lưu tồn bộ hay một phần kết quả tính tốn
tại mỗi bước trước đó với mục đích sử dụng lại.
Vì vậy, bài tốn xếp thời khóa biểu rất khó tiếp cận theo phương pháp
quy hoạch động vì đây khơng phải là bài tốn có thể tìm được nghiệm tối ưu,
cách xác định bài tốn con nhỏ nhất và tìm cơng thức truy hồi cho nó gần như
là điều khơng thể. Ngồi các ràng buộc cứng cịn có các ràng buộc mềm nên
có q nhiều tham số cho một công thức truy hồi để giải theo hướng quy
hoạch động.
1.3.3. Hướng tiếp cận theo tìm kiếm heuristic
Nhiều bài tốn xếp lịch có dữ liệu vào lớn khơng thể áp dụng thuật tốn
cho lời giải tối ưu khi thời gian không cho phép, trong những trường hợp đó
chúng thường được giải bằng phương pháp heuristic (một tìm kiếm hợp lý
nào đó) để có lời giải tương đối tối ưu thực hiện trong thời gian cho phép.
Bài tốn xếp lịch thường có 2 u cầu:
- u cầu loại 1 (ràng buộc cứng): gọi là yêu cầu bắt buộc (nội dung cụ
thể tuỳ theo từng bài toán) là u cầu phải đạt được, nếu khơng đạt được thì
coi như lời giải khơng được chấp nhận. Ví dụ: u cầu phải xếp hết tất cả
công việc, hoặc phải xếp xong trước một thời hạn cho trước nào đó, hoặc mỗi
công việc phải tuân thủ yêu cầu về thời gian bắt đầu, thời gian kết thúc, thời
gian hoàn thành của công việc ấy, hoặc công việc này phải được thực hiện
trước công việc kia…
- Yêu cầu loại 2 (ràng buộc mềm): là yêu cầu có thể nhân nhượng phần
nào đó (nội dung cụ thể tuỳ theo từng bài tốn). Ví dụ: cho phép tổng chi phí

(hoặc tổng thời gian) thực hiện xong các công việc đạt giá trị càng thấp càng
tốt (hoặc xong càng sớm càng tốt). Chính nhờ sự nhân nhượng này mà ta có
thể đề xuất ra những cách sắp xếp một hoặc một nhóm cơng việc tiếp theo dễ
dàng hơn, đó chính là các "heuristic".
Giải thuật chứa các heuristic có những đặc điểm:


7
• Cho lời giải gần tối ưu, thời gian thực hiện chương trình là hợp lý và

có thể tổ chức dữ liệu để thực hiện chương trình.
• Có thể thay đổi một vài heuristic trong q trình giải để thích ứng với

các loại bộ dữ liệu khác nhau, kết hợp so sánh kết quả thực hiện các heuristic
khác nhau và giữ lại kết quả tốt hơn.
1.3.4. Hướng tiếp cận giải thuật leo đồi (Hill-climbing)
Giải thuật leo đồi chính là nền tảng cơ sở của các kỹ thuật tìm kiếm cục
bộ. Mặc dù đây là giải thuật đơn giản nhưng nó lại rất mạnh và hiệu quả trong
việc giải quyết các bài toán thỏa mãn ràng buộc lớn. Thuật toán leo đồi thực
hiện bằng cách ở mỗi bước của việc tìm kiếm, chúng ta sẽ chọn một bước
chuyển mà nó cải thiện giá trị hàm mục tiêu để thực hiện.
Trong giải thuật leo đồi, chỉ những bước chuyển cải thiện được hàm chi
phí hoặc khơng làm cho hàm chi phí thay đổi mới được chọn vì vậy việc tìm
kiếm sẽ liên tục bước lên vị trí cao hơn cho đến khi nó gặp điều kiện dừng.
1.3.5. Hướng tiếp cận theo giải thuật di truyền
Giải thuật di truyền (Genetic Algorithms) đã tỏ ra khá thành công trong
một số áp dụng. Giải thuật di truyền mượn ý tưởng trong q trình tiến hóa
của sinh vật. Ý tưởng chính của giải thuật là duy trì một quần thể các lời giải
ứng viên. Các lời giải ứng viên này sẽ được cho cơ hội riêng lẻ để sản sinh ra
con cái tùy thuộc vào độ thích nghi (fitness) của chúng. Độ thích nghi được

đo bằng một hàm mục tiêu. Giải thuật di truyền đã được áp dụng vào việc giải
hệ ràng buộc. Việc dùng giải thuật di truyền vào các bài tốn tối ưu hóa có
ràng buộc làm phát sinh nhiều vấn đề mà các nhà nghiên cứu phải quan tâm
giải quyết. Một trong những vấn đề quan trọng là làm thế nào để đưa các ràng
buộc vào các hàm thích nghi (fitness function) để điều khiển quá trình tìm
kiếm một cách đúng đắn.
1.4. Hướng tiếp cận theo bài toán thỏa mãn ràng buộc
Bài toán thỏa mãn ràng buộc (Constraint Satisfaction Problem - CSP)


8
đang ngày càng trở nên phổ biến trong cộng đồng khoa học máy tính cũng
như trí tuệ nhân tạo. CSP thực sự rất đáng quan tâm vì nó xuất hiện trong một
số lớn các ứng dụng. Nó cũng có những đặc tính riêng cần được khám phá và
phát triển bằng những thuật toán hiệu quả riêng. Phương pháp thoả mãn ràng
buộc hổ trợ cho phương pháp sinh và thử, khi chú ý tới một số ràng buộc áp
đặt lên các nút trong khơng gian bài tốn. Mục đích đặt ra là xác định đường
đi trong đồ thị không gian bài toán, đường đi từ trạng thái đầu đến trạng thái
cuối đáp ứng được các ràng buộc đó
Tổng quan các kỹ thuật giải CSP có thể phân thành 3 loại: Rút gọn bài
tốn, tìm kiếm và sự tổng hợp nghiệm. Rút gọn bài tốn tức là làm giảm được
khơng gian trạng thái của bài tốn nên nó dễ dàng hơn trong việc áp dụng
được một số thuật toán truyền thống trong quá trình tìm kiếm nghiệm, cuối
cùng là tổng hợp nghiệm tức là lựa chọn nghiệm tốt nhất trong tập nghiệm đã
tìm kiếm được thõa mãn tất cả các ràng buộc nên đây là một hướng tiếp cận
khả thi.
1.5. Mục tiêu, đối tượng và phạm vi nghiên cứu
1.5.1. Mục tiêu nghiên cứu
* Mục tiêu tổng quát
Nghiên cứu bài toán xếp thời khóa biểu của trường đại học và giải

quyết bài tốn theo hướng tiếp cận giải bài toán thỏa mãn ràng buộc; áp dụng
thử nghiệm cho bài toán xếp lịch thi của trường đại học.
* Mục tiêu cụ thể
Đề tài tập trung vào các mục tiêu cụ thể sau:
(i) Nghiên cứu bài tốn xếp thời khóa biểu của trường đại học và các
hướng tiếp cận giải bài toán.
(ii) Nghiên cứu bài toán thỏa mãn ràng buộc và các phương pháp giải
bài tốn thỏa mãn ràng buộc.
(iii) Mơ hình hóa bài tốn xếp thời khóa biểu của trường đại học theo


9
dạng bài tốn thỏa mãn ràng buộc.
(iv) Tìm kiếm giải thuật phù hợp giải bài tốn xếp thời khóa biểu theo
tiếp cận bài toán thỏa mãn ràng buộc.
(v) Áp dụng thử nghiệm cho bài toán xếp lịch thi của trường đại học.
1.5.2. Đối tượng và phạm vi nghiên cứu
* Đối tượng nghiên cứu
(a) Nghiên cứu lý thuyết
- Nghiên cứu các tài liệu về bài tốn xếp thời khóa biểu của trường đại
học và các hướng tiếp cận giải bài toán.
- Nghiên cứu các tài liệu về bài toán thỏa mãn ràng buộc và các phương
pháp giải quyết bài toán thỏa mãn ràng buộc.
- Nghiên cứu biểu diễn bài toán xếp thời khóa biểu dưới dạng một bài
tốn thỏa mãn ràng buộc.
- Nghiên cứu, lựa chọn thuật toán phù hợp cho bài tốn xếp thời khóa
biểu.
- Nghiên cứu bài tốn xếp lịch thi của trường đại học.
(b) Nghiên cứu thực nghiệm
- Nghiên cứu ngơn ngữ lập trình để cài đặt thử nghiệm bài tốn xếp thời

khóa biểu.
- Đánh giá hiệu quả của các thuật toán.
* Phạm vi nghiên cứu
Bài toán xếp thời khóa biểu của trường đại học có thể được giải quyết
theo nhiều phương pháp khác nhau như đệ quy quay lui, tìm kiếm heuristic,
giải thuật di truyền,... Trong luận văn này chúng tơi nghiên cứu và giải quyết
bài tốn xếp thời khóa biểu của trường đại học theo tiếp cận bài toán thỏa mãn
ràng buộc. Dựa trên bài toán xếp thời khóa biểu tổng qt, chúng tơi áp dụng
thử nghiệm giải bài toán xếp lịch thi cho trường đại học theo hệ tín chỉ.
* Nội dung nghiên cứu


10
- Nghiên cứu tổng quan bài tốn xếp thời khóa biểu của trường đại học
và các hướng tiếp cận giải bài toán.
- Nghiên cứu bài toán thỏa mãn ràng buộc và các phương pháp giải bài
toán thỏa mãn ràng buộc.
- Mơ hình hóa bài tốn xếp thời khóa biểu của trường đại học theo dạng
bài toán thỏa mãn ràng buộc.
- Tìm kiếm giải thuật phù hợp giải bài tốn xếp thời khóa biểu theo tiếp
cận bài tốn thỏa mãn ràng buộc.
- Nghiên cứu ngơn ngữ lập trình và cài đặt thử nghiệm bài tốn xếp thời
khóa biểu.
- Cài đặt thử nghiệm cho bài toán xếp lịch thi cho trường đại học.
- Đánh giá thuật tốn xếp thời khóa biểu.


11
CHƯƠNG 2. BÀI TOÁN THỎA MÃN RÀNG BUỘC
2.1. Định nghĩa bài toán thỏa mãn ràng buộc

Một bài toán thỏa mãn ràng buộc gồm 3 thành phần, X, D và C:
-

X là tập các biến {X1, X2,.., Xn}

-

D là tập miền giá trị của biến {D1, D2,..., Dn}

-

C là tập các ràng buộc cho các biến.

Mỗi miền Di gồm tập các giá trị cho phép {v1,.., vk} của biến Xi. Mỗi
ràng buộc Ci gồm 1 cặp <scope,rel>, trong đó scope là tập các biến (tuple) các
biến tham gia trong ràng buộc và rel là mối quan hệ định nghĩa giá trị mà các
biến có thể nhận. Ví dụ, nếu X1 và X2 đều có miền giá trị là {A,B} thì ràng
buộc cho rằng giá trị 2 biến phải khác nhau có thể biểu diễn như sau:
<(X1, X2), [(A, B), (B , A)]> hoặc <(X1, X2), X1 =! X2>.
Để giải một CSP, ta cần định nghĩa không gian trạng thái và ký hiệu
cho một giải pháp. Mỗi trạng thái trong CSP được định nghĩa bằng việc gán
các giá trị cho tập biến. {Xi =vi, Xj = vj,...}
Một phép gán không vi phạm bất cứ ràng buộc nào được gọi là phép
gán nhất quán (consistent assignment) hoặc phép gán hợp lệ. Một phép gán
đầy đủ (complete assignment) là phép gán trong đó mọi biến đều được gán
giá trị, và 1 giải pháp (solution) cho CSP là một phép gán đầy đủ, hợp lệ. Một
phép gán cục bộ (partial assignment) là phép gán mà chỉ gán các giá trị cho
một số biến.
Một số khái niệm trong CSP:
Ràng buộc đơn (unary constraint) giới hạn giá trị của một biến đơn.

Ví dụ trong bài tốn tơ màu bản đồ trong trường hợp SA (South Australians)
không được tơ màu xanh, chúng ta có thể biễu diễn thành ràng buộc đơn như
sau <(SA), SA != green>.
Ràng buộc nhị phận (binary constraint) liên quan đến 2 biến. Ví dụ,


12
SA != NSW (trong bài tốn tơ màu bản đồ) là một ràng buộc nhị phân.
2.2. Phương pháp lan truyền cạnh
Trong các bài tốn CSP, một thuật tốn có thể tìm kiếm (chọn một phép
gán biến mới từ một tập miền giá trị) hoặc tạo một suy luận (inference) gọi là
lan truyền cạnh (lan truyền ràng buộc - Constraint propagation): đó là sử dụng
các ràng buộc để giảm số giá trị một biến có thể nhận, dựa vào đó có thể giảm
miền giá trị gán cho một biến khác,… Lan truyền cạnh có thể thực hiện cùng
q trình tìm kiếm hoặc có thể xem như là một bước tiền xử lý, trước khi tìm
kiếm được bắt đầu.
Điểm chính là nhất quán cục bộ (local consistency). Nếu ta xem mỗi
biến như 1 node trong 1 đồ thị và mỗi ràng buộc nhị phân là 1 cung, thì quá
trình tạo ra nhất quán cục bộ trong mỗi phần đồ thị gây ra các giá trị node
không nhất quán sẽ bị loại bỏ dần dần khỏi đồ thị. Có những dạng nhất quán
cục bộ khác nhau được trình bày trong 2.2.2 và 2.2.3 dưới đây.
2.2.1. Biểu diễn bài toán thỏa mãn ràng buộc theo đồ thị
Có thể xem một CSP như một đồ thị ràng buộc (constraint graph). Các
node của đồ thị ứng với các biến trong CSP và một cạnh kết nối bất kỳ 2 biến
tham gia trong 1 ràng buộc.

Hình 2.1. Tơ màu bản đồ

Hình 2.2. Đồ thị được chuyển từ bản đồ


Trong hình trên là ví dụ xem một CSP như đồ thị ràng buộc. Hình 1.1
là bài tốn tơ màu bản đồ. Nhiệm vụ là cần tô màu mỗi vùng với một trong


13
các màu đỏ, xanh lá cây, xanh da trời; với ràng buộc là khơng có bất kỳ 2
vùng hàng xóm nào cùng màu. Hình 1.2 biểu diễn bài tốn trên như là một đồ
thị ràng buộc.
2.2.2. Nhất quán node (node consistency)
Một biến đơn (ứng với một node trong mạng CSP) là nhất quán node
nếu tất cả giá trị trong miền giá trị của biến thoản mãn các ràng buộc đơn của
biến (unary constraints). Ví dụ, trong bài tốn tơ màu bản đồ, miền giá trị
khởi tạo của SA là {red, green, blue}. Để biểu diễn SA không chọn lựa màu
green, chúng ta có thể giảm miền giá trị của SA là {red, blue}.
Lưu ý ràng buộc đơn của SA là <(SA), SA != green>. Và tập giá trị của
SA là {red, blue}. Vì mọi giá trị trong tập giá trị đều thỏa mãn ràng buộc đơn,
trong trường hợp này, ta nói SA là nhất quán node.
Ta nói rằng một mạng là nhất quán node nếu mọi biến trong mạng là
nhất quán node.
2.2.3. Nhất quán cung (arc-consistent)
Một biến trong một CSP là nhất quán cung nếu mọi giá trị trong miền
giá trị của nó thỏa mãn các ràng buộc nhị phân của biến. X i là nhất quán cung
với một biến khác Xj nếu với mọi giá trị trong miền Di, tồn tại một giá trị
trong miền Dj mà thỏa mãn ràng buộc nhị phân trên cung (Xi, Xj). Một mạng
là nhất quán cung nếu mọi biến là nhất quán cung với mọi biến khác. Ví dụ,
xem xét ràng buộc Y = X2, với miền giá trị của X, Y là tập các chữ số. Ta có
thể biểu diễn ràng buộc trên như sau:
<(X,Y), {(0,0), (1,1), (2,4), (3,9))}>
Để X nhất quán cung với Y, ta có thể giảm miền giá trị của X thành
{0,1,2,3}. Có thể thấy rằng với mọi giá trị bất kỳ trong tập giá trị X, ta ln

tìm được một chữ số trong tập Y để thỏa mãn Y=X2.
Để Y nhất quán cung với X, ta giảm miền giá trị của Y là {0,1,4,9} và


14
khi đó tồn bộ CSP là nhất qn cung.
2.2.4. Thuật toán AC-3
Thuật toán phổ biến nhất để nhất quán cung là AC-3. Để tạo ra mọi
biến nhất quán cung, AC-3 duy trì một hàng đợi các cung để kiểm tra. Khởi
tạo, hàng đợi chứa tất cả các cung trong CSP. AC-3 lấy ra một cung ngẫu
nhiên (Xi,Xj) từ hàng đợi và xử lý để Xi nhất quán cung với Xj. Nếu sau phép
xử lý này Di không thay đổi, thuật toán chuyển tới cung tiếp theo. Nhưng nếu
phép xử lý giúp giảm miền giá trị Di, ta thêm vào hàng đợi tất cả các cung
(Xk,Xi), trong đó Xk là một hàng xóm của Xi. Lý do là vì miền giá trị Di là
giảm, dựa vào đó ta hy vọng ràng buộc giữa (Xk,Xi) sẽ giúp giảm miền giá trị
của Xk, tức giảm dần khơng gian tìm kiếm của các node. Nếu sau phép xử lý
Di trở thành tập rỗng, tức là khơng có giá trị nào trong tập Di để thỏa mãn
ràng buộc cung (Xi,Xj), thì ta kết luận bài tốn CSP khơng có một giải pháp
nhất qn, và do đó AC-3 trả lại false.
Ngược lại, chúng ta tiếp tục kiểm tra, cố gắng giảm tập giá trị từ các
miền giá trị các biến cho tới khi khơng cịn cung nào trong hàng đợi.
Sau khi áp dụng AC-3, ta có được một bài toán CSP tương đương với
CSP gốc ban đầu (cả 2 đều có cùng lời giải), nhưng CSP đã được xử lý nhất
quán cung sẽ hoạt động nhanh hơn trong khơng gian tìm kiếm vì miền biến
của nó có tập giá trị ít hơn.
Function AC-3(csp) return false nếu tìm thấy một kiểm tra khơng nhất qn
cung và true nếu mọi cung đều nhất quán.
inputs: csp, CSP nhị phân với các thành phần (X, D, C)
local variables: queue - hàng đợi các cung, được khởi tạo từ tất cả các cung
trong csp

while queue không rỗng do


15
(Xi, Xj) <= Remove-First (queue) // lấy cung đầu tiên từ hàng đợi
// xử lý để Xi nhất quán với Xj, mục đích là giảm miền giá trị Di của Xi

If Revise(csp,Xi,Xj) then
If cỡ của Di = 0 then return false
For each Xk in Xi.neighbors-{Xj} do // tập hàng xóm Xi, ngoại trừ Xj
Add(Xk,Xi) to queue
Return true.
Function Revise(csp,Xi,Xj) return true nếu đã kiểm tra miền Xi
revised <= false
For each x in Di do // Di là tập giá trị của Xi
If không tồn tại giá trị y trong Dj để (x,y) thỏa mãn ràng buộc Xi và Xj
then
Delete x từ Di // xóa x từ tập Di
revised <= true
Return revised.
2.3. Phương pháp tìm kiếm quay lui
Quay lui (backtracking) là một chiến lược tìm kiếm lời giải cho các bài
tốn thỏa mãn ràng buộc. Người đầu tiên đề ra thuật ngữ này (backtrack) là
nhà toán học người Mỹ D. H. Lehmer vào những năm 1950.
Các bài toán thỏa mãn ràng buộc là các bài tốn có một lời giải đầy đủ,
trong đó thứ tự của các phần tử khơng quan trọng. Các bài toán này bao gồm
một tập các biến mà mỗi biến cần được gán một giá trị tùy theo các ràng buộc
cụ thể của bài toán. Việc quay lui là để thử tất cả các tổ hợp để tìm được một
lời giải. Thế mạnh của phương pháp này là nhiều cài đặt tránh được việc phải
thử nhiều tổ hợp chưa hồn chỉnh, và nhờ đó giảm thời gian chạy.



16
Phương pháp quay lui có quan hệ chặt chẽ với tìm kiếm tổ hợp. Về bản
chất, tư tưởng của phương pháp là thử từng khả năng cho đến khi tìm thấy lời
giải đúng. Đó là một q trình tìm kiếm theo chiều sâu trong một tập hợp các
lời giải. Trong quá trình tìm kiếm, nếu ta gặp một hướng lựa chọn không thỏa
mãn, ta quay lui về điểm lựa chọn nơi có các hướng khác và thử hướng lựa
chọn tiếp theo. Khi đã thử hết các lựa chọn xuất phát từ điểm lựa chọn đó, ta
quay lại điểm lựa chọn trước đó và thử hướng lựa chọn tiếp theo tại đó. Q
trình tìm kiếm thất bại khi khơng cịn điểm lựa chọn nào nữa.
Quy trình đó thường được cài đặt bằng một hàm đệ quy mà trong đó
mỗi thể hiện của hàm lấy thêm một biến và lần lượt gán tất cả các giá trị có
thể cho biến đó, với mỗi lần gán trị lại gọi chuỗi đệ quy tiếp theo để thử các
biến tiếp theo. Chiến lược quay lui tương tự với tìm kiếm theo độ sâu nhưng
sử dụng ít khơng gian bộ nhớ hơn, nó chỉ lưu giữ trạng thái của một lời giải
hiện tại và cập nhật nó.
Để tăng tốc q trình tìm kiếm, khi một giá trị được chọn, trước khi
thực hiện lời gọi đệ quy, thuật tốn thường xóa bỏ giá trị đó khỏi miền xác
định của các biến có mâu thuẫn chưa được gán (kiểm tra tiến - forward
checking) và kiểm tra tất cả các hằng số để tìm các giá trị khác đã bị loại trừ
bởi giá trị vừa được gán (lan truyền ràng buộc - constraint propagation).
Người ta thường sử dụng một số phương pháp heuristic để tăng tốc cho
quá trình quay lui. Do các biến có thể được xử lý theo thứ tự bất kỳ, việc thử
các biến bị ràng buộc chặt nhất (nghĩa là các biến có ít lựa chọn về giá trị
nhất) thường có hiệu quả do nó tỉa cây tìm kiếm từ sớm (cực đại hóa ảnh
hưởng của lựa chọn sớm hiện hành).
Các cài đặt quay lui phức tạp thường sử dụng một hàm biên, hàm này
kiểm tra xem từ lời giải chưa đầy đủ hiện tại có thể thu được một lời giải hay
không, nghĩa là nếu đi tiếp theo hướng hiện tại thì liệu có ích hay khơng. Nhờ

đó, một kiểm tra biên phát hiện ra các lời giải dở dang chắc chắn thất bại có thể


17
nâng cao hiệu quả của tìm kiếm. Do hàm này hay được chạy, có thể tại mỗi
bước, nên chi phí tính tốn các biên cần tối thiểu, nếu khơng, hiệu quả tồn cục
của thuật tốn sẽ khơng được cải tiến. Các hàm kiểm tra biên được tạo theo
kiểu gần như các hàm heuristic khác: nới lỏng một số điều kiện của bài toán.
2.3.1. Thuật toán
Dưới đây là một thuật toán quay lui cho các bài toán thỏa mãn ràng
buộc. Thuật tốn được mơ hình theo tìm kiếm theo chiều sâu đệ qui.
Function Backtracking-search(csp) return 1 CaThe hoặc failure
Return Backtrack({}, csp)
Function Backtrack(assignment, csp) return 1 CaThe hoặc failure
If assignment là đầy đủ then return assignment
Var <= Select-unssigned-variable(csp) // chọn lựa biến chưa được gán
For each value in Order-domain-values(var, assignment, csp) do
If value là nhất quán với assignment then //phép gán thỏa mãn các ràng buộc
Add {var = value} to assignment
result <= Backtrack(assignment, csp) // đệ qui cho biến tiếp theo
if result != failure then
return result.
Remove {var = value} từ assigment //xóa giá trị var=value từ assignment để quay lui
Return failure
Lưu ý assignment là một phép gán cho các biến tính tới thời điểm đang
xét.
Hàm Inference có thể thực hiện dựa trên nhất quán cung (arcconsistency). Nếu phép gán một giá trị cho một biến đang xét dẫn tới lời giải
lỗi, thì phép gán cho biến đó được xóa khỏi assignment và ta sẽ thử gán một



18
giá trị mới cho biến đang xét.
Thuật ngữ tìm kiếm quay lui là dùng cho tìm kiếm theo chiều sâu, tức
là chọn các giá trị cho một biến tại một thời điểm và quay lui lại khi một biến
khơng có giá trị hợp lệ.
Trong thuật tốn trên, nó chọn lặp lại một biến chưa được gán và thử tất
cả các giá trị trong miền của biến đó. Nếu tìm thấy một sự kiểm tra không
nhất quán (tức là vi phạm ràng buộc) thì hàm quay lui Backtrack trả lại false,
vậy là lời gọi trước đó cần thử một giá trị khác.
Thuật tốn trên chứa dịng về chọn lựa biến chưa gán, Var <= Selectunssigned-variable(csp).
Chiến lược đơn giản nhất để chọn lựa biến chưa gán là chọn biến chưa
được gán theo thứ tự {X1, X2, ...}.
2.3.2. Ví dụ minh họa
Ví dụ sau mơ tả bài tốn tơ màu bản đồ dựa trên thuật tốn quay lui.

Hình 2.3. Bản đồ các vùng được tô màu


19

Hình 2.4. Bản đồ và đồ thị được thể hiện bằng thuật toán quay lui
Tập biến cần gán là {WA, NT, Q, SA, NSW, V, T}. Để đơn giản giả sử
ta chỉ xét phép gán cho tập 3 thành phố {WA, NT, Q}.
Bước đầu tiên ta chọn biến chưa được gán là WA. Biến này có thể
được gán với 3 màu {red, green, blue}. Giả sử biến được chọn cho giá trị đầu
tiên với màu read. Tại bước thứ 2, ta xét biến tiếp theo chưa được gán là NT.
Vì NT có ràng buộc với WA là phải khác màu, nên NT chỉ có thể nhận tập
màu {green, blue}.
Tương tự ta xét tiếp cho biến Q và biến Q có thể thuộc tập màu {red,
blue}. Giả sử xét tại phép gán (assigment) hiện tại {WA=red, NT=green,

Q=red}, ta thấy phép gán này thỏa mãn bài tốn và có thể là 1 lời giải
(CaThe). Tuy nhiên trong trường hợp phép gán này không thỏa mãn, ta quay
lui kiểm tra giá trị biến Q cho một giá trị khác là blue và ta được phép gán
mới {WA=red, NT=green, Q=blue}.
2.4. Phương pháp tìm kiếm quay lui kết hợp kiểm tra tiến (nhánh cận)
Trong thuật tốn quay lui trên, ta có thể thêm hàm suy luận (inference)
để giảm miền giá trị các biến khi tìm kiếm đệ quị theo chiều sâu. Một trong
những dạng suy luận đơn giản nhất gọi là kiểm tra tiến, hay còn gọi là nhánh


20
cận. Thuật tốn được trình bày như bên dưới.
2.4.1. Thuật toán
Ý tưởng của kiểm tra nhánh cận là bất cứ khi nào gán giá trị cho một
biến X, quá trình kiểm tra nhánh cận thành lập một nhất quán cung (arcconsistency) cho biến X: với mỗi biến Y chưa được gán giá trị mà kết nối với
X bởi một ràng buộc, ta xóa bất cứ giá trị nào thuộc miền giá trị của Y mà tạo
sự không nhất quán với giá trị đã được chọn từ X. Vì kiểm tra nhánh cận chỉ
thực hiện các suy luận về nhất quán cung, ta không cần thực hiện kiểm tra
nhánh cận nếu ta đã thực hiện nhất quán cung (ví dụ bằng AC-3) trong bước
tiền xử lý.
Function Backtracking-search(csp) return 1 CaThe hoặc failure
Return Backtrack({}, csp)
Function Backtrack(assignment, csp) return 1 CaThe hoặc failure
If assignment là đầy đủ then return assignment
Var <= Select-unssigned-variable(csp) // chọn lựa biến chưa được gán
For each value in Order-domain-values(var, assignment, csp) do
If value là nhất quán với assignment then
Add {var = value} to assignment
inferences <= Inference(csp, var, value)
if inferences != false then

add interences tới assignment // thêm suy luận tới phép gán
result <= Backtrack(assignment, csp)
if result != failure then
return result.
Remove {var = value} và inferences from assigment
Return failure


21
2.4.2. Ví dụ minh họa
Hình dưới mơ tả q trình tìm kiếm quay lui kết hợp kiểm tra nhánh
cận cho bài tốn tơ màu bản đồ.

Trong ví dụ này, WA=red được gán đầu tiên, sau đó kiểm tra nhánh cận
xóa màu red từ miền giá trị của các hàng xóm NT và SA. Sau khi Q=green
được gán, green được xóa khỏi miền giá trị của NT, SA, NSW. Sau khi
V=blue được gán, blue được xóa khỏi miền giá trị của NSW và SA, dẫn đến
SA khơng cịn giá trị màu nào có thể gán.
Có 2 điểm quan trọng cần lưu ý về ví dụ này:
Thứ nhất, sau khi WA=red và Q=green được gán, các miền giá trị của
NT và SA giảm xuống còn lại 1 giá trị đơn. Bằng cách này ta loại bỏ việc
kiểm tra phân nhiều nhánh trên NT và SA bằng cách lan truyền thông tin từ
WA và Q.
Thứ hai, sau khi V=blue, miền của SA là trống. Do đó kiểm tra nhánh
cận phát hiện rằng phép gán cục bộ {WA=red, Q=green, B=blue} là không
nhất quán với các ràng buộc của bài tốn, do đó thuật tốn sẽ quay lui lập tức.


×