1. Trang chủ
  2. » Công Nghệ Thông Tin

Hướng tiếp cận quy hoạch ràng buộc trong việc giải các bài toán tối ưu

65 344 0

Đ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

Định dạng
Số trang 65
Dung lượng 1,23 MB

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

Nội dung

7 DANH SÁCH HÌNH VẼ ĐƢỢC SỬ DỤNG Hình 2-1: Ví dụ về bài toán thỏa mãn ràng buộc Hình 2-2: Thuật toán AC3 Hình 2-3: Cây tìm kiếm Hình 2-4: Các kiểu phân nhánh Hình 2-5: Phương pháp first

Trang 1

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

-

NGUYỄN QUỲNH TRANG

HƯỚNG TIẾP CẬN QUY HOẠCH RÀNG BUỘC TRONG VIỆC GIẢI CÁC BÀI TOÁN TỐI ƯU TỔ HỢP: LÝ THUYẾT VÀ CÁC CÔNG 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

Hà Nội – Năm 2015

Trang 2

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

-

NGUYỄN QUỲNH TRANG

HƯỚNG TIẾP CẬN QUY HOẠCH RÀNG BUỘC TRONG VIỆC GIẢI CÁC BÀI TOÁN TỐI ƯU TỔ HỢP: LÝ THUYẾT VÀ CÁC CÔNG CỤ

Chuyên ngành : Kỹ thuật máy tính và Truyền thông

LUẬN VĂN THẠC SĨ KỸ THUẬT

Kỹ thuật máy tính và truyền thông

NGƯỜI HƯỚNG DẪN KHOA HỌC :

1 TS PHẠM QUANG DŨNG

Hà Nội – Năm 2015

Trang 3

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 những đóng góp quý báu của thầy cô và các bạn để luận văn được hoàn thiện hơn

Hà Nội, Ngày 18 tháng 3 năm 2015

Học viên Nguyễn Quỳnh Trang

Trang 4

2

MỤC LỤC

LỜI CẢM ƠN 1

BẢNG CÁC KÝ HIỆU VIẾT TẮT 6

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

DANH SÁCH HÌNH VẼ ĐƯỢC SỬ DỤNG 7

MỞ ĐẦU 8

CHƯƠNG I: QUY HOẠCH RÀNG BUỘC 11

1.1 Bài toán thỏa mãn ràng buộc (CSP) 11

1.1.1 Định nghĩa: 11

1.1.2 Ví dụ CSP: 11

1.2 Constrains programming: 12

1.2.1 Tổng quan 12

1.2.2 Dùng các ràng buộc để tỉa không gian tìm kiếm 14

1.2.2.1 Một số khái niệm và ký hiệu: 14

1.2.2.2 Các kỹ thuật toàn vẹn (Consistency Techniques) 15

1.2.3 Tìm kiếm quay lui 18

1.2.3.1 Định nghĩa: 18

1.2.3.2 Ví dụ: 19

1.2.3.3 Chiến lược tìm kiếm: 21

CHƯƠNG 2: THƯ VIỆN CHOCO 22

2.1 Giới thiệu về thư viện Choco: 22

2.1.1 Khái niệm: 22

2.1.2 Sơ lược chương trình Choco: 22

2.2 Hoạt động của Choco: 23

2.2.1 Variable 23

2.2.1.1 Các biến đơn giản (Simple Variables) 23

2.2.1.2 Biến hằng (Constants): 23

Trang 5

3

2.2.1.3 Biến biểu thức (ExpressionVariable) : 23

2.2.1.4 Biến mục tiêu (Objective Variable): 24

2.2.2 Ràng buộc (Constraint): 24

2.2.2.1 Ràng buộc nhị phân (Binary Constraint): 25

2.2.2.2 Ràng buộc cho 3 biến (Ternary Constraint): 25

2.2.2.3 Ràng buộc kênh (Channeling Constraints): 25

2.2.2.4 Ràng buộc cụ thể hóa (Reified Constrants): 25

2.2.2.5 Ràng buộc chung (Global constraint): 26

2.2.3 Lời giải (Solver): 26

2.2.3.1 Phần biến đọc: 26

2.2.3.2 Ràng buộc đọc: 28

2.2.3.3 Chiến lƣợc tìm kiếm: 28

2.3 Các yếu tố của Choco: 29

2.3.1 Biến (Variable) 29

2.3.1.1 IntegerVariable: 29

2.3.1.2 Real Variable: 30

2.3.1.3 Set Variable: 30

2.3.2 Biểu thức (Operators): 31

2.3.2.2 cos (operator): 31

2.3.2.3 div (operator): 31

2.3.2.4 ifThenElse (operator) 32

2.3.2.5 max (operator): 32

2.3.2.6 min (operator): 33

2.3.2.7 minus (operator): 33

2.3.2.8 mod (operator): 34

2.3.2.9 mult (operator): 34

2.3.2.10 neq (operator): 35

Trang 6

4

2.3.2.11 Plus (operator): 35

2.3.2.12 power (operator): 36

2.3.2.13 scalar (operator): 37

2.3.2.14 sin (operator): 37

2.3.2.15 sum (operator): 37

2.3.3 Constraint 38

2.3.3.1 Abs: 38

2.3.3.2 allDifferent: 39

2.3.3.3 among: 39

2.3.3.4 and 40

2.3.3.5 atMostNValue 41

2.3.3.6 boolChanneling 41

2.3.3.7 distanceEQ: 42

2.3.3.8 eq 42

2.3.3.9 equation 43

2.3.3.10 Geq 44

2.3.3.11 gt 44

2.3.3.12 leq 45

2.4 Ví dụ về các bài toán được giải quyết bằng Choco: 46

2.4.1 Ví dụ 1: Bài toán con hậu N-Queens 46

2.4.2 Ví dụ 2: Bài toán Magic square 48

CHƯƠNG 3: ÁP DỤNG THƯ VIỆN CHOCO VÀO BÀI TOÁN ỨNG DỤNG: “XẾP LỊCH HỌC CHO CÁC LỚP CAO HỌC BÁCH KHOA” 52

3.1 Phát biểu bài toán: 52

3.2 Mô hình hóa với CHOCO 53

3.2.1 Mô hình 1 (stateModel 1) 53

Trang 7

5

3.2.2 Mô hình 2 (StateModel 2) Error! Bookmark not defined

3.3 Thử nghiệm 55

KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 57

TÀI LIỆU THAM KHẢO 58

PHỤ LỤC 61

Trang 8

Constraint propagation Lan truyền ràng buộc

Trang 9

7

DANH SÁCH HÌNH VẼ ĐƢỢC SỬ DỤNG

Hình 2-1: Ví dụ về bài toán thỏa mãn ràng buộc

Hình 2-2: Thuật toán AC3

Hình 2-3: Cây tìm kiếm

Hình 2-4: Các kiểu phân nhánh

Hình 2-5: Phương pháp first-fail trong lập trình Comet

Hình 3-1: Các cách khai báo biến IntegerVariable trong thư viện Choco Hình 3-2: Bài toán khai báo biến RealVariable

Hình 3-3: Bài toán khai báo biến SetVariable

Hình 4-1: Dữ liệu đầu vào của bài toán

Trang 10

8

MỞ ĐẦU

Ngày nay với sự phát triển mạnh mẽ của Công Nghệ thông tin 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 và trong xã hội 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 trong thư viện Choco 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ối ưu tổ hợp như lập lịch, lập kế hoạch

I Lý do chọn đề tài

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 tổ hợp được đánh giá là các bài toán khó NP[1, 6], đặ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 giải tối ưu nhất

Trong những năm gần đây, Quy hoạch ràng buộc nổi (Constraint Programming - 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 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 nghệ 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 tế

II Mục đích nghiên cứu của luận văn, đối tƣợng, phạm vi nghiên cứu

 Mục đích: Tìm hiểu cơ sở lý thuyết và các công cụ hướng tiếp cận quy hoạch ràng buộc để giải các bài toán tối ưu tổ hợp

Trang 11

9

 Đối tượng: Tìm hiểu một thư viện (Choco) hỗ trợ việc mô hình hóa và giải các bài toán tối ưu tổ hợp bằng quy hoạch ràng buộc

 Phạm vi: nghiên cứu lý thuyết và xây dựng chương trình áp dụng

III Tóm tắt nội dung chính

Cấu trúc luận văn gồm 3 chương:

Chương 1: Tìm hiểu về bài toán tối ưu tổ hợp (CSP) với hướng tiếp

cận quy hoạch ràng buộc (CP) Trong chương này chúng tôi trình bày định nghĩa về bài toán tối ưu tổ hợp và quy hoạch ràng buộc, đưa ra các ví dụ minh họa về bài toán này Chúng tôi nêu ra cách thức để giải

bài toán tối ưu tổ hợp hướng tiếp cận quy hoạch ràng buộc

Chương 2: Ở chương 2 chúng tôi tập trung vào tìm hiểu công cụ để

giải bài toán thỏa mãn ràng buộc Trong luận văn này chúng tôi tìm hiểu về thư viện Choco

Chương 3:Từ những kiến thức tìm hiểu về thư viện Choco, trong

chương này chúng tôi tập trung áp dụng để giải bài toán trong thực tế

Ở đây chúng tôi xây dựng bài toán ứng dụng: “ Xếp lịch học cho các

lớp cao học Bách Khoa” Qua việc xây dựng chương trình, em đã

nắm bắt được: cách thức để giải quyết các ràng buộc trong bài toán tối

ưu tổ hợp và cách viết một chương trình để thực thi công việc trên thư viện Choco

IV Phương pháp nghiên cứu

 Tìm hiểu lý thuyết qua các bài báo, công trình nghiên cứu trong và ngoài nước

Trang 12

10

 Sử dụng phần mềm Eclipse, thư viện Choco áp dụng giải một bài toán tối ưu tổ hợp cụ thể: Bài toán xếp lịch học cho các lớp cao học Bách Khoa

V Nội dung:

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

Chương 2: Thư viện Choco

Chương 3: Áp dụng thư viện Choco vào bài toán ứng dụng:“ Xếp

lịch học cho các lớp cao học Bách Khoa”

Trang 13

11

CHƯƠNG I: QUY HOẠCH RÀNG BUỘC

1.1 Bài toán thỏa mãn ràng buộc (CSP)

1.1.2 Ví dụ CSP:

- Ví dụ 1: Bài toán con hậu N-Queens

Cho bàn cờ kích thước n*n có n con hậu Cách sắp xếp n con hậu trên bàn cờ sao cho không có con nào có thể ăn lẫn nhau

 Variables: X = {Xi | i [1,n]} một biến là đại diện cho một cột và ràng buộc mỗi con hậu phải trên một cột khác nhau

 Domains: cho tất cả các biến Xi X, D(xi) = {1,2,…,n}

Trang 14

12

- Ví dụ 2: Bài toán Magic Square

Cho các số nguyên dương từ 1 đến 2n Hãy xếp các số trên vào ô vuông có kích thước n*n sao cho tổng các hang, các cột, các đường chéo chính đều bằng nhau

CP đã được áp 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) [1], lập thời khóa biểu (TimeTabling) [8], lập tuyến điều hành xe (Vehicle Routing) [9], phân công ca trực (Nurse Rostering) [10] ,… CP là sự kết hợp giữa hai thành phần cơ bản là tỉa không gian tìm kiếm (Constraint Propagation) và phân nhánh (Branching) Tỉa không gian tìm kiếm là cơ chế sử dụng các ràng buộc của bài toán để loại bỏ bớt các giá trị không phù hợp trong miền giá trị của các biến 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 không đảm bảo tìm ra được lời giải 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ới nhau và không có sự tương trợ nhau

Trang 15

13

trong quá trình tỉa miền giá trị của các biến Khi đó, chúng ta phải sử dụng các chiến lược phân nhánh để tìm kiếm lời giải Việc phân nhánh thông thường là thử lần lượt từng giá trị còn lại trong miền giá trị của một

biến nào đó và gán giá trị cho biến đó

Trang 16

14

trị 3 vì 3 + 1 = 4 mà giá trị 4 không thuộc miền giá trị của X3 Như vậy ta có miền D(x1) = {1, 2} Tiếp theo ta lại tỉa giá trị 1 của trong miền D(x3) vì không thỏa mãn ràng buộc c2

Vậy ta có miền giá trị mới của bộ biến là:

N D(x1) = {1, 2}; D(x2) = {1, 2,3}; D(x3) = { 2, 3}

Sau khi sử dụng phương pháp tỉa không gian tìm kiếm, ta tiếp tục giải bài toán bằng cách sử dụng các chiến lược phân nhánh Ta xét từng biến của x1 Với x1 =2 thì miền giá trị của x3 rỗng vì không thỏa mãn ràng buộc c3

do đó loại Với x1 = 1 ta loại bỏ được giá trị 3 trong miền D(x2) vì không thỏa mãn ràng buộc c2 Ta có miền giá trị mới của bộ biến là:

N D(x1) = {1}; D(x2) = {1, 2}; D(x3) = { 2, 3}

Với miền giá trị mới này ta tiếp tục tìm kiếm bằng cách xét từng biến của x2 Với x2 = 1 thì miền giá trị D(x3) rỗng vì không thỏa mãn ràng buộc c3 Ta loại miền giá trị này: D(x1) = {1}; D(x2) = {1}; D(x3) = {} Ta xét x2 = 2 khi đó ta tìm được lời giải của bài toán vì các giá trị biến của từng miền đều thỏa mãn cả 3 ràng buộc D(x1) = {1}; D(x2) = {2}; D(x3) = {3} là đáp án của bài toán

1.2.2 Dùng các ràng buộc để tỉa không gian tìm kiếm

1.2.2.1 Một số khái niệm và ký hiệu:

- Một bài toán thỏa mãn ràng buộc gồm 3 thành phần N (X, D,C):

X = (X1, … , Xn) là một bộ biến

D = D(X1) … D(Xn), D(xi) Z là tập các giá trị của xi, = 1,…, n

C = {C1, …, Ce} là tập các ràng buộc, biến X(cj) X, = 1,…,e

- I là một lời giải bộ phận(Instantiation) của bài toán thỏa mãn ràng buộc I là một bộ giá trị của bộ biến Y = (X1,…,Xk) là tập con của bộ biến X Các biến X1 đến Xn của bộ biến X được thay thế bởi các giá trị

Trang 17

bộ phận được gọi là toàn vẹn cục bộ (Locally consistent) khi nó có thể trở thành một lời giải cho bài toán

Với một ràng buộc c và chuỗi biến Y, ta gọi y(c) là phép chiếu của c vào Y

Ví dụ:

 N = (X, D, C)

 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)

 ((x1, 1), (x2, 4)) là một lời giải bộ phận, ((x1, 1), (x2, 4), (x3, 2), (x4, 1)) là lời giải của bài toán

 là một bộ giá trị (1,4,2,1) tương đương với (x1, x2, x3, x4) Dùng phép chiếu khi Y = (x4, x2) thì [x3]= 2, [Y]=(1,4)

1.2.2.2 Các kỹ thuật toàn vẹn (Consistency Techniques)

Mục đích là tỉa 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 bằng cách giảm không gian tìm kiếm, đưa về một bài toán thỏa mã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 nên người ta cố gắng sử dụng các kỹ thuật tỉa với từng ràng buộc một cách cục bộ

Trang 18

16

a 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

D (xi) thì sẽ tồn tại một bộ vj D (xj) ( {1, …, i – 1, i + 1, k} sao cho (v1,

b Toàn vẹn Forward Checking (Forward Checking Consistency)

Kỹ thuật toàn vẹn FC loại bỏ được ít giá trị không hợp lệ hơn nên kỹ thuật này yếu hơn kỹ thuật DC

Một ràng buộc 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 1 biến trong c chưa được gán giá và c là toàn vẹn miền giá trị

Trang 19

c Sơ đồ tổng quát thuật toán AC3

Thuật toán AC (arc consistency) là một kỹ thuật siết chặt hơn các miền giá trị của các ràng buộc Phần này mô tả sơ đồ thuật toán AC3 để đạt được toàn vẹn miền giá trị

Hình 2-2: Thuật toán AC3

Trang 20

cả các cặp (x’, c’) được đặt lại trong hàng đợi Q Khi Q rỗng thuật toán trả về true với đảm bảo rằng tất cả các miền đã được sửa đổi và tất cả các giá trị còn lại của tất

cả các biến thỏa mãn với mọi ràng buộc

Thuật toán ReviseAC3(x,c) là thuật toán tỉa các giá trị không phù hợp của x nhờ vào ràng buộc c Hàm Revise (x, c) lấy lần lượt từng giá trị v trong D(x) và đối chiếu x(c) kiểm tra sự thỏa mãn các 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ề true nếu miền D(x) thay đổi hay nói cách khác được rút gọn, miền giá trị giảm xuống, còn ngược lại hàm sẽ trả về giá trị false

1.2.3 Tìm kiếm quay lui

Phương pháp tỉa không gian tìm kiếm không đảm bảo tìm ra được lời giải thỏa mãn cho tất cả các ràng buộc Điều cần thiết ở đây là chúng ta cần phải kết hợp phương pháp tỉa không gian tìm kiếm với tìm kiếm quay lui

1.2.3.1 Định nghĩa:

Quay lui (tiếng Anh: backtracking) [6] là một chiến lược tìm kiếm lời giải

cho các bài toán thỏa mãn ràng buộc

Các bài toán thỏa mãn ràng buộc là các bài toán có một lời giải đầy đủ, trong

đó thứ tự của các phần tử không quan trọng Các bài toán này bao gồm một tập các biến mà mỗi biến cần được gán một giá trị tùy theo các ràng buộc cụ thể của bài toán Việc quay lui là để thử tất cả các tổ hợp để tìm được một lời giải Thế mạnh của phương pháp này là nhiều cài đặt tránh được việc phải thử nhiều tổ hợp chưa hoàn chỉnh, và nhờ đó giảm thời gian chạy

Về bản chất, tư tưởng của phương pháp là thử từng khả năng 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 tập hợp các

Trang 21

19

lời giải Trong quá trình 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 lựa chọn đó, ta quay lại điểm lựa chọn trước đó và thử hướng lựa chọn tiếp theo tại đó 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 đó thường được cài đặt bằng một hàm đệ quy mà trong đó mỗi thể hiện của hàm lấy thêm một biến và lần lượt gán tất cả các giá trị có thể cho biến đó, với mỗi lần gán trị lại gọi chuỗi đệ quy tiếp theo để thử các 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 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 tất

cả các hằng số để tìm các giá trị khác đã bị loại trừ bởi giá trị vừa được gán (lan

truyền ràng buộc - constraint propagation)

1.2.3.2 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 khác với các nút từ P1 … Pm Kết quả của hai bài toán là tương đương với nhau Miền giá trị của các biến thuộc Pi không lớn hơn so với P0 Phương pháp phổ biến của tìm kiếm quay lui là ta tìm kiếm theo hình cây hay nói cách khác là cây tìm kiếm (Search tree) Với nút gốc là bài toán CSP ban đầu, tiếp đến là các nút của bài toán CSPs mới Nút lá là lời giải thỏa mãn bài toán (Solutions) 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á là Failure nếu một miền giá trị của các biến rỗng

Trang 22

20

Hình 2-3: Cây tìm kiếm

Có 2 kiểu phân nhánh (Branching): phân nhánh theo từng biến tức

là ta gán từng giá trị biến trong miền giá trị cho mỗi nhánh cây (x1=1, x2=

2,…, xn= k), kiểu thứ hai là phân nhánh bằng cách chia ra từng miền giá trị

Hình 2-4: Các kiểu phân nhánh

Trang 23

21

1.2.3.3 Chiến lƣợc tìm kiếm:

N Chọn biến (Variable Selection): 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

 Dom heuristic: chọn biến có miền giá trị nhỏ nhất

 Deg heuristic: chọn biến tham gia nhiều ràng buộc nhất

 Dom+deg heuristic: kết hợp 2 phương pháp trên

 Dom/deg heuristic: chọn biến có thương nhỏ nhất

N Chọn giá trị (Value selection):

 Best-first principle: Chọn những giá trị có khả năng đúng nhiều nhất tức là giá trị đó là lời giải thỏa mãn bài toán

 Possibilities:

 Thử những giá trị theo thứ tự tăng dần

 Thử những giá trị theo thứ tự giảm dần

 Thử những giá trị nằm ở giữa miền giá trị

N Ví dụ:

Hình 2-5: Phương pháp first-fail trong ngôn ngữ Comet [5]

Trang 24

22

CHƯƠNG 2: THƯ VIỆN CHOCO

2.1 Giới thiệu về thư viện Choco:

Hiện nay có rất nhiều thư viện cho quy hoạch ràng buộc như Gecode [12], MiniZinc [13], CHOCO [7] … Chúng tôi tập trung vào tìm hiểu một trong

số các thư viện này đó là CHOCO, vì nó được phát triển bằng Java, ngôn ngữ lập trình được dùng rất phổ biến để phát triển các ứng dụng công nghiệp

2.1.1 Khái niệm:

Choco là một thư viện trong Java dùng để giải quyết các bài toán thỏa mãn ràng buộc (CSP) và Constraint programming Choco xây dựng các ràng buộc cho các biến trong bài toán thông qua các thuật toán được cài đặt và đưa ra các nghiệm thỏa mãn yêu cầu hoặc không đưa ra lời giải nếu bài toán không có nghiệm thỏa mãn

2.1.2 Sơ lược chương trình Choco:

 Mô hình (model) là một đối tượng trung tâm trong chương trình Choco, nó bao gồm các biến (Variables) và các ràng buộc (Constraint)

 Biến (Variables) là cái chưa biết của vấn đề cần giải quyết, nó gồm IntegerVariable, SetVariable và RealVariable trong Choco Các biến

có thể được cho bởi các giá trị, các miền của từng biến, hoặc cận trên, cận dưới của nó

 Ràng buộc (Constraint) xác định các quan hệ được 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 của bài toán và đưa ra một hoặc tất cả lời giải thỏa mãn các ràng buộc của bài toán

Trang 25

23

2.2 Hoạt động của Choco:

Model cùng với Solver là một trong hai 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 model = new CPModel()

- Model = Variable + Expressions + Constraints

2.2.1 Variable

Một biến được xác định bởi một loại: biến nguyên (integer), biến số thực (real), biến tập hợp (set variable), tên và miền giá trị của biến đó Khi tạo một biến đơn giản , lập vài tùy chọn để quy định miền (ví dụ số hoặc ràng buộc) trong Solver Việc lựa chọn miền cần phải được xem xét kỹ càng Hiệu quả của bộ giải toán thường phụ thuộc vào việc chọn kiểu miền đúng đắn

- Các biến được thêm vào trong mô hình:

Model.addVariable(var1);

Model.addVariables(var2,var3);

2.2.1.1 Các biến đơn giản (Simple Variables)

Gồm các biến: IntegerVariable, RealVariable, SetVariable

2.2.1.2 Biến hằng (Constants): là các biến không đổi trong bài toán

Hằng số là một biến có miền cố định Một IntegerVariable được khai báo với một giá trị duy nhất cũng được tự động coi là một hằng số

Ví dụ:

IntegerConstantVariable c10 = Choco.constant(10);

RealConstantVariable c0dot0 = Choco.constant(0.0);

SetConstantVariable c0_12 = Choco.constant(new int[]{0,12}); SetConstantVariable cEmpty = Choco.emptySet();

2.2.1.3 Biến biểu thức (ExpressionVariable):

Biến biểu thức là biến xác định phép toán giữa hai biến gồm:

IntegerExpressionVariable và RealExpressionVariable

Trang 26

24

Ví dụ:

IntegerVariable v1 = Choco.makeIntVar(“v1”,1,3);

IntegerVariable v2 = Choco.makeIntVar(“v2”,1,3);

IntegerExpressionVariable v1Andv2 = Choco.plus(v1,v2);

Để xây dựng biểu thức các biến ta sử dụng các lệnh đơn giản Mỗi lần trả về một đối tượng ExpressionVariable:

o Integer: abs, div, ifThenElse, max, min, minus, mod, mult, neg, plus, power, scalar, sum

o Real: cos, minus, mult, plus, power, sin

2.2.1.4 Biến mục tiêu (Objective Variable):

Là biến xác định mục tiêu của nó trong ràng buộc của bài toán Bạn có thể xác định trực tiếp một biến mục tiêu bằng việc sử dụng tùy chọn Options.V_OBJECTIVE

Ví dụ:

Constraint c1 = Choco.neq(v1,v2); // v1,v2 là các biến v1 # v2 Model.addConsstraint(c1); // Thêm ràng buộc c1 vào mô hình đang xét

Hoặc có thể gộp: model.addConstraint(Choco.neq(v1,v2));

Trang 27

25

2.2.2.1 Ràng buộc nhị phân (Binary Constraint): ràng buộc bao

gồm 2 biến số nguyên

Ví dụ: eq, geq, gt, leq, lt, neq

2.2.2.2 Ràng buộc cho 3 biến (Ternary Constraint): ràng buộc bao

gồm 3 số nguyên

Ví dụ: distanceEQ, distanceNEQ, distanceGT, distanceLT …

2.2.2.3 Ràng buộc kênh (Channeling Constraints): ràng buộc liên

kết giữa các mô hình với nhau

2.2.2.4 Ràng buộc cụ thể hóa (Reified Constrants):

Giá trị thực của một 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 nó

Choco cung cấp một ràng buộc chung loại reifiedConstraint để cụ thể hóa mọi ràng buộc trong biến Boolean thể hiện giá trị thực của nó

Constraint reifiedConstraint(IntegerVariable b, Constraint c);

Constraint reifiedConstraint(IntegerVariable b, Constraint c1, Constraint c2);

Để xây dựng cấu trúc phức tạp của một ràng buộc, Choco cung cấp những ràng buộc cụ thể để xây dựng sao cho gọn hơn:

 and, or, implies, ifOnlyIf, IfThenElse, not, nand, nor

Ví dụ biểu thức sau: ((x = 10 * |y| (z )) alldifferent(a,b,c)

Trang 28

26

Có thể biểu diễn trong Choco là:

Constraint exp = ifOnlyIf(or( eq(x, mult(10, abs(y))), leq(z,9)), alldifferent(new IntegerVariable[]{a,b,c}));

2.2.2.5 Ràng buộc chung (Global constraint): ràng buộc chung cho

nhiều biến trong một ràng buộc

- Ràng buộc nối: ràng buộc liên kết tập hợp các biến (nhiều-nhiều) hoặc lập chỉ mục một trong số các biến (Một – Nhiều)

 One-to-many: domainChanneling, max, min

 Many-to-many: inverseChanneling, inverseSet, sorting, pack

- Ràng buộc tối ưu: ví dụ ràng buộc lọc chi phí

 One cost: among, occurrence, equation, tree

 Several costs: globalCardinality, multiCostRegular

- 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

Ví dụ ràng buộc nguồn:

 Packing problems: equation, knapsackProblem

 Scheduling problems: disjoint (tasks) disjunctive, cumulative

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 hoặc kết hợp thêm để đưa ra lời giải thỏa mãn yêu cầu bài toán

Solver solver = new CPSolver(); // Khai báo đối tượng lời giải Solver.read(model); // Đọc mô hình cần giải quyết Solver.Solver(); // Tìm kiếm lời giải và trả về kết quả

Việc đọc được chia làm hai phần: Phần biến đọc và phần ràng buộc đọc

2.2.3.1 Phần biến đọc:

Các biến được khai báo trong một Model theo một loại nhất định như IntegerVariable, SetVariable, RealVariable Khi đọc model, Solver lặp lại trên các biến model sau đó tạo ra các biến Solver tương ứng và các cấu trúc

dữ liệu tên miền theo các loại trên

Trang 29

27

Biến Model và biến Solver là các đối tượng riêng biệt Các biến Model sử dụng Varible còn Solver dùng Var Một biến model được xác định bằng một đại diện trừu tượng của miền ban đầu trong khi một biến Solver được tóm gọn là một đại diện rời rạc của tên miền và duy trì trạng thái hiện tại của nó trong tìm kiếm Do đó, chúng ta không thể tiếp cận trực tiếp vào một giá trị biến từ một biến model nhưng chúng ta lại có thể tiếp cận trong trường hợp là biến Solver tương ứng Các biến Solver là ẩn danh nhưng có thể tiếp cận được từ các biến model tương ứng bằng cách sử dụng getVar(Variable v) và getVar (Variable… v)

a IntDomainVar

Đối với các biến số nguyên, solver Intdomain Var là đối ứng với model IntegerVariable Phương pháp getVar (IntegerVariable var) và getVar (IntegerVariable… vars) của Solver trả về đối tượng IntDomainVar và IntDomainVar[] tương ứng với var và vars:

IntegerVariable x = Choco.makeEnumIntVar(“x”, 1, 100); // model variable IntDomainVar xOnSolver = solver.getVar(x); // solver variable

b SetVar

Đối với các biến tập hợp, Solver SetVar là đối ứng với model SetVariable Các phương pháp getVar (SetVariable var) và getVar (SetVariable… vars) của Solver trả về các đối tượng SetVar và SetVar[] tương ứng với var và vars:

SetVariable x = Choco.makeBoundSetVarv(“x”, 1, 40); //model variable SetVar xOnSolver = solver.getVar(x); // Solver Variable

c RealVar;

Đối với các biến thực, Solver RealVar là đối ứng tới model RealVariable

RealVariable x = Choco.makeRealVar(“x”, 1.0, 3.0); // model variable

RealVar xOnSolver = solver.getVar(x); // Solver variable

Trang 30

28

2.2.3.2 Ràng buộc đọc:

Một khi các biến solver đã được tạo ra khi đọc model, solver lặp lại trên những ràng buộc của model và tạo ra các đối tượng Sconstraint bằng cách dùng phương pháp gọi makeConstraint của đối tượng ConstraintManager kết hợp với các loại ràng buộc model Ở bước này, có thể tạo ra các biến Solver phụ và các ràng buộc Sau đó, các ràng buộc được tạo

ra được thêm vào mạng ràng buộc bên trong

Mỗi ràng buộc solver tóm lược một thuật toán lọc mà trong quá trình tìm kiếm khi một bước lan truyền xuất hiện hoặc khi một sự kiện bên ngoài (VD xóa giá trị hoặc thay đổi ràng buộc) xảy ra ở một số biến của ràng buộc

Người ta có thể tiếp cận trình bày Solver của một model ràng buộc bằng cách sử dụng Solver: getCstr (Constraint c)

2.2.3.3 Chiến lƣợc tìm kiếm:

Một thành phần quan trọng của bất kỳ phương pháp ràng buộc là một chiến lược tìm kiếm thông minh Trong cách tiếp cận nhánh, ràng buộc hay thụt lùi, tìm kiếm được tổ chức như một cây liệt kê trong đó mỗi nút tương ứng với một không gian con của tìm kiếm và mỗi nút con là một nhánh của không gian nút lớn Cây được xây dựng dần dần bằng cách áp dụng một loạt các chiến lược phân nhánh mà xác định việc chia không gian tại mỗi nút như thế nào cũng như các nút con được tạo ra sao Chiến lược phân nhánh đóng vai trò của việc đạt được các mục tiêu trung gian trong lập trình logic Phần này trình bày cách xác định chiến lược tìm kiếm riêng của bạn trong Choco

Các phương pháp tiếp cận ràng buộc, nhánh hay quay lui, trong lập trình ràng buộc phát triển theo dạng cây liệt kê trong một thể thức DFS (Tìm kiếm ưu tiên theo chiều sâu):

1 Đánh giá 1 nút: chạy lan truyền

2 Nếu thất bại xảy ra hoặc nếu không gian tìm kiếm không thể tách rời sau đó Backtrack: đánh giá các nút đang chờ tiếp theo

Trang 31

Ngoài ra, các phổ biến để chia không gian tìm kiếm trong thuật toán dựa trên CP/ B&B đó là gán một biến cho một giá trị hoặc ngăn cấm việc gán này.Choco cung cấp một chiến lược phân nhánh và các công cụ để dễ dàng tùy chỉnh biến và giá trị lựa chọn trong chiến lược Tuy nhiên, Choco

có khả năng thực hiện nhiều chiến lược phân nhánh phức tạp hơn (ví dụ như phân nhánh ràng buộc hoặc phân nhánh lưỡng phân)

2.3 Các yếu tố của Choco:

2.3.1 Biến (Variable)

2.3.1.1 IntegerVariable: là biến mang giá trị nguyên

Hình 3-1: Cách khai báo biến IntegerVariable trong thư viện Choco

Trang 32

30

Options:

 Options V_ENUM: Solver tạo ra miền liệt kê cho biến

 Options V_BOUND: Solver tạo ra miền bị chặn cho biến

 Options V_LINK: Solver tạo ra miền liên kết danh sách các biến

 Options V_OBJECTIVE: xác định các biến để tối ưu hóa

Ví dụ:

IntegerVariable ivar1 = makeIntVar(“ivar1”, -10, 10);

IntegerVariable ivar2 = makeIntVar(“ivar2”, 0, 10000, Options V_BOUND,

Options V_NO_DECITION);

IntegerVariable bool = makeBooleanVar(“bool”);

2.3.1.2 Real Variable: là biến số thực

Cấu trúc:

makeRealVar (String name, double lowB, double uppB, String… options );

Hình 3-2: Bài toán khai báo biến RealVariable

2.3.1.3 Set Variable: biến tập hợp:

Cấu trúc:

Ví dụ:

Hình 3-3: Bài toán khai báo biến SetVariable

Ngày đăng: 26/07/2017, 21:00

Nguồn tham khảo

Tài liệu tham khảo Loại Chi tiết
[6] F.Rossi, P.VanBeek and T.Walsh “Handbook of Constraint Programming”, Elsevier, 2006 Sách, tạp chí
Tiêu đề: Handbook of Constraint Programming
[2] Association for Constraint Programming. http://www.a4cp.org/ Link
[3] Journal of Constraints. http://link.springer.com/journal/10601 Link
[4]International Conference on Principles and Practice of Constraint Programming. http://www.a4cp.org/events/cp-conference-series [5] Comet. Dynadec Link
[7] Choco_doc_2.1.5 http://choco.mines-nantes.fr/ Link
[1] Joseph Y-T. Leung. Handbook of Scheduling. Chapman & Hall/crc computer and information science series, 2000 Khác
[8]. Michael Marte. Models and Algorithms for School Timetabling – A Constraint- Programming Approach. PhD thesis, 2002 Khác
[9]. Bruce Golden, S. Raghavan, Edward Wasil. The vehicle routing problem: latest advances new challenges, 2008 Khác
[10]. Mohammed Hadwan, Masri Ayob, Naser R.Sabar, Roug Quc. A harmony search algorithm for nurse rostering problems. Information Sciences, 2013, Pages 126-140 Khác

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