báo cáo môn trí tuê nhân tạo xây dựng giải thuật giải quyết bài toán lập lịch cho trường học

15 1.2K 3
báo cáo môn trí tuê nhân tạo xây dựng giải thuật giải quyết bài toán lập lịch cho trường học

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Viện Công nghệ thông tin và truyền thông Đại Học Bách Khoa Hà Nội Bài Tập Lớn Lập lịch giảng dạy trong trường học Môn học: Trí tuệ nhân tạo Giáo viên hướng dẫn: Phạm Văn Hải Nhóm sinh viên thực hiện: Nhóm 11 Nguyễn Quang Quân MSSV: 20102043 Phạm Hoàng Đạt MSSV: 20101358 Phạm Công Hiếu MSSV: 20101523 Đặng Văn Long MSSV: 20101793 Lê Văn Thọ MSSV: 20102256 Hà Nội 8/2013 1 MỤC LỤC MỤC LỤC…………………………………………………………………… 2 Lời mở đầu…………………………………………………………………… 3 I. Đặt vấn đề……………………………………………………………………4 II. Mô tả bài toán lập thời khóa biểu…………………………………………4 a. Các thông tin của bài toán………………………………………… 4 b. Các rang buộc của bài toán………………………………………….5 III. Mô hình bài toán………………………………………………………….5 IV. Thiết kế thuật giải…………………………………………………………7 V. Chương trình demo………………………………………………………10 VI. Vấn đề…………………………………………………………………….11 Tài liệu tham khảo……………………………………………………………12 2 Lời mở đầu Bất kỳ trường học nào cũng cần thiết phải lập ra một thời khóa biểu giảng dạy cho các thầy cô lên lớp, để làm sao phải phù hợp với chương trình đào tạo mà chính phủ, bộ giáo dục đã đề ra cũng như với chuyên môn của mối thầy cô. Bài toán lập thời khóa biểu trong trường học là một trường hợp riêng của bài toán lập lịch được xếp vào hàng các bài toán khó chưa có được một giải thuật tối ưu để giải quyết. Trong quá trình học tập môn “Trí tuệ nhân tạo”, chúng em thấy có một cách tiếp cận khá mới mẻ, thú vị dể giải quyết bài toán này, đó là lập trình thỏa mãn ràng buộc. Vậy nên nhóm chúng em đã quyết định lựa chọn đề tài này! Do còn hạn chế về tri thức cũng như kĩ năng lập trình nên bài tập lớn vẫn còn một số sai sót. Vì vậy chúng em mong thầy và các bạn góp ý thêm để chương trình được hoàn thiện hơn. Chúng em xin chân thành cảm ơn! 3 I. Đặt vấn đề 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. Trước khi bắt đầu học kỳ mới, nội dung các môn học và giáo viên phụ trách môn học của từng lớp được xác định thông qua buổi họp chuyên môn của các bộ môn, kết quả các buổi họp này sẽ được gửi lên cho ban giám hiệu nhà trường và ban giám hiệu sẽ chịu trách nhiệm lập lịch giảng dạy cho toàn trường dựa trên số liệu ở trên. Đây là một bài toán mang tính thực tiễn cao nhưng lại rất khó để giải quyết. Nhất là trong những năm mà công nghệ thông tin chưa phát triển thì những người làm công việc quản lý của từng trường sẽ phải tốn rất nhiều thời gian và công sức để lập ra được thời khóa biểu giảng dạy cho trường của mình. Họ phải mất hàng tuần làm việc vất vả mới có thể hoàn thành được môt cái thời khóa biểu làm việc trong một tuần cho các thầy cô trong. Tuy nhiên cũng chưa chắc chắn sẽ đảm bảo được tính hợp lý! Và ngày nay, khi mà công nghệ thông tin phát triển một cách chóng mặt. Ta hoàn toàn có thể thiết kế một chương trình chuyên biệt để giải quyết bài toán lập thời khóa biểu một cách đơn giản và dễ dàng hơn. Để đơn giản bài toán đặt ra, chúng em chỉ lập thời khoá biểu trên một tuần dựa trên dữ liệu có sẵn. Các môn học có số đơn vị học trình cao (>4) không được xét đến trong chương trình này. 4 II. Mô tả bài toán lập thời khóa biểu. a. 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. b. Các ràng buộc của bài toán. o 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. o 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. o 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 đó. o 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. o 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. Mục tiêu: Tìm ra được một thời khóa biểu phù hợp, thỏa mãn tất cả các rang buộc đã nêu ở trên. 5 III. Mô hình bài toán. - 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 - 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. - 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. 6 (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]] + 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])) IV. Thiết kế thuật giải 1. Thuật toán quay lui (backtracking) 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). Nhược điểm của thuật toán quay lui: 7 - Lặp đi lặp lại lỗi: Bỏ qua các lý do của mâu thuẫn - Lặp lại các kiểm tra ràng buộc không cần thiết - Phát hiện muộn các mâu thuẫn (vi phạm ràng buộc) Ưu tiên biến: Việc ưu tiên biến nhằm cải thiện hiệu quả của thuật toán - duration vì liên quan đến nhiều ràng buộc nhất - day và teacher - room Code (java): - Hàm chính 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 if(kt(i,p,t,tietbd[n],g)){ // lưu giá trị day[i] = t; hour[i] = tietbd[n]; room[i] = p; teacher[i] = g; XepLich(i+1); // hàm đệ quy break A; } } 8 } } } } } - Hàm kiểm tra: public boolean kt(int i, int p, int t, int bd, int g){ if((bd+duration[i])>6){//Ràng buộc về số tiết/buổi return false; } int dem = 0; for (int j = 0; j<i;j++){ //Ràng buộc về giáo viên if((t == day[j])&&((hour[j]+duration[j])>bd)&&(g==teacher[j])) { return false; } //Ràng buộc về lớp học if(((p == room[j])&&(t == day[j]))&&((hour[j]+duration[j])>bd)) { return false; } if(g==teacher[j]){ dem = dem+duration[j]; } } if(dem>gvtd[g]){ //Ràng buộc về số tiết tối đa trong tuần của giáo viên return false; } return true; } Cây lời giải: 9 2. Thuật toán kiểm tra tiến (Forward Checking) Thuật toán kiểm tra tiến (Forward Checking): 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ệ. Code (java): - Hàm chính: 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 10 [...]... 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 13 VI Vấn đề *) Các khó khăn trong quá trình thực hiện: - Thiết kế, tổ chức chương trình - Kết nối đến cơ sở dữ liệu *) Dự tính ban đầu của nhóm là sử dụng cả thuật toán di truyền để giải bài toán. .. quyết định sử dụng dừng lại ở hai thuật toán back tracking và forward checking Bên cạnh đó thì chương trình này vẫn chưa phân chia tốt độ ưu tiên giữa việc thứ tự gán giá trị cho các biến, thứ tự giá trị được gán với mỗi biến *) Trong thời gian tới, nhóm sẽ nghiên cứu thêm về việc sử dụng giải thuật di truyền với nhiều ràng buộc hơn kết hợp với các tri thức bổ sung cụ thể của bài toán để giải bài toán. .. buộc hơn kết hợp với các tri thức bổ sung cụ thể của bài toán để giải bài toán tối ưu hơn Bổ sung thêm các chức năng tạo các cơ sơ dữ liệu về giáo viên, phòng học, lớp học Tài liệu tham khảo 14 1 2 3 Slide Trí tuệ nhân tạo – Phạm Văn Hải, Viện Công nghệ thông tin và truyền thông, Đại học Bách Khoa Hà Nội On The Forward Checking Algorithm - Fahiem Bacchus and Adam Grove http://en.wikipedia.org/wiki/Backtracking...for(int t=2;t . Bài toán lập thời khóa biểu trong trường học là một trường hợp riêng của bài toán lập lịch được xếp vào hàng các bài toán khó chưa có được một giải thuật tối ưu để giải quyết. Trong quá trình học. Viện Công nghệ thông tin và truyền thông Đại Học Bách Khoa Hà Nội Bài Tập Lớn Lập lịch giảng dạy trong trường học Môn học: Trí tuệ nhân tạo Giáo viên hướng dẫn: Phạm Văn Hải Nhóm sinh viên. 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. b. Các ràng buộc của bài toán. o Ràng buộc về ngày học: Một tuần có 5 ngày đi học quy

Ngày đăng: 23/10/2014, 23:55

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan