Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 43 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
43
Dung lượng
1,66 MB
Nội dung
i ĐẠI HỌC QUỐC GIA HÀ NỘI TRƢỜNG ĐẠI HỌC CÔNG NGHỆ Nguyễn Thị Thùy ỨNGDỤNGNGÔNNGỮLẬPTRÌNHRÀNGBUỘCCOMETVÀOBÀITOÁNLẬPTHỜIKHÓABIỂUKHÓALUẬN TỐT NGHIỆP ĐẠI HỌC HỆ CHÍNH QUY Ngành: Công nghệ thông tin Hà Nội – 2010 ii ĐẠI HỌC QUỐC GIA HÀ NỘI TRƢỜNG ĐẠI HỌC CÔNG NGHỆ Nguyễn Thị Thùy ỨNGDỤNGNGÔNNGỮLẬPTRÌNHRÀNGBUỘCCOMETVÀOBÀITOÁNLẬPTHỜIKHÓABIỂUKHÓALUẬN TỐT NGHIỆP ĐẠI HỌC HỆ CHÍNH QUY Ngành: Công nghệ thông tin Cán bộ hƣớng dẫn: Th.S Lê Hồng Hải Hà Nội - 2010 1 LỜI CẢM ƠN Trước hết, em xin chân thành cảm ơn đến quý thày cô trường Đại học Công Nghệ đã tận tình dạy bảo em trong suốt thời gian học tập tại trường. Em xin gửi lời biết ơn sâu sắc đến Thạc sĩ Lê Hồng Hải đã dành nhiều thời gian và tâm huyết hướng dẫn nghiên cứu, giúp em hoàn thành khóaluận tốt nghiệp. Em cũng xin chân thành cảm ơn Ban Giám hiệu trường Đại học Công nghệ cùng quí thày cô trong Khoa công nghệ thông tin đã tạo điều kiện để em học tập và hoàn thành tốt khóa học. Trong khóaluận không thể tránh khỏi những thiếu sót. Em rất mong nhận được được những đóng góp quí báu của thày cô và các bạn để khóaluận được hoàn thiện hơn. Hà Nội, tháng 5 năm 2010 Sinh viên Nguyễn Thị Thùy 2 TÓM TẮT KHÓALUẬNLậpThờikhóabiểu là công việc cần thiết và quan trọng mà tất cả các tổ chức giáo dục phải thực hiện nhằm đƣa ra biểu đồ kế hoạch năm học, lịch giảng dạy và học tập cho giáo viên, học sinh. Trƣớc đây, khi CNTT chƣa đƣợc phát triển mạnh mẽ và ứngdụng rộng rãi thì công việc này thƣờng đƣợc thực hiện một cách thủ công trên giấy, tiêu tốn nhiều chi phí, thời gian và công sức. BàitoánlậpThờikhóabiểu tronng trƣờng học là một một trƣờng hợp riêng của bàitoánlập lịch đƣợc xếp vào hàng các bàitoán khó chƣa có giải thuật tối ƣu nhất. Có rất nhiều thuật toán, phƣơng pháp tiếp cận khác nhau đƣợc các nhà khoa học trên thế giới đƣa ra nhằm giải quyết bàitoán này. Song, một phƣơng pháp tiếp cận khá là mới và đƣợc cho là giải pháp tối ƣu cho các bàitoánlập lịch đó là ứngdụngngônngữlậptrìnhràngbuộcvào giải quyết các bàitoán tổ hợp. Với mục tiêu xây dựng một chƣơng trìnhlậpthờikhóabiểu hoạt động hiệu quả, khóaluận xin trình bày về ngônngữlậptrìnhràngbuộcComet và ứngdụngComet để giải quyết bàitoánlậpthờikhóa biểu. Comet là ngônngữlậptrìnhràngbuộc mới đƣợc phát triển và ứng dụng. Đây là ngônngữlậptrình điển hình nhất cho việc giải quyết các bàitoán tổ hợp nhƣ lập lịch, lập kế hoạch … Đây cũng là một ngônngữlậptrình hƣớng đối tƣợng, dễ sử dụng và cấu trúc câu lệnh tƣơng đối giống với ngônngữlậptrình C++. 3 MỤC LỤC LỜI CẢM ƠN 1 TÓM TẮT KHÓALUẬN 2 MỤC LỤC 3 BẢNG CÁC KÝ HIỆU VIẾT TẮT 5 BẢNG CÁC THUẬT NGỮ CHUYÊN NGÀNH 5 DANH SÁCH CÁC HÌNH VẼ ĐƢỢC SỬ DỤNG 6 CHƢƠNG 1: MỞ ĐẦU 7 1.1. Ý nghĩa ứngdụngCometvào giải quyết các vấ đề tối ƣu hóa tổ hợp 7 1.2. Cấu trúc khóaluận 10 CHƢƠNG 2: LẬPTRÌNHRÀNGBUỘC 11 2.1. Lậptrìnhràngbuộc là gì? 11 2.2. Nguồn gốc lậptrìnhràngbuộc 11 2.3. Mô hình lậptrìnhràngbuộc 12 2.4. Ứngdụng của ngônngữlậptrìnhràngbuộc (CP) 14 CHƢƠNG 3: NGÔNNGỮLẬPTRÌNHCOMET 16 3.1. COMET là gì? 16 3.2. LậptrìnhComet 17 3.2.1. Mô hình lậptrìnhComet 17 3.2.2. Ví dụ 20 3.3. Ƣu điểm của Comet 23 4 CHƢƠNG 4: ỨNGDỤNGCOMETVÀOBÀITOÁNLẬPTHỜIKHÓABIỂU 26 4.1. Đặt vấn đề xây dựngbàitoán 26 4.2. Giải quyết bàitoán 28 4.3. Thực nghiệm 30 4.3.1. Các chức năng quản lý giảng viên, môn học, phòng học, khoa 31 4.3.2. Chức năng phân công giảng dạy 36 4.3.3. Chức năng xếp Thờikhóabiểu 37 4.3.4. Chức năng xem thờikhóabiểu theo tên lớp, tên giảng viên, tên phòng học 38 CHƢƠNG 5: KẾT LUẬN VÀ HƢỚNG PHÁT TRIỂN 40 TÀI LIỆU THAM KHẢO 41 5 BẢNG CÁC KÝ HIỆU VIẾT TẮT Ký hiệu Từ viết tắt ACM Association for Computing Achinery AI Artificial Intelligence API Application Programming Interface CHIP Constraint Handling In Prolog CLP Constraint Logic Programming CBLS Constraint-Based Local Search CP Constraint Programming LP Logic Programming BẢNG CÁC THUẬT NGỮ CHUYÊN NGÀNH Các thuật ngữ Ý nghĩa Artificial Intelligence Trí tuệ nhân tạo Application Programming Interface Giao diện lậptrìnhứngdụng Constraint Programming Lậptrìnhràngbuộc Logic Programming Lậptrình logic Search Tìm kiếm Search Tree Cây tìm kiếm 6 DANH SÁCH HÌNH ẢNH ĐƢỢC SỬ DỤNG Hình 1-1. Bàitoán 4-Hậu 8 Hình 1-2. Một nhánh trong cây tìm kiếm của bàitoán 4-Hậu 9 Hình 2-1. Mô hình CP 12 Hình 2-2. Ứngdụng CP vào phân tích chuỗi protein 15 Hình 3-1. Thành phần tìm kiếm trong Comet 19 Hình 3-2. Code bàitoán 16-Hậu bằng Comet 20 Hình 3-3. Kết quả bàitoán 16-Hậu bằng Comet 22 Hình 3-4. Kết quả trực quan bàitoán 16-Hậu visualization 24 Hình 4-1. Mô hình chƣơng trình 30 Hình 4-2. Quản lý giảng viên 31 Hình 4-3. Quản lý phòng học 32 Hình 4-4. Quản lý môn học 33 Hình 4-5. Quản lý lớp học 34 Hình 4-6. Quản lý khoa 35 Hình 4-7. Chức năng phân công giảng dạy 36 Hình 4-8. Chức năng xếp Thờikhóabiểu 37 Hình 4-9. Xem Thờikhóabiểu theo lớp 38 Hình 4-10. Xem Thờikhóabiểu theo giảng viên 39 Hình 4-11. Xem Thờikhóabiểu theo phòng học 39 7 CHƢƠNG 1: MỞ ĐẦU Ngày nay, với sự phát triển mạnh mẽ của CNTT góp phần mang lại những thành tựu rực rỡ cho các lĩnh vực, hoạt động trong đời sống. Cùng với sự phát triển của CNTT, các thế hệ ngônngữlậptrình lần lƣợt ra đời nhằm đáp ứng các yêu cầu công nghệ. Đóng góp quan trọng vào sự phát triển và ứngdụng CNTT, ngônngữlậptrìnhràngbuộcComet thật sự mang lại tiện ích lớn trong việc giải quyết các bàitoán tổ hợp nhƣ lập lịch, lập kế hoạch. 1.1. Ý nghĩa ứngdụnglậptrìnhràngbuộc đối với vấn đề tối ƣu hóa tổ hợp Trong lĩnh vực nghiên cứu khoa học máy tính, các bàitoán về tối ƣu hóa tổ hợp đƣợc đánh giá là các bàitoán khó NP[1], đặc trƣng bởi bộ dữ liệu lớn, các ràngbuộc phức tạp. Để giải quyết vấn đề này hiệu quả đòi hỏi phải có kinh nghiệm và kỹ năng. Trên thế giới có rất nhiều những công trình nghiên cứu, các thuật toán đƣợc ứngdụng và phát triển để giải quyết vấn đề này: các thuật toán quay lui, vét cạn, các thuật toán về quy hoạch động. Tuy nhiên, trong lậptrình truyền thống chƣa có giải thuật hiệu quả nhất, đáp ứng đƣợc thời gian xử lý là đa thức. Do đó, đây vẫn là bàitoá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 nghệ quan trọng, giải quyết hiệu quả các bàitoán tối ƣu hóa tổ hợp, ứngdụng thành công trong nhiều lĩnh vực: hàng không, khoa học máy tính, công nghiệp sản xuất…CP thực sự là một giải 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 đề phức tạp trong cuộc sống thực thế. Dƣới đây, ta sẽ xét bàitoán N-Hậu trong lậptrình truyền thống với giải thuật vét cạn, quay lui. Bàitoán N-Hậu Bàitoán 4-queens là bàitoá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 8 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àitoán 4-Hậu Đây là bàitoá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àitoán này trong môi trƣờng lậptrình truyền thống ( bằng ngônngữlậptrì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àngbuộc của bàitoá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àitoán 4-Queens (Hình 1-2). [...]... kế ngônngữlậptrìnhràngbuộc logic và ngôn ngữlậptrình chức năng ràngbuộc 2.2 Nguồn gốc của lậptrìnhràngbuộcLậptrìnhràngbuộc (CP) đƣợc phát triển khá sớm so với những ngônngữlậptrình phổ biến hiện nay nhƣ Java (1990s) Vào thập niên 60, 70, những ý tƣởng đầu tiên về lậptrìnhràngbuộc có thể đƣợc tìm thấy trong lĩnh vực nghiên cứu trí tuệ nhân tạo (AI) mà cụ thể là ngônngữlập trình. .. hóa bàitoánlậpThờikhóabiểu với tính năng sắp thờikhóabiểu chính xác, hiệu quả, giảm bớt thời gian, chi phí công sức của con ngƣời Tính phức tạp của bàitoánlậpThờikhóa biểu, các quy định, ràngbuộc môn học chặt chẽ, các ràngbuộc về lịch dạy của giáo viên, lớp học … hết sức phức tạp, đa dạng Chính vì vậy, bàitoánlậpthờikhóabiểu là một bàitoán khó, có rất ít phần mềm lậpthờikhóa biểu. .. trong Comet 19 3.2.2 Ví dụ Bài toán: 16-Hậu Bàitoán 16-Hậu chỉ là mở rộng hơn của bàitoán 4-Hậu, điều kiện ràngbuộc của hai bàitoán là nhƣ nhau Ở chƣơng mở đầu, ta đã xét bàitoán 4-Hậu trong lậptrình truyền thống với giải thuật vét cạn và quay lui Trong chƣơng này, ta sẽ xét bàitoán 16-Hậu với ngôn ngữlậptrình ràng buộcComet để thấy đƣợc những ƣu điểm của lậptrìnhràngbuộc so với lập trình. .. chƣơng trình sẽ tìm kiếm nhƣ thế nào Đó là một thế mạnh của ngôn ngữlậptrình Comet Bên cạnh đó, sự phân chia rõ từng thành phần giúp cho ngƣời lậptrình dễ dàng thêm bớt các ràngbuộc mà không ảnh hƣởng gì đến sự vận hành chƣơng trình 21 Lời giải của bàitoán Hình 3–3 Kết quả bàitoán 16 – queens bằng Comet Công cụ lậptrìnhComet hiện nay hay đƣợc sử dụng là Comet Studio Đây là kết quả bàitoán sắp... lậptrình logic, kết hợp cả hai khía cạnh khai báo của lậptrình logic (LP) với giải quyết các ràngbuộc Tiếp theo, một số dòng ngônngữlậptrìnhràngbuộc lần lƣợt đƣợc phát triển, có t hể kể ra nhƣ: concurrent logic programming (1980s) , concurrent constraint programming(1990s) Và hiện nay, Comet đƣợc đánh giá là ngônngữlậptrìnhràngbuộc có ƣu thế nổi bật nhất Chúng ta sẽ tìm hiểu ngônngữ lập. .. đƣợc biểu diễn ở mức độ trừu tƣợng cao CBLS đƣợc xây dựng dựa trên cấu trúc của các thuật toán tìm kiếm, tách biệt mô hình ràngbuộc khỏi phần tìm kiếm, tăng tính sử dụng lại của nhiều ứng dụng, khai thác cấu trúc vấn đề để đạt hiệu suất cao Đồng thời, Comet là ngônngữlậptrình hƣớng đối tƣợng bao gồm công cụ tìm kiếm địa phƣơng dựa trên ràng buộc, giải quyết lậptrìnhràng buộc, giải quyết lập trình. .. Chƣơng trình sử dụng hệ thống Comet nhƣ là một thƣ viện liên quan tới hai đoạn mã - Comet code: Giải quyết các vấn đề tối ƣu hóa - C++ code: Giao tiếp với Comet Sự giao tiếp giữa Comet và C++ chỉ liên quan tới dữ liệu đầu ra và đầu vào của chƣơng trìnhComet Do đó, có rất ít sự thay đổi để tạo một chƣơng trìnhComet trong việc sử dụng nó với đoạn mã C++ 24 CHƢƠNG 4 ỨNGDỤNGCOMETVÀOBÀITOÁNLẬPTHỜI KHÓA... các ràngbuộc bằng cách sử dụng những thông tin đã đƣa ra trong mô hình để tự động tìm kiếm giải pháp Quá trình này hệ thống tự động thực hiện, không có sự can thiệp của con ngƣời Chúng ta sẽ tìm hiểu sâu về lậptrìnhràngbuộc trong chƣơng tiếp theo 9 1.2 Giới thiệu cấu trúc khóaluận Cấu trúc khóaluận gồm 5 chƣơng: Chƣơng 1: Mở đầu Chƣơng 2: Lậptrìnhràngbuộc Chƣơng 3: Ngôn ngữlậptrình Comet. .. đến và hiểu rõ 2.1 Lậptrìnhràngbuộc là gì? Lậptrìnhràngbuộc (CP - Constraint Programming) là ngônngữlậptrìnhràng buộc, công nghệ điển hình giải quyết hiệu quả vấn đề mô hình hóa và tối ƣu hóa tổ hợp, đặc biệt là trong lĩnh vực quy hoạch và lập lịch CP nghiên cứu các hệ thống tính toán dựa trên các ràngbuộc Ý tƣởng cơ bản của CP là giải quyết vấn đề bằng cách nêu rõ ràngbuộc (các điều kiện,... chƣơng: Chƣơng 1: Mở đầu Chƣơng 2: Lậptrìnhràngbuộc Chƣơng 3: Ngôn ngữlậptrình Comet Chƣơng 4: Áp dụngCometvàobàitoánứngdụngLậpthờikhóabiểu cho trường đại học Chƣơng 5: Kết luận và hướng phát triển 10 CHƢƠNG 2 LẬPTRÌNHRÀNGBUỘC Trong một vài năm gần đây, lậptrìnhràngbuộc (CP) đã thu hút sự chú ý một số lƣợng lớn các chuyên gia CNTT vì khả năng giải quyết các vấn đề khó khăn . chƣơng trình lập thời khóa biểu hoạt động hiệu quả, khóa luận xin trình bày về ngôn ngữ lập trình ràng buộc Comet và ứng dụng Comet để giải quyết bài toán lập thời khóa biểu. Comet là ngôn ngữ lập. CHƢƠNG 2: LẬP TRÌNH RÀNG BUỘC 11 2.1. Lập trình ràng buộc là gì? 11 2.2. Nguồn gốc lập trình ràng buộc 11 2.3. Mô hình lập trình ràng buộc 12 2.4. Ứng dụng của ngôn ngữ lập trình ràng buộc. lập trình ràng buộc logic và ngôn ngữ lập trình chức năng ràng buộc. 2.2. Nguồn gốc của lập trình ràng buộc Lập trình ràng buộc (CP) đƣợc phát triển khá sớm so với những ngôn ngữ lập trình