2.5.1. Mô hình toán học
Bài toán quy hoạch nguyên (Integer Programming - IP) được phát biểu như sau
minf(x) =f(x1, x2, ..., xn)
v.đ.k x= (x1, ..., xn)∈D,
trong đóD ⊂Rn là tập các vectorx= (x1, x2, ..., xn)T mà một số hoặc tất cả các thành phần của x chỉ nhận giá trị nguyên.
Thông thường, tập D ⊂ Rn được xác định bởi một hệ các phương trình và bất phương trình với điều kiện bổ sung về tính nguyên của các biến số:
gi(x) = 0, i= 1, m1 gi(x)60, i=m1+ 1, ..., m
Nếu n1=n (tất cả các biến đều nguyên) thì bài toán quy hoạch nguyên trở thành bài toán quy hoạch nguyên hoàn toàn (Pure Integer Programming). Nếu n1 < n (chỉ có một số biến nguyên) thì ta gọi bài toán làquy hoạch nguyên bộ phận (Mixd Integer Programming). Nếu các hàm f(x), gi(x) là tuyến tính thì đó là bài toán quy hoạch tuyến tính nguyên. Thuật ngữ “quy hoạch nguyên” thực tế chỉ dành cho lĩnh vực nghiên cứu các lớp bài toán quy hoạch tuyến tính nguyên.
Các bài toán điển hình trong quy hoạch nguyên là các bài toán dạng chọn quyết định “có” hoặc “không” (yes or no decision). Chẳng hạn: Có quyết định học Thạc sĩ Toán không? Có mua căn nhà này không? Có lấy vợ hay không?... Vì các biến quy định chỉ nhận hai có trị 0 (không) hoặc 1 (có) nên bài toán có tên làQuy hoạch nguyên nhị phân (Binary Integer Programming - BIP).
Bất kì bài toán quy hoạch nguyên nào với các biến nguyên bị chặn đều có thể quy về bài toán với các biến chỉ nhận giá trị 0 - 1. Chẳng hạn, nếu biến u chỉ nhận giá trị thuộc tập {1,2, ..., k} thì đặt
u=u1+u2+...+uk,
với ui ∈ {0,1}, i = 1,2, ..., k. Điều này cho thấy quy hoạch nguyên 0 - 1 giữ vai trò quan trọng trong quy hoạch nguyên.
2.5.2. Thuật toán
Đầu tiên ta nêu lại một số khái niệm cơ bản sau:
⋄ Một họ P chưa hữu hạn các tập con của D, P :={Di ⊆D|i∈I}, trong đó I là tập hữu hạn các chỉ số, được gọi là một phân hoạch của D nếu
D=S
⋄ Bài toán
max f(x) v.đ.k x∈Di, (IPi)
với Di ⊂ D được gọi là bài toán con của bài toán quy hoạch nguyên IP (cùng hàm mục tiêu nhưng tập chấp nhận được bé hơn).
⋄ Số thực α∈R được gọi là một cận dưới của bài toán (IP) nếu α 6fopt.
Nếu tìm được một phương án chấp nhận đượcx∈D sao cho f(x)6fopt, tức f(x)
là một cận dưới của bài toán (IP). Khi đó x được gọi là một kỷ lục và f(x) còn được gọi là một giá trị kỷ lục.
⋄ Số thực β ∈R được gọi là một cận trên của bài toán (IP) nếu fopt 6β.
Trong quá trình tính toán nếu tìm được một kỷ lục x và một cận trên βbest của bài toán (IP)sao cho βbest=f(x) thì xopt=x chính là nghiệm tối ưu vàfopt=f(x) là giá trị tối ưu của bài toán.
Thuật toán nhánh cận Land - Doig gồm có những bước chính sau: 1. Tính cận trên
2. Chia nhánh
Sau đây là chi tiết thuật toán nhánh cận Land - Doig giải bài toán quy hoạch tuyến tính nguyên (IP0).
• Giải bài toán nới lỏng max {f(x)|x∈Dnl0 } được phương án tối ưu x0;
• If x0 nguyên then Dừng thuật toán (x0 là nghiệm tối ưu của bài toán (IP0); Else đặt β(D0) :=f(x0); (cận trên của bài toán)
• If Biết một phương án x∈D then Đặt α:=f(x);
Else Đặt α=−∞; (α là giá trị kỷ lục, x là một giá trị kỷ lục (nếu có))
• Đặt D={D0}; (danh sách các tập con của D0 cần xem tiếp). Bước 1. (Chọn tập để chia)
• Chọn Dk ∈ D là tập chấp nhận được của bài toán quy hoạch nguyên (IPk) mà bài toán này có cận trên β(Dk) lớn nhất trong các bài toán có tập chấp nhận được thuộc D. Gọi xk là phương án tối ưu của bài toán nới lỏng (LPk) tương ứng với (IPk) (có xk không nguyên);
• Giả sử xkj là một thành phần không nguyên đầu tiên của xk. Phân hoạch Dk thành hai tập:
Dk1 :={x∈Dk |xj 6xkj}; Dk2 :={x∈Dk |xj >xkj+ 1}.
• Đặt D := (D\ {Dk})∪ {Dk1, Dk1} (danh sách các tập con của D cần xem xét tiếp theo).
Bước 2. (Loại các tập con)
(21) Với mỗi i∈ {1,2}, giải bài toán quy hoạch tuyến tính nới lỏng (LPki). Có thể gặp một trong ba tình huống sau:
(211) Bài toán không chấp nhận được, tức làDki =∅. Loại Dki khỏi việc xem xét tiếp theo (theo tiêu chuẩn 1), tức
D:=D\ {Dki}.
(212) Tìm được phương án tối ưu xki nguyên. Khi đó, tính lại giá trị kỷ lục α= max{α, f(xki)} - giá trị kỷ lục hiện tại.
Gọi x là kỷ lục hiện tại tương ứng với giá trị kỷ lục hiện tại α =f(x). Loại Dki khỏi việc xem xét tiếp theo (theo Tiêu chuẩn 2), tức
D:=D\ {Dki}.
(213) Tìm được phương án tối ưu xki là không nguyên. Đặt β(Dki) = f xki. Ta có β(Dki) là một cận trên của bài toán IP ki.
(22) Loại bỏ D (theo Tiêu chuẩn 3) tất cả các tập là tập chấp nhận được của bài toán con có cận trên bé hơn hoặc bằng giá trị kỷ lục hiện tại α (nếu có).
Bước 3. (Kiểm tra điều kiện dừng)
If D=∅ Then Dừng thuật toán (fopt=α vàxopt =x - giá trị tối ưu là giá trị kỷ lục hiện tại và phương án tối ưu chính là kỷ lục hiện tại)
Else Quay lại Bước 1.
Chú ý: Trong quá trình thực hiện thuật toán nhánh cận ta thường xuyên phải giải các bài toán quy hoạch tuyến tính con. Chú ý rằng các bài toán quy hoạch tuyến tính trung gian đều có cùng hàm mục tiêu với bài toán ban đầu và có thể giải được bằng các phương pháp giải quy hoạch tuyến tính. Thông thường, người ta sử dụng phương pháp đơn hình.
2.5.3. Ví dụ cho thuật toán
Bài toán 2.22. (Bài toán pha cắt vật liệu)
Trong xây dựng, người ta cần cắt một thanh thép nguyên dài 72m thành các đoạn loại 16m và 9m. Bài toán đặt ra là phải cắt thế nào để được nhiều đoạn 16m và 9m nhất đồng thời tiết kiệm được vật liệu nhất (số mét thừa ra là ít nhất), biết rằng ít nhất phải có 1 đoạn thép 16m hoặc 1 đoạn 9m trong mỗi đoạn thép 72m.
Lời giải: Nếu gọi x1, x2 lần lượt là số đoạn thép16m và9m cắt được, đồng thời số thép thừa ra là ít nhất thì bài toán được đưa về việc tìmmaxcủa hàmf(x) = 16x1+9x2 Tiếp theo, ta thấy vì thanh thép chỉ dài 72m nên ta có ràng buộc 16x1+ 9x2 >72. Ngoài ra, các thanh thép phải nguyên và phải có ít nhất một đoạn thép 16m hoặc 1 đoạn thép 9m nên ta có thêm các ràng buộc x1, x2 >0, x1+x2 67 và x1, x2 ∈Z
Bài toán cần giải được phát biểu lại như sau:
max f(x) = 16x1+ 9x2 v.đ.k x1+x2 67 16x1+ 9x2 672 x1, x2 >0 x1, x2 ∈Z. Kí hiệu tập chấp nhận được của bài toán này là D0,
D0={x∈R2
|x1+x267,16x1+ 9x2672, x1>0, x2>0, x1, x2 nguyên}. Ta sẽ giải bài toán này với thuật toán nhánh cận Land - Doig đã trình bày ở trên
x1 x2 1 2 3 4 5 6 7 1 2 3 4 5 6 7 8 x1+x2= 7 16x1+ 9x2= 72 x0= 9 7, 40 7 T 4.5 L0 Hình 2.17
Bước chuẩn bị. Giải bài toán nới lỏng (LP0), với
Dnl0 ={x∈R2 |x1+x2 67,16x1+ 9x2 672, x1, x2>0}
ta được nghiệm tối ưu x0 = 9 7,
40 7
T
bằng cách sử dụng phương pháp đơn hình giải bài toán quy hoạch tuyến tính (Hình 3.5). Vìx0 không nguyên nên đặt
β(D0) :=f(x0) = 72 (cận trên của bài toán (IP0)) α=−∞;
D:={D0}; (danh sách các tập con cần xem xét)
Bước 1. (lần thứ nhất) Chọn tập D0 để chia. Chia đôi tập D0 bởi biến chia nhánh x01= 9
7. Ta có [x01] = [9
7] = 1 và
x1 x2 1 2 3 4 5 6 7 1 2 3 4 5 6 7 8 x0= 9 7, 40 7 T x1 = (1,6)T x2 = 2,409T 4.5 L0 Hình 2.18 Dễ thấy D0 =D1∪D2. Đặt D:= (D\ {D0})∪ {D1, D2}={D1, D2}. Bước 2. (lần thứ nhất) (xem hình 3.6)
⋄ Giải bài toán nới lỏng (LP1) với Dnl1 :={x∈D0nl |x1 61} được nghiệm tối ưu x1 = (1,6)T và giá trị tối ưu f(x1
) = 70. Do x1 nguyên nên đặtα:= max{α, f(x1
)}= 70. Ta có kỷ lục đầu tiên x = x1 = (1,6)T tương ứng với giá trị kỷ lục α = 70. Loại tập D1 (theo tiêu chuẩn 2). Khi đó,
D:=D\ {D1}={D2}.
⋄ Giải bài toán nới lỏng (LP2) với D2nl := {x ∈ Dnl0 | x1 > 2} được nghiệm tối ưu x2 = (2,40
9 )
T và giá trị tối ưu f(x2) = 72. Ta có β(D2) :=f(x2) = 72> α.
Bước 1. (lần thứ hai) Chọn tập D2 để chia. Chia đôi tập D2 bởi biến chia nhánh x22= 40 9 . Ta có [x22] = [40 9] = 4 và D3 :={x∈D2|x2 63}, D4 :={x∈D2|x2 >4}. Đặt D:= (D\ {D2})∪ {D3, D4}={D3, D4}.
Bước 2. (lần thứ hai) (xem hình 3.7)
⋄ Giải bài toán nới lỏng (LP3) với D3nl := {x ∈ Dnl2 | x2 6 3} được nghiệm tối ưu x3 = (4516,3)T và giá trị tối ưu f(x3) = 72. Ta có cận trên của bài toán (IP3) là β(D3) := f(x3) = 72 > α. Vì theo tiêu chuẩn 3 cận trên của β(D3) của bài toán con (IPk) không vượt quá giá trị kỷ lục hiện tại và ta không cần xét đến tập D3 này nữa.
⋄ Giải Bài toán nới lỏng(LP4)với
Dnl4 :={x∈D2nl |x2>4}=conv{(2,4)T, 94,4T , 4,409 T},
được nghiệm tối ưu x4 = (94,4)T và giá trị tối ưu f(x4) = 72 > α. Ta có cận trên của bài toán (IP4) là β(D4) := f(x4) = 72 > α. Cũng theo tiêu chuẩn 3 ta cũng không cần xét tiếp tập D4 nữa.
Lúc này D:=D\(D3)∪(D4) =∅.
Ta kết thúc thuật toán và tìm được giá trị kỷ lục α= 70 tại x= (1,6)T.
Kết luận: Như vậy ta cần cắt thanh dài 72m thành 1 đoạn 16m và 6 đoạn 9m để được số lượng đoạn nhiều nhất và tiết kiệm được vật liệu nhất, chỉ thừa ra2m.