4 2.4 Thuật toán đơn hình giải bài toán quy hoạch tuyến tính 5 2.5 Bài toán quy hoạch nguyên.. Thực tế chưa có một thuật toán tối ưu nào thực sự hữu hiệu để giải tất cả các bài toán quy
Trang 1
-THUẬT TOÁN NHÁNH CẬN
TỐI ƯU TỔ HỢP I
Chuyên ngành : TOÁN TIN ỨNG DỤNG
Thầy hướng dẫn: TS Nguyễn Quang Thuận Sinh viên thực hiện: Vũ Hữu Ninh
HÀ NỘI - 2012
Trang 2Mục lục
2 Một số khái niệm cơ bản và kiến thức bổ trợ 4 2.1 Phân hoạch 4 2.2 Bài toán con 4 2.3 Cận dưới - cận trên 4 2.4 Thuật toán đơn hình giải bài toán quy hoạch tuyến tính 5 2.5 Bài toán quy hoạch nguyên 6
3.1 Ý tưởng của thuật toán nhánh cận 7 3.2 Thuật toán nhánh cận Land-Doig giải bài toán quy hoạch
nguyên hoàn toàn 8 3.3 Thuật toán nhánh cận giải bài toán cái túi 14
Trang 31 Lời nói đầu
Quy hoạch nguyên là mô hình toán học của rất nhiều bài toán nảy sinh trong các lĩnh vực khác nhau Tuy nhiên, khác với baiftoans quy hoạch tuyến tính thông thường, bài toán quy hoạch nguyên rất khó giải Thực tế chưa có một thuật toán tối ưu nào thực sự hữu hiệu để giải tất
cả các bài toán quy hoạch nguyên
Năm 1960, Land và Doig đưa ra thuật toán nhánh cận dể giải bài toán quy hoạch nguyên Đến năm 1965, Dakin đã hoàn thiện phương pháp nhánh cận và nó trở thành phương pháp ưu thê rõ rệt so với các phương pháp trước để giải bài toán quy hoạch nguyên Nội dung chính trong báo cáo này của em chủ yếu là nói về thuật toán nhánh cận để giải bài toán quy hoạch nguyên
Trang 42 Một số khái niệm cơ bản và kiến thức bổ trợ
2.1 Phân hoạch
Một họ P chứa hữu hạn các tập con của tập 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 = [ i∈I
Di và Di ∩ Dj = ∅ i 6= j
Nói rằng ta phân hoạch tập D bởi các tập con Di, i ∈ I có nghĩa là ta có {Di ⊆ D | i ∈ I} là một phân hoạch của D
2.2 Bài toán con
Xét bài toán quy hoạch nguyên sau:
trong đó D là tập chấp nhận được Bài toán
maxf (x) v.đ.k x ∈ Di (IPi) đượ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 )
2.3 Cận dưới - cận trên
• Số thực α được gọi là cận dưới của bài toán (IP ) nếu
α ≤ fopt Nếu tìm được phương án chấp nhận được x ∈ D thì f (x) ≤ fopt Khi đó x được gọi là kỷ lục và f (x) được gọi là một giá trị kỷ lục
• Số thực β được gọi là cận dưới của bài toán (IP ) nếu
β ≥ fopt Nếu tìm được phương án chấp nhận được x ∈ D và một cận trên
β của bài toán (IP ) sao cho f (x) = β thì x chính là nghiệm tối ưu của bài toán
Trang 52.4 Thuật toán đơn hình giải bài toán quy hoạch tuyến tính Xét bài toán quy hoạch tuyến tính chính tắc không suy biến
v.đ.k x ∈ D, trong đó c ∈ Rn, và tập chấp nhận được là tập lồi đa diện không suy biến xác định bởi
D = {x ∈ Rn|Ax = b, x ≥ 0}, trong đó b = (b1, b2, · · · , bm)T ≥ 0, A là ma trận cấp m × n, với m < n Giả sử ta đã biết phương án cực biên x0 = (x01, x02, · · · , x0n)T Ký hiệu
J (x0) := {j ∈ {1, 2, · · · , n}|x0j > 0}
Hệ các véc tơ độc lập tuyến tính {Aj|j ∈ J(x0)} là cơ sở duy nhất của
ma trận A tương ứng với x0 Vì vậy mỗi véc tơ Ak được biểu diễn dưới dạng
Ak = X
j∈J (x 0 )
zjkAj
và bộ số thực zjk, j ∈ J (z0) là được xác duy nhất.Ta gọi
∆k = X
j∈J (x 0 )
zjkcj − ck k ∈ {1, 2, · · · , n}
là ước lượng ứng với phương án xk
Thuật toán
Bước 1:( Bước chuẩn bị)
Xây dựng bảng đơn hình xuất phát tương ứng với phương án cực biên xuất phát x0
Bước 2: (Kiểm tra điều kiện tối ưu)
Xét dòng cuối của bảng đơn hình
If ∆k ≤ 0 với mọi k = 1, 2, · · · , n Then Dừng thuật toán , kết luận nghiệm tối ưu là phương án cực biên ứng với bảng này
Else chuyển sang Bước 3
Bước 3: (Kiểm tra bài toán không có lời giải)
If Tồi tại k /∈ JB sao cho ∆k > 0 và zjk ≤ 0 với mọi j ∈ JB Then Dừng thuật toán, kết luận bài toán không có lời giải
Trang 6Else chuyển sang Bước 4.
Bước 4:
• Tìm cột xoay Tìm chỉ số s thỏa mãn ∆s = max{∆k|∆k> 0} Khi
đó cột tương ứng với véc tơ As sẽ đưa vào cơ sở mới
• Tìm dòng xoay Tính các θj, j ∈ JB, như sau
θj =
( zj
z js nếu zjs > 0, j ∈ JB +∞ nếu zjs ≤ 0, j ∈ JB
và xác định chỉ số r thỏa mãn
θr = min{θj|j ∈ JB} khi đó dòng r gọi là dòng xoay Phần tử zjs nằm trên dòng xoay
và cột xoay được gọi là phần tử chính của phép quay Các phần tử
zjs, (j 6= r) được gọi là các phần tử xoay
Bước 5: (Chuyển bảng đơn hình tương ứng với phương án cực biên mới)
• Trong cột hệ số CB thay giá trị cr bởi cs Trong cột hệ số cơ sở thay tên Ar bởi As
• Dòng xoay mới được tính theo quy tắc là
Dòng chính (mới) := Dòng quay (cũ)
phần tử chính ;
• Các dòng còn lại được tính như sau
Dòng mới := (- Phần tử quay tương ứng) × Dòng chính + Dòng cũ.
• Quay lại Bước 2
2.5 Bài toán quy hoạch nguyên
Xét bài toán quy hoạch nguyên được phát biểu như sau
min f (x) = f (x1, · · · , xn) v.đ.k x = (x1, · · · , xn) ∈ D, (P 1) trong đó D ∈ Rn là tập các véc tơ x = (x1, · · · , 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
i) Nếu mà tất cả các thành phần của biến x nhận giá trị nguyên thì người ta gọi là bài toán (P 1) là bài toán quy hoạch nguyên hoàn toàn
Trang 7ii) Nếu chỉ có một số thành phần của biến x nhận giá trị nguyên thì người ta gọi bài toán (P 1) là bài toán quy hoạch nguyên bộ phân
Ví dụ 1 Xét bài toán quy hoạch tuyến tính nguyên sau
−9x1 − 5x2 − 6x3 − 4x4 → min v.đ.k
6x1 +3x2 +5x3 +3x4 ≤ 9
x3 +x4 ≤ 1
x1, x2, x3 x4 nguyên
3 Thuật toán nhánh cận
3.1 Ý tưởng của thuật toán nhánh cận
Ý tưởng của phương pháp nhánh cận là "chia để trị", tức thay vì giải trực tiếp bài toán quy hoạch tuyến tính (IP ) ta giải bài toán con
max f (x) v.đ.k x ∈ Di, (IPi) trong đó Di thuộc một phân hoạch P := {Di ⊆ D | i ∈ I} Hiển nhiên
là việc giải các bài toán con (IPi), i ∈ D, cũng sẽ mắc phải những khó khăn tương tự như việc giải bài toán quy hoạch nguyên (IP ) Tuy nhiên
ta có thể xác định được cận trên β(D)i của bài toán con này, nhờ đó ta
có thể xác định được cận trên của bài toán ban đầu
Đặc điểm của thuật toán nhanh cận là xuất phát từ tập chấp nhận được ban đầu D, qua các vòng lặp, bằng cách phân hoạch dần tập D và xác định các cận trên của bài toán con ta sẽ loại dần được những tập con Dk ⊂ D mà ta biết chắc chắn nghiệm tối ưu của bài toán ban đầu (IP ) không thể thuộc Dk hoặc ta đã biết một phương án tốt nhất trong
Dk rồi Đến khi "kiểm duyệt" được hết các tập con cần xét thì thuật toán kết thúc và ta nhận được nghiệm của bài toán tối ưu ban đầu
Trang 83.2 Thuật toán nhánh cận Land-Doig giải bài toán quy hoạch nguyên hoàn toàn
Xét bài toán quy hoạch nguyên tuyến tính
max f (x) = hc, i v.đ.k x ∈ D0, (IP0) trong đó D0 ⊂ Rn xác định bởi
D0 = {x ∈ Rn | Ax ≤ b, x ≥ 0, và nguyên},
Ký hiệu
D0nl := {x ∈ Rn|Ax ≤ b, x ≥ 0}
là tập lồi đa diện có ràng buộc như tập D0 nhưng bỏ đi tính nguyên của x
Thuật toán
Bước chuẩn bị
• Giải bài toán nới lỏng max {f (x) | x ∈ Dnl
0 } được nghiệm tối ưu x0
• If x0 nguyên Then Dừng thuật toán
Else Đặt β(D0) := f (x0);
• If Biết một phương án x ∈ D Then Đặt α := f (x)
Else Đặt α := −∞;
• Đặt D := {D0};
Bước 1: (Chọn tập để chia)
• Chọn Dk ⊂ D là tập chấp nhận được của bai toán quy hoạch nguyên (IPk) mà bài toán có cận trên β(Dk) lớn nhất trong các bài toán con 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 tương ứng với bài toán (IPk)
• Giả sử xk
j là một thành phần không nguyên đầu tiên của xk Phân hoạch tập Dk thành hai tập
Dk1 = {x ∈ Dk|xj ≤ xk
j }
Dk2 = {x ∈ Dk|xj ≥ xk
j }
Trang 9• Đặt D := (D \ {Dk} ∪ {Dk1, Dk2})
Bước 2: (Lặp các tập con)
• 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 các trường hợp sau:
– Bài toán không chấp nhận được , tức là Dki = ∅
D := D \ {Dk}
– Tìm được phương án tối ưu xk nguyên Khi đó tính lại giá trị kỷ lục
α = max {α, f(xki)}
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
D := D\{Dk} – Tìm được phương án tối ưu xki là không nguyên Đặt β(Dki) =
f (xki)
• Loại bỏ khỏi D tất cả cac 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 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
Else Quay lại bước 1
Ví dụ
Giải bài toán quy hoạch tuyến tính nguyên sau:
max − x1 + 4x2 v.đ.k
−10x1 +20x2 ≤ 22 5x1 +10x2 ≤ 49
x1, x2, ≥ 0, nguyên
Trang 10Hình 1: Hình 1
Giải bài toán nới lỏng của bài toán trên
max − x1 + 4x2 v.đ.k
−10x1 +20x2 ≤ 22 5x1 +10x2 ≤ 49
x1, x2, ≥ 0
ta được nghiệm là (3.8, 3) và giá trị tối ưu β = 8.2 Khi đó ta thêm hai ràng buộc là x1 ≥ 4 và x1 ≤ 3, ta được miền chấp nhận được như ở Hình 2
Trang 11Hình 2:
Tiếp tục giải bài toán nới lỏng
max − x1 + 4x2 v.đ.k x ∈ D1
Ta được nghiệm tối ưu là (4, 2.9) và giá trị tối ưu là β = 7.6
Hình 3:
Ta lại tiếp tục chia miền D1 thành hai miền khi thêm hai ràng buộc
x2 ≤ 2 và x2 ≥ 3 Ta thấy trên miền D4 không có nghiệm nguyên, nên
ta loại miền này Còn trên miền D3 ta được nghiệm là (4, 2) và giá trị tối ưu f = 4 (xem Hình 4)
Trang 12Hình 4:
Tiếp theo ta xét trên miền D2 Giải bài toán trên miền D2 ta được nghiệm là (3, 2.6) và giá trị tối ưu là 7.6
Hình 5:
Vì nghiệm chưa nguyên nên ta chia miền D2 bởi lát cắt x2 ≤ 2 và
x2 ≥ 3 Trên miền D6 không có nghiệm nguyên nên ta loại, còn miền D5
có nghiệm là (1.8, 2) và giá trị tối ưu là 6.2 (Hình 5)
Ta lại chia miền D5 thành 2 miền bởi lát cắt x1 ≤ 1 và x1 ≥ 2 (Hình 6)
Trang 13Hình 6:
Trên miền D8 ta có nghiệm là (2, 2) và giá trị tối ưu là 6 >4 (Hình 7) Còn trên miền D7 ta giải được nghiệm là (1, 1.6) và giá trị tối ưu là 5.4 < 6 (Hình 8), trường hợp này ta loại
Hình 7:
Trang 14Hình 8:
3.3 Thuật toán nhánh cận giải bài toán cái túi
Xét bài toán ba lô 0 -1
f (x) =
n X
j=1
v.đ.k x ∈ D = {x ∈ Rn|
n X
j=1
ajxj ≤ b, xj ∈ {0, 1}j = 1, 2, · · · , n},
trong đó cj, aj, j = 1, · · · , n và b là các số thực cho trước Giả sử rằng
c1
a1 ≥ · · · ≥ cn
an.
Để xây dựng hàm tính cận dưới, ta xét
g∗ = max{f (x) =
n X
j=1
cjxj :
n X
j=1
ajxj ≤ b, j = 1, · · · , n} (1)
Mệnh đề 3.1 Phương án tối ưu của bài toán (1) là véc tơx = (x1, · · · , xn) với các thành phần được xác định bởi công thức
x1 = b
a, x2 = · · · = xn = 0
và giá trị tối ưu là g∗ = c1b1
a 1
Trang 15Giả sử ta có phương án bộ phận cấp k: (u1, · · · , un) Khi đó giá trị sử dụng các đồ vật đang có trong túi là
σk = c1u1 + · · · ckuk
và trọng lượng còn lại của túi là
bk = b − (a1u1 + · · · + akuk)
Ta có
max {f (x) : x ∈ D, xj = uj, j = 1, · · · , n}
=max {σk+
n P j=1
cjxj :
n P j=1
ajxj ≤ b, xj ∈ Z+, j = k + 1, · · · , n}
≤ σk + {
n P j=1
cjxj :
n P j=1
ajxj ≤ b, xj ∈ Z+, j = k + 1, · · · , n}
= σk+ ck+1 bk
a k+1
Vậy ta có thể tính cận trên cho phương án bộ phận (u1, · · · , uk) bởi công thức sau:
g(u1, · · · , uk) = σk + ck+1 bk
ak+1.
Ví dụ: Gải bài toán cái túi sau theo thuật toán nhánh cận
f (x) = 10x1 + 5x2 + 3x3 + 6x4 → max
5x1 + 3x2 + 2x3 + 4x4 ≤ 8
xj ∈ Z+, j = 1, 2, 3, 4 Thuật toán nhánh cận được trình bày ở Hình 9 Trong đó σ là giá trị các đồ vật đang chất trong túi, w là trọng lượng còn lại của túi và g là cận trên
Trang 16Hình 9:
σ
Trang 174 Kết luận
Để kết thúc, em xin tóm tắt lại những vẫn đề được trình bày trong báo cáo của em Trong báo cáo em đã nhắc lại môt số khái niệm cơ bản
và thuật toán đơn hình giải bài toán quy hoạch tuyến tính, và nội dung chính của báo cáo là thuật toán nhánh cận để giải bài toán quy hoạch nguyên Do thời gian có hạn nên trong báo cáo vẫn còn một số thiếu sót, rất mong được sự đóng góp ý kiến của thầy và bạn đọc
Trang 185 Tài liệu tham khảo
[1] Nguyễn Thị Bạch Kim, Giáo trình Các Phương Pháp Tối Ưu Lý Thuyết Và Thuật Toán, Nhà xuất bản đại học bách khoa, Hà nội, 2006
[2] Stephen Boyd and Jacob Mattingley,Branch and Bound Methods, Stanford University, Winter 2006-07 March 11, 2007
[3] Jens Clausen, Branch and Bound Algorithms - Principles and Ex-amples, March 12, 1999
[4] Nguyễn Đức Nghĩa - Nguyễn Tô Thành, Toán rời rạc, Nhà xuất bản đại học Quốc Gia Hà Nội, 2006