2 Một số thuật toán giải bài toán cực đại hàm lồi
2.2.2 Thuật toán
Ý tưởng của thuật toán nhánh cận là thay vì giải trực tiếp Bài toán (P), ta đi tìm cận trên và cận dưới cho giá trị tối ưu của bài toán. Để làm cho
cận chính xác người ta chia nhỏ dần miền tìm kiếm (tập chấp nhận) bằng các phép phân hoạch (ví dụ phép chia đơn hình). Dựa trên tính chất là cực đại của một hàm lồi luôn đạt được tại một đỉnh, nên người ta thường sử dụng phép chia đơn hình vì dễ tìm được nghiệm cực đại trên tập đỉnh.
Thuật toán Khởi tạo
Chọn một đơn hình S0, sao cho S0 ⊃C. Tính tập hợp đỉnh V(S0). Đặt D0:={S0}.
Tính α0:= max{f(x) :x∈V(S0)}.
Giả sử Q0 là tập hợp các điểm chấp nhận được đã biết (nếu có). Tìm x0 ∈argmax{f(x) :x∈Q0}, nếu Q06=∅.
Bước lặp k (k = 0,1, ...)
Tại thời điểm bắt đầu bước lặp k (k = 0,1, ...), ta có một họ Dk và với mỗi đơn hình Sk ∈ Dk đều có một cận trên α(Sk). Đồng thời, nếu qua việc tính α(Sk) hay bằng cách nào khác ta có thể biết được một số điểm chấp nhận được. Gọi xk là điểm chấp nhận được tốt nhất trong số các điểm chấp nhận đã biết theo nghĩa giá trị hàm mục tiêu là lớn nhất và được βk :=f(xk). Khi đó βk là cận dưới.
• Bước 1 :
Nếu αk ≤βk thì dừng: xk là nghiệm tối ưu và βk là giá trị tối ưu của Bài toán (P).
Nếu trái lại, chuyển sang Bước 2.
• Bước 2 :
Chia Sk bằng phép chia đơn hình vét kiệt. Đặt Sk :=Sk1 ∪Sk2.
• Bước 3 :
Tìm cận trên α(Ski) := max{f(x) :x∈V(Ski)}, (i= 1,2),củaf trênC∩Ski thỏa mãn
Bổ sung các điểm chấp nhận mới tìm thấy được trong khi tính cận trên α(Ski) (i= 1,2) vào tập Qk.
• Bước 4 :
Tính βk = max{f(x) :x∈Qk}, đượcxk ∈Qk sao cho f(xk) = βk.
• Bước 5 : Đặt Dk+1:= (Dk \Sk)∪ {Sk1, Sk2}. Xóa tất cả Sk ∈Dk+1 thỏa mãn βk ≥α(Sk) hoặc Sk∩C =∅. Đặt Rk+1 là tập còn lại. Đặt αk+1 :=
βk+1 nếu Rk+1=∅, (khi đó thuật toán dừng);
max{α(Pk+1) :Pk+1∈Rk+1} nếu trái lại. Chọn Sk+1 ∈Pk+1 sao cho α(Sk+1) = αk+1.
• Bước 6 :
Đặt Dk+1={Rk+1} và chuyển sang Bước 2 của bước lặp k+ 1.
Minh họa thuật toán nhánh cận S0
S01 S02
S11 S12
S21 S22
... ...
Sự hội tụ của thuật toán
Trong quá trình giải các bài toán trên đơn hình con, ta nhận được các điểm chấp nhận được xk ∈C (ở mỗi bước k), thì
βk =f(xk)≤f∗ ≤αk.
Nếu thuật toán dừng ở bước k nào đó, tức là αk ≤βk thì từ βk ≤f∗ ≤αk suy ra αk = f∗ = βk. Trong trường hợp này, suy ra xk là một nghiệm tối ưu của (P). Nếu αk =−∞ thì f∗ =−∞, tức là bài toán không có lời giải.
Nếu thuật toán kéo dài vô hạn ta có định lý sau.
Định lý 2.3. i) Nếu thuật toán kéo dài vô hạn và không tìm được điểm chấp nhận được thì αk %f∗.
ii) Nếu thuật toán kéo dài vô hạn và tồn tại điểm chấp nhận được xk, thì mọi điểm tụ của dãy {xk} là nghiệm tối ưu toàn cục của Bài toán (P). Hơn nữa, αk &f∗ và βk %f∗.
Chứng minh. Đặt f∗= max{f(x) :x∈C}.
Khi thuật toán kéo dài vô hạn nó sinh ra ít nhất một dãy con các đơn hình lồng nhau{Skv, v = 1,2, ...} mà Skv∩C 6=∅ ∀v vì nếu trái lại thìSkv sẽ bị loại. Để đơn giản ký hiệu, thay vì viết kv ta viếtk.Do tính vét kiệt, nênSk →x∗ khi k → ∞. Vì Sk∩C 6=∅ nênx∗ ∈C.
i) Ta có αk =α(Sk) = max{f(x) :x∈V(Sk)}=f(vk). Mặt khác, do vk ∈Sk mà Sk →x∗ và hàm f liên tục nên
αk =f(vk)→f(x∗)≤f∗.
Theo định nghĩa của cận trên αk, ta có αk ≥ f∗. Do đó f(x∗) = f∗. Vậy αk %f∗.
ii) Giả sử x0k là một điểm chấp nhận được trong Sk∩C. Ta có
lim
k→∞(αk−f(x0k)) = 0. Vì βk ≥f(x0k) và hàm f liên tục nên ta có
lim
Mặt khác, theo cách tính cận αk =α(Sk) nên ta có
lim
k→∞(αk−βk) = lim
k→∞(α(Sk)−βk) = 0 (2.6) Do C bị chặn nên {xk}có một điểm tụ. Gọi x∗ là điểm tụ bất kỳ của{xk}. Giả sử dãy {xkv} là dãy con của {xk} hội tụ tới x∗, xkv →x∗. Để đơn giản ký hiệu ta viết xk →x∗. Do hàm f liên tục nên suy ra
lim
k→∞f(xk) = f(x∗).
Dãy{αk} là dãy không tăng và bị chặn dưới bởif∗ nên tồn tạiα= lim
k→∞αk. Hơn nữa, dãy {βk} là dãy số thực không giảm và bị chặn trên bởi f∗ nên tồn tại β = lim k→∞βk. Do đó, ta có β ≤f∗≤α. Từ (2.6), ta có β = lim k→∞βk = lim k→∞f(xk) = f(x∗) =f∗= lim k→∞αk =α.
Vậy điểm tụ x∗ của dãy {xk} là nghiệm tối ưu của Bài toán(P).Hơn nữa, αk &f∗ và βk %f∗. Ví dụ 2.2.1 Xét bài toán f(x) = 2x2+y2−x+ 5y →max (P1) với các ràng buộc x+y−10≤0 0≤x≤5 y≥0
Ta sử dụng thuật toán nhánh cận để giải bài toán này. Ta có miền chấp nhận được
C ={x∈R2:x+y−10≤0, 0≤x≤5, y ≥0}.
Ta lấyS0 =co{(0,0),(0,10),(10,0)}.Tập đỉnh củaS0làV(S0) ={(0,0),(0,10),(10,0)}. Ta có α0 = max{f(x, y) : (x, y)∈V(S0)}=f(10,0) = 190.
Lấy Q0 = {(0,0),(0,10)} là tập điểm chấp nhận được trong S0. Ta có x0= (0,10)là điểm chấp nhận tốt nhất hiện có. Vậy cận dướiβ0 =f(x0) = 150.
Hình 2.3: Hình vẽ minh họa • Bước lặp k= 0. S0 ={S0}. Điểm chấp nhận tốt nhất x0 = (0,10). Giá trị cận dưới β0=f(x0) = 150. Giá trị cận trên α0= 190.
Vì β0 < α0. Do đó ta thực hiện chia đơn hình S0 thành hai đơn hình S01, S02 thỏa mãn S0 =S01∪S02 và intS01∩intS02=∅.
Lấy Q1 = {(0,10),(5,5)} là tập điểm chấp nhận được trong S0. Ta có x1= (0,10)là điểm chấp nhận tốt nhất hiện có. Vậy cận dướiβ1 =f(x1) = 150.
Đơn hình S01 có tập đỉnh là V(S01) ={(0,0),(5,5),(0,10)}. Ta có α01 = max{f(x, y) : (x, y)∈V(S01)}=f(0,10) = 150 =β1 (loại S01). Đơn hình S02 có tập đỉnh là V(S02) ={(0,0),(5,5),(10,0)}. Ta có α02 = max{f(x, y) : (x, y)∈V(S02)}=f(10,0) = 190> β1. • Bước lặp k= 1. S1 ={S02}. Điểm chấp nhận tốt nhất x1 = (0,10). Giá trị cận dưới β1=f(x1) = 150.
Giá trị cận trên α02= 190.
Vì α02 > β1 nên ta thực hiện phép chia đơn hình S1 thành hai đơn hình S11, S12 thỏa mãn S1 =S11∪S12 và intS11∩intS12=∅.
Lấy Q2 = {(0,10),(5,0)} là tập điểm chấp nhận được trong S1. Ta có x2= (0,10) = 150 là điểm chấp nhận tốt nhất hiện có. Vậy β2 =f(x2) = 150 là cận dưới. Đơn hình S11 có tập đỉnh là V(S11) ={(0,0),(5,5),(5,0)}. Ta có α11 = max{f(x, y) : (x, y)∈V(S11)}=f(5,5) = 95< β2 (loại S11). Đơn hình S12 có tập đỉnh là V(S12) ={(5,0),(5,5),(10,0)}. Ta có α12 = max{f(x, y) : (x, y)∈V(S12)}=f(10,0) = 190> β2. • Bước lặp k= 2. S2 ={S12}. Điểm chấp nhận tốt nhất x2 = (0,10). Giá trị cận dưới β2=f(x2) = 150. Giá trị cận trên α12= 190.
Vì α12 > β2 nên ta thực hiện phép chia đơn hình S2 thành hai đơn hình S21, S22 thỏa mãn S2 =S21∪S22 và intS21∩intS22=∅.
LấyQ3 ={(0,10)}là điểm chấp nhận được trongS2.Ta cóx3= (0,10) = 150
là điểm chấp nhận tốt nhất hiện có. Vậy β3=f(x3) = 150 là cận dưới. Đơn hình S21 có tập đỉnh là V(S21) ={(5,0),(5,5),(152 ,52)}. Ta có α21 = max{f(x, y) : (x, y)∈V(S21)}=f(152,52) = 4954 < β3 (loại S21). Đơn hình S22 có tập đỉnh là V(S22) ={(5,0),(152 ,52),(10,0)}. Ta có α22 = max{f(x, y) : (x, y)∈V(S22)}=f(10,0) = 190> β3. • Bước lặp k= 3. S3 ={S22}. Điểm chấp nhận tốt nhất x3 = (0,10). Giá trị cận dưới β3=f(x3) = 150. Giá trị cận trên α22= 190.
Vì α22 > β3 nên ta thực hiện phép chia đơn hình S3 thành hai đơn hình S31, S32 thỏa mãn S3 =S31∪S32 và intS31∩intS32=∅.
LấyQ4 ={(0,10)}là điểm chấp nhận được trongS3.Ta cóx4= (0,10) = 150
Đơn hình S31 có tập đỉnh là V(S31) ={(5,0),(152 ,52),(152,0)}.
Ta có α31 = max{f(x, y) : (x, y)∈V(S31)}=f(152,52) = 4954 < β4 (loại S31). Đơn hình S32 có tập đỉnh là V(S32) ={(152,0),(152,52),(10,0)}.
Ta có α32 = max{f(x, y) : (x, y)∈V(S32)}=f(10,0) = 190> β3. Vì S32∩C =∅
nên loại đơn hình S32.
Thuật toán kết thúc. Vậy (0,10) là nghiệm tối ưu và f(0,10) = 150 là giá trị cực đại của bài toán.