Khóa luận Ứng dụng ngôn ngữ lập trình ràng buộc comet vào bài toán lập thời khóa biểu

ĐẠI HC QUC GIA HÀ NI  
TRƢỜNG ĐẠI HC CÔNG NGHỆ  
Nguyn ThThùy  
NG DNG NGÔN NGLP TRÌNH RÀNG BUC  
COMET VÀO BÀI TOÁN  
LP THI KHÓA BIU  
KHÓA LUN TT NGHIỆP ĐẠI HC HCHÍNH QUY  
Ngành: Công nghthông tin  
Hà Ni 2010  
i
ĐẠI HC QUC GIA HÀ NI  
TRƢỜNG ĐẠI HC CÔNG NGHỆ  
Nguyn ThThùy  
NG DNG NGÔN NGLP TRÌNH RÀNG BUC  
COMET VÀO BÀI TOÁN  
LP THI KHÓA BIU  
KHÓA LUN TT NGHIỆP ĐẠI HC HCHÍNH QUY  
Ngành: Công nghthông tin  
Cán bộ hƣớng dn: Th.S Lê Hng Hi  
Hà Ni - 2010  
ii  
LI CẢM ƠN  
Trước hết, em xin chân thành cảm ơn đến quý thày cô trường Đại hc Công  
Nghệ đã tận tình dy bo em trong sut thi gian hc tp tại trường.  
Em xin gi li biết ơn sâu sắc đến Thạc sĩ Lê Hồng Hải đã dành nhiều thi  
gian và tâm huyết hướng dn nghiên cu, giúp em hoàn thành khóa lun tt  
nghip.  
Em cũng xin chân thành cảm ơn Ban Giám hiệu trường Đại hc Công nghệ  
cùng quí thày cô trong Khoa công nghệ thông tin đã tạo điều kiện để em hc tp  
và hoàn thành tt khóa hc.  
Trong khóa lun không thtránh khi nhng thiếu sót. Em rt mong nhn  
được được những đóng góp quí báu của thày cô và các bạn để khóa luận được  
hoàn thiện hơn.  
Hà Nội, tháng 5 năm 2010  
Sinh viên  
Nguyn ThThùy  
1
TÓM TT KHÓA LUN  
Lp Thi khóa biu là công vic cn thiết và quan trng mà tt ccác tổ  
chc giáo dc phi thc hin nhằm đƣa ra biểu đồ kế hoạch năm học, lch ging  
dy và hc tp cho giáo viên, học sinh. Trƣớc đây, khi CNTT chƣa đƣợc phát trin  
mnh mng dng rng rãi thì công việc này thƣờng đƣợc thc hin mt cách  
thcông trên giy, tiêu tn nhiu chi phí, thi gian và công sc.  
Bài toán lp Thi khóa biểu tronng trƣờng hc là mt một trƣờng hp riêng  
ca bài toán lp lịch đƣợc xếp vào hàng các bài toán khó chƣa có giải thut tối ƣu  
nht. Có rt nhiu thuật toán, phƣơng pháp tiếp cận khác nhau đƣợc các nhà khoa  
hc trên thế giới đƣa ra nhằm gii quyết bài toán này. Song, một phƣơng pháp tiếp  
cn khá là mới và đƣợc cho là gii pháp tối ƣu cho các bài toán lập lch đó ng  
dng ngôn nglp trình ràng buc vào gii quyết các bài toán thp.  
Vi mc tiêu xây dng một chƣơng trình lập thi khóa biu hoạt động hiu  
qu, khóa lun xin trình bày vngôn nglp trình ràng buc Comet và ng dng  
Comet để gii quyết bài toán lp thi khóa biu. Comet là ngôn nglp trình ràng  
buc mới đƣợc phát trin và ng dụng. Đây là ngôn ngữ lập trình điển hình nht  
cho vic gii quyết các bài toán thợp nhƣ lập lch, lp kế hoạch … Đây cũng là  
mt ngôn nglập trình hƣớng đối tƣợng, dsdng và cu trúc câu lnh tƣơng  
đối ging vi ngôn nglp trình C++.  
2
MC LC  
LI CẢM ƠN.......................................................................................................1  
TÓM TT KHÓA LUN.....................................................................................2  
MC LC ............................................................................................................3  
BNG CÁC KÝ HIU VIT TT.......................................................................5  
BNG CÁC THUT NGCHUYÊN NGÀNH ..................................................5  
DANH SÁCH CÁC HÌNH VẼ ĐƢỢC SDNG ...............................................6  
CHƢƠNG 1: MỞ ĐẦU ........................................................................................7  
1.1. Ý nghĩa ứng dng Comet vào gii quyết các vấ đề tối ƣu hóa tổ hp ...7  
1.2. Cu trúc khóa lun.............................................................................10  
CHƢƠNG 2: LẬP TRÌNH RÀNG BUC ..........................................................11  
2.1. Lp trình ràng buc là gì? ..................................................................11  
2.2. Ngun gc lp trình ràng buc...........................................................11  
2.3. Mô hình lp trình ràng buc ..............................................................12  
2.4. ng dng ca ngôn nglp trình ràng buc (CP) ..............................14  
CHƢƠNG 3: NGÔN NGỮ LP TRÌNH COMET..............................................16  
3.1. COMET là gì? ...................................................................................16  
3.2. Lp trình Comet.................................................................................17  
3.2.1. Mô hình lp trình Comet ......................................................17  
3.2.2. Ví d....................................................................................20  
3.3. Ƣu điểm ca Comet ...........................................................................23  
3
CHƢƠNG 4: ỨNG DNG COMET VÀO BÀI TOÁN LP THI KHÓA BIU  
............................................................................................................................26  
4.1. Đặt vấn đề xây dng bài toán.............................................................26  
4.2. Gii quyết bài toán.............................................................................28  
4.3. Thc nghim......................................................................................30  
4.3.1. Các chức năng quản lý ging viên, môn hc, phòng hc, khoa  
......................................................................................................31  
4.3.2. Chức năng phân công giảng dy...........................................36  
4.3.3. Chức năng xếp Thi khóa biu.............................................37  
4.3.4. Chức năng xem thời khóa biu theo tên lp, tên ging viên, tên  
phòng hc ......................................................................................38  
CHƢƠNG 5: KẾT LUẬN VÀ HƢNG PHÁT TRIN.....................................40  
TÀI LIU THAM KHO ...................................................................................41  
4
BNG CÁC KÝ HIU VIT TT  
Ký hiu  
ACM  
AI  
Tviết tt  
Association for Computing Achinery  
Artificial Intelligence  
API  
Application Programming Interface  
Constraint Handling In Prolog  
Constraint Logic Programming  
Constraint-Based Local Search  
Constraint Programming  
Logic Programming  
CHIP  
CLP  
CBLS  
CP  
LP  
BNG CÁC THUT NGCHUYÊN NGÀNH  
Các thut ngữ  
Ý nghĩa  
Artificial Intelligence  
Application Programming Interface  
Constraint Programming  
Logic Programming  
Search  
Trí tunhân to  
Giao din lp trình ng dng  
Lp trình ràng buc  
Lp trình logic  
Tìm kiếm  
Search Tree  
Cây tìm kiếm  
5
DANH SÁCH HÌNH ẢNH ĐƢC SDNG  
Hình 1-1. Bài toán 4-Hu ......................................................................................8  
Hình 1-2. Mt nhánh trong cây tìm kiếm ca bài toán 4-Hu ................................9  
Hình 2-1. Mô hình CP.........................................................................................12  
Hình 2-2. ng dng CP vào phân tích chui protein ...........................................15  
Hình 3-1. Thành phn tìm kiếm trong Comet ......................................................19  
Hình 3-2. Code bài toán 16-Hu bng Comet ......................................................20  
Hình 3-3. Kết qubài toán 16-Hu bng Comet ..................................................22  
Hình 3-4. Kết qutrc quan bài toán 16-Hu visualization..................................24  
Hình 4-1. Mô hình chƣơng trình..........................................................................30  
Hình 4-2. Qun lý ging viên ..............................................................................31  
Hình 4-3. Qun lý phòng hc ..............................................................................32  
Hình 4-4. Qun lý môn hc .................................................................................33  
Hình 4-5. Qun lý lp hc...................................................................................34  
Hình 4-6. Qun lý khoa .......................................................................................35  
Hình 4-7. Chức năng phân công giảng dy..........................................................36  
Hình 4-8. Chức năng xếp Thi khóa biu............................................................37  
Hình 4-9. Xem Thi khóa biu theo lp ..............................................................38  
Hình 4-10. Xem Thi khóa biu theo ging viên .................................................39  
Hình 4-11. Xem Thi khóa biu theo phòng hc .................................................39  
6
CHƢƠNG 1: MỞ ĐẦU  
Ngày nay, vi sphát trin mnh mca CNTT góp phn mang li nhng  
thành tu rc rcho các lĩnh vực, hoạt động trong đời sng. Cùng vi sphát trin  
ca CNTT, các thế hngôn nglp trình lần lƣợt ra đời nhằm đáp ứng các yêu cu  
công nghệ. Đóng góp quan trng vào sphát trin và ng dng CNTT, ngôn ngữ  
lp trình ràng buc Comet tht smang li tin ích ln trong vic gii quyết các  
bài toán thợp nhƣ lập lch, lp kế hoch.  
1.1. Ý nghĩa ứng dng lp trình ràng buộc đối vi vấn đề tối ƣu  
hóa thp  
Trong lĩnh vực nghiên cu khoa hc máy tính, các bài toán vtối ƣu hóa tổ  
hợp đƣợc đánh giá là các bài toán khó NP[1], đặc trƣng bởi bdliu ln, các  
ràng buc phc tạp. Để gii quyết vấn đề này hiu quả đòi hỏi phi có kinh nghim  
và kỹ năng. Trên thế gii có rt nhiu nhng công trình nghiên cu, các thut toán  
đƣợc ng dng và phát triển để gii quyết vấn đề này: các thut toán quay lui, vét  
cn, các thut toán vquy hoạch động. Tuy nhiên, trong lp trình truyn thng  
chƣa có giải thut hiu qunhất, đáp ứng đƣợc thi gian xử lý là đa thức. Do đó,  
đây vẫn là bài toán khó chƣa có lời tối ƣu nhất.  
Trong những năm gần đây, CP nổi lên nhƣ một công nghquan trng, gii  
quyết hiu qucác bài toán tối ƣu hóa tổ hp, ng dng thành công trong nhiu  
lĩnh vực: hàng không, khoa hc máy tính, công nghip sn xuất…CP thực slà  
mt gii pháp tối ƣu, đƣợc giới chuyên môn đánh giá cao về khả năng giải quyết  
các vấn đề phc tp trong cuc sng thc thế.  
Dƣới đây, ta sẽ xét bài toán N-Hu trong lp trình truyn thng vi gii  
thut vét cn, quay lui.  
Bài toán N-Hậu  
Bài toán 4-queens là bài toán đặt 4 quân hậu trên bàn cờ vua kích thƣớc 4*4  
sao cho không có quân hậu nào có thể “ăn” đƣợc quân hậu khác, hay nói cách khác  
không quân hậu nào có thể di chuyển theo quy tắc cờ vua. Do đó, lời giải của bài  
7
toán là một cách xếp bốn quân hậu trên bàn cơ vua sao cho không có hai quân nào  
đứng trên cùng hàng, hoặc cùng cột hoặc cùng đƣờng chéo.  
Hình 1-1. Bài toán 4-Hậu  
Đây là bài toán tổ hợp kinh điển, có nhiều giải thuật: quay lui, vét cạn, quy  
hoạch động. Tuy nhiên, độ phức tạp của các thuật toán này thƣờng là...Chƣa có  
giải thuật thỏa mãn thời gian chạy là đa thức. Dƣới đây, ta xét bài toán này trong  
môi trƣờng lập trình truyền thống ( bằng ngôn ngữ lập trình C/C++ hoặc Java...)  
với giải thuật vét cạn, quay lui (gọi đệ quy). Tƣ tƣởng cơ bản của giải thuật vét  
cạn, quay lui là ta thử đặt một quân cờ vào một ô trong bàn cơ, sau đó lần lƣợt đặt  
từng quân cơ tiếp theo vào các ô cờ khác. Trong trƣờng hợp không thỏa mãn điều  
kiện ràng buộc của bài toán (Không có hai quân cờ nào “ăn” đƣợc nhau) thì quay  
lui trở lại bƣớc trƣớc đó và đặt lại quân cờ sao cho thỏa mãn điều kiện bài toán.  
Giải thuật này đƣợc mô tả trực quan hơn trong một nhánh của cây tìm kiếm bài  
toán 4-Queens (Hình 1-2).  
8
Hình 1-2. Mt nhánh trong cây tìm kiếm ca bài toán 4-Hu  
Trong lp trình truyn thng không htrợ chƣơng trình tự động  
backtracking, coder phi tviết chức năng thực hiện backtracking để tìm kiếm tt  
ccác li gii thỏa mãn điều kin bài toán.  
So vi lp trình truyn thng, lp trình ràng buc htrợ chƣơng trình tự  
động backtracking, gii quyết vấn đề phân theo hai thành phn. Thnht, vấn đề  
đƣợc mô hình hóa bi tp các ràng buc trên min gii hn ca các biến. Thhai,  
là gii quyết các ràng buc bng cách sdng những thông tin đã đƣa ra trong mô  
hình để tự động tìm kiếm gii pháp. Quá trình này hthng tự động thc hin,  
không có scan thip của con ngƣời. Chúng ta stìm hiu sâu vlp trình ràng  
buộc trong chƣơng tiếp theo.  
9
1.2. Gii thiu cu trúc khóa lun  
Cu trúc khóa lun gồm 5 chƣơng:  
Chƣơng 1: Mở đầu  
Chƣơng 2: Lp trình ràng buc  
Chƣơng 3: Ngôn nglp trình Comet  
Chƣơng 4: Áp dng Comet vào bài toán ng dụng “Lập thi khóa  
biểu” cho trường đại hc  
Chƣơng 5: Kết lun và hướng phát trin.  
10  
CHƢƠNG 2  
LP TRÌNH RÀNG BUC  
Trong một vài năm gần đây, lập trình ràng buộc (CP) đã thu hút sự chú ý  
mt số lƣợng ln các chuyên gia CNTT vì khả năng giải quyết các vấn đề khó  
khăn trong thực tế. Theo [5] CP đƣợc ACM (Association for Computing Achinery)  
nhận định là mt trong những hƣớng chiến lƣợc trong nghiên cu tin hc. Tuy  
nhiên CP vn là mt trong nhng công nghệ ít đƣợc biết đến và hiu rõ.  
2.1. Lp trình ràng buc là gì?  
Lp trình ràng buc (CP - Constraint Programming) là ngôn nglp trình  
ràng buc, công nghệ điển hình gii quyết hiu quvấn đề mô hình hóa và tối ƣu  
hóa thợp, đặc biệt là trong lĩnh vực quy hoch và lp lch. CP nghiên cu các hệ  
thng tính toán da trên các ràng buộc. Ý tƣởng cơ bản ca CP là gii quyết vấn đề  
bng cách nêu rõ ràng buộc (các điều kin, thuc tính, yêu cu) và tìm kiếm gii  
pháp tha mãn tt ccác ràng buc.  
Lp trình ràng buc ( CP ) là mt cách tiếp cn mi vvấn đề gii quyết  
tha mãn các ràng buc và các vấn đề ti ƣu hóa đang đƣợc sdng trong nhiu  
ng dụng thƣơng mại. CP kết hp tìm kiếm vét cn, quay lui tnhng ngôn ngữ  
lp trình logic vi kthut ràng buc từ lĩnh vực nghiên cu trí tunhân to.  
Monash là ngƣời tiên phong trong lĩnh vực này và đƣợc biết đến vi công vic  
thiết kế ngôn nglp trình ràng buc logic và ngôn nglp trình chức năng ràng  
buc.  
2.2. Ngun gc ca lp trình ràng buc  
Lp trình ràng buộc (CP) đƣợc phát trin khá sm so vi nhng ngôn ngữ  
lp trình phbiến hiện nay nhƣ Java (1990s). Vào thp niên 60, 70, nhng ý  
tƣởng đầu tiên vlp trình ràng buc có thể đƣợc tìm thấy trong lĩnh vực nghiên  
cu trí tunhân to (AI) mà cthlà ngôn nglp trình logic Prolog (Alain  
Colmerauer, 1972). Mt số ứng dụng đầu tiên ca ngôn ngữ này đã đạt đƣợc  
11  
nhng thành tựu đáng kể nhƣ: hệ thống tƣơng tác đồ ha Sketchpad ca Ivan  
Sutherland (1963), hthng ThingLab ca Alan Borning (1981).  
Tuy nhiên, phải đến dòng ngôn nglp trình logic ràng buc (CLP-  
Constraint Logic Programming) mới đánh dấu bƣớc phát trin chính ca lp trình  
ràng buộc. CLP đƣợc phát trin bi hai nhà khoa hc Jaffar & Lassez (1987)[5],  
da trên nn tng lp trình logic, kết hp chai khía cnh khai báo ca lp trình  
logic (LP) vi gii quyết các ràng buc. Tiếp theo, mt sdòng ngôn nglp trình  
ràng buc lần lƣợt đƣợc phát trin, có t hkể ra nhƣ: concurrent logic  
programming (1980s) , concurrent constraint programming(1990s). Và hin nay,  
Comet đƣợc đánh giá là ngôn ngữ lp trình ràng buộc có ƣu thế ni bt nht.  
Chúng ta stìm hiu ngôn nglập trình Comet trong chƣơng tiếp theo.  
2.3. Mô hình lp trình ràng buc  
CP = Model + Search  
Hình 2-1. Mô hình CP[3]  
Bn cht ca CP là kiến trúc hai thành phn: một mô hình lƣu trữ ràng  
buc và mô hình tìm kiếm. Mô hình lƣu trữ ràng buc là tp hp các ràng buc mô  
tthuc tính ca biến, các mi liên quan, ràng buc ca biến trên min giá tr, là  
mt hthng lý lun vcác thuộc tính cơ bản ca hthng ràng buc. Mô hình lƣu  
trràng buc chứa đựng các ràng buộc đã tích lũy tại mt số bƣớc tính toán, htrợ  
12  
các truy vn và toán tthc hin trên trên nó. Thành phn tìm kiếm trong CP là  
duyt cây vi thut toán backtracking, vbn cht giống nhƣ phƣơng pháp tìm  
kiếm nhánh và cn ca lp trình truyn thng.  
Bài toán: SEND + MORE = MONEY  
Để hiu rõ thêm vcác ràng buc, chúng ta hãy xét một bài toán chơi chữ  
cổ điển ca Henry Dudeney công btrên tạp chí Strand năm 1924[10].  
Phƣơng trình ca bài toán  
Mi ký tự đại din cho mt con skhác sau, các chsố hàng đầu ca mt  
snhiều hơn một chsphi là nhng skhác không. Và mt li giải đúng là tìm  
ra giá trsố tƣơng ứng cho tng ký tvà thỏa mãn phƣơng trình trên.  
Ở đây. Chúng ta sẽ đề cập đến một phƣơng pháp, áp dụng lp trình ràng  
buc vào gii quyết bài toán.  
Code bài toán  
sendmore(Digits) :-  
Digits = [S,E,N,D,M,O,R,Y],  
Digits :: [0..9],  
S #\= 0,  
% Khởi tạo biến  
% Xác định miền giá trị của biến  
% Constraint: S, M phải khác 0  
M #\= 0,  
alldifferent(Digits),  
% giá trị của các biến là khác nhau  
1000*S + 100*E + 10*N + D  
% ràng buộc theo biểu  
thức  
+ 1000*M + 100*O + 10*R + E  
#= 10000*M + 1000*O + 100*N + 10*E + Y,  
labeling(Digits). % Tìm kiếm  
Cấu trúc chƣơng trình chƣơng trình có ba phn rõ ràng:  
Khai báo các biến và min giá trca biến:  
Các biến chính là các chữ cái tƣơng ứng trong đề bài: S, E, N, D, M, O, R,  
Y . Các biến này có min giá trthuộc vào đoạn [0,9].  
13  
Ràng buc gia các biến  
Mi chcái có giá trlà mt snhất đinh, các biến phi có giá trkhác  
nhau. S, M là hai biến tƣơng ứng vi giá trị đứng đầu các s, vì vy, S, M là  
phi là các chskhác 0. Bên cạnh đó, tất ccác biến phi tha mãn biu  
thức mà đầu bài đã đƣa ra SEND + MORE = MONEY.  
Tìm kiếm: labeling(Digits) // Chƣơng trình sẽ duyt theo tng biến. Phn  
tìm kiếm đc lp vi các ràng buc gia các biến.  
Li gii cho bài toán:  
O = 0, M = 1, Y =2, E = 5, N = 6, D = 7, R = 8, S = 9.  
9567  
+
1085  
10652  
2.4. ng dng lp trình ràng buc  
Tthp niên 90 trlại đây, nền kinh tế trên toàn thế giới tăng trƣởng mnh  
m, các doanh nghip tchức thƣơng mại không ngừng ra đời và phát trin ln  
mnh. Bên cạnh đó, khoa học kthut công nghthu đƣợc nhng thành tu rc r,  
đem đến nhng công nghtiên tiến nht và hàng lot công ngh, kthuật đƣợc  
ng dng rng rãi và thành công trong các ngành kinh tế, thƣơng mại, góp phn  
thúc đẩy sự tăng trƣởng kinh tế. Xu hƣớng hin nay, các ngành công nghip, các  
lĩnh vực hoạt động sn xut ng dng công nghệ CP ngày càng tăng lên nhanh  
chóng. Số lƣợng các công ty ng dng thành công công nghệ này tăng lên hàng  
năm, có thể ktên mt scông ty, tchức điển hình: sân bay Quc tế Hong Kong,  
British Airway, SAS, Swissair, cng Quc tế Hong Kong, Michelin, Dassault,  
Ericsson[5] … Đối với lĩnh vực hàng không, CP đƣợc ng dụng để lp lch các  
chuyến bay, hoạt động chuyển phát nhanh…Trong công nghiệp sn xut, CP ng  
dng trong vic qun lý chui cung ng sn xut, lp lch, phn btài nguyên,  
ngun lực …  
14  
Không chỉ đƣợc ng dng thành công trong các ngành kinh tế, công nghệ  
CP còn đƣợc ng dụng thành công trong các lĩnh vực khác nhƣ:  
- Lĩnh vực khoa học máy tính: Đồ ha máy tính (thhin gn kết hình hc  
trong phân tich phi cnh), xlngôn ngtnhiên (phân tích cú pháp), hệ  
thống cơ sở dliu (bảo đảm/phc hi tính nht quán ca dliệu) …  
- Lĩnh vực đời sng, sinh hot: Lp thi gian biu, lp lịch…  
- Lĩnh vực sinh hc: phân tích phân tsinh hc (chui DNA-protein)…  
Kthut lp trình ràng buc có thsdng hiu quả để dự đoán cấu trúc  
ca mt phân tử protein, đƣợc coi là vấn đề quan trng nht trong tin sinh hc.  
Hình 2-2. ng dng CP vào phân tích chui protein  
15  
CHƢƠNG 3  
NGÔN NGLP TRÌNH COMET  
3.1. COMET là gì?  
Tối ƣu hóa tổ hp là vấn đề mà chúng ta thƣờng xuyên bt gp trong cuc  
sng, hoạt động sn xuất, trong các lĩnh vực hoạt động: tngành công nghip hàng  
không vi các dch vchuyn phát nhanh, chui qun lý cung ng trong công  
nghip sn xut, vấn đề phân phi tài nguyên, ngun lực… Đây là bài toán khó  
mang tính thách thc, là mt nhánh nghiên cứu trong lĩnh vực khoa hc máy tính,  
thu hút squan tâm, nghiên cu ca các chuyên gia, nhà khoa hc trên thế gii.  
Bi bn cht phc tp ca vấn đề tối ƣu hóa, chƣa có phƣơng pháp tiếp cận độc lp  
nào có khả năng giải quyết hiu qutrên tt cả các phƣơng diện. Tuy nhiên, Comet  
chính là gii pháp tối ƣu nhất cho bài toán tối ƣu hóa tổ hp. Theo[7], Comet là  
công cụ đƣợc trao tng giải thƣởng bi khả năng giải quyết hiu quvấn đề tối ƣu  
hóa thp trên nhiu nhiều lĩnh vực nhƣ lập lch, phân phi tài nguyên, ngun  
lc... Comet là hthng lai ghép lp trình ràng buc(Constraint Programming), lp  
trình toán hc (Mathematical Programming) vi tìm kiếm cc bda trên ràng  
buc (Constraint-Based Local Search).  
Comet là mt dòng ngôn nglp trình ràng buc. Mt trong những điểm  
sáng to chính ca Comet là tìm kiếm địa phƣơng dựa trên ràng buc (CBLS –  
Constraint-Based Local Search), mt mô hình tính toán da trên ý tƣởng quy định  
các thut toán tìm kiếm lân cn vi hai thành phn[7]: mt mô hình mô tcác ng  
dng ràng buc, các ràng buc kết hợp, các hàm đối tƣợng; mt thtc tìm kiếm  
đƣợc biu din mức độ trừu tƣợng cao. CBLS đƣợc xây dng da trên cu trúc  
ca các thut toán tìm kiếm, tách bit mô hình ràng buc khi phn tìm kiếm, tăng  
tính sdng li ca nhiu ng dng, khai thác cu trúc vấn đề để đạt hiu sut cao.  
Đồng thi, Comet là ngôn nglập trình hƣớng đối tƣợng bao gm công cụ  
tìm kiếm địa phƣơng da trên ràng buc, gii quyết lp trình ràng buc, gii quyết  
lp trình toán hc.  
16  
3.2. Lp trình Comet  
3.2.1. Mô hình lp trình Comet  
Cu trúc chung của chƣơng trình code bởi comet[8]  
import cotfd:  
Solver <CP> cp ();  
// khai báo biến  
solver <cp>{  
// post các ràng buc  
} using {  
// Tìm kiếm  
}
Cu trúc chung của chƣơng trình code comet gồm 3 phn: phn khai báo  
các biến, phần đƣa ra các ràng buộc (constraint) và phn tìm kiếm (constraint-  
based local search)  
Khai báo biến (variables)  
Trong cu trúc chƣơng trình Comet, khi khai báo biến là biến ràng buc  
phi khai báo kèm theo tập xác định ca biến. Có thkhai báo biến theo cu trúc  
sau:  
Ví d: Khai báo mt biến nguyên có min giá tr[1, 10]  
var <CP> {int} x (cp,1..10);  
Hoc  
set {int} dom = {1,3,7};  
var <CP> {int} y (cp,dom);  
17  
Thiết lp biến min giá trdom = {1,3,7}, khai báo biến snguyên y có giá trị  
nm trong min giá trdom.  
Ràng buc  
Ràng buộc đơn giản chlà mt quan hlogic gia các n shoc biến, vi  
giá trtrong min gii hn. Ràng buc gii hn các giá trhp lca biến, tác động  
lên min giá trị để loi bnhng giá trkhông phù hp sdng mt thut toán  
phc tp lc tt ckhông gian tìm kiếm để loi bnhng giá trkhông phù hp.  
Nhƣ vậy, ràng buộc có 2 tính năng chính:  
- Kim tra tính hp lệ: Xác định các gii pháp tha mãn tt ccác ràng buc,  
nếu không thỏa mãn thì chƣơng trình tự động backtracking.  
- Lc min giá tr: Sdng thut toán loi bnhng giá trkhông phù hp.  
Mi ràng buc phải đƣợc đẩy lên chƣơng trình với phƣơng thức post trong  
khi lnh solver{} / solverall{} hoc such that {}(như trong cấu trúc của chương  
trình comet).  
Dƣới đây là một vài ví dụ đơn giản mô tcác ràng buc.  
Ví d1: Khai báo ràng buc ca biến x là phi khác giá tr0 và 1  
solve<cp>{  
cp.post(x != 0);  
cp.post(x != 1);  
}
Ví d2: Đƣa ra ràng buộc ca biến x phi có giá trkhác biến y  
cp.post(x!=y);  
Ví dụ 3: Đƣa ra ràng buộc theo kiu logic, nếu x lớn hơn y thì a phải nhỏ hơn b.  
cp.post(x>y => a<b);  
18  
Comet htrmt shàm ràng buc ca hthng:  
Hàm hthng  
Chức năng  
alldifferent  
Ràng buc tt ccác biến phi khác  
nhau  
binaryKnapsack  
cardinality  
Ràng buc tng khối lƣợng các danh  
mc  
Ràng buc vsln xut hin ca  
mi giá trị  
Table  
Ràng buc tuples hp lệ  
Tìm kiếm (Search)  
Cũng giống nhƣ mô hình Search trong CP, Search trong Comet gồm hai  
thành phn: Duyt cây (Search Tree) và chiến lƣợc tìm kiếm (strategy). Tuy nhiên,  
tìm kiếm trong mô hình ca lp trình ràng buc là cách thc duyệt cây không đơn  
định vi mt thut toán tìm kiếm backtracking ( mặc định ca thut toán duyt  
cây là tìm kiếm theo độ sâu) còn tìm kiếm trong Comet có thể là đơn định, ti mi  
nút ca cây tìm kiếm bn thkiếm soát những nhánh cây con dƣới cái nút đó.  
Hình 3-1. Thành phn tìm kiếm trong Comet  
19  
3.2.2. Ví dụ  
Bài toán: 16-Hu  
Bài toán 16-Hu chlà mrộng hơn của bài toán 4-Hu, điều kin ràng  
buc của hai bài toán là nhƣ nhau. Ở chƣơng mở đầu, ta đã xét bài toán 4-Hu  
trong lp trình truyn thng vi gii thut vét cn và quay lui. Trong chƣơng này,  
ta sxét bài toán 16-Hu vi ngôn nglp trình ràng buộc Comet để thấy đƣợc  
những ƣu điểm ca lp trình ràng buc so vi lp trình truyn thng.  
Code bài toán 16-Hu  
Hình 3-2. Code bài toán 16 Hu bng Comet  
Trong đoạn code của chƣơng trình, khai báo biến ràng buc là Q[i,j] có giá  
trlà 0 hoc 1. Li giải đúng cho bài toán là xếp đủ các con hu sao cho trên mi  
hàng ngang, hàng ct, hàng chéo ca bàn c, tng scon hu luôn là 1.  
20  
Ràng buc ca bài toán là:  
Ràng buc theo hàng: Vi i: 1 -> 15 thì tng scon hu trên mt  
hàng luôn chbng 1  
cp.post(sum(j in S)Q[j,i] == 1);  
Ràng buc theo ct: Vi i: 1 -> 15 thì tng scon hu trên mt ct  
luôn chbng 1  
cp.post(sum(j in S)Q[i,j] == 1);  
Ràng buc theo hàng chéo: i: 1 -> 15 thì tng scon hu trên tng  
đƣờng chéo luôn <= 1  
cp.post(sum(j in 1..i) Q[j,j+(n-i)]<=1); //chéo phi trên  
cp.post(sum(j in 1..i) Q[j+(n-i),j]<=1); //chéo trái dưới  
cp.post(sum(j in 1..i) Q[-j+i+1,j]<=1); // chéo trái trên  
cp.post(sum(j in 1..i) Q[n-j+1,n-i+j]<=1); //Chéo phi  
dưới  
Tìm kiếm da trên ràng buc Q[i,j] == 0 hoc Q[i,j] == 1  
forall(i in S, j in S){  
try<cp> cp.post(Q[i,j]==0); | cp.post(Q[i,j]==1);  
}
Cấu trúc chƣơng trình Comet phân rõ mô hình hai thành phần: phần đƣa ra  
các ràng buc nm trong khi lnh solver<cp>{} và phn tìm kiếm li gii nm  
trong khi lnh using {}. Chƣơng trình Comet rất đơn giản, chúng ta chỉ đƣa ra  
các ràng buc của bài toán và điều kin tìm kiếm mà không cần quan tâm chƣơng  
trình stìm kiếm nhƣ thế nào. Đó là mt thế mnh ca ngôn nglp trình Comet.  
Bên cạnh đó, sự phân chia rõ tng thành phần giúp cho ngƣời lp trình ddàng  
thêm bt các ràng buc mà không ảnh hƣởng gì đến svận hành chƣơng trình.  
21  
Li gii ca bài toán  
Hình 33. Kết qubài toán 16 queens bng Comet  
Công clp trình Comet hiện nay hay đƣợc sdụng là Comet Studio. Đây là kết  
qubài toán sp xếp 16 quân hu trên bàn cờ 16*16 nhƣ đã nêu ở trên. Kết quả  
của chƣơng trình là các mảng mt chiu 2 chiu vi các s0 và 1. S1 biu thvị  
trí có thể đặt quân hu trên bàn c. S0 là vtrị không đƣợc phép đt quân hu.  
22  
3.3. Ƣu điểm ca Comet  
Là ngôn nglập trình hƣớng đối tƣợng có cu trúc gn ging ngôn nglp  
trình C++.  
int a = 3;  
cout << a++ << endl;  
cout << ++a << endl;  
cout << a << endl;  
a *= 2;  
cout << a << endl;  
Nhƣ ví dụ trên, Comet cũng có câu lệnh cout để in giá trbiến a ra màn hình  
giống nhƣ trong C++. Bên cạnh đó, các toán tử thc hin trên biến a cũng  
giống nhƣ cấu trúc trong C++.  
Mô hình hai thành phn riêng biệt nhau, do đó ngƣời lp trình ddàng thêm  
bt các ràng buc mà không ảnh hƣởng đến svn hành của chƣơng trình,  
tăng tính sử dng li ca nhiu ng dng.  
Tích hp các gii pháp tối ƣu: Tìm kiếm địa phƣơng dựa trên ràng buc, lp  
trình ràng buc, lp trình toán hc.  
Thƣ viện đồ ha 2D  
import visual;  
23  
Hình 3-4. Kết qutrc quan bài toán 16 queens visualization  
Phù hp vi các hệ điều hành: Mac OS X (32 và 64 bit), Windows, Linux.  
Trong mô hình tìm kiếm, hthng htrợ chƣơng trình tự động  
backtracking để tìm kiếm các li giải đúng đắn cho bài toán.  
Comet[8] tích hp các API ( C++ API, JAVA API ) mô tcác lp khác  
nhau, chức năng, giao diện và thƣ viện.  
Comet tích hp C++ API cho phép dliệu trao đổi qua lại. Chƣơng  
trình sdng hthng Comet nhƣ là một thƣ viện liên quan tới hai đoạn  
mã  
- Comet code: Gii quyết các vấn đề tối ƣu hóa  
- C++ code: Giao tiếp vi Comet  
Sgiao tiếp gia Comet và C++ chliên quan ti dliệu đầu ra và  
đầu vào của chƣơng trình Comet. Do đó, có rất ít sự thay đổi để to mt  
chƣơng trình Comet trong vic sdng nó với đoạn mã C++.  
24  
CHƢƠNG 4  
NG DNG COMET VÀO BÀI TOÁN  
LP THI KHÓA BIU  
4.1. Đặt vấn đề xây dng bài toán  
Bài toán xếp Thi khóa biu luôn là mt bài toán khó, mang tính khoa hc  
đồng thi mang tính thc tin rt cao. Trên thế gii, bài toán Thi khóa biu (Time  
Table Problem) đã đƣợc rt nhiu các nhà khoa hc quan tâm, nghiên cứu. [6] Đã  
có hơm 1000 bài báo khoa học đƣợc viết về đề tài này, trong đó có khoảng 300  
lun án Tiến sĩ và Thạc sĩ đƣợc bo vxung quanh vbài toán Thi khóa biu.  
Riêng đối vi Việt Nam, đặc biệt trong các trƣờng Đại học, các trƣờng phthông,  
tlâu vic xếp thi khóa biểu đã trở thành mt vấn đề có tính thi s, mt bài toán  
gây đƣợc schú ý, quan tâm ca nhiều ngƣời.  
Mt thc tế hin nay ti Vit Nam, vic xếp thi khóa biu phn lớn là đều  
đƣợc thc hin thcông bằng tay. Phƣơng pháp này vừa tn nhiu chi phí, thi  
gian, công sc mà hiu quli không cao. Nhu cu thc tin hin nay là tin hc  
hóa bài toán lp Thi khóa biu với tính năng sắp thi khóa biu chính xác, hiu  
qu, gim bt thi gian, chi phí công sc của con ngƣời. Tính phc tp ca bài  
toán lp Thi khóa biểu, các quy định, ràng buc môn hc cht ch, các ràng buc  
vlch dy ca giáo viên, lp học … hết sc phc tạp, đa dạng. Chính vì vy, bài  
toán lp thi khóa biu là mt bài toán khó, có rt ít phn mm lp thi khóa biu  
đƣợc viết và sdng ti Vit Nam.  
Xut phát tnhu cu thc tế, vic xây dng một chƣơng trình sắp xếp thi  
khóa biu là gii pháp cp bách và cn thiết. Phn mm gii quyết tha mãn tt cả  
các quy định, yêu cu ràng buc ca bài toán.  
Dựa trên mô hình đào tạo của trƣờng Đại hc Công nghệ, đối mi khc,  
phòng đào tạo quy định danh sách các lp hc hc, danh sách các môn học tƣơng  
ng cho tng lp hc và danh sách giảng viên tƣơng ứng vi mi môn cho tng  
lp... Vì vy, mt Thi khóa biu chp nhận đƣợc phải đáp ứng đƣợc tt ccác  
điều kin ràng buc sau:  
25  
Ràng buc vngày hc: Mt tuần có 5 ngày đi học quy định tthứ 2 đến  
th6. Th7 và chnht là ngày nghỉ cho nên chƣơng trình không xếp lch  
hc vào các ngày th7 và chnht.  
Ràng buc vngày hc, gihc la chọn trước: Trƣờng hp này cháp  
dng cho lp lch có chọn trƣớc. Trong trƣờng hp này, giáo vkhoa có thể  
cố định mt sthuộc tính nhƣ lớp K54CA luôn hc môn tiếng Anh vào thứ  
2 phòng 302, ...  
Ràng buc vgiáo viên: Lch ging dy ca mi giáo viên không bchng  
chéo lên nhau. Tc là ti mt thời điểm, giáo viên chỉ đảm nhim ging dy  
mt lp hc.  
Ràng buc vngày nghca giáo viên: Giáo viên có thể đăng ký ngày nghỉ  
nào đó cố định trong tuần. Do đó, chƣơng trình không xếp lch dy cho giáo  
viên đó vào ngày mà giáo viên đã đăng ký nghỉ.  
Ràng buc vgiáo viên nghtiết đầu: Giáo viên có thể đăng ký nghỉ tiết đầu  
trong bui dạy tƣơng ứng. Chƣơng trình không xếp lịch cho giáo viên đó  
dy vào các tiết đầu mà giáo viên đó đã đăng ký nghỉ.  
Ràng buc vstiết/bui: Stiết hc trong mt bui không quá 6 tiết/bui.  
Ràng buc vlp hc: Mi phòng hc ti mt thời điểm chcó mt lp hc.  
Ràng buc vmôn hc: Ti mt thời điểm, mt lp chcó thhc mt môn  
hc. Các hc phn ca cùng môn học không đƣợc dy trong mt ngày.  
Đối vi các môn hc lý thuyết phi xếp vào phòng lý thuyết, môn hc thc  
hành xếp vào phòng thc hành. Phòng hc phải đảm bảo đầy đủ điều kin  
hc tp (schngi luôn lớn hơn hoặc bằng sĩ số ca lp).  
Ràng buc vlp lch có la chọn trước: Vic lp Thi khóa biu có thể  
đƣợc thc hin vi mt sla chọn đƣợc khi tạo trƣớc nhƣ cố định ngày  
hc hay gibắt đầu cho một môn nào đó của mt lp,…  
26  
4.2. Gii quyết bài toán  
Mt hthng lp Thi khóa biu hoạt động hiu qunht thì phải đáp ứng  
đƣợc các yêu cu nghip vcủa bài toán. Do đó, chúng ta sẽ lần lƣợt gii quyết  
tng ràng buc ca bài toán.  
Khai báo các biến ràng buc sdụng trong chƣơng trình:  
var<CP>{int} start[0..n-1](cp,1..200);  
var<CP>{int} day[0..n-1](cp,2..6);  
var<CP>{int} hour[0..n-1](cp,{1,3,4});  
var<CP>{int} room[0..n-1];  
n là sbui hc cn phi sp lch. Mng day, hour, room cha các biến  
ràng buc vngày ging dy, gibắt đầu và phòng hc ca các bui hc. Mng  
day cha danh sách các ngày hc trong tun (tthứ 2 đến th6), có giá trràng  
buộc trong đoạn [2, 6]. Mng hour là danh sách các thời điểm bắt đầu tiết hc, có  
giá trràng buc trong tp giá tr{1, 3, 4}. Mng room là danh sách các phòng hc  
phc vcho quá trình ging dy và hc tp. Ngoài ra, còn có mng session có hai  
giá trị là 0 (tƣơng ứng vi bui sáng) hoặc 1 (tƣơng ứng vi bui chiu), mng  
duration lƣu khong thi gian ca mi môn hc/bui.  
start[i]==24*day[i]+ 8*session[i] + hour[i]  
Mng start lƣu thi gian bắt đầu ca tng môn hc trong mt tuần đƣợc  
ánh xtcác ngày hc, bui hc và gihc của môn đó  
Ràng buc vgiáo viên:  
Mng startTemp là danh sách thời điểm ging dạy tƣơng ứng vi tng  
ging viên. Mng durationTemp lƣu khong thi gian ging dy ca ging viên đó.  
Do tính cht ràng buc, ti mt thời điểm mi giáo viên chcó thể đảm nhn dy  
mt môn hc. Vì vậy, đối vi nhng ging viên dy thai lp trlên hoc hai  
môn trlên thì ti thời điểm ging dy startTemp, trong khong thi gian  
durationTemp, mt giáo viên chdy mt môn. Ta có thkhái quát ràng buộc đó  
nhƣ sau:  
cp.post(cumulative(startTemp,durationTemp,arr1,1));  
27  
Hàm cumulative mun nói mi công vic ging dy i, bắt đầu tthi gian  
startTemp[i], din ra trong khong thi gian duration[i], ng vi mt giáo viên  
(arr[i]=1) thì chcho phép dy mt môn hc.  
Ràng buc vngày nghca giáo viên:  
Chƣơng trình quản lý danh sách nhng ngày nghỉ mà giáo viên đã đăng ký.  
Để đảm bảo chƣơng trình không xếp lch dy cho giáo viên vào nhng bui mà  
giáo viên đã đăng ký nghỉ thì ta phi khái quát ràng buộc nhƣ sau  
if(sessionTemp[j]==sessionOff[k])  
cp.post(dayTemp[j]!=dayoff[k]);  
sessionTemp là bui dy ca giáo viên, sessionOff là buổi mà giáo viên đăng ký  
ngh, dayTemp là ngày phải đi dạy và dayoff là ngày mà giáo viên đăng ký buổi  
ngh(sessionOff).  
Ràng buc vgiáo viên nghtiết đầu:  
cp.post(hourTemp [j]!=1)  
hourTemp là tp hp gibắt đầu dạy theo danh sách giáo viên đã đăng ký  
nghtiết đầu. Do dó, để thỏa mãn điều kin không xếp lch dy vào các tiết đầu mà  
giáo viên nào đó đã đăng ký nghỉ, thì ta phi post lên ràng buc gibắt đầu  
hourTemp[j] luôn phi khác 1 (tiết 1).  
Ràng buc vstiết/bui:  
cp.post(hour[i] + duration[i] <= 6);  
Theo chƣơng trình đào tạo, phòng Đào tạo quy định stiết hc trong mt  
bui tối đa là 5 tiết. Để đảm bo thảo mãn điều kin stiết/bui tối đa là 5, chƣơng  
trình post ràng buc hour[i] + duration[i] <= 6. Ở đây duration đƣợc  
tính theo khong thi gian ca mt tiết.  
Ràng buc vmôn hc:  
Trong các danh sách các môn hc của phòng Đào tạo, mt smôn hc có  
số đơn vị học trình cao (≥4), có thể đƣợc chia thành nhiu hc phn phân bvào  
các bui hc khác nhau. Ví dụ nhƣ môn tiếng Anh 2 có 6 đvht sẽ đƣợc chia thành  
28  

Tải về để xem bản đầy đủ

pdf 43 trang yennguyen 06/05/2025 130
Bạn đang xem 30 trang mẫu của tài liệu "Khóa luận Ứng dụng ngôn ngữ lập trình ràng buộc comet vào bài toán lập thời khóa biểu", để tải tài liệu gốc về máy hãy click vào nút Download ở trên.

File đính kèm:

  • pdfkhoa_luan_ung_dung_ngon_ngu_lap_trinh_rang_buoc_comet_vao_ba.pdf