CÁC THUẬT NGỮ VIẾT TẮT Chữ viết tắt Tên đầy đủ Ý nghĩa 1 CP Constraint Programming Lập trình ràng buộc, quy hoạch ràng 3 CBLS Constraint based local search Tìm kiếm cục bộ dựa trên ràng
Trang 1BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI
Trang 2BẢN XÁC NHẬN CHỈNH SỬA LUẬN VĂN THẠC SĨ
Họ và tên tác giả luận văn: Nguyễn Trọng Hưng
Đề tài luận văn: Giải bài toán xếp lịch bảo vệ cao học bằng các kỹ thuật tối ưu dựa
1 Sửa tên đề tài: “Giải bài toán xếp lịch bảo vệ cao học bằng các kỹ thuật tối ưu dựa trên ràng buộc” thành “Giải bài toán bảo vệ thạc sĩ bằng các
kỹ thuật tối ưu dựa trên ràng buộc”
2 Sửa danh mục tài liệu tham khảo theo đúng quy tắc tại trang 54-55
3 Mô tả rõ về kỹ thuật tìm kiếm Tabu tại chương 4.1.3 tại trang 33
4 Chạy lại dữ liệu thử nghiệm và bổ sung kết quả tại chương 5.5.2 tại trang
51, 52
Ngày 23 tháng 11 năm 2015 Giáo viên hướng dẫn Tác giả luận văn
TS Phạm Quang Dũng Nguyễn Trọng Hưng
CHỦ TỊCH HỘI ĐỒNG
TS Phạm Đăng Hải
Trang 3LỜI CẢM ƠN
Để có ngày hoàn thành luận văn tốt nghiệp này, lời đầu tiên cho tôi xin chân thành cảm ơn các thầy, cô và cán bộ giảng dạy tại trường Đại Học Bách Khoa Hà nôi, các thầy cô trong viện Công nghệ thông tin và truyền thông và các thầy, cô trong viện Sau đại học đã tận tâm giảng dạy và chỉ bảo tôi trong suốt những năm vừa qua
Tôi xin dành sự cảm ơn và kính trọng đặc biệt tới TS Phạm Quang Dũng bởi sự giúp đỡ tận tình và những lời khuyên quý báu trong suốt quá trình làm luận văn Chính thầy đã tin tưởng và tạo điều kiện tốt nhất cho tôi hoàn thành luận văn tốt nghiệp này
Tôi cũng xin cảm ơn các bạn trong nhóm nghiên cứu của thầy Phạm Quang Dũng, những người luôn sẵn sang giúp đỡ và chia sẻ những khó khăn gặp phải trong quá trình làm luận văn
Hà nội, ngày 23 tháng 11 năm 2015
Học viên
Nguyễn Trọng Hưng
Trang 4LỜI CAM ĐOAN
Tác giả xin cam đoan đây là luận văn thạc sĩ của bản thân tác giả Các kết
quả trong luận văn này là trung thực, không sao chép từ bất kỳ nguồn nào và dưới
bất kỳ hình thức nào Việc tham khảo các nguồn tài liệu nếu có đã được trích dẫn và
ghi lại nguồn tài liệu tham khảo theo đúng quy định
Tác giả luận văn
Nguyễn Trọng Hưng
Trang 5CÁC THUẬT NGỮ VIẾT TẮT
Chữ viết tắt Tên đầy đủ Ý nghĩa
1 CP Constraint Programming Lập trình ràng buộc, quy hoạch ràng
3 CBLS Constraint based local
search
Tìm kiếm cục bộ dựa trên ràng buộc
4 CSP Constraint-satisfied
problem
Bài toán thỏa mãn ràng buộc
6 Choco Thư viện Choco Thư viện hỗ trợ giải các bài tóan
CSP dựa trên quy hoạch ràng buộc
7 JOpenCBLS Thư viện Java Open
Constraint based local search
Thư viện hỗ trợ giải các bài toán tối
ưu tổ hợp dựa trên phương pháp tối
ưu cục bộE
Algorithm #3
Thuật toán AC thứ 3 được sử dụng
để giải các bài toán CSP
9 BT Back tracking Thuật toán quay lui: thuật toán tìm
kiếm trong đó có khả năng quay lại các giá trị đã xét để rẽ sang hướng mới trong không gian tìm kiếm
Trang 6DANH MỤC BẢNG BIỂU
Table 1: Các phương thức khai báo biến IntegerVariable trong Choco 25
Table 2: Phương thức khai báo biến tập hợp trong Choco 25
Table 3: Danh sách các ràng buộc thường dùng trong Choco 31
Table 4: Kết quả thử nghiệm với mô hình sử dụng thư viện Choco 51
Table 5: Kết quả thử nghiệm với mô hình JOpenCBLS 52
Trang 7DANH MỤC HÌNH ẢNH
Figure 1: Ví dụ về bài toán thỏa mãn ràng buộc 10
Figure 2: Không gian tìm kiếm của bài toán CSP(X,D,C) khi các biến được sắp thứ tự {x,y,z} 11
Figure 3: Không gian tìm kiếm khi của bài toán CSP(X,D,C) khi các biến được gán giá trị {z,y,x} 11
Figure 4: Phân nhánh theo từng biến 18
Figure 5: Phân nhánh theo miền giá trị 18
Figure 6: N-queen bước 1 35
Figure 7: N-queen bước 2 35
Figure 8: N-queen bước 3 35
Figure 9: N-queen bước 4 36
Figure 10: N-queen bước 5 36
Figure 11: N-queen bước 6 36
Figure 12: N-queen bước 7 37
Trang 8TÓM TẮT NỘI DUNG CỦA LUẬN VĂN
Bài toán tối ưu tổ hợp xuất hiện nhiều trong các lĩnh vực của đời sống xã hội đặc biệt là trong các hoạt động quản lý, lập kế hoạch, điều hành trong các tổ chức, doanh nghiệp Với những bài toán như:
Bài toán điều vận xe (vehicle rounting)
Bài toán đóng gói hàng hóa (2D Bin packing)
Bài toán xếp hàng trong dây truyền sản xuất (Job Shop Scheduling)
Bài toán xếp thời khóa biểu trong quản lý và đào tạo (Time Table)
Mục tiêu của các bài toán này là cần tìm ra một lời giải thỏa mãn một tập các ràng buộc đặt ra, đồng thời tối ưu một hoặc nhiều hàm mục tiêu nào đó Hầu hết các bài toán này thuộc lớp NP-khó
Bài toán sắp xếp thời khóa biểu nói chung và cụ thể là bài toán sắp xếp lịch bảo vệ cao học được coi là một trong những bái toán tối ưu tổ hợp thuộc lớp NP-Khó Trong bài toán này, cần sắp xếp lịch bảo vệ và hội đồng bảo vệ của các học viên thỏa mãn một số ràng buộc và tối ưu theo một số tiêu chí
Có nhiều hướng tiếp cận với bài toán này trong đó được chia thành hai loại: hướng tiếp cận cho lời giải đúng ví dụ như phương pháp quy hoạch dựa trên ràng buộc và hướng tiếp cận thứ 2 cho lời giải gần đúng như phương pháp tìm kiếm cục
bộ dựa trên ràng buộc
Trong luận văn này, chúng tôi thiết kế và mô hình hóa bài toán “sắp xếp lịch bảo vệ cao học” và xây dựng thuật toán tìm kiếm với phương pháp quy hoạch ràng buộc và tìm kiếm cục bộ dựa trên ràng buộc Tiến hành thử nghiệm trên các tập dữ liệu đầu vào khác nhau
Kết quả cho thấy với dữ liệu đầu vào nhỏ, phương pháp quy hoạch ràng buộc cho kết quả chính xác với tốc độ cho phép Nhưng khi lượng dữ liệu đầu vào lớn, phương pháp quy hoạch dựa trên ràng buộc cần nhiều thời gian hơn Trong khi đó phương pháp tìm kiếm cục bộ dựa trên ràng buộc cho kết quả thỏa mãn các ràng buộc quan trọng đồng thời có kết quả chấp nhận được trong thời gian cho phép
Trang 9MỤC LỤC
Chương 1 GIỚI THIỆU CHUNG 1
Chương 2 BÀI TOÁN TỐI ƯU TỔ HỢP 3
2.1 Bài toán thỏa mãn ràng buộc 3
2.1.1 Một số khái niệm về bài toán thỏa mãn ràng buộc 3
2.1.1.1 Định nghĩa về miền và nhãn 3
2.1.1.2 Định nghĩa ràng buộc 4
2.1.1.3 Định nghĩa bài toán thỏa mãn ràng buộc (CSP) 4
2.1.2 Ví dụ về bài toán thỏa mãn ràng buộc 4
2.2 Bài toán tối ưu tổ hợp 5
2.2.1 Bài toán tối ưu tổ hợp 5
2.2.2 Một số ứng dụng trong thực tế 6
2.2.2.1 Bài toán người du lịch 6
2.2.2.2 Bài toán cái túi 7
Chương 3 QUY HOẠCH RÀNG BUỘC 9
3.1 Quy hoạch ràng buộc 9
3.1.1 Khái niệm tổng quan 9
3.1.2 Dùng ràng buộc để tỉa không gian tìm kiếm 10
3.1.2.1 Khái niệm về không gian tìm kiếm 10
3.1.2.2 Các đặc điểm của không gian tìm kiếm 11
3.1.2.3 Các kỹ thuật toàn vẹn (Consistency Techniques) 12
3.1.3 Thuật toán quay lui (back tracking) 15
3.1.3.1 Định nghĩa 15
3.1.3.2 Thuật toán quay lui đơn giản (Simple backtracking) 16
3.1.3.3 Ví dụ 17
3.1.3.4 Chiến lược tìm kiếm 18
3.2 Thư viện Choco 19
3.2.1 Giới thiệu về Choco 19
3.2.2 Hoạt động của Choco 20
Trang 103.2.2.1 Variable 20
3.2.2.2 Ràng buộc 21
3.2.2.3 Lời giải (Solver) 22
3.2.3 Các yếu tố trong Choco 24
3.2.3.1 Variables 24
3.2.3.2 Operators 26
3.2.3.3 Constraint 28
Chương 4 TÌM KIẾM CỤC BỘ DỰA TRÊN RÀNG BUỘC 32
4.1 Phương pháp tiếp cận dựa trên tìm kiếm cục bộ 32
4.1.1 Khái niệm về giải thuật tìm kiếm cục bộ 32
4.1.2 Giải thuật tham lam (Greedy search algorithm) 32
4.1.3 Tìm kiếm Tabu (Tabu Search) 33
4.1.4 Ví dụ 33
4.2 Thư viện JOpenCBLS 37
4.2.1 Variables 37
4.2.1.1 Kiểu biến nguyên VarIntLS 37
4.2.2 Functions 37
4.2.2.1 IFunction 37
4.2.2.2 Một số function hay dùng 38
4.2.3 Constraint 40
4.2.3.1 IConstraint 40
4.2.3.2 Một số ràng buộc 40
4.2.4 Module tìm kiếm 40
Chương 5 GIẢI BÀI TOÁN XẾP LỊCH BẢO VỆ CAO HỌC 42
5.1 Phát biểu bài toán 42
5.2 Mô hình toán học của bài toán 43
5.2.1 Đầu vào của bài toán 43
5.2.2 Tập biến 43
5.2.3 Miền xác định của các biến 43
5.2.4 Tập hợp các ràng buộc 43
5.2.5 Hàm mục tiêu 44
Trang 115.3 Cài đặt giải thuật tìm kiếm với thư viện Choco 44
5.3.1 Đọc dữ liệu đầu vào 44
5.3.2 Khai báo biến 44
5.3.3 Miền giá trị của các biến 45
5.3.4 Khai báo các ràng buộc 45
5.3.4.1 Các giảng viên trong hội đồng của một học viên là khác nhau 45
5.3.4.2 Nếu hai học viên có cùng giảng viên trong hội đồng thi phải khác kíp 45
5.3.4.3 Hai học viên có cùng kíp bảo vệ thì khác phòng với nhau 46
5.3.5 Mô hình hóa hàm mục tiêu 46
5.3.6 Modun tìm kiếm 46
5.4 Cài đặt giải thuật tìm kiếm dựa trên tìm kiếm cục bộ với thư viện JOpenCBLS 47
5.4.1 Khai báo các biến 47
5.4.2 Miền giá trị 47
5.4.3 Khai báo ràng buộc 47
5.4.3.1 Các giảng viên trong hội đồng của mỗi học viên phải khác nhau 47
5.4.3.2 Hai học viên có có cùng giảng viên trong hội đồng thì phải khác kíp 48
5.4.3.3 Hai học viên cùng kíp thì phải khác phòng 48
5.4.3.4 Mô hình hóa hàm mục tiêu 48
5.4.4 Mô đun tìm kiếm 51
5.5 Thử nghiệm và đánh giá 51
5.5.1 Dữ liệu thử nghiệm 51
5.5.2 Kết quả thử nghiệm 51
Chương 6 KẾT LUẬN 53
a Kết luận 53
b Hướng phát triển 53
Trang 12Chương 1: Giới thiệu chung
Chương 1 GIỚI THIỆU CHUNG
Lập trình ràng buộc (Constraint Programming - CP) là một trong những phát triển thú vị và mạnh mẽ nhất của ngôn ngữ lập trình trong thập kỷ gần đây Được xây dựng trên cơ sở lý thuyết toán học vững chắc Lập trình ràng buộc đang phát triển và đặc biệt là nó cũng đang thu hút sự quan tâm mạnh mẽ trong việc áp dụng vào lĩnh vực thương mại, nó trở thành phương pháp mô hình hóa cho nhiều loại bài toán tối ưu đặc biệt là lớp các bài toán tối ưu tổ hợp
Bài toán tối ưu tổ hợp xuất hiện rất nhiều trong các lĩnh vực của đời sống xã hội đặc biệt là trong các hoạt động quản lý, lập kế hoạch, điều hành trong các tổ chức, doanh nghiệp Có thể kế đến các bài toán tối ưu trong lĩnh vực giao thông vận tải [2], bài toán đóng gói hàng hóa [8], bài toán xếp hàng trong dây truyền sản xuất [9], bài toán thời khóa biểu trong quản lý, đào tạo [7] Mục tiêu các các bài toán này là cần tìm ra một lời giải thỏa mãn một tập các ràng buộc đặt ra, đồng thời tối ưu một hoặc nhiều hàm mục tiêu nào đó Hầu hết các bài toán này thuộc lớp NP-khó
Có 2 hướng tiếp cận chính để giải bài toán tối ưu tổ hợp: hướng tiếp cận cho lời giải đúng và hướng tiếp cận cho lời giải gần đúng
Hướng tiếp cận cho lời giải đúng luôn cho lời giải tối ưu Một số phương pháp cho lời giải đúng như: duyệt toàn bộ, sinh cột, hoặc quy hoạch ràng buộc… Trong đó phương pháp quy hoạch ràng buộc được nghiên cứu và ứng dụng khá rộng rãi với các thư viện điển hình thư viện Choco - một thư viện mã nguồn mở bằng ngôn ngữ Java cho phép người dùng có thể mô hình hóa và giải các bài toán tối ưu tổ hợp bằng phương pháp quy hoạch ràng buộc
Hướng tiếp cận thứ 2 cho lời giải gần đúng, trong đó “phương pháp tìm kiếm cục bộ” để giải các bài toán tối ưu tổ hợp với kích thước lớn đang được quan tâm và nghiên cứu Hướng tiếp cận này nhắm đến mục tiêu tìm ra lời giải chất lượng tốt trong thời gian ngắn “Tìm kiếm cục bộ dựa trên ràng buộc” (CBLS) [11] là một framework được nghiên cứu và phát triển năm 2005 để mô hình hóa và giải các bài toán tối ưu tổ hợp Thư viện JOpenCBLS được phát triển bởi nhóm nghiên cứu thuật toán và tối ưu tại viện Công Nghệ Thông Tin và Truyền Thông, trường Đại Học Bách Khoa Hà Nội cho phép người lập trình mô hình hóa và giải các bài toán tối ưu tổ hợp bằng phương pháp tìm kiếm cục bộ dựa trên ràng buộc
Bài toán sắp xếp thời khóa biểu nói chung, cụ thể là bài toán sắp xếp lịch bảo vệ cao học là một dạng bài toán tối ưu tổ hợp thuộc lớp NP-khó Trong bài toán này chúng ta cần sắp xếp một danh sách các học viên bảo vệ thạc sĩ vào các hội đồng với
Trang 13Chương 1: Giới thiệu chung
các ràng buộc như: Số giảng viên trong hội đồng là một giá trị cho trước, số lượng hội đồng không quá một giá trị cho trước, số lượng phòng không quá một giá trị cho trước, mức độ phù hợp giữa giảng viên phản biện 1 và phản biện 2 ứng với luận văn của học viên là lớn nhất
Trong luận văn này, chúng tôi mô hình hóa và giải bài toán sắp xếp lịch bảo vệ cao học bằng cả 2 hướng phương pháp: phương pháp quy hoạch ràng buộc với thư viện Choco và phương pháp tìm kiếm cục bộ dựa trên ràng buộc với thư viện JOpenCBLS bằng việc thiết kế, cài đặt và thiết kế các ràng buộc cho phép giải bài toán sắp xếp lịch bảo vệ cao học Qua đó có những đánh giá về lời giải, thời gian tìm kiếm và hướng
mở rộng của bài toán
Trang 14Chương 2: Bài toán tối ưu tổ hợp
Chương 2 BÀI TOÁN TỐI ƯU TỔ HỢP
Chương này của luận văn sẽ giới thiệu khái niệm, các định nghĩa cơ bản về bài toán tối ưu tổ hợp và một số ví dụ về bài toán tối ưu tổ hợp
2.1 Bài toán thỏa mãn ràng buộc
Bài toán thỏa mãn ràng buộc (CSP) đang ngày càng trở nên phổ biến trong cộng đồng khoa học máy tính cũng như trí tuệ nhân tạo Mục đích chính của phần này là giới thiệu những kiến thức cô đọng nhất cho CSPs: Những định nghĩa cùng với những khái niệm quan trọng cho CSPs; các kỹ thuật áp dụng nhằm biến đổi bài toán sao cho
dễ giải hơn, đồng thời cũng nêu ra các cách tiếp cận và giải CSPs
2.1.1 Một số khái niệm về bài toán thỏa mãn ràng buộc
Trong phần này, chúng tôi sẽ nêu những định nghĩa quan trọng trong CSP như định nghĩa miền, nhãn,
2.1.1.1 Định nghĩa về miền và nhãn
Miền của một biến là tập các giá trị có thể gán tới biến Nếu x là một biến, ta
ký hiệu Dx là miền của x
Khi miền chỉ chứa các số, các biến được gọi là biến số Miền của biến số có thể
được hạn chế trong số nguyên, hữu tỉ hay số thực
Ví dụ, miền của biến nguyên là một tập vô hạn {1, 2, 3, …} Trong luận văn này chúng tôi chỉ tập trung vào CSP với miền hữu hạn Khi miền chỉ chứa giá trị {0, 1} hoặc {true, false}, biến sẽ được gọi là biến boolean
Khi mà miền chứa kiểu liệt kê các đối tượng, biến sẽ được gọi là biến biểu tượng Ví dụ, một biến thể hiện ngày trong tuần là biến biểu tượng vì miền của nó là một tập hữu hạn {thứ hai, thứ ba, thứ tư, thứ năm, thứ sáu, thứ bảy, chủ nhật}
Nhãn là một cặp biến-giá trị thể hiện rằng biến đó đã được gán giá trị
Ví dụ, chúng ta dùng <x, v> để chỉ rằng biến x được gán giá trị v <x, v> chỉ có nghĩa nếu v là một giá trị thuộc miền giá trị Dx của x
Một phép gán nhãn kết hợp là một phép gán đồng thời các giá trị (có thể là rỗng) đến tập các biến Chúng ta ký hiệu (<x1, v1>, < x2, v2>…<xn, vn>) để chỉ việc gán kết hợp v1, v2 , …, vn tới x1, x2 , …, xn tương ứng
Một phép gán nhãn k-kết hợp là một phép gán nhãn kết hợp đồng thời của kgiá trị tới k biến
Trang 15Chương 2: Bài toán tối ưu tổ hợp
Nếu m và n là các số nguyên sao cho m ≤ n, khi đó phép chiếu của một nhãn
n-kết hợp N tới một nhãn m-n-kết hợp M, được coi như phép chiếu projection(N, M) nếu
tất cả các nhãn của M đều có mặt trong N
Ví dụ, (<a,1><c,3>) là một phép chiếu của (<a,1><b,2><c,3>), cũng có nghĩa
là projection((<a,1><b,2><c,3>), (<a,1><c,3>)) là đúng
2.1.1.2 Định nghĩa ràng buộc
Một ràng buộc là tập các biến được hạn chế giá trị sao cho chúng có thể đạt được một cách đồng thời Một cách khái niệm, một ràng buộc có thể được xem như một tập chứa tất cả các nhãn kết hợp cho các biến Trong thực tế ràng buộc có thể được thể hiện nhiều cách khác, ví dụ như hàm, ma trận, bất phương trình
Một ràng buộc trên một tập các biến được coi như là một tập các nhãn kết hợp
tương ứng với biến đó Để thuận tiện, chúng ta dùng C s để ký hiệu cho ràng buộc trên
tập biến của S
2.1.1.3 Định nghĩa bài toán thỏa mãn ràng buộc (CSP)
Một bài toán thỏa mãn ràng buộc là một bộ ba (X, D, C), Trong đó:
X : là một tập hữu hạn biến { x1, x2 , …, xn};
D : là một tập các miền giá trị của các biến D = {D1, D2, , Dn} Trong
đó Di là miền giá trị của biến xi với mọi
C : là một tập (có thể rỗng) các ràng buộc trên một tập con tùy ý của các biến trong X Nói một cách khác, C là tập của tập các nhãn kết hợp Chúng ta dùng CSP(P) để ký hiệu rằng P là một bài toán thỏa mãn ràng buộc Trong khuôn khổ dung của luận văn này, chúng tôi tập trung vào CSP có số biến hữu hạn và miền của chúng cũng hữu hạn
Nhiệm vụ của CSP là gán giá trị tới mỗi biến sao cho chúng thỏa mãn đồng thời tất cả các ràng buộc Một nhãn kết hợp thỏa mãn tất cả các ràng buộc của bài toán CSP được gọi là lời giải (nghiệm) của bài toán CSP được coi là thỏa mãn nếu tồn tại
bộ nghiệm Tùy thuộc vào yêu cầu ứng dụng, CSPs có thể phân loại thành:
CSPs chỉ ra không tồn tại nghiệm
CSPs chỉ cần tìm ra một bộ nghiệm bất kỳ
CSPs cần tìm ra toàn bộ các bộ nghiệm
CSPs cần tìm ra một nghiệm tối ưu (bài toán tối ưu tổ hợp)
2.1.2 Ví dụ về bài toán thỏa mãn ràng buộc
Ví dụ 1 : Bài toán con hậu N-Queens
Trang 16Chương 2: Bài toán tối ưu tổ hợp
Cho bàn cờ kích thước n×n, tìm cách sắp xếp con hậu trên bàn cờ sao cho không có con nào có thể ăn được lẫn nhau
Mô hình hóa bài toán :
Tập các biến : X = {X1, X2, , Xn} là một biến đại diện cho vị trí của con hậu tại từng cột (con hậu tại cột thứ i, nằm tại dòng Xi)
Miền giá trị : D(Xi) = {1, 2, , n} Mỗi con hậu đều nằm trong các dòng từ 1 đến n
Ràng buộc :
o Mỗi con hậu nằm trên 1 dòng : C_Lines : Xi ≠ Xj với mọi 1 ≤ i < j ≤ n
o Không có bất kỳ 2 con hậu nào trên 1 đường chéo
- C_diag1: Xi ≠ Xj + j – i với mọi 1 ≤ i < j ≤ n
- C_diag2: Xi ≠ Xj + i – j với mọi 1 ≤ i < j ≤ n
Ví dụ 2: Bài toán Magic Square
Cho các số nguyên dương từ 1 đến n 2 Hãy xếp các số trên vào các ô vuông của hình vuông có kích thước n × n sao cho tổng các hàng, các cột và các đường chéo chính đều bằng nhau
Mô hình bài toán:
Tập biến: X = {Xi,j | }
Miền giá trị: Xij = {1, 2, , n2} với mọi i,j
Ràng buộc:
o Mỗi số chỉ sắp xếp trong 1 ô: Xi,j ≠ Xk,l với mọi i ≠ k, j ≠ l
o Tổng các hàng, cột, đường chéo bằng nhau và bằng n(n2+1)/2
∑
∑
∑
2.2 Bài toán tối ƣu tổ hợp
Trong số các bài toán thỏa mãn ràng buộc, có một lớp bài toán có ứng dụng rộng rãi trong thực tế Đó chính là lớp bài toán tối ưu tổ hợp
2.2.1 Bài toán tối ƣu tổ hợp
Bài toán tối ưu tổ hợp là một dạng bài toán thỏa mãn ràng buộc, không quan tâm đến việc tìm ra tất cả các lời giải của bài toán mà chỉ nhằm xây dựng một lời giải
“tối ưu” theo một nghĩa nào đấy Vì thế đó là bài toán có nhiều ý nghĩa thực tiễn hơn
cả Để tìm được lời giải của bài toán tối ưu tổ hợp, cũng giống như bài toán liệt kê,
Trang 17Chương 2: Bài toán tối ưu tổ hợp
phải được xây dựng dưới dạng một giải thuật mà theo từng bước, ta tìm kiếm được lời giải cần tìm Việc thi hành được giao cho máy tính bằng một chương trình thực hiện giải thuật đã nêu
Độ “tốt” của lời giải phụ thuộc vào mục tiêu của bài toán và người ta phải lượng hóa chúng để có thể so sánh Một cách thường làm là xây dựng một hàm mục tiêu f,
ứng mỗi bộ X được xét với một con số, ký hiệu f(X) (gọi là hàm mục tiêu của X)
Khi đó, độ “tốt” của cấu hình được định nghĩa theo hai hướng: nếu mục tiêu của bài toán là chi phí thì X càng tốt nếu giá trị của f(X) càng nhỏ (như thế lời giải tốt nhất là lời giải cho giá trị f nhỏ nhất), nếu mục tiêu là hiệu quả thì lời giải càng tốt nếu giá của
nó càng lớn (như thế lời giải tốt nhất là lời giải có giá lớn nhất) Bài toán thứ nhất gọi
là bài toán tìm giá trị nhỏ nhất, bài toán thứ hai gọi là bài toán tìm giá trị lớn nhất Như vậy, bài toán tối ưu tổ hợp có thể phát biểu dưới hình thức toán học như sau: Bài toán tối ưu tổ hợp gồm có các thành phần: (X, D, C, f) Trong đó:
X: là bộ các biến của bài toán X = {X1, X2, , Xn}
D: là tập các miền giá trị của các biến D = {D0, D1, , Dn} Trong đó Di là miền giá trị của Xi. Và Di là miền hữu hạn
C: là tập các ràng buộc của bài toán
f : D* R là một hàm mục tiêu xác định trên miền giá trị D* = D0 × D1 ×
× Dn
Mỗi bộ X0 = {v0, v1, , vn} D* được gọi là một phương án của bài toán
Nhiệm vụ của bài toán tìm một phương án X0 sao cho f(X0) đạt giá trị nhỏ nhất hoặc lớn nhất
Chú ý rằng do D hữu hạn nên phương án tối ưu bao giờ cũng tồn tại Có thể có nhiều phương án tối ưu, nhưng giá trị tối ưu là duy nhất Trong mỗi bài toán cụ thể, ta phải chỉ rõ các điều kiện xác định D và cách tính hàm f (hàm f có thể tính bằng một công thức hoặc bằng một thủ tục) Để tìm hiểu rõ hơn về bài toán tối ưu tổ hợp, chúng tôi xin trình bày một số bài toán tối ưu tổ hợp cơ bản trong thực tế
2.2.2 Một số ứng dụng trong thực tế
2.2.2.1 Bài toán người du lịch
Bài toán người du lịch được phát biểu như sau: “Có n thành phố (được đánh số
từ 1 đến n) Một người du lịch, xuất phát từ thành thành phố s, muốn đi thăm tất cả các thành phố khác, mỗi thành phố đúng một lần, rồi lại quay về nơi xuất phát Giả thiết biết chi phí đi từ thành phố i đến thành phố j là c(i, j), 1 ≤ i, j ≤ n Hãy tìm một hành trình cho người du lịch sao cho chi phí của hành trình này là nhỏ nhất”
Mỗi hành trình của người du lịch được biểu diễn bằng một hoán vị X = {x1, x2, , xn} của {1, 2, , n} với x1 = s (hoán vị này biểu diễn hành t nh x1→ x2→ → xn-
Trang 18Chương 2: Bài toán tối ưu tổ hợp
1→ xn→ x1) Chi phí của hành trình X được tính bằng công thức c(x1, x2) + c(x2, x3) + + c (xn, x1) Như thế, mô hình toán học của bài toán người du lịch là:
2.2.2.2 Bài toán cái túi
Bài toán cái túi được phát biểu như sau: “Có n đồ vật (đánh số từ 1 đến n) Với
mỗi đồ vật i, ta biết pi, vi lần lượt là các trọng lượng và giá trị của vật đó (i = 1, 2, , n) Giả thiết có một cái túi, sức chứa không quá w đơn vị trọng lượng Hãy tìm một phương án chọn đồ vật bỏ vào túi để có thể mang đi được sao cho tổng giá trị các vật được mang là lớn nhất”
Một phương án chọn đồ vật là một tập con của tập {1, 2, , n}, vì thế có thể biểu diễn mỗi phương án như thế như một dãy nhị phân X = (x1, x2, , xn) trong đó xi
= 1 khi và chỉ khi vật i được chọn (i = 1, 2, , n) Tổng trọng lượng của các vật được mang theo phương án này là p1 x1+ p2 x2 + + pn xn Điều kiện các vật được chọn mang đi được là điều kiện tổng này không vượt quá w (sức chứa của cái túi) Tổng giá trị các vật được mang theo phương án X là v1x1+ v2x2+ + vnxn Từ đó ta nhận được
mô hình toán học của bài toán cái túi như sau:
Trang 19Chương 2: Bài toán tối ưu tổ hợp
Tìm X trên miền D thỏa mãn các ràng buộc C sao cho: f (X) đạt giá trị lớn nhất
Bài toán cái túi có nội dung giống như bài toán của người leo núi trước khi thám hiểm: chọn những vật đem theo sao cho sức anh ta mang được với tổng giá trị sử dụng trong chuyến leo núi là lớn nhất, vì thế bài toán này còn có tên gọi khác là bài toán của người leo núi Bài toán người du lịch là thí dụ cho những bài toán tối ưu với mục tiêu
là chi phí, còn bài toán cái túi là thí dụ cho những bài toán tối ưu với mục tiêu là hiệu quả
Trang 20Chương 3: Quy hoạch ràng buộc
Chương 3 QUY HOẠCH RÀNG BUỘC
Các bài toán CSP thực sự rất đáng quan tâm vì nó xuất hiện trong một số lớn các ứng dụng Nó cũng có những đặc tính riêng cần được khám phá và phát triển bằng những thuật toán hiệu quả riêng Chương này, chúng tôi sẽ trình bày tổng quan các kỹ thuật giải bài toán CSP: tỉa không gian tìm kiếm và tìm kiếm Chương này của luận văn cũng giới thiệu thư viện Choco - một framework hỗ trợ giải quyết các bài toán thỏa mãn ràng buộc
3.1 Quy hoạch ràng buộc
3.1.1 Khái niệm tổng quan
Quy hoạch ràng buộc (CP-Constraint Programming) là một hướng tiếp cận mạnh để giải quyết các bài toán tối ưu tổ hợp CP được ứng dụng trong việc giải nhiều bài toán tối ưu kinh điển như lập lịch (Scheduling), lập thời khóa biểu (TimeTabling), lập tuyến điều hành xe (Routing), phân công ca trực…
CP là sự kết hợp 2 thành phần cơ bản: Tỉa không gian tìm kiếm và phân nhánh Tỉa không gian tìm kiếm là cơ chế sử dụng các ràng buộc để loại bỏ bớt các giá trị không phù hợp trong miền giá trị của mô hình bài toán Sử dụng các ràng buộc để tỉa không gian tìm kiếm đảm bảo tìm ra được đáp án thỏa mãn tất cả các ràng buộc bởi lẽ các ràng buộc được xem xét một cách độc lập và không có sự tương trợ nhau trong qus trình tỉa miền giá trị của các biến
Phân nhánh là chiến lược xắp xếp và rà soát từng giá trị còn lại trong miền giá trị, sau đó thử từng giá trị một để cho đáp án thỏa mãn điều kiện tối ưu
Ví dụ: {
Để giải bài toán này, ta sử dụng phương pháp tỉa không gian tìm kiếm dựa trên ràng buộc Sau khi xét ràng buộc x1 ≤ x2, ta có thể tỉa được giá trị 4, 5 trong miền giá trị của x1 Tương tự với ràng buộc x1 + x2 = x3, ta có thể loại bỏ được giá trị 3 trong miền giá trị của x1 và x2.Tiếp đó ta cũng có thể tỉa giá trị 1 trong miền giá trị của x3
Trang 21Chương 3: Quy hoạch ràng buộc
Figure 1: Ví dụ về bài toán thỏa mãn ràng buộc
Như vậy sau khi tỉa, ta có miền giá trị của bộ biến là :
{
Với miền giá trị này, ta tiếp tục giải bài toán bằng chiến lược phân nhánh Ta xét từng biến của x1 Với x1 = 2 x2 ≥ 2 x3 ≥4, như vậy không tìm được x3 trong miền giá trị thỏa mãn các ràng buộc Với x1 = 1 Ta có miền giá trị mới
{
Ta tiếp tục thực hiện tìm kiếm dựa trên các giá trị của x2 Với x2 = 1 thì miền giá trị D(x3) rỗng vì không có giá trị nào thỏa mãn điều kiện x2 + x3 = 5 và x3 = x1 +
x2 Ta loại được giá trị này Với x2 = 2, khi đó tìm được miền giá trị của bài toán D(x1) = {1}, D(x2) = {2}, D(x3) = {3}
3.1.2 Dùng ràng buộc để tỉa không gian tìm kiếm
3.1.2.1 Khái niệm về không gian tìm kiếm
Không gian tìm kiếm là không gian của tất cả các trạng thái mà việc tìm kiếm
Trang 22Chương 3: Quy hoạch ràng buộc
Khi lần lượt gán giá trị cho các biến theo thứ tự x, y, z ta có không gian tìm kiếm như sau:
Figure 2: Không gian tìm kiếm của bài toán CSP(X,D,C) khi các biến được sắp thứ tự
{x,y,z}
Không gian tìm kiếm sẽ khác nhau nếu thứ tự gán giá trị của các biến thay đổi
Figure 3: Không gian tìm kiếm khi của bài toán CSP(X,D,C) khi các biến được gán
giá trị {z,y,x}
3.1.2.2 Các đặc điểm của không gian tìm kiếm
Cỡ của không tìm kiếm là hữu hạn
Số lá trong cây tìm kiếm là L =| Dx1 || Dx2 | | Dxn |, trong đó Dxi là miền của biến
xi, và | Dxi |là cỡ của miền đó Chú ý rằng L không bị ảnh hưởng bởi trật tự khi chúng
ta quyết định gán nhãn cho biến Tuy nhiên, trật tự lại ảnh hưởng đến số nút trung gian trong không gian tìm kiếm Tổng quát hơn, nếu chúng ta giả sử các biến được sắp theo thứ tự x1 , x2 , …, xn thí số nút trong cây tìm kiếm là: ∑| || | | |
Trang 23Chương 3: Quy hoạch ràng buộc
Với công thức trên, cùng với 2 ví dụ đã nêu, không khó khăn cho chúng ta nhận ra rằng nếu các biến được sắp theo trật tự khi các miền của nó giảm dần thì số nút trong không gian tìm kiếm sẽ đạt giá trị lớn nhất Đó cũng chính là biên của cỡ trong không gian tìm kiếm Ngược lại nếu các biến được sắp theo trật tự khi các miền của nó tăng dần thì số nút trong không gian tìm kiếm sẽ đạt giá trị nhỏ nhất
Tuy nhiên, cỡ của bài toán lại bị chi phối bởi tích cuối cùng: L =| Dx1 || Dx2 |
|Dxn |, chính là số nút lá, nó không thay đổi khi trật tự các biến thay đổi
Độ sâu của cây được cố định
Khi các biến được cố định, độ sâu của cây tìm kiếm luôn luôn bằng số biến trong bài toán Khi trật tự của biến không cố định, độ sâu chính xác là 2n, với n là số biến
3.1.2.3 Các kỹ thuật toàn vẹn (Consistency Techniques)
Mục đích của các kỹ thuật này là tỉa các giá trị không phù hợp trên miền của từng biến dựa vào các ràng buộc, qua đó giảm không gian tìm kiếm, đưa bài toán về giải bài toán ràng buộc với miền giá trị nhỏ hơn
Để đạt được ràng buộc tổng thể là rất khó và thời gian tính toán lớn, vì thế người ta cố gắng sử dụng kỹ thuật tỉa với từng ràng buộc một cách cục bộ Miền giá trị của các biến được tỉa thông qua các phương pháp toàn vẹn
a Khái niệm về toàn vẹn cục bộ (Locally consistent)
Quay trở lại bài toán CSP(X, D, C) với biến X = {x1, x2, ,xn}
Một nhãn kết hợp L = (<x1, v1><x2, v2> <xk, vk>) trên tập biến Y = {x1, x2, ,xk}
được gọi là toàn vẹn cục bộ khi và chỉ khi L thỏa mãn tất cả các ràng buộc trong C
với tập biến Y Một nhãn L là toàn vẹn cục bộ khi nó có thể trở thành lời giải cho bài toán
Nhãn (<x1, 1>, <x2, 4>) là một lời giải bộ phận và toàn vẹn cục bộ
Nhãn (<x1, 1>, <x2, 4>,<x3, 2>, <x4, 1>) là lời giải bài toán
Trang 24Chương 3: Quy hoạch ràng buộc
b Toàn vẹn miền giá trị (Domain Consistency)
Một ràng buộc c được gọi là toàn vẹn miền giá trị nếu mọi giá trị vi thuộc D(xi) thì sẽ tồn tại một bộ vj thuộc D(xj) với thỏa mãn c với mọi
Có những nhãn là toàn vẹn miền giá trị nhưng không thể trở thành lời giải của bài toán
c Toàn vẹn Forward Checking (Forward checking consistency)
Một ràng buộc c được gọi là toàn vẹn FC khi và chỉ khi hoặc có nhiều hơn 1 biến trong c chưa được gán giá trị hoặc chỉ có duy nhất một biến trong c chưa được gán giá trị và c là toàn vẹn miền giá trị
Ví dụ: CSP(X, D, C) trong đó:
X = {x1, x2, x3, x4}
D(x1) = {1, 2, 3, 4}
Trang 25Chương 3: Quy hoạch ràng buộc
4}, D4(x4) = {1, 2 3, 4, 5, 6} là toàn vẹn FC vì giá trị x4 = 6 trong miền giá trị D4(x4)
không thỏa mãn ràng buộc C2
d Thuật toán AC3 (Arc Consistency Algorithm #3)
Thuật toán AC3 là một kỹ thuật tỉa miền giá trị của các ràng buộc Trong thuật
toán AC3, bài toán CSP được biểu diễn dưới dạng 1 đồ thị trong đó các đỉnh là các
biến bài toán và cạnh là các ràng buộc giữa các biến số Thuật toán AC3 sẽ duyệt các
cặp biến (Xi, Xj) của bài toán, loại bỏ các giá trị của biến nếu không thỏa mãn ràng
buộc giữa 2 cặp biến (dựa trên các cạnh của đồ thị)
Thuật toán sử dụng một hàng đợi các cạnh chưa được kiểm tra Khi miền giá trị
của một biến bị tỉa (loại bỏ giá trị không phù hợp), các cạnh của đồ thị gán với biến bị
tỉa sẽ được thêm vào hàng đợi
Thuật toán được mô tả dưới dạng pseudocode như sau:
Thuật toán AC3 (X, D, C) có một hàng đợi Q gồm tất cả các cặp (x, c) sao cho
ràng buộc c thuộc bộ các ràng buộc và x thuộc vào bộ biến của ràng buộc : c
Trang 26Chương 3: Quy hoạch ràng buộc
⋀ Khi đó vòng lặp sẽ lần lượt chọn các cặp (x, c) trong Q và gọi REVISE(x, c)
Hàm REVISE(x, c) là thuật toán tỉa các giá trị của x dựa trên ràng buộc c Hàm REVISE sẽ lần lượt lấy từng giá trị v trong D(x) và đối chiếu ràng buộc c để kiểm tra
sự thỏa mãn ràng buộc của giá trị v Nếu v không thỏa mãn các ràng buộc thì v bị loại khỏi D(x) và miền giá trị D(x) thay đổi Hàm sẽ trả về giá trị true ngược lại khi không thay đổi D(x) hàm sẽ trả về giá trị false
Trong thuật toán AC3, sau khi gọi hàm REVISE, nếu hàm này làm thay đổi D(x), thuật toán sẽ kiểm tra miền giá trị D(x) sau khi bị thay đổi bởi hàm REVISE Nếu D(x) rỗng, thuật toán kết thúc và trả về giá trị false Ngược lại sẽ có một biến x’ thỏa mãn ràng buộc c’, do đó tất cả các cặp (x’, c’) sẽ lại được đặt trong hàng đợi Khi
Q rỗng, thuật toán kết thúc, trả về giá trị true nghĩa là tất cả các miền giá trị đã được sửa đổi và các giá trị còn lại của các biến thỏa mãn mọi ràng buộc
Vì miền giá trị của các biến là hữu hạn, và tại mỗi bước loại bỏ được một vòng cung hoặc 1 giá trị của một biến vì thế thuật toán luôn kết thúc
Độ phức tạp của thuật toán AC3 là o(ed3) trong đó :
e : là số lượng các ràng buộc của bài toán CSP
d : số lượng các giá trị của miền giá trị của các biến
Mỗi biến được bổ sung vào Q d lần
Độ phức tạp của hàm REVISE là o(d2
)
3.1.3 Thuật toán quay lui (back tracking)
Phương pháp tỉa không gian tìm kiếm không đảm bảo tìm ra lời giải thỏa mãn tất cả các ràng buộc Điều cần thiết ở đây là ta cần phải kết hợp phương pháp tỉa không gian tìm kiếm với thuật toán tìm kiếm quay lui
Về bản chất tư tưởng của thuật toán là thử từng khả năng trong miền giá trị cho đến khi tìm thấy lời giải đúng Đó là một quá trình tìm kiếm theo độ sâu trong một
Trang 27Chương 3: Quy hoạch ràng buộc
tập hợp các lời giải Trong tìm kiếm nếu ta gặp một hướng lựa chọn không thỏa mãn,
ta quay lui về điểm lựa chọn nơi có các hướng khác và thử hướng lựa chọn tiếp theo Khi đã thử hết các lựa chọn xuất phát từ điểm đó, ta quay lại điểm lựa chọn trước đó
và thử các hướng tiếp theo Quá trình tìm kiếm thất bại khi không còn điểm lựa chọn nào nữa
Quy trình tìm kiếm back-tracking thường được cài đặt bằng một hàm đệ quy
mà ở mỗi thể hiện của hàm lấy thêm một biến và lần lượt gán giá trị có thể cho biến
đó, với mỗi giá trị gán lại thực hiện lại hàm đệ quy để gán cho biến tiếp theo Chiến lược quay lui tương tự với tìm kiếm theo độ sâu nhưng lại sử dụng ít không gian bộ nhớ hơn, nó chỉ lưu giữ trạng thái của một lời giải hiện tại và cập nhật nó
Để tăng tốc quá trình tìm kiếm, khi một giá trị được chọn, trước khi thực hiện lời gọi đệ quy, thuật toán thường xóa bỏ giá trị đó khỏi miền xác định của các biến có mâu thuẫn chưa được gán (kiểm tra tiến – forward checking) và kiểm tra hằng số để tìm giá trị khác đã bị loại trừ bởi giá trị vừa được gán (lan truyền ràng buộc – constrain propagation)
3.1.3.2 Thuật toán quay lui đơn giản (Simple backtracking)
Thuật toán đơn giản để thực hiện việc gán giá trị vào các biến trong bài toán thỏa mãn ràng buộc Thao tác cơ bản quả thuật toán là chọn một biến và gán giá trị vào biến đó, đảm bảo rằng giá trị được chọn sẽ thỏa mãn các ràng buộc Quá trình gán giá trị vào các biến của bài toán CSP gọi là quá trình gán nhãn (Labelling) Thuật toán quay lui luôn quay lui trong quá trình quyết định khi quá trình gán nhãn kết thúc nên
nó được gọi là quay lui có trình tự (chronological backtracking)
Thuật toán quay lui đơn giản có dạng mã như sau:
*/
if (unlabelled = {}) then
return compound_labelled ; end if;
chọn một biến x từ unlabelled;
repeat
xóa giá trị v khỏi miền Dx;
Trang 28Chương 3: Quy hoạch ràng buộc
if (compound_labelled + {<x,v>} Không vi phạm ràng buộc nào) then
result backtracking(unlabelled - {x},
Nếu số biến là n, số ràng buộc là c, số miền là a cho mỗi biến trong CSP Khi
đó có thể có an khả năng cho bộ nghiệm, và độ phức tạp thời gian cho việc kiểm tra
toàn bộ ràng buộc là o(an c)
Độ phức tạp bộ nhớ của bài toán là o(na) Thuật toán BT không đòi hỏi bộ nhớ
tạm thời nhiều hơn o(n) để lưu trữ nhãn kết hợp Vì vậy, độ phức tạp không gian lưu
trữ cho Chronological_Backtracking là o(na)
Chú ý rằng độ phức tạp thời gian ở trên chỉ ra rằng thuật toán sẽ hiệu quả hơn
nếu ta giảm được a Điều này có thể đạt được bằng các kỹ thuật tỉa miền giá trị của
các biến
3.1.3.3 Ví dụ
Ta phân nhánh các biến giá trị của bài toán thỏa mãn ràng buộc với nút gốc là
P0 thành một bài toán thỏa mãn ràng buộc với các nút từ P1, P2, Pm sao cho kết quả
của 2 bài toán là tương đương nhau Miền giá trị các biến thuộc Pi không lớn hơn P0
Phương pháp phổ biến nhất của tìm kiếm quay lui là tìm kiếm theo hình cây (Tree
Search) Trong đó nút gốc là bài toán CSP ban đầu, tiếp đó là các nút của bài toán
CSP mới Nút lá là lời giải (Solution) của bài toán nếu tất cả các biến trong miền giá
trị đều thỏa mãn ràng buộc Nút lá không thỏa mãn bài toán (Failure) nếu tồn tại một
miền giá trị trong các biến là rỗng
Có 2 kiểu phân nhánh:
Phân nhánh theo từng biến(Enumeration): Phân nhánh theo từng biến tức là ta
gán từng giá trị của biến trong miền giá trị cho mỗi nhánh cây x = 1, x = 2 , x
= k
Trang 29Chương 3: Quy hoạch ràng buộc
Figure 4: Phân nhánh theo từng biến
Phân nhánh theo cách chia miền giá trị của các biến (splitting domain): Phân nhánh bằng cách phân chia miền giá trị của các biến x ≤ v, x≥ v
Figure 5: Phân nhánh theo miền giá trị
3.1.3.4 Chiến lược tìm kiếm
a Chọn biến: Nguyên tắc first-fail là nguyên tắc thử những biến có khả năng sai nhiều nhất tức là biến đó không thỏa mãn các ràng buộc
o Dom heuristic: chọn biến có miền giá trị nhỏ nhất
o Deg heuristic: chọn biến tham gia nhiều ràng buộc nhất
o Dom + Deg heuristic: kết hợp cả 2 phương án trên
o Dom/Deg heuristic: chọn biến có thương dom/deg nhỏ nhất
Trang 30Chương 3: Quy hoạch ràng buộc
b Chọn giá trị
o Best first prociple: chọn những giá trị có khả năng đúng nhiều nhất tức
là giá trị đó thỏa mãn mọi ràng buộc bài toán
o Possibilities:
Thử những giá trị theo thứ tự tang dần
Thử những giá trị theo thứ tự giảm dần
Thử những giá trị nằm ở miền giá trị
c Ví dụ: nguyên tắc first fail trong comet, tìm giá trị đầu tiên gần điểm giữa của miền giá trị
function void searchFirstFail(Var<CP>{int}[] x) {
Solver<CP> cp = x[x.getLow()].getSolver();
forall(i in x.getRange()) by (x[i].getSize()) {
int mid = (x[i].getMax() + x[i].getMin())/2;
x[i].memberOf(v)) by (abs(v - mid))
cp.post(x[i] == v);
} }
3.2 Thƣ viện Choco
Hiện nay có rất nhiều thư viện hỗ trợ giải bài toán quy hoạch ràng buộc như ], Choco [15], Gecode [16], MiniZinc [17],vv Trong luận văn này, chúng tôi tập trung vào tìm hiểu một trong những thư viện này đó là Choco vì nó được phát triển bằng ngôn ngữ Java một ngôn ngữ lập trình rất phổ biến để phát triển các ứng dụng công nghiệp
3.2.1 Giới thiệu về Choco
Choco là một thư viện viết bằng ngôn ngữ Java dung để giải quyết các bài toán thỏa mãn ràng buộc (CSP) Choco xây dựng các ràng buộc cho các biến trong bài toán thông quá các thuật toán được cài đặt và đưa ra các giá trị thỏa mãn yêu cầu hoặc không đưa ra lời giải nếu không có nghiệm thỏa mãn
Trong thư viện Choco có các thành phần chính sau:
Mô hình (model) là đối tượng trung tâm trong chương trình Choco, nó bao gồm các biến, các ràng buộc
Biến (Variables): là cái chưa biết của bài toán cần giải quyết Thư viện Choco
hỗ trợ các biến kiểu: IntegerVariable, SetVariable, RealVariable Các biến có thể giới hạn trong miền giá trị của biến đó
Trang 31Chương 3: Quy hoạch ràng buộc
Ràng buộc (Constrain): xác định mối quan hệ thỏa mãn giữa các biến và các hằng số
Lời giải (Solver) dùng để thực hiện mô hình bài toán và đưa ra một hoặc tất cả các lời giải thỏa mãn
3.2.2 Hoạt động của Choco
Model và Solver là một trong 2 thành phần chính của chương trình Choco
Model được khai báo như một đối tượng : Model m = new CPModel();
Model = Variables + Expressions + Constraints
3.2.2.1 Variable
Choco hỗ trợ khai báo các loại biến: Biến nguyên (Integer Variable), biến số thực (Real Variable), biến tập hợp (Set Variable) Các biến được add vào trong mô hình thông qua phương thức addVariable của model:
Model.addVariable(var1) hoặc Model.addVariables(var2, var3);
a Các biến đơn giản:
Choco đã xây dựng sẵn các kiểu biến đơn giản như biến số nguyên, biến số thực và biến tập hợp
Biến số nguyên: IntegerVariable n;
IntegerConstantVariable intConst = Choco.constant(10);
RealConstantVariable realConst = Choco.constant(10.0);
SetConstantVariable emptySetConst = Choco.emptySet();
c Biến biểu thức:
Biến biểu thức là biến xác định các phép toán giữa 2 biến Biến biểu thức bao gồm biến biểu thức nguyên (IntegerExpressVariable) và biến biểu thức số thực (RealExpressVariable)
Trang 32Chương 3: Quy hoạch ràng buộc
Ví dụ:
IntegerVariable v1 = Choco.makeIntVar("v1" , 1,3);
IntegerVariable v2 = Choco.makeIntVar("v2" , 1,3);
IntegerExpressionVariable v1PlusV2 = Choco.plus(v1, v2);
Để xây dựng biểu thức giữa các biến, Choco hỗ trợ các toán tử đơn giản như abs, div, ifThenElse, max, min, minus, etc
d Biến mục tiêu :
Biến mục tiêu là các biến xác định mục tiêu của nó trong ràng buộc bài toán Trong Choco có thể xác định một biến là biến mục tiêu thông qua option V_OBJECTIVE của biến đó trong hàm khởi tạo
Vi dụ: Đoạn chương trình sau tìm giá trị nhỏ nhất của hàm x = y * 20 với 20 ≤ y ≤ 50
Options.V_OBJECTIVE);
IntegerVariable y = Choco.makeIntVar("y" , 20, 50);
Các loại ràng buộc giữa 2 biến ví dụ như eq, neq, gt, leq, vv
b Ràng buộc cho 3 biến (Ternary constraint):
Choco cung cấp một số ràng buộc bao gồm 3 biến nguyên như: distanceEQ, distanceNEQ, vv
c Ràng buộc kênh (Channeling Contraints): ràng buộc lien kết giữa các
mô hình với nhau
Trang 33Chương 3: Quy hoạch ràng buộc
d Ràng buộc cụ thể hóa (Reified Contraints):
Giá trị thực của 1 ràng buộc là một Boolean, nó chỉ đúng nếu ràng buộc đó không đổi việc cụ thể hóa một ràng buộc nghĩa là đi tìm giá trị thực của ràng buộc đó Choco cung cấp một ràng buộc chung loại Reified Contraint để cụ thể hóa mọi ràng buộc trong biến Boolean để thể hiện giá trị của ràng buộc đó
e Ràng buộc chung (Global constraints): Ràng buộc chung cho nhiều biến
Một số loại ràng buộc chung:
Ràng buộc nối: domainChanneling, max, min, inverseChanneling, vv
Ràng buộc tối ưu: among, occurrence
Ràng buộc đóng gói: các ràng buộc bao gồm các hạng mục cần đóng gói mà không gây chồng chéo
3.2.2.3 Lời giải (Solver)
Solver đọc model, dùng các thuật toán được cài đặt sẵn trong thư viện hoặc kết hợp thêm để giải yêu cầu của bài toán
Ví dụ
IntegerVariable x = Choco.makeIntVar("x" , 1, 1000, Options.V_OBJECTIVE);
IntegerVariable y = Choco.makeIntVar("y" , 20, 50);
m.addConstraint(Choco.eq(x, Choco.mult(y, 20)));
s.read(m);
s.solve();
Quá trình đọc model được chia thành 2 phần: đọc các biến và đọc các ràng buộc
a Biến trong solver
Các biến được khai báo trong Model dưới dạng như IntegerVariable, SetVaribale, RealVariable Khi đọc Model, Solver lặp lại trên các biến của Model sau