1. Trang chủ
  2. » Luận Văn - Báo Cáo

ứ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

43 875 2
Tài liệu đã được kiểm tra trùng lặp

Đ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

Thông tin cơ bản

Tiêu đề Ứ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ác giả Nguyễn Thị Thùy
Người hướng dẫn Th.S Lê Hồng Hải
Trường học Trường Đại Học Công Nghệ, Đại Học Quốc Gia Hà Nội
Chuyên ngành Công nghệ thông tin
Thể loại Khóa luận tốt nghiệp
Năm xuất bản 2010
Thành phố Hà Nội
Định dạng
Số trang 43
Dung lượng 1,66 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

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ài toán lập lịch đó là ứng dụng ngôn ngữ lập trình ràng buộc vào giải quyết các bài toán tổ hợp.. Với m

Trang 1

ĐẠI HỌC QUỐC GIA HÀ NỘI TRƯỜNG ĐẠI HỌC CÔNG NGHỆ

Trang 2

ĐẠI HỌC QUỐC GIA HÀ NỘI TRƯỜNG ĐẠI HỌC CÔNG NGHỆ

Trang 3

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óa luậ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óa luậ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

Trang 4

TÓM TẮT KHÓA LUẬN

Lập Thời khóa biể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à ứng dụ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ài toán lập Thời khóa biểu tronng trường học là một 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ó 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ài toá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ài toán lập lịch đó là ứng dụng ngôn ngữ lập trình ràng buộc vào giải quyết các bài toán tổ hợp

Với mục tiêu xây dựng một 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 trình ràng buộc mới được phát triển và ứng dụng Đây là ngôn ngữ lập trình điển hình nhất cho việc giải quyết các bài toán tổ hợp như lập lịch, lập kế hoạch … Đây cũng là một ngôn ngữ lập trì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ôn ngữ lập trình C++

Trang 5

MỤC LỤC

LỜI CẢM ƠN 1

TÓM TẮT KHÓA LUẬ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 ứng dụng Comet vào giải quyết các vấ đề tối ưu hóa tổ hợp 7

1.2 Cấu trúc khóa luận 10

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 (CP) 14

CHƯƠNG 3: NGÔN NGỮ LẬP TRÌNH COMET 16

3.1 COMET là gì? 16

3.2 Lập trình Comet 17

3.2.1 Mô hình lập trình Comet 17

3.2.2 Ví dụ 20

3.3 Ưu điểm của Comet 23

Trang 6

CHƯƠNG 4: ỨNG DỤNG COMET VÀO BÀI TOÁN LẬP THỜI KHÓA BIỂU

26

4.1 Đặt vấn đề xây dựng bài toán 26

4.2 Giải quyết bài toá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ời khóa biểu 37

4.3.4 Chức năng xem thời khóa biể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

Trang 7

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

BẢNG CÁC THUẬT NGỮ CHUYÊN NGÀNH

Artificial Intelligence Trí tuệ nhân tạo

Application Programming Interface Giao diện lập trình ứng dụng

Constraint Programming Lập trình ràng buộc

Trang 8

DANH SÁCH HÌNH ẢNH ĐƯỢC SỬ DỤNG

Hình 1-1 Bài toán 4-Hậu 8

Hình 1-2 Một nhánh trong cây tìm kiếm của bài toán 4-Hậu 9

Hình 2-1 Mô hình CP 12

Hình 2-2 Ứng dụ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ài toán 16-Hậu bằng Comet 20

Hình 3-3 Kết quả bài toán 16-Hậu bằng Comet 22

Hình 3-4 Kết quả trực quan bài toá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ời khóa biểu 37

Hình 4-9 Xem Thời khóa biểu theo lớp 38

Hình 4-10 Xem Thời khóa biểu theo giảng viên 39

Hình 4-11 Xem Thời khóa biểu theo phòng học 39

Trang 9

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ôn ngữ lập trì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à ứng dụng CNTT, ngôn ngữ lập trình ràng buộc Comet thật sự mang lại tiện ích lớn trong việc giải quyết các bài toán tổ hợp như lập lịch, lập kế hoạch

1.1 Ý nghĩa ứng dụng lập trình ràng buộ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ài toán về tố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 bộ dữ liệu lớn, các ràng buộ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 ứng dụ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ập trì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à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 nghệ quan trọng, giải quyết hiệu quả các bài toán tối ưu hóa tổ hợp, ứng dụ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ài toán N-Hậu trong lập trình truyền thống với giải thuật vét cạn, 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

Trang 10

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)

Trang 11

Hình 1-2 Một nhánh trong cây tìm kiếm của bài toán 4-Hậu

Trong lập trình truyền thống không hỗ trợ chương trình tự động backtracking, coder phải tự viết chức năng thực hiện backtracking để tìm kiếm tất

cả các lời giải thỏa mãn điều kiện bài toán

So với lập trình truyền thống, lập trình ràng buộc hỗ trợ chương trình tự động backtracking, giải quyết vấn đề phân theo hai thành phần Thứ nhất, vấn đề được mô hình hóa bởi tập các ràng buộc trên miền giới hạn của các biến Thứ hai,

là giải quyết các ràng buộ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ập trình ràng buộc trong chương tiếp theo

Trang 12

1.2 Giới thiệu cấu trúc khóa luận

Cấu trúc khóa luận gồm 5 chương:

 Chương 1: Mở đầu

 Chương 2: Lập trình ràng buộc

 Chương 3: Ngôn ngữ lập trình Comet

 Chương 4: Áp dụng Comet vào bài toán ứng dụng “Lập thời khóa

biểu” cho trường đại học

 Chương 5: Kết luận và hướng phát triển

Trang 13

CHƯƠNG 2 LẬP TRÌNH RÀNG BUỘC

Trong một vài năm gần đây, lập trình ràng buộ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 trong thực tế Theo [5] CP được ACM (Association for Computing Achinery) nhận định là một trong những hướng chiến lược trong nghiên cứu tin học Tuy nhiên CP vẫn là một trong những công nghệ ít được biết đến và hiểu rõ

2.1 Lập trình ràng buộc là gì?

Lập trình ràng buộc (CP - Constraint Programming) là ngôn ngữ lập trình

rà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àng buộc Ý tưởng cơ bản của CP là giải quyết vấn đề bằng cách nêu rõ ràng buộc (các điều kiện, thuộc tính, yêu cầu) và tìm kiếm giải pháp thỏa mãn tất cả các ràng buộc

Lập trình ràng buộc ( CP ) là một cách tiếp cận mới về vấn đề giải quyết thỏa mãn các ràng buộc và các vấn đề tối ưu hóa đang được sử dụng trong nhiều ứng dụng thương mại CP kết hợp tìm kiếm vét cạn, quay lui từ những ngôn ngữ lập trình logic với kỹ thuật ràng buộc từ lĩnh vực nghiên cứu trí tuệ nhân tạo Monash là người tiên phong trong lĩnh vực này và được biết đến với công việc thiết kế ngôn ngữ 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 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ập trình ràng buộ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ôn ngữ lập trình logic Prolog (Alain Colmerauer, 1972) Một số ứng dụng đầu tiên của ngôn ngữ này đã đạt được

Trang 14

những thành tựu đáng kể như: hệ thống tương tác đồ họa Sketchpad của Ivan Sutherland (1963), hệ thống ThingLab của Alan Borning (1981)

Tuy nhiên, phải đến dòng ngôn ngữ lập trình logic ràng buộc Constraint Logic Programming) mới đánh dấu bước phát triển chính của lập trình ràng buộc CLP được phát triển bởi hai nhà khoa học Jaffar & Lassez (1987)[5], dựa trên nền tảng lập trình logic, kết hợp cả hai khía cạnh khai báo của lập trình logic (LP) với giải quyết các ràng buộc Tiếp theo, một số dòng ngôn ngữ lập trình ràng buộ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ôn ngữ lập trình ràng buộc có ưu thế nổi bật nhất

(CLP-Chúng ta sẽ tìm hiểu ngôn ngữ lập trình Comet trong chương tiếp theo

2.3 Mô hình lập trình ràng buộc

CP = Model + Search

Hình 2-1 Mô hình CP[3]

Bản chất của CP là kiến trúc hai thành phần: một mô hình lưu trữ ràng

buộc và mô hình tìm kiếm Mô hình lưu trữ ràng buộc là tập hợp các ràng buộc mô

tả thuộc tính của biến, các mối liên quan, ràng buộc của biến trên miền giá trị, là một hệ thống lý luận về các thuộc tính cơ bản của hệ thống ràng buộc Mô hình lưu trữ ràng buộc chứa đựng các ràng buộc đã tích lũy tại một số bước tính toán, hỗ trợ

Trang 15

các truy vấn và toán tử thực hiện trên trên nó Thành phần tìm kiếm trong CP là duyệt cây với thuật toán backtracking, về bản chất giống như phương pháp tìm

kiếm nhánh và cận của lập trình truyền thống

Bài toán: SEND + MORE = MONEY

Để hiểu rõ thêm về các ràng buộc, chúng ta hãy xét một bài toán chơi chữ

cổ điển của Henry Dudeney công bố trên tạp chí Strand năm 1924[10]

Phương trình của bài toán

Mỗi ký tự đại diện cho một con số khác sau, các chữ số hàng đầu của một

số nhiều hơn một chữ số phải là những số khác không Và một lời giải đúng là tìm

ra giá trị số tương ứng cho từng ký tự và 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 lập trình ràng buộc vào giải quyết bài toán

Code bài toán

sendmore(Digits) :-

Digits = [S,E,N,D,M,O,R,Y], % Khởi tạo biến

Digits :: [0 9], % Xác định miền giá trị của biến

S #\= 0, % 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 phần rõ ràng:

 Khai báo các biến và miền giá trị của 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ó miền giá trị thuộc vào đoạn [0,9]

Trang 16

Ràng buộc giữa các biến

Mỗi chữ cái có giá trị là một số nhất đinh, các biến phải có giá trị khác nhau S, M là hai biến tương ứng với giá trị đứng đầu các số, vì vậy, S, M là phải là các chữ số khác 0 Bên cạnh đó, tất cả các biến phải thỏa mãn biểu

thức mà đầu bài đã đưa ra SEND + MORE = MONEY

Tìm kiếm: labeling(Digits) // Chương trình sẽ duyệt theo từng biến Phần tìm kiếm độc lập với các ràng buộc giữa các biến

Lời giải cho bài toán:

Từ thập niên 90 trở lại đây, nền kinh tế trên toàn thế giới tăng trưởng mạnh

mẽ, các doanh nghiệp tổ chức thương mại không ngừng ra đời và phát triển lớn mạnh Bên cạnh đó, khoa học kỹ thuật công nghệ thu được những thành tựu rực rỡ, đem đến những công nghệ tiên tiến nhất và hàng loạt công nghệ, kỹ thuật được ứng dụng rộng rãi và thành công trong các ngành kinh tế, thương mại, góp phần thúc đẩy sự tăng trưởng kinh tế Xu hướng hiện nay, các ngành công nghiệp, các lĩnh vực hoạt động sản xuất ứng dụng công nghệ CP ngày càng tăng lên nhanh chóng Số lượng các công ty ứng dụng thành công công nghệ này tăng lên hàng năm, có thể kể tên một số công ty, tổ chức điển hình: sân bay Quốc tế Hong Kong, British Airway, SAS, Swissair, cảng Quốc tế Hong Kong, Michelin, Dassault, Ericsson[5] … Đối với lĩnh vực hàng không, CP được ứng dụng để lập lịch các chuyến bay, hoạt động chuyển phát nhanh…Trong công nghiệp sản xuất, CP ứng dụng trong việc quản lý chuỗi cung ứng sản xuất, lập lịch, phẩn bổ tài nguyên, nguồn lực …

Trang 17

Không chỉ đƣợc ứng dụng 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: Đồ họa máy tính (thể hiện gắn kết hình học trong phân tich phối cảnh), xử lỹ ngôn ngữ tự nhiên (phân tích cú pháp), hệ thống cơ sở dữ liệu (bảo đảm/phục hồi tính nhất quán của dữ liệu) …

- Lĩnh vực đời sống, sinh hoạt: Lập thời gian biểu, lập lịch…

- Lĩnh vực sinh học: phân tích phân tử sinh học (chuỗi DNA-protein)…

Kỹ thuật lập trình ràng buộc có thể sử dụng hiệu quả để dự đoán cấu trúc của một phân tử protein, đƣợc coi là vấn đề quan trọng nhất trong tin sinh học

Hình 2-2 Ứng dụng CP vào phân tích chuỗi protein

Trang 18

CHƯƠNG 3 NGÔN NGỮ LẬP TRÌNH COMET

3.1 COMET là gì?

Tối ưu hóa tổ hợp là vấn đề mà chúng ta thường xuyên bắt gặp trong cuộc sống, hoạt động sản xuất, trong các lĩnh vực hoạt động: từ ngành công nghiệp hàng không với các dịch vụ chuyển phát nhanh, chuỗi quản lý cung ứng trong công nghiệp sản xuất, vấn đề phân phối tài nguyên, nguồn lực… Đây là bài toán khó mang tính thách thức, là một nhánh nghiên cứu trong lĩnh vực khoa học máy tính, thu hút sự quan tâm, nghiên cứu của các chuyên gia, nhà khoa học trên thế giới Bởi bản chất phức tạp của vấn đề tối ưu hóa, chưa có phương pháp tiếp cận độc lập nào có khả năng giải quyết hiệu quả trên tất cả các phương diện Tuy nhiên, Comet chính là giải pháp tối ưu nhất cho bài toán tối ưu hóa tổ hợp Theo[7], Comet là công cụ được trao tặng giải thưởng bởi khả năng giải quyết hiệu quả vấn đề tối ưu hóa tổ hợp trên nhiều nhiều lĩnh vực như lập lịch, phân phối tài nguyên, nguồn lực Comet là hệ thống lai ghép lập trình ràng buộc(Constraint Programming), lập trình toán học (Mathematical Programming) với tìm kiếm cục bộ dựa trên ràng buộc (Constraint-Based Local Search)

Comet là một dòng ngôn ngữ lập trình ràng buộc Một trong những điểm sáng tạo chính của Comet là tìm kiếm địa phương dựa trên ràng buộc (CBLS – Constraint-Based Local Search), một mô hình tính toán dựa trên ý tưởng quy định các thuật toán tìm kiếm lân cận với hai thành phần[7]: một mô hình mô tả các ứng dụng ràng buộc, các ràng buộc kết hợp, các hàm đối tượng; một thủ tục tìm kiếm đượ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àng buộ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ôn ngữ lập trì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ập trình ràng buộc, giải quyết lập trình toán học

Trang 19

 Khai báo biến (variables)

Trong cấu trúc chương trình Comet, khi khai báo biến là biến ràng buộc phải khai báo kèm theo tập xác định của biến Có thể khai báo biến theo cấu trúc sau:

Ví dụ: Khai báo một biến nguyên có miền giá trị [1, 10]

var <CP> {int} x (cp,1 10);

Hoặc

set {int} dom = {1,3,7};

var <CP> {int} y (cp,dom);

Trang 20

Thiết lập biến miền giá trị dom = {1,3,7}, khai báo biến số nguyên y có giá trị nằm trong miền giá trị dom

 Ràng buộc

Ràng buộc đơn giản chỉ là một quan hệ logic giữa các ẩn số hoặc biến, với giá trị trong miền giới hạn Ràng buộc giới hạn các giá trị hợp lệ của biến, tác động lên miền giá trị để loại bỏ những giá trị không phù hợp sử dụng một thuật toán phức tạp lọc tất cả không gian tìm kiếm để loại bỏ những giá trị không phù hợp Như vậy, ràng buộc có 2 tính năng chính:

- Kiểm tra tính hợp lệ: Xác định các giải pháp thỏa mãn tất cả các ràng buộc, nếu không thỏa mãn thì chương trình tự động backtracking

- Lọc miền giá trị: Sử dụng thuật toán loại bỏ những giá trị không phù hợp

Mỗi ràng buộc phải được đẩy lên chương trình với phương thức post trong khối lệnh solver{} / solverall{} hoặc 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ô tả các ràng buộc

Ví dụ 1: Khai báo ràng buộc của biến x là phải khác giá trị 0 và 1

Trang 21

Comet hỗ trợ một số hàm ràng buộc của hệ thống:

alldifferent Ràng buộc tất cả các biến phải khác

nhau binaryKnapsack Ràng buộc tổng khối lƣợng các danh

mục cardinality Ràng buộc về số lần xuất hiện của

Hình 3-1 Thành phần tìm kiếm trong Comet

Ngày đăng: 18/02/2014, 00:52

Nguồn tham khảo

Tài liệu tham khảo Loại Chi tiết
[1]. Alexander Shrijver, Combinatorial Optimization, September 1, 2002 Sách, tạp chí
Tiêu đề: Combinatorial Optimization
[7]. Comet, http://www.comet-online.org/Welcome.html Sách, tạp chí
Tiêu đề: Comet
[8]. Comet Tutorial, Dynamic decision technologies inc, august 28, 2009 Sách, tạp chí
Tiêu đề: Comet Tutorial
[6]. Bài toán thời khóa biểu và phần mềm xếp thời khóa biểu, http://www.vnschool.net//modules.php?name=News&amp;file=article&amp;sid=35 Link
[9]. Constraint Programming, http://en.wikipedia.org/wiki/Constraint_programming Link
[2]. Luca Bortolussi, Alessandro Dal Palù, and Agotino Dovier, Two constraint–based tools for protein folding Khác
[3]. Pascal Van Hentenryck Laurent Michel, Comet in context, 2003 Khác
[4]. Pascal Van Hentenryck Laurent Michel, Constraint-Based Combinators for Local Search , 2005 Khác

HÌNH ẢNH LIÊN QUAN

BẢNG CÁC KÝ HIỆU VIẾT TẮT - ứ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
BẢNG CÁC KÝ HIỆU VIẾT TẮT (Trang 7)
BẢNG CÁC THUẬT NGỮ CHUYÊN NGÀNH - ứ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
BẢNG CÁC THUẬT NGỮ CHUYÊN NGÀNH (Trang 7)
Hình 1-1. Bài tốn 4-Hậu - ứ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
Hình 1 1. Bài tốn 4-Hậu (Trang 10)
Hình 1-2. Một nhánh trong cây tìm kiếm của bài toán 4-Hậu - ứ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
Hình 1 2. Một nhánh trong cây tìm kiếm của bài toán 4-Hậu (Trang 11)
2.3. Mơ hình lập trình ràng buộc - ứ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
2.3. Mơ hình lập trình ràng buộc (Trang 14)
- Lĩnh vực khoa học máy tính: Đồ họa máy tính (thể hiện gắn kết hình học trong phân tich phối cảnh), xử lỹ ngơn ngữ tự nhiên (phân tích cú pháp), hệ  thống cơ sở dữ liệu (bảo đảm/phục hồi tính nhất quán của dữ liệu) … - ứ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
nh vực khoa học máy tính: Đồ họa máy tính (thể hiện gắn kết hình học trong phân tich phối cảnh), xử lỹ ngơn ngữ tự nhiên (phân tích cú pháp), hệ thống cơ sở dữ liệu (bảo đảm/phục hồi tính nhất quán của dữ liệu) … (Trang 17)
3.2.1. Mơ hình lập trình Comet - ứ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
3.2.1. Mơ hình lập trình Comet (Trang 19)
Hình 3-1. Thành phần tìm kiếm trong Comet - ứ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
Hình 3 1. Thành phần tìm kiếm trong Comet (Trang 21)
Cũng giống nhƣ mơ hình Search trong CP, Search trong Comet gồm hai thành phần: Duyệt cây (Search Tree) và chiến lƣợc tìm kiếm (strategy) - ứ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
ng giống nhƣ mơ hình Search trong CP, Search trong Comet gồm hai thành phần: Duyệt cây (Search Tree) và chiến lƣợc tìm kiếm (strategy) (Trang 21)
Hình 3-2. Code bài toán 16 – Hậu bằng Comet - ứ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
Hình 3 2. Code bài toán 16 – Hậu bằng Comet (Trang 22)
Hình 3–3. Kết quả bài toán 16 – queens bằng Comet - ứ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
Hình 3 –3. Kết quả bài toán 16 – queens bằng Comet (Trang 24)
Nhƣ ví dụ trên, Comet cũng có câu lệnh cout để in giá trị biế na ra màn hình giống  nhƣ  trong  C++ - ứ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
h ƣ ví dụ trên, Comet cũng có câu lệnh cout để in giá trị biế na ra màn hình giống nhƣ trong C++ (Trang 25)
Hình 3-4. Kết quả trực quan bài toán 16 – queens visualization - ứ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
Hình 3 4. Kết quả trực quan bài toán 16 – queens visualization (Trang 26)
Mơ hình của chƣơng trình gồm hai thành phần: Thành phần giao diện đƣợc viết bằng ngôn ngữ C# và thành phần xử lý các ràng buộc bài toán đƣợc viết bằng  ngôn ngữ Comet - ứ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
h ình của chƣơng trình gồm hai thành phần: Thành phần giao diện đƣợc viết bằng ngôn ngữ C# và thành phần xử lý các ràng buộc bài toán đƣợc viết bằng ngôn ngữ Comet (Trang 32)
Hình 4-2. Quản lý giảng viê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
Hình 4 2. Quản lý giảng viên (Trang 33)

TỪ KHÓA LIÊN QUAN

TRÍCH ĐOẠN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w