THUẬT TOÁN CHÍNH XÁC

Một phần của tài liệu một số thuật toán giải bài toán phủ tập hợp và ứng dụng (Trang 51 - 76)

2.4.1. Ví dụ về thuật toán nhánh cận

Ví dụ 2.4. Xét bài toán qui hoạch nguyên tuyến tính sau:

1 2 min x x (26) 1 2 2x 11x 38 1 2 7 x x (27) 1 2 4x 5x 5 1, 2 0 x x (28) 1, 2 x x nguyên (29)

Bước 0. Giải bài toán (26)-(28), tìm đƣợc nghiệm 0 4 5

4 , 2 9 9

X . Cận dƣới

0 0

(G ) f X( ) 7 7. Phƣơng án 0

X không thỏa mãn điều kiện nguyên (29). Chúng ta chia 0 G thành hai tập hợp 0 1 1 1 2 G G G , trong đó 1 0 1 | , 1 4 G X X G x 1 0 2 | , 1 5 G X X G x

Bước 1. Giải hai bài toán quy hoạch tuyến tính: cực tiểu (26) trên hai tập hợp

1 1

G và 1 2

G . Trong bài toán đầu tiên cực tiểu trên miền 1 1 G đạt tại điểm 4, 2 8 11 , do đó 1 1 8 ( ) 6 6 11 G . Tập 1 2 G là trống nên 1 2 (G ) . Chọn 1 1 G để chia nhánh ta đƣợc 1 1 2 1,1 | 1, 2 2 1 G X X G x G 1 1 2 1,2 | 1, 2 3 2 G X X G x G

Số hóa bởi Trung tâm Học liệu http://www.lrc-tnu.edu.vn/

1 2 2 3

G G

Bước 2. Giải các bài toán qui hoạch tuyến tính:

1) Tìm cực tiểu (26) trên 2 1 G đƣợc 2 1 2 1 3 2 ,3 ' 5 5 2 2 4 X G 2) Tìm cực tiểu (26) trên 2 2 G đƣợc 2 2 2 1 1 2 ,3 ' 5 5 2 2 2 X G 3) 1 2 2 3 G G , 2 3 '(G ) Chọn 2 1 G để chia nhánh: 2 2 3 1,1 | 1, 1 3 1 G X X G x G 2 2 3 1,2 | 1, 1 4 2 G X X G x G Đánh số lại 2 3 2 3 2 3 2 3 1,1 1, 1,2 2, 2 3, 3 4 G G G G G G G G

Bước 3. Giải các bài toán qui hoạch tuyến tính:

1) Tìm cực tiểu (26) trên 3 1 G đƣợc 3 1 3 3, 2 ' 5 5 1 X G 2) 3 3 2 '( 2) G G 3) Tìm cực tiểu (26) trên 3 3 G đƣợc 3 3 3 2 1 1 2 ,3 ' 5 5 3 2 2 2 X X G 4) 3 2 3 4 3 '( 4) G G G Phƣơng án 3 3, 2 1

X X thỏa mãn điều kiện nguyên (29). Đồng thời

3 3 3 3

1 2 3 4

Số hóa bởi Trung tâm Học liệu http://www.lrc-tnu.edu.vn/

Vậy phƣơng án tối ƣu của bài toán ban đầu là X (3, 2). Ta có cây phân nhánh sau:

Hình 2.7. Kết quả cây phân nhánh Ví dụ 2.5. Phƣơng pháp nhánh cận giải bài toán ngƣời du lịch

Phát biểu bài toán: Có n thành phố, đánh số từ 1 đến n. Xuất phát từ một trong n thành phố này, chẳng hạn thành phố 1, một ngƣời du lịch muốn tới thăm n-1 thành

phố còn lại, mỗi thành phố đúng một lần, rồi trở về thành phố xuất phát. Cho biết ij

c là chi phí (hoặc là khoảng cách) đi từ thành phố i đến thành phố j. Giả thiết

ij 0, , ij

c i j c , với mọi i (có thể cij cji). Hãy tìm hành trình với tổng chi phí nhỏ nhất?

Số hóa bởi Trung tâm Học liệu http://www.lrc-tnu.edu.vn/

Ký hiệu ma trận ij ij , 1,..., , 1

i j n

C c x hoặc 0 tùy thuộc ngƣời du lịch có đi từ thành phố i tới thành phố j hay không. Khi đó bài toán ngƣời du lịch có thể viết dƣới

dạng: ij ij 1 1 min n n i j c x ij 1 1, 1, 2,..., n j x i n ij 1 1, 1, 2,..., n i x j n ij 0;1 , , 1, 2,..., x i j n ij 1, 2 i j n i j u u nx n

Trong đó ui nhận giá trị nguyên hay thực.

Tập tất cả các phƣơng án của bài toán (tập S0) sẽ đƣợc chia nhỏ dần thành nhiều tập con rời nhau, mỗi tập con bao gồm những phƣơng án đi qua và không đi qua một số cặp thành phố nhất định sẽ đƣợc ấn định dần trong quá trình giải bài toán. Mỗi tập con này đƣợc gắn với một số thực không âm, biểu thị cận dƣới của chi phí đối với mọi phƣơng án thuộc tập này. Tập con Sk có cận dƣới nhỏ nhất sẽ có nhiều khả năng chứa phƣơng án tối ƣu, vì thế tập Sk sẽ đƣợc chọn để chi nhỏ tiếp (phân nhánh). Khi phân nhánh Sk Sk1 Sk2 sao cho một tập Sk2 bắt buộc đi qua thêm một cặp thành phố xrs nào đó, một tập Sk1 không đƣợc đi qua cặp thành phố xrs. Khi một

tập con nào đó chỉ gồm một phƣơng án duy nhất thì ta sẽ tính đƣợc chi phí C của

phƣơng án này và nhờ đó có thể cải tiến đƣợc phƣơng án tốt nhất hiện biết, giá trị hàm mục tiêu của bài toán ứng với phƣơng án tốt nhất hiện biết gọi là giá trị kỷ lục. Tập con nào có cận dƣới lớn hơn hay bằng giá trị kỷ lục sẽ bị loại (không cần xem xét tiếp nữa), vì chắc chắn tập này không chứa phƣơng án nào tốt hơn phƣơng án tốt nhất hiện biết. Quá trình giải kết thúc khi không còn tập con nào cần xem xét tiếp. Khi đó, phƣơng án tốt nhất hiện biết sẽ là phƣơng án tối ƣu của bài toán. Tính hữu hạn của thuật toán đƣợc suy ra từ tính hữu hạn của tập S0.

Số hóa bởi Trung tâm Học liệu http://www.lrc-tnu.edu.vn/

Giải bài toán ngƣời du lịch với ma trận chi phí (không đối xứng) nhƣ sau

Hình 2.8. Ma trận chi phí của bài toán ngƣời du lịch

Thực hiện theo ý tƣởng trên ta có đƣợc quá trình phân nhánh cho trong hình dƣới

Hình 2.9. Cây phân nhánh giải bài toán ngƣời du lịch 2.4.2. Thuật toán chính xác giải bài toán SCP

Thuật toán chính xác hiệu quả nhất đƣợc đề cập để giải quyết bài toán SCP là thuật toán nhánh-cận, trong đó những cận dƣới đƣợc tính toán theo phƣơng pháp LP nới lỏng của bài toán SCP, có thể thực hiện bằng thuật toán heuristic đối ngẫu. Đặc biệt là tất cả thuật toán đều đƣợc test bằng các mẫu lấy từ thƣ viện OR. Lý do chính

Số hóa bởi Trung tâm Học liệu http://www.lrc-tnu.edu.vn/

dẫn đến sự thành công của hƣớng tiếp cận này là dựa vào thực nghiệm, mặc dù cận dƣới LP không phải luôn luôn đúng cho những trƣờng hợp này, thật khó để có thể nhận đƣợc những cận dƣới chắc chắn bằng các phƣơng thức thay thế chỉ dựa trên kinh nghiệm qua kết quả tính toán. Điều này giải thích lý do mà các gói ILP có chung mục đích cạnh tranh nhƣ là CPLEX hoặc MINTO, những gói ứng dụng này đều dựa trên thuật toán nhánh cận kết hợp với giải pháp LP nới lỏng cho một nút của cây phân nhánh, và bao gồm rất nhiều cài đặt bổ sung nhằm đẩy nhanh việc tối ƣu hóa các phần tử của giải pháp LP sau nút gốc.

Kế tiếp chúng ta sẽ mô tả vài chi tiết về trạng thái kỹ thuật của thuật toán chính xác giải bài toán SCP. Kỹ thuật này đã đƣợc trích dẫn bởi Nobili và Sassano [16], theo kiến thức của chúng tôi, kỹ thuật này cố gắn đạt đƣợc cận dƣới chặt chẽ hơn là giá trị LP nới lỏng bằng cách sử dụng bƣớc cắt đặc biệt, nhằm tận dụng cấu trúc đa diện SCP. Mặc dù các thuật toán này đã đƣợc thử nghiệm trên những trƣờng hợp tƣơng tự nhƣ các đề xuất đã xem xét, báo cáo của các tác giả chỉ cho biết số nút mà không tính đƣợc thời gian mà phƣơng thức của họ thực hiện.

Hƣớng tiếp cận của các tác giả Beasley [4] đề xuất giải quyết bài toán LP nới lỏng của SCP để tối ƣu nút gốc của cây phân nhánh, khi đó những nút khác nút gốc sẽ đƣợc tính cận dƣới bằng cách sử dụng hàm Lagrangian nới lỏng kết hợp với tối ƣu dƣới gradient, bắt đầu với vectơ nhân tử liên quan đến các nút cha. Tại nút gốc, những vectơ nhân tử Lagrangian gần tối ƣu đƣợc tính bằng một thủ tục tăng đối ngẫu theo sau bởi một thủ tục dƣới gradient. Sau khi bài toán đã đƣợc giảm kích thƣớc bằng cách áp dụng giá trị cố định Lagrangian, và LP nới lỏng của bài toán đƣợc giảm đƣợc giải quyết để tối ƣu bằng phƣơng thức đối ngẫu rút gọn. Rõ ràng là giải pháp LP nới lỏng nhận đƣợc những thông tin không thuận lợi có đƣợc từ việc tính toán những nhân tử Lagrangian gần tối ƣu. Vì chỉ có lý do là việc tính những nhân tử này là một bài toán LP nhỏ cái mà đƣợc giải quyết sau khi làm giảm. Những giải pháp khả thi đƣợc tính bằng thuật toán Heuristic tham lam rút gọn và ƣu thế của thủ tục này là áp dụng việc làm giảm cả về số dòng lẫn số cột. Nguyên tắc

Số hóa bởi Trung tâm Học liệu http://www.lrc-tnu.edu.vn/

nhánh lựa chọn những dòng không phủ với nhân tử Lagrangian cao nhất, và cố định giá trị từ 0 đến 1 tƣơng ứng với biến liên quan đến cột có giá trị Lagrangian nhỏ nhất phủ những dòng đƣợc chọn.

Một cải tiến thuật toán của Beasley [4] đƣợc trình bày bởi Beasley và Jornsten trong [7]. Điểm khác biệt chính so với thuật toán gốc có liên quan đến việc thêm những ràng buộc. Hai trong số những ràng buộc này đƣợc thêm vào để loại trừ giải pháp khả thi nhất đƣợc tìm thấy vào thời điểm cuối của thủ tục tối ƣu dƣới gradient tại nút gốc: chúng ràng buộc rằng không phải tất cả các cột trong giải pháp này đƣợc chọn, và ít nhất một cột không nằm trong giải pháp này phải đƣợc chọn. Sau khi thêm những ràng buộc này ta sẽ giải quyết bài toán LP nới lỏng nhƣ trong [4], sau đó lớp cắt phân số Gomory, kết hợp với giải pháp LP phân số đƣợc thêm vào. Những ràng buộc này đƣợc xử lý bởi thủ tục dƣới gradient tối ƣu áp dụng tại những nút khác nút gốc. Một sử cải tiến khác đƣợc trình bày trong [4] liên quan đến việc sử dụng thuật toán heuristic Lagrangian của [5] và một chiến lƣợc phân nhánh mới. Sau cùng ta tính toán vectơ nhân tử u tốt nhất tại mỗi nút theo giải pháp Lagrangian tƣơng ứng, xác định dòng i với max( | ( )s u ui i|), trong đó s ui( ) là hàm dƣới gradient

liên quan với dòng i nhƣ đƣợc xác định trong công thức (21), và những nhánh đƣợc

cố định từ 0 đến 1, tƣơng ứng, biến liên quan với cột j Ji sao cho x uj( ) 1 và giá trị của xj là lớn nhất trong giải pháp LP tại nút gốc.

Thuật toán chính xác giải quyết bài toán SCP gần đây nhất đƣợc đề xuất bởi Balas và Carera [3]. Thuật toán này dựa vào việc nhúng thủ tục dƣới gradient động vào trong một lƣợc đồ nhánh-cận, và áp dụng thủ tục dƣới gradient tối ƣu tại mỗi nút của nhánh. Hai lƣợc đồ phân nhánh dựa trên thông tin đối ngẫu liên quan đến

nhân tử Lagrangian đƣợc sử dụng. Nhớ rằng vectơ nhân tử Lagrangian u tốt nhất

đƣợc tính bởi phƣơng thức của Balas và Carrera luôn luôn tƣơng ứng với một giải pháp đối ngẫu khả thi, hay là ở đây không có những cột mang giá trị Lagrangian âm. Lƣợc đồ nhánh đầu tiên định nghĩa một tập 0

Số hóa bởi Trung tâm Học liệu http://www.lrc-tnu.edu.vn/

Lagrangian zero và tập 0

J N của những cột j sao cho tồn tại ít nhất một dòng i

với ui 0mà 0

i

J N j . Nếu J , nhánh của nó sẽ đƣợc cố định từ 0 đến 1,

tƣơng ứng, biến liên quan với cột j J cái mà giá trị lớn nhất 0

ax i : j

m J N i I .

Nếu J lƣợc đồ nhánh thứ hai đƣợc áp dụng. Lƣợc đồ này xác định dòng i sao

cho 0

i i

J N J với giá trị nhỏ nhất 0

|Ji N |, và trên nhánh thứ hai thay thế dòng i

bằng một dòng mới i’ với 0

' i i J J N , nhƣ vậy những dòng i đƣợc phủ chỉ bởi những cột trong 0 i J N . 2.5. TỔNG KẾT CHƢƠNG

Trong chƣơng này, chúng ta đã biết đƣợc mô hình toán học của bài toán phủ tập hợp và các bài toán liên quan. Từ những kết quả lý thuyết về bài toán phủ tập hợp cho thấy những ứng dụng của bài toán này trong thực tế là rất cần thiết. Vì vậy, việc nghiên cứu, cải tiến những thuật toán giải quyết bài toán SCP luôn là đề tài mà nhiều nhà nghiên cứu quan tâm. Trong chƣơng tiếp theo chúng tôi sẽ trình bày ứng dụng của mình để giải quyết bài toán SCP trong thực tiễn dựa trên những thuật toán đã đƣợc trình bày.

Số hóa bởi Trung tâm Học liệu http://www.lrc-tnu.edu.vn/

Chƣơng 3. CÀI ĐẶT CHƢƠNG TRÌNH VÀ ỨNG DỤNG

Đã có nhiều ứng dụng quan trọng sử dụng mô hình toán học của bài toán phủ tập hợp. Một trong số đó là ứng dụng phân lịch trực bác sĩ, ứng dụng lập kế hoạch sản xuất, … Từ những những kiến thức mà chúng tôi đã nghiên cứu về mô hình toán học của bài toán phủ tập hợp và các phƣơng pháp giải bài toán phủ tập hợp. Trong chƣơng này chúng tôi sẽ ứng dụng thuật toán tham lam để giải quyết bài toán phân lịch trực bác sĩ.

3.1. BÀI TOÁN PHÂN LỊCH TRỰC BÁC SĨ 3.1.1.Phát biểu bài toán 3.1.1.Phát biểu bài toán

Một bệnh viện A chuyên cung cấp các dịch vụ cấp cứu tại nhà. Bệnh viện này có n bác sĩ có trình độ chuyên môn cao, trong đó mỗi bác sĩ có khả năng thực hiện một vài dịch vụ cấp cứu nào đó. Chúng ta biết rằng với mỗi bác sĩ khi thực hiện một dịch vụ cấp cứu thì bác sĩ đó sẽ đƣợc bệnh viện trả thêm một mức thu nhập ngoài lƣơng. Với m danh sách các dịch vụ cấp cứu có sẵn, bệnh viện A cần phải sắp lịch trực cho n bác sĩ để phục vụ cho m dịch vụ cấp cứu sao cho chi phí phải trả là nhỏ nhất.

Bảng 3.1. Danh sách các bác sĩ và các dịch vụ mà bác sĩ đó có thể thực hiện trong trƣờng hợp tổng quát

Dịch vụ Cấp cứu Bác sĩ A Bác sĩ B Bác sĩ C Bác sĩ D Bác sĩ E Bác sĩ F Dịch vụ 1   Dịch vụ 2   Dịch vụ 3   Dịch vụ 4   Dịch vụ 5    Dịch vụ 6 

Số hóa bởi Trung tâm Học liệu http://www.lrc-tnu.edu.vn/

Ta có thể biểu diễn bài toán trên thành ma trận liên thuộc m n

A trong đó

aij=1 nếu bác sĩ j có thể thực hiện dịch vụ cấp cứu i và aij=0 trong trƣờng hợp ngƣợc lại. Ta gọi cj với j=1, …, n là mức thu nhập ngoài lƣơng mà bệnh viện A phải trả cho bác sĩ j sau khi hoàn thành dịch vụ cấp cứu.

Ta đặt biến xj=1 nếu bác sĩ j là đang thực hiện dịch vụ cấp cứu và bằng 0 trong trƣờng hợp ngƣợc lại.

Ta cần tìm

1 min n j j

j c x thỏa điều kiện ràng buộc: ij 1 1, 1,..., , {0,1}, 1,..., n j j j a x i m x j n

3.1.2.Cài đặt thuật toán tham lam

Thuật toán tham lam có đƣợc một giải pháp tối ƣu cho một bài toán bằng cách thực hiện một chuỗi các lựa chọn. Đối với mỗi quyết định chỉ ra trong thuật toán, sự lựa chọn này dƣờng nhƣ tốt nhất tại thời điểm đƣợc chọn. Chiến lƣợc phỏng đoán này không luôn tạo ra giải pháp tối ƣu. Tuy nhiên việc tìm ra một giải pháp theo phƣơng pháp tham lam luôn cho kết quả nhanh với độ phức tạp tính toán thấp.

Trong phần này chúng tôi trình bày phƣơng pháp sử dụng thuật toán tham lam để giải quyết một dạng ứng dụng của bài toán phủ tập hợp đó là bài toán phân lịch trực cho bác sĩ trong bệnh viện A đã đƣợc nêu ở phần phát biểu bài toán. Giải thuật tham lam đƣợc phát biểu nhƣ sau:

Gọi Sj,j 1,...,n là tập các dịch vụ mà bác sĩ j có thể thực hiện, biến xj dùng để xác định bác sĩ j có đang thực hiện dịch vụ cấp cứu hay không.

Input: Cho tập m danh sách các dịch vụ cấp cứu U e e1, 2,...,em , Tập danh sách các dịch vụ mà n bác sĩ có thể thực hiện: S S1, 2,...,Snvà danh sách các chi phí phải trả cj, j 1,...,n.

Output: Vectơ x 0,1 k

Thuật toán:

Số hóa bởi Trung tâm Học liệu http://www.lrc-tnu.edu.vn/

2.While C U do

(a) Tìm tập các dịch vụ có chi phí phải trả là nhỏ nhất, ta gọi là S. (b) Đặt xs=1và với mỗi e S C ta gán p ic er e( ) c S( ) / S C

(c) C C S

Một phần của tài liệu một số thuật toán giải bài toán phủ tập hợp và ứng dụng (Trang 51 - 76)

Tải bản đầy đủ (PDF)

(76 trang)