Tải bản đầy đủ (.pdf) (66 trang)

Giải bài toán xếp lịch bảo vệ thạc sỹ bằng các kỹ thuật tối ưu dựa trên ràng buộc

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.34 MB, 66 trang )

BỘ GIÁO DỤC VÀ ĐÀO TẠO
TRƢỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI

----------

NGUYỄN TRỌNG HƢNG

GIẢI BÀI TOÁN XẾP LỊCH BẢO VỆ THẠC SỸ BẰNG
CÁC KỸ THUẬT TỐI ƢU DỰA TRÊN RÀNG BUỘC

LUẬN VĂN THẠC SỸ KỸ THUẬT
CHUYÊN NGÀNH: KỸ THUẬT MÁY TÍNH VÀ TRUYỀN THÔNG

NGƢỜI HƢỚNG DẪN KHOA HỌC:
TS. PHẠM QUANG DŨNG

HÀ NỘI - 2015


BẢ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
trên ràng buộc
Chuyên ngành: Kỹ thuật máy tính và truyền thông
Mã số SV:

2012B0141

Tác giả, Người hướng dẫn khoa học và Hội đồng chấm luận văn xác
nhận tác giả đã sửa chữa, bổ sung luận văn theo biên bản họp Hội đồng ngày


01/11/2015 với các nội dung sau:
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


LỜ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


LỜ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


CÁC THUẬT NGỮ VIẾT TẮT
1

Chữ viết tắt
CP

2

NP


3

CBLS

4

CSP

6

Choco

7

JOpenCBLS

8

AC3

9

BT

Tên đầy đủ
Ý nghĩa
Constraint Programming Lập trình ràng buộc, quy hoạch ràng
buộc
Non-determistic

Lớp bài toán quyết định chưa có
polynomial
thuật toán độ phức tạp đa thức để
giải
Constraint based local Tìm kiếm cục bộ dựa trên ràng buộc
search
Constraint-satisfied
Bài toán thỏa mãn ràng buộc
problem
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
Thư viện Java Open Thư viện hỗ trợ giải các bài toán tối
Constraint based local ưu tổ hợp dựa trên phương pháp tối
search
ưu cục bộE
Arc
Consistency Thuật toán AC thứ 3 được sử dụng
Algorithm #3
để giải các bài toán CSP
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.


DANH 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


DANH 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


TÓ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 NPKhó. 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.


MỤ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

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
2.2

Một số khái niệm về bài toán thỏa mãn ràng buộc .................................... 3

Ví dụ về bài toán thỏa mãn ràng buộc ....................................................... 4

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.
3.1

QUY HOẠCH RÀNG BUỘC ................................................................ 9

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

3.2

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

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


3.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.
4.1

TÌM KIẾM CỤC BỘ DỰA TRÊN RÀNG BUỘC .............................. 32

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
4.2.2

Kiểu biến nguyên VarIntLS .............................................................. 37

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


5.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
kíp

Nếu hai học viên có cùng giảng viên trong hội đồng thi phải khác
...............................................................................................................

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

45


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
kíp

Hai học viên có có cùng giảng viên trong hội đồng thì phải khác
...............................................................................................................

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
5.5

Mô đun tìm kiếm ...................................................................................... 51

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


48


Chươ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

1


Chươ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.

2


Chươ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 k giá
trị tới k biến

3


Chươ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 nkết hợp N tới một nhãn m-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 Cs để 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

4


Chươ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 n2. 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 |
}
2
 Miền giá trị: Xij = {1, 2, .., n } 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ê,

5


Chươ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-

6


Chươ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à:
 Tập biến: X = {x1, x2, ..., xn}
 Miền giá trị D = {D0, D1,.., Dn} Trong đó Di = {1, 2,.., n} với mọi

 Ràng buộc: C = {C1, C2}
o C1: {x1, x2, ..., xn} là hoán vị của tập {1, 2, .., n}. Nói cách khác xi ≠ xj
với mọi 1 ≤ i < j ≤ n
o C2: x1 = s (cho trước).
 Hàm mục tiêu: f(X) = c(x1, x2) + c(x2, x3) +...+ c (xn, x1)
 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ị nhỏ
nhất
Tên gọi bài toán người du lịch mang tính chất tượng trưng, nó dùng để gọi
chung cho các bài toán có mô hình toán học như trên mặc dù phát biểu có nội dung
khác, chẳng hạn bài toán tìm chu trình sản xuất cho một nhà máy hóa chất sao cho chi
phí xúc rửa các thiết bị (như bể chứa, ống dẫn, ...), mỗi khi chuyển từ loại hóa chất
này sang loại hóa chất khác của chu trình, là ít nhất.
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:
 Tập biến: X = {x1, x2, ..., xn}
 Miền giá trị D = {D0, D1,.., Dn} Trong đó Di = {0, 1} với mọi
 Ràng buộc: C = {C1}
o C1: thỏa mãn bất đẳng thức: p1 x1+ p2 x2 + ... + pn xn ≤ w


 Hàm mục tiêu: f(X) = v1x1+ v2x2+ ... + vnxn
7


Chươ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ả.

8


Chươ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.

9


Chươ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
có thể đạt tới.
Ví dụ: xét bài toán CSP(X, D, C) trong đó:
 X = {x,y,z}
 D(x) = {a, b, c, d}; D(y) = {e, f, g}; D(z) = {p, q}

10


Chươ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à:
|

11


Chươ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.
Ví dụ: CSP(X, D, C) trong đó:





X = {x1, x2, .., x4}
D(x1) = {1, 2, 3, 4} ; D(x2) = {1, 2, 3, 4, 5, 6, 7} ; D(x3) = {2, 3, 4, 5}
D(x4) = {1, 2, 3, 4, 5, 6}
C1 : x1 + x2 ≥ 5 ; C2 : x1 + x3 ≥ x4 ; C3 : x3 ≤ x1 + 3

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.

12


Chươ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
i = 1, 2, .., k.
Ví dụ: N = CSP(X, D, C) trong đó










X = {x1, x2, x3, x4}
D(x1) = {1, 2, 3, 4},
D(x2) = {1, 2, 3, 4, 5, 6, 7},
D(x3) = {2, 3, 4, 5},
D(x4) = {1, 2, 3, 4, 5, 6}
C1 : x1 + x2 ≥ 5;
C2 : x4 ≤ x1 + x3 ;
C3 : x3 ≤ x1 + 3

N là toàn vẹn miền giá trị với nhãn x1 = {1}, D1(x1) = {1}, D2(x2) = {4, 5, 6,
7}, D3(x3) = {2, 3, 4}, D4(x4) = {1, 2,3, 4, 5} Vì với mọi giá trị xi trong miền Di(xi) ta
đều có thể chọn các giá trị xj trong miền Dj(xj) với j ≠ i thỏa mãn các ràng buộc trên.
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.
Ví dụ : CSP(X, D, C) :
 X = {x1, x2, x3}
 D(x1) = {0,1} ; D(x2) = {0,1} ; D(x3) = {0,1},
 C1 : x1 ≠ x2 ; C2 : x2 ≠ x3 ; C3 : x3 ≠ x1 ;
Tồn tại các giá trị trong miền thỏa mãn ràng buộc ví dụ nhãn L = (<x1, 0> <x2, 1>)
thỏa mãn càng ràng buộc cho miền Y = {x1, x2} nhưng L 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}

13


Chương 3: Quy hoạch ràng buộc








D(x2) = {1, 2, 3, 4, 5, 6, 7}
D(x3) = {2, 3, 4, 5}
D(x4) = {1, 2, 3, 4, 5, 6}
c1 : x1 + x2 ≥ 5
c2 : x4 ≤ x1 + x3
c3 : x3 ≤ x1 + 3

Lời giải bộ phận x1 = {1}, D1(x1) = {1}, D2(x2) = {4, 5, 6, 7}, D3(x3) = {2, 3,
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

14


×