Chương trình demo.
Trang 1Bài T p L n Trí tu nhân t o ậ ớ ệ ạ
Đ tài: ề L p l ch gi ng d y trong trư ng h c ậ ị ả ạ ờ ọ
Giáo viên hư ng d n ớ ẫ : Ph m Văn H i ạ ả
Nhóm sinh viên: Nhóm 11
Trang 2 S p x p th i khóa bi u t i các trư ng h c là ắ ế ờ ể ạ ờ ọ bài toán ph i luôn đư c th c hi n trư c khi ả ợ ự ệ ớ
h c kỳ m i b t đ u ọ ớ ắ ầ
Đây là m t bài toán mang tính th c ti n ộ ự ễ
Trang 3• Các thông tin c a bài toán. ủ
◦ Danh sách giáo viên g m: mã s , tên, s gi d y t i ồ ố ố ờ ạ ố đa.
◦ Danh sách các phòng h c g m: mã phòng, tên ọ ồ
phòng.
◦ Danh sách các môn h c: mã môn h c, tên môn h c, ọ ọ ọ
s ti t trong tu n ố ế ầ
Trang 4• Các ràng bu c c a bài toán ộ ủ
◦ Ràng bu c v ngày h c: M t tu n có 5 ngày đi h c quy đ nh t th 2 đ n ộ ề ọ ộ ầ ọ ị ừ ứ ế
th 6 Th 7 và ch nh t là ngày ngh cho nên chương trình không x p l ch ứ ứ ủ ậ ỉ ế ị
h c vào các ngày th 7 và ch nh t ọ ứ ủ ậ
◦ Ràng bu c v giáo viên: L ch gi ng d y c a m i giáo viên không b ch ng ộ ề ị ả ạ ủ ỗ ị ồ chéo lên nhau T c là t i m t th i đi m, giáo viên ch đ m nhi m gi ng d y ứ ạ ộ ờ ể ỉ ả ệ ả ạ
m t l p h c ộ ớ ọ
◦ Ràng bu c v s ti t t i đa trong tu n c a giáo viên: S ti t d y c a giáo viên ộ ề ố ế ố ầ ủ ố ế ạ ủ không đư c vư t quá s ti t t i đa trong tu n c a giáo viên đó ợ ợ ố ế ố ầ ủ
◦ Ràng bu c v s ti t/bu i: S ti t h c trong m t bu i không quá 6 ti t/bu i ộ ề ố ế ổ ố ế ọ ộ ổ ế ổ
◦ Ràng bu c v l p h c: M i phòng h c t i m t th i đi m ch có m t l p h c ộ ề ớ ọ ỗ ọ ạ ộ ờ ể ỉ ộ ớ ọ
Trang 5 Các ch s : ỉ ố
◦ g: ch s giáo viên ỉ ố
◦ t: ch s ngày ỉ ố
◦ p: ch s phòng ỉ ố
Các tham s : ố
◦ Tgv: t ng s giáo viên ổ ố
◦ Tphong: t ng s phong ổ ố
◦ Tmon: t ng s môn ổ ố
Mô hình bài toán
Trang 6 Các bi n ràng bu c: ế ộ
◦ M ng ả day, hour, room ch a các bi n ràng bu c v ngày ứ ế ộ ề
gi ng d y, gi b t đ u và phòng h c c a các bu i h c ả ạ ờ ắ ầ ọ ủ ổ ọ
day[] có giá tr 2 ≤ ị day ≤ 6;
hour[] có giá tr 0 ≤ hour ≤ 5; ị
room[] có giá tr 0 ≤ ị room ≤ Tphong
◦ M ng ả duration ch a bi n v th i gian kéo dài c a bu i h c ứ ế ề ờ ủ ổ ọ (hay là b ng v i s ti t/tu n c a môn h c đó) ằ ớ ố ế ầ ủ ọ
◦ M ng ả teacher ch a các bi n ràng bu c v ngày gi ng d y, ứ ế ộ ề ả ạ
gi b t đ u và phòng h c c a các bu i h c ờ ắ ầ ọ ủ ổ ọ
◦ M ng ả gvtd[] ch a s lư ng ti t t i đa c a giáo viên ứ ố ợ ế ố ủ
Trang 7 Bi u di n ràng bu c: ể ễ ộ
◦ Ràng bu c v giáo viên: L ch gi ng d y c a m i giáo viên không b ộ ề ị ả ạ ủ ỗ ị
ch ng chéo lên nhau T c là t i m t th i đi m, giáo viên ch đ m ồ ứ ạ ộ ờ ể ỉ ả
nhi m gi ng d y m t l p h c ệ ả ạ ộ ớ ọ
(day[i] == day[j]) && (((hour[j]+duration[j]) > hour[i]) || ( hour[i] + duration[i]) > hour[j])) && (teacher[i] == teacher[j])
◦ Ràng bu c v s ti t t i đa trong tu n c a giáo viên: S ti t d y c a ộ ề ố ế ố ầ ủ ố ế ạ ủ giáo viên không đư c vư t quá s ti t t i đa trong tu n c a giáo viên ợ ợ ố ế ố ầ ủ đó.
for (int j = 0; j<i;j++){
if(teacher[i] == teacher[j]){
dem = dem+duration[j];
}
}
dem < gvtd[teacher[i]]
Trang 8- Ràng bu c v s ti t/bu i: S ti t h c trong ộ ề ố ế ổ ố ế ọ
m t bu i không quá 6 ti t/bu i ộ ổ ế ổ
hour[i] + duration[i]) > 6
- Ràng bu c v l p h c: M i phòng h c t i m t ộ ề ớ ọ ỗ ọ ạ ộ
th i đi m ch có m t l p h c ờ ể ỉ ộ ớ ọ
((room[i] == room[j]) && (day[i] == day[j])) &&
(((hour[j]+duration[j]) > hour[i]) || ( hour[i] +
duration[i]) > hour[j]))
Trang 9 1 Gi i thu t tìm ki m quay lui (backtracking) ả ậ ế
◦ Gán giá tr l n lư t cho các bi n – vi c gán giá tr c a ị ầ ợ ế ệ ị ủ
bi n này ch đư c làm sau khi hoàn thành gán giá tr ế ỉ ợ ị cho bi n khác ế
◦ Sau m i phép gán ki m tra các ràng bu c có đư c ỗ ể ộ ợ tho mãn b i t t c các bi n đã đư c gán giá tr cho ả ở ấ ả ế ợ ị
t i th i đi m hi n t i – Quay lui n u có l i (không ớ ờ ể ệ ạ ế ỗ
tho mãn ràng bu c) ả ộ
◦ duration vì liên quan đ n nhi u ràng bu c nh t ế ề ộ ấ
◦ day và teacher
◦ room
Trang 10 Code (java):
public void XepLich(int i){ //i là s th t môn đang xét ố ứ ự if(i == Tmon){
XuatDuLieu();
} else {
A: for(int n=0;n < 3;n++){ // duration
for(int t=2;t<=6;t++){ // day
for(int g=0;g<Tgv;g++){ // teacher
for(int p = 0; p < Tphong ;p++){ // room
Trang 11if(kt(i,p,t,tietbd[n],g)){ //Hàm ki m tra các ràng bu c ể ộ day[i] = t;
hour[i] = tietbd[n];
room[i] = p;
teacher[i] = g; // lưu giá trị
XepLich(i+1); // hàm đ quy ệ
break A;
}
}
}
}
}
}
}
Trang 12 Cây l i gi i: ờ ả
Trang 13 M c đích c a thu t toán ki m tra ti n là đ tránh các ụ ủ ậ ể ế ể
th t b i b ng ki m tra trư c các ràng bu c ấ ạ ằ ể ớ ộ
Ki m tra ti n đ m b o s phù h p gi a bi n đang đư c ể ế ả ả ự ợ ữ ế ợ xét gán giá tr và các bi n khác có liên quan (ràng bu c) ị ế ộ
tr c ti p v i nó ự ế ớ
Ý tư ng: ở
- m i bư c gán giá tr , theo dõi các giá tr h p l (có th đư c Ở ỗ ớ ị ị ợ ệ ể ợ gán) đ i v i các bi n chưa đư c gán giá tr ố ớ ế ợ ị
- Lo i b (d ng) hư ng tìm ki m hi n t i khi có b t kỳ m t bi n ạ ỏ ừ ớ ế ệ ạ ấ ộ ế (chưa đư c gán giá tr ) nào đó không còn giá tr h p l ợ ị ị ợ ệ
Vì tính ch t c a bài toán, hàm ki m tra các bi n chưa ấ ủ ể ế
đư c gán s quy v vi c ki m tra bi n có th i gian h c ợ ẽ ề ệ ể ế ờ ọ trong tu n l n nh t, vì n u bi n này còn giá tr h p l ầ ớ ấ ế ế ị ợ ệ thì các bi n khác cũng s còn giá tr h p l ế ẽ ị ợ ệ
2 Thu t toán ki m tra ti n ậ ể ế
(Forward-checking)
Trang 14 Code (java):
public void FC(int i, boolean B[][][][]){
boolean A[][][][] = new boolean[7][7][Tphong][Tgv];//Mi n giá tr h p l ề ị ợ ệ if(i == 0) {
//Kh i t o mi n giá tr ban đ u ở ạ ề ị ầ
for(int n=0;n < 5;n++){ //ti t b t đ u ế ắ ầ
for(int t=2;t<=6;t++){ //thứ
for(int g=0;g<Tgv;g++){ //giáo viên
for(int p = 0; p < Tphong ;p++){ //phòng
A[t][n][p][g] = true;
}
}
}
}
} else A=B; //Gi l i mi n giá tr c a l i gi i trư c đó ữ ạ ề ị ủ ờ ả ớ
if(i == Tmon){
XuatDuLieu();
} else {
Trang 15C: for(int n=0;n < (6-duration[i]);n++){ //Ràng bu c v s ti t/bu iộ ề ố ế ổ
for(int t=2;t<=6;t++){ //thu
for(int g=0;g<Tgv;g++){ //giao vien
for(int p = 0; p < Tphong ;p++){ //phong
if(!A[t][n][p][g]) continue; // loai bo gia tri ko hop le
if(CheckForward(i, A)) {
for(int j=n;j<n+duration[i];j++){
A[t][j][p][g] = false;
for(int k=0;k<Tgv;k++){//Ràng bu c v l p h cộ ề ớ ọ
A[t][j][p][k] = false;
}
for(int m=0;m<Tphong;m++){//Ràng bu c v giáo viênộ ề A[t][j][m][g] = false; }
}
day[i] = t; hour[i] = n; room[i] = p; teacher[i] = g; FC(i+1,A); break C; }
}
}
}
}
}
}
Trang 16Chương trình demo
Trang 17 Ngôn ng và công c l p trình: ữ ụ ậ
◦ Java
◦ NetBeans IDE
◦ SQLite
Các ch c năng: ứ
◦ T o th i khoá bi u b ng thu t toán backtracking và ạ ờ ể ằ ậ forward-checking
◦ Xem các môn h c, giáo viên, danh sách phòng ọ
◦ Ch nh s a CSDL ỉ ử
◦ Thoát chương trình