Mô hình tổng quát của bài toán tối ưu hóa
Tối ưu hóa là lĩnh vực quan trọng ảnh hưởng đến nhiều lĩnh vực khoa học, công nghệ, kinh tế và xã hội Việc tìm giải pháp tối ưu cho các bài toán thực tế, như lập kế hoạch sản xuất hay thiết kế hệ thống điều khiển, đóng vai trò then chốt Sử dụng kiến thức toán học để giải quyết các bài toán cực trị giúp đạt hiệu quả kinh tế cao, phù hợp với mục tiêu của các bài toán thực tế hiện nay.
Mô hình bài toán tối ưu tổng quát được phát biểu như sau:
Cực đại hóa (cực tiểu hóa) hàm: f(X)→ max/min Với các điều kiện: gi(X) = bi, i ∈ J1 (1.1) gj(X) ≤ bj, j ∈ J2 (1.2) gk(X) ≥ bk, k ∈ J 3 (1.3) x 1 , x 2 , , xn ≥ 0 (1.4)
Hàm mục tiêu f(X) là yếu tố chính trong bài toán, trong khi các điều kiện (1.1) được xác định là ràng buộc đẳng thức Các điều kiện (1.2) và (1.3) được phân loại là ràng buộc bất đẳng thức, còn điều kiện (1.4) được gọi là ràng buộc về dấu.
Trong không gian R n, X = (x 1 , x 2 , , xn) T là một vectơ, và tập hợp các vectơ X thỏa mãn hệ ràng buộc tạo thành miền D, được gọi là miền phương án hay miền chấp nhận được Mỗi điểm X ∈ D được xem là một phương án, trong đó một phương án X ∗ ∈ D làm cho hàm mục tiêu f(X) đạt giá trị cực đại hoặc cực tiểu được gọi là phương án tối ưu.
Phân loại bài toán tối ưu
Dựa trên mô hình tổng quát, người ta thường phân loại lớp các bài toán tối ưu như sau:
- Quy hoạch tuyến tính: Là những bài toán mà hàm mục tiêu f(X) và tất cả các hàm ràng buộc gi(X), gj(X), gk(X) là tuyến tính.
- Quy hoạch phi tuyến: Là những bài toán một trong hàm mục tiêu f(X) hoặc các hàm ràng buộc gi(X), gj(X), gk(X) là phi tuyến.
- Quy hoạch lồi: Là các bài toán quy hoạch mà các hàm mục tiêu f(X) là lồi trên tập các ràng buộc D lồi.
- Quy hoạch lõm: Là các bài toán quy hoạch mà các hàm mục tiêu f(X) là lõm trên tập các ràng buộc D lõm.
Quy hoạch rời rạc là bài toán tối ưu với miền ràng buộc D là tập hợp rời rạc Khi các biến chỉ nhận giá trị nguyên, bài toán này được gọi là quy hoạch nguyên.
- Quy hoạch đa mục tiêu: Nếu trên cùng một miền ràng buộc ta xét đồng thời các hàm mục tiêu khác nhau.
Trong các lĩnh vực kinh tế kỹ thuật thì quy hoạch phi tuyến, quy hoạch tuyến tính là những bài toán thường gặp.
Một số phương pháp giải cơ bản bài toán tuyến tính
Thuật toán hình học
Xét bài toán: f(x 1 , x 2 ) =c 1 x 1 +c 2 x 2 →Max; a 11 x 1 +a 12 x 2 ≤ b 1 ; a 21 x 1 +a 22 x 2 ≤ b 2 ; a n1 x 1 +a n2 x 2 ≤ bn; x 1 ≥ 0;x 2 ≥ 0.
1 Vì các ràng buộc của bài toán luôn luôn là các nửa mặt phẳng, do đó miền phương án luôn luôn là một đa giác lồi (là giao của các nửa mặt phẳng).
2 Xét đường thẳng f = m được gọi là đường mức Hiển nhiên khi đường mức chuyển động song song trong miền phương án thì điểm chạm cuối cùng của đường mức với miền luôn luôn là một trong các đỉnh của đa giác (hoặc một cạnh của đa giác) Đấy chính là phương án tối ưu cần tìm. Xuất phát từ nhận xét trên, chúng ta có thuật toán hình học gồm các bước như sau:
Bước 1: Vẽ miền phương án D là đa giác lồi bằng cách xác định miền giao của các nửa mặt phẳng trong hệ ràng buộc.
Bước 2 : Xác định tọa độ của các đỉnh đa giác: Giả sử là các điểm
Bước 3: Xác định phương án tối ưu fmax =max(f(A 1 ), f(A 2 ), , f(Ak)).
Khi miền phương án không phải là miền kín, phương án tối ưu của bài toán sẽ được xác định dựa vào hướng di chuyển của đường mức.
Mô hình bài toán quy hoạch lồi tổng quát
Khái niệm tập lồi, hàm lồi
Tập C ⊂ R n được gọi là tập lồi nếu x, y ∈ C ⇒ λx + (1 − λ)y ∈ C,
∀λ ∈ [0; 1] Nghĩa là nếu x, y ∈ C thì đoạn thẳng [x, y] ∈C b Hàm lồi Định nghĩa:
Hàm số f(x) được coi là lồi trên tập C nếu với mọi cặp điểm (x1, x2) thuộc C và mọi số λ trong khoảng [0,1], thỏa mãn điều kiện f[λx1 + (1−λ)x2] ≤ λf(x1) + (1−λ)f(x2) Điều này có nghĩa là điểm x = λx1 + (1−λ)x2 nằm trong khoảng giữa x1 và x2, và mọi điểm trên đồ thị của hàm số đều nằm dưới đoạn thẳng M1M2.
- Hàm f(x) là lồi, nếu đối với hai điểm x1, x2 thỏa mãn điều kiện f(x2) ≥ f(x 1 ) +▽f ′ (x 1 ).(x 2 −x 1 )
- Hàm f(x) là hàm lồi, nếu ma trận Hesian H(x) = [∂ 2 f(x)/∂x 2 ∂x 2 ] là bán xác định dương Khi H(x) xác định dương thì hàm f(x) gọi là hàm lồi chặt.
Cực trị của hàm lồi
Bất cứ cực tiểu địa phương nào của hàm lồi trên tập lồi cũng là cực tiểu của hàm trên tập đó.
Ta sẽ chứng minh tính chất này bằng phản chứng:
Giả thiết hàm f(x) có hai điểm cực tiểu là x 1 và x 2 Vì f(x) là lồi nên: f(x 2 )−f(x 1 ) ≥ ▽f ′ (x 2 )(x 2 −x 1 )
Trong quy hoạch lồi, vectơ s = (x2 − x1) nối hai điểm x1 và x2 cho thấy hàm f(x) giảm khi di chuyển theo hướng s từ điểm x1 Điều này mâu thuẫn với giả thiết rằng x1 là điểm cực tiểu, dẫn đến kết luận rằng f(x) chỉ có một cực tiểu duy nhất Do đó, giá trị tối ưu địa phương trong quy hoạch lồi cũng chính là giá trị tối ưu toàn cục.
Khái niệm về Gradient và đạo hàm hướng
+ Gradient của f(x) là một vectơ có các thành phần là đạo hàm riêng
+ Vectơ▽f(x 0 )vuông góc với đường mức của f(x)tạix 0 , tốc độ hàmf(x) tăng nhanh nhất theo hướng của ▽f(x 0 ) Nếu đi theo hướng − ▽f(x 0 ) thì f(x) giảm nhanh nhất.
+ Đạo hàm theo hướng z của hàm f(x) tại điểm x0: f z ′ (x 0 ) =h▽f(x 0 ), zi= | ▽f(x 0 )|.|z|.cos(▽f(x 0 ), z) Đó là hình chiếu của vectơ ▽f(x 0 ) lên hướng z.
+ Ma trận Hessian H(x) là ma trận có các thành phần là Gradient cấp hai của f(x)
Bài toán quy hoạch lồi tổng quát, điều kiện tối ưu 8 1.4.4 Cực tiểu hàm lồi một biến
Tìm x sao cho hàm mục tiêu f(x) →min Các ràng buộc: x∈ C : gi(x) ≤ 0;i = 1,2, , m. trong đó C là tập lồi, f, gi là các hàm lồi trên C. b Điều kiện tối ưu
+ Miền nghiệm chấp nhận được:
+ Khái niệm về điểm yên ngựa (saddle point)
Khi đó điểm yên ngựa của hàm L(x, λ) là điểm (x ∗ , λ ∗ ) với x ∗ ∈ D;λ ∗ ≥ 0 sao cho: L(x, λ ∗ ) ≤ L(x ∗ , λ ∗ ) ≤ L(x ∗ , λ) Các thành phần λi của vectơ λ = [λ 1 , , λm] T được gọi là các nhân tử Lagrange.
Khi λ = λ ∗ thì điểm (x ∗ , λ ∗ ) là điểm cao nhất của L(x, λ).
Khi x =x ∗ thì điểm (x ∗ , λ ∗ ) là điểm thấp nhất của L(x, λ).
Phương pháp xác định điểm yên ngựa: Điểm(x ∗ , λ ∗ ) là điểm yên ngựa của hàm L(x ∗ , λ ∗ ) khi và chỉ khi:
+gi(x) ≤ 0;i= 1,2, , m +λigi(x) ≤ 0;i = 1,2, , m + Điều kiện cần và đủ của tối ưu Định lí 1.1 Điểm x ∗ là tối ưu khi và chỉ khi fz(x ∗ ) = h▽f(x ∗ ), zi ≥ 0;∀z ∈ D(x ∗ )
Tức là nếu xuất phát từ x ∗ theo hướng bất kỳ z mà f(x) tăng thì f(x) đạt giá trị min tại x ∗ Định lí 1.2 (Định lý Kuhn - Tucker, phát biểu năm 1951)
Giả sử bài toán quy hoạch lồi thỏa mãn điều kiện Slater:
Để x ∗ trở thành nghiệm tối ưu, cần có một vectơ không âm λ ∗ = [λ ∗ 1 , λ ∗ 2 , , λ ∗ m ] T, sao cho cặp (x ∗ , λ ∗ ) là điểm yên ngựa của hàm Lagrange L(x, λ).
Chú ý Điều kiện Slater không được thỏa mãn thì có thể không tồn tại điểm yên ngựa của hàm L(x, λ) loại (x ∗ , λ ∗ ).
Tìm min của f(x) =−x với ràng buộc g = x 2 ε x1 = a+ L 4 , x2 = b− L 4 f(x 1 ) < f(x 2 ) thì b:=x 2 f(x 1 ) > f(x 2 ) thì a:= x 1 f(x 1 ) = f(x 2 ) thì a:= x 1 , b :=x 2
Lặp lại cho đến khi L < ε
+ Thuật toán chắc chắn hội tụ sau hữu hạn bước lặp, tốc độ hội tụ phụ thuộc vào việc chọn vị trí của hai điểm x1, x2 sau từng bước lặp.
+ Phương pháp chia đôi dễ lập trình nhưng không tối ưu về tính toán vì việc chọn x 1 , x 2 là tùy ý.
Thuật toán được mô phỏng dưới ngôn ngữ lập trình MATLAB. function cd=chia_doi(a, b, epxilon)
L=b-a; count = 0; while L > epxilon count=count + 1 x1=a + L/4; x2=b - L/4; if f(x1) < f(x2) b = x2; elseif f(x1) > f(x2) a = x1; elseif f(x1) == f(x2) a = x1; b = x2; end;
Sau đây là kết quả chạy thuật toán giải bài toán f(x) =x 2 + 54 x, x ∈ [−10,10].
Hiển nhiên hàm f(x) là hàm lồi trên đoạn [1, 10], cực tiểu đạt tại x=3. Kết quả chạy thuật toán chia đôi cho trong bảng 2.1
Bảng 2.1: Nghiệm xấp xỉ tối ưu sau các bước lặp
Số bước lặp Nghiệm tối ưu Số bước lặp Nghiệm tối ưu
Nhận xét Thuật toán hội tụ tốt sau 60 bước lặp đạt đến nghiệm tối ưu.
Thuật toán mặt cắt vàng
Phương pháp này sử dụng tính chất của dãy Fibonacci {Fn}.
Dãy số Fibonacci có tính chất đặc biệt đáng chú ý là: Tỷ số giữa hai số kế tiếp nhau của dãy tiến tới tỷ số vàng: nlim→∞
√5−1 2 + Tư tưởng phương pháp Đặt bk−ak = 1 và chia [ak, bk] theo tỷ lệ:
Phương trình p 2 +p−1 = 0 có nghiệm dương: p = − 1+ 2 √ 5 ≈ 0,61803 Hai số p và (1-p)=0,38197 được gọi là hằng số Fibonacci
+ Trong đoạn [ak, bk] lấy hai điểm αk, βk theo tỷ lệ: βk−ak bk−ak
Khi chia đoạn [ak, bk] thành hai phần thỏa mãn điều kiện (*), mỗi lần lặp chỉ cần tính một giá trị của f(x) Điều này giúp việc tìm giá trị tối ưu x ∗ trở nên nhanh chóng hơn so với việc chia đều đoạn [ak, bk] thành các đoạn có độ dài bằng nhau.
Các mặt cắt [αk, βk] thỏa mãn (*) được gọi là mặt cắt vàng và p là số vàng.
Thuật toán lát cắt vàng
+ Chọn αk, βk theo tỷ lệ vàng (*).
+ Tính giá trị hàm f tại αk và βk và rút ngắn đoạn [ak, bk]
Nếu f(αk) < f(βk) thì lấy giá trị [ak +1, bk +1] = [ak, bk]
Nếu f(αk) > f(βk) thì lấy giá trị [ak +1, bk +1] = [ak, bk]
Nếu f(αk) = f(βk) thì lấy giá trị [a k+1 , b k+1 ] = [ak, bk]
Giá trị tối ưu x ∗ đạt được khi độ dài đoạn còn lại nhỏ hơn sai số cho trước.
Nhận xét a/ Trong cả hai trường hợp ta đều có: b k+1 −a k+1 := p(bk −ak); b/ Một trong hai điểm chia ở bước sau trùng với điểm chia ở bước trước.
Do đó thuật toán này cho phép giảm số phép tính.
Thuật toán mặt cắt vàng được mô phỏng bằng ngôn ngữ MATLAB function mc=mat_cat_vang_1(a, b, epxilon)
L=b-a; p=(-1 + sqrt(5))/2; count=0; while L > epxilon count=count +1 alpha=b - p*L; beta=a + p*L; if f(alpha) f(beta) a = alpha; end;
Sau đây là kết quả chạy thuật toán giải bài toán f(x) = x 2 + 54 x , x∈ [0,10].
Bảng 1.3: Nghiệm xấp xỉ tối ưu sau các bước lặp
Số bước lặp Nghiệm tối ưu Số bước lặp Nghiệm tối ưu
Thuật toán hội tụ tốt đã đạt được nghiệm tối ưu sau 30 bước lặp, cho thấy hiệu quả cao trong quá trình tìm kiếm Đặc biệt, tốc độ hội tụ của thuật toán mặt cắt vàng vượt trội hơn so với thuật toán chia đôi.
Phương pháp giải bài toán quy hoạch tuyến tính tổng quát trên phần mềm MATLAB
quát trên phần mềm MATLAB
Trong phần mềm MATLAB, bài toán Quy hoạch tuyến tính có dạng mặc định là:
Các giới hạn biên của nghiệm lb ≤ X ≤ ub (lb: lower bounds, ub: upper bounds)
Khi gặp bài toán f = C T X → max, chỉ cần đặt maxf = −min(−f)
Lệnh thường dùng để giải QHTT là:
[X, f val, exitf lag, output] = linprog(C, A, b, A ∈ q, beq, lb, ub)
[X, f val, exitf lag, output] = intprog(C, A, b, Aeq, beq)
Lệnh linprog để lấy các nghiệm không âm
Lệnh bintprog để lấy các nghiệm nguyên có giá trị 1 hoặc 0.
Trong dấu () là các vectơ và ma trận đã cho của hàm mục tiêu và các ràng buộc.
Trong dấu [ ] là các đại lượng cần tính:
X - giá trị tối ưu của nghiệm, f val - giá trị min của hàm mục tiêu.
Exitf lag là số nguyên thông báo kết thúc quá trình tính toán Khi exitf lag = 1, các kết quả tính được coi là thành công, cho thấy hàm số đã hội tụ về một nghiệm Ngược lại, nếu exitf lag ≤ 0, kết quả tính sẽ không thành công và cần các giải thích tương ứng.
Output- cho các thông tin về phép tính đã thực hiện.
Một số thuật toán giải số bài toán tối ưu phi tuyến không ràng buộc
Chương 2 trình bày các thuật toán giải bài toán tối ưu phi tuyến không ràng buộc, bao gồm mô hình tổng quát và điều kiện tối ưu Các thuật toán sử dụng đạo hàm như Gradient, đường dốc nhất, Newton và Gradient liên hợp được thảo luận, cùng với các thuật toán không sử dụng đạo hàm như tìm trực tiếp, Powell, và Nelder-Mead Các kết quả được tham khảo từ tài liệu [2], [3], [6], [7], [8], [9].
Một số kiến thức cơ bản
Định nghĩa
Cho dãy {xk} hội tụ về dãy x ∗ , ta nói:
- Dãy {xk} hội tụ với tốc độ một cấp số nhân công bội q nếu tồn tại k0,
0 < q < 1, C < +∞ sao cho ∀k > k 0 : Khi đó ta có các đánh giá
- Dãy {xk} hội tụ với tốc độ trên cấp số nhân nếu ta có:
||xk +1−x ∗ || ≤ qk||xk−x ∗ ||hoặc ||xk−x ∗ || ≤ q 1 q 2 qk.C với dãy||qk|| → 0 khi k →+∞, C < +∞.
- Dãy {xk} hội tụ với tốc độ bậc hai nếu tồn tại C>0, tồn tại k 0 sao cho:
Điều kiện tối ưu
Xét bài toán: Tìmx ∗ đểf(x) → min, x ∈ E n trong đóx= [x1, x2, , xn] T + Điều kiện cần của tối ưu địa phương
2/ ▽f(x ∗ ) = 0 nghĩa là x ∗ là điểm dừng
Chú ý Khi thỏa mãn điều kiện cần thì x ∗ có thể là cực tiểu địa phương, cực đại địa phương hoặc điểm yên ngựa.
+ Điều kiện đủ của cực tiểu địa phương
H(x) = ▽ 2 f(x) > 0, nghĩa là ma trận Hessian xác định dương.
Xác định các điểm dừng của hàm mục tiêu: f(x) =x 3 1 +x 3 2 + 2x 2 1 + 4x 2 2 + 6
Nghiệm của hệ phương trình là các điểm: (0, 0); (0, -8/3); (-4/3, 0); (-4/3, -8/3)
+ Xác định loại điểm dừng Tính ▽ 2 f(x) :
Giá trị D 1 , D 2 và loại điểm dừng cho ở bảng sau: Điểm x ∗ D 1 D 2 H(x) Loại điểm dừng f(x) (0,0) 4 32 Xác định dương Min địa phương 6
(0, -8/3) 4 -32 Không xác định Điểm yên ngựa 418/27 (-4/3, 0) -4 -32 Không xác định Điểm yên ngựa 194/27 (-4/3, -8/3) -4 32 Xác định âm Max địa phương 50/3
Trong trường hợp tổng quát với hàm mục tiêu phi tuyến, việc xác định các điểm dừng trở nên khó khăn Vì vậy, cần nghiên cứu các thuật toán để xác định nghiệm xấp xỉ một cách hiệu quả.
Các thuật toán sử dụng đạo hàm
Thuật toán Gradient
Đây là phương pháp phổ biến nhất, luôn luôn hội tụ.
Thuật toán sử dụng sơ đồ lặp x (k+1) = x (k) −λk ▽f(x (k) )
Hệ số λk xác định độ dài bước đi theo hướng Gradient, có thể được chọn là hằng số cho toàn bộ quá trình hoặc tính toán giá trị tối ưu cho từng bước bằng phương pháp tối ưu một tham số Điều kiện dừng lặp được thiết lập khi ||x (k + 1) − x (k)|| ≤ ε.
Quy tắc Armijo xác định bước đi tối ưu tổng quát
Bước 1: Chọn λ tùy ý như nhau với mọi bước lặp (chẳng hạn λk = 1),Xác định điểm x =x ( k ) −λ▽f(x ( k ) ) là một điểm trên hướng giảm.Bước 2: Tính f(x) = f(x (k) −λ▽f(x (k) ))
Thì lấy λk = λ, ngược lại lấy λk = αλ, α ∈ (0,1)
Sử dụng quy tắc Armijo, thuật toán Gardient được mô tả bằng ngôn ngữ MATLAB như sau: function gd=gradient_amo(epxilon, k) clc;
Xluu=[1; 1]; count =0; ss; ep ∧ (-4); alpha=1/2; while and(ss > epxilon, count < k) count=count + 1; grad=[dh1x(X); dh1y(X)]; dk=grad;
%Quytac Armijo; lamda=1; while f(X)-f(X- lamda*grad) < ep*lamda * (grad.*dk) lamda=lamda*alpha; end; lamdak = lamda;
X= X - lamdak*dk; ss=chuan1(X - Xluu, 2);
Các kết quả thực hiện thuật toán được cho trong bảng dữ liệu sau đây.
Bảng 2.2: Nghiệm xấp xỉ tối ưu sau các bước lặp f(x, y) =x 2 +y 2 +x−y
Số bước lặp Sai số Nghiệm xấp xỉ
Nhận xét Thuật toán hội tụ tốt sau hai bước lặp đạt đến nghiệm tối ưu.
Thuật toán đường dốc nhất
Phương pháp đường dốc nhất là một trong những phương pháp cổ điển phổ biến nhất để giải quyết bài toán quy hoạch phi tuyến không ràng buộc với nhiều biến.
Xét bài toán quy hoạch phi tuyến không ràng buộc tổng quát:
Ta gọi vectơ d là hướng giảm của hàm f : R n → R tại x nếu ∃δ > 0 sao cho f(x+λd)< f(x),∀x∈ (0, δ).
Giả sử hàm f khả vi tại x và ▽f(x) khác 0, ta có thể chứng minh rằng d¯ = -▽f(x)/||▽f(x)|| là hướng giảm nhanh nhất Điều này có nghĩa là d¯ là lời giải cho bài toán Minf′(x, d), trong đó f′(x, d) là đạo hàm theo hướng d tại x, với điều kiện ||d|| ≤ 1.
Thật vậy, do f khả vi tại x nên: f(x+λd) =f(x) +▽f(x) T (λd) +||λd||α(x, λd) (2.1)
Với lim λ → 0 − α(x, λd) = 0 Vậy đạo hàm theo hướng d tại x chính là f ′ (x, d) = lim λ → 0 f(x+λd)−f(x) λ =▽f(x) T d.
Do ||d|| ≤1 nên theo bất đẳng thức schwartz ta có
Với d¯ = − ▽f(x)/|| ▽f(x)||, ta xác định được d¯ là hướng giảm nhanh nhất của hàm f tại điểm x Nếu ||λd||α(x, λd) được coi là 0 trong công thức (2.1), thì với λ > 0 cố định và điều kiện ||d|| ≤ 1, hàm f(x+λd) sẽ đạt giá trị cực tiểu tại d¯ Tuy nhiên, vì ||λd||α(x, λd) không nhất thiết phải bằng 0, nên sau khi đã chọn hướng giảm nhanh nhất d¯, cần xác định giá trị λ ≥ 0 để tối ưu hóa f(x+λd).
Thuật toán của phương pháp đường dốc nhất dựa trên lý thuyết ánh xạ co, cho thấy rằng nó hội tụ tới điểm x¯ với ▽f(¯x) = 0, miễn là dãy {x k } nằm trong một tập giới nội Nếu hàm f(x) là hàm lồi, thì x¯ sẽ là phương án tối ưu toàn cục cho bài toán quy hoạch phi tuyến không ràng buộc.
Thuật toán đường dốc nhất
Bước khởi tạo: Cho ε > 0 làm sai số kết thúc Lấy một điểm xuất phát x 1 , đặt k:=1 và chuyển sang các bước lặp.
Các bước lặp (bước lặp thứ k)
Bước 1: Nếu || ▽ f(x k )|| > ε thì đặt d k = − ▽ f(x k ) và chuyển sang Bước 2.
Bước 2: Tìm λk là phương án tối ưu của bài toán cực tiểu hóa hàm một biến f(x k +λd k ) (phụ thuộc vào λ ≥ 0) Đặt x k +1 = x k +λ k d k , k := k+ 1 và chuyển về Bước 1.
Bước kết thúc: Nếu || ▽f(x k )|| ≤ε thì dừng.
Thuật toán có thể áp dụng quy tắc Armijo để xác định bước đi tối ưu Thuật toán đường dốc nhất được triển khai bằng ngôn ngữ MATLAB với cú pháp như sau: function dg=dg(epxilon, k) clc;
X=[1; 3]; ss; ep=1/2; lamda =1/3; count =0; while and(ss > epxilon, count < k) count=count + 1; grad=[dfx(X); dfy(X)]; dk=grad;
%Quytac Armijo; alpha=1; while f(X+ alpha*dk) - f(X) > ep*alpha * grad.*dk alpha=alpha*lamda; grad=[dfx(X); dfy(X)]; dk = -grad; end; lamdak=alpha;
X= X+lamdak*dk; ss=chuan1(grad, 2); end; count dg=X;
Các kết quả thực hiện thuật toán được cho trong bảng dữ liệu sau đây
Bảng 2.3: Nghiệm xấp xỉ tối ưu sau các bước lặp f(x, y) =x 2 +y 2 +x−y
Số bước lặp Sai số Nghiệm xấp xỉ
Nhận xét Thuật toán hội tụ tốt sau 9 bước lặp đạt đến nghiệm tối ưu.
Thuật toán Newton
Trong phương pháp đường dốc nhất, quy tắc dịch chuyển được mô tả bởi x k+1 = x k + λ k d k, với d k = − ▽ f(x k ) Trong phương pháp Newton, quy tắc này tương tự nhưng λ k được thay thế bằng H − 1 (x k ), trong đó H(x k ) là ma trận Hessian tại điểm x k, với điều kiện ma trận này khả nghịch Giả sử dãy {x k } hội tụ tới x¯ với ▽f(¯x) = 0 và H(¯x) xác định dương, trong đó f(x) là hàm khả vi cấp hai Khi đó, với các điểm x k gần x¯, H(x k ) cũng xác định dương, dẫn đến ma trận này khả nghịch.
Sau đây, chúng ta giải thích ý nghĩa của quy tắc dịch chuyển: x k+1 = x k − H − 1 (x k ).▽f(x k ) trong phương pháp Newton Đối với hàm khả vi cấp hai chúng ta có thể viết: f(x) =f(x k )+▽f(x k ) T (x−x k )+1
2(x−x k ) T H(x k )(x−x k )+||x−x k || 2 α(x, x−x k ) trong đó, lim x → x k α(x k , x−x k ) = 0 Bởi vậy, có thể xấp xỉ f(x) bởi: q(x) =f(x k ) +▽f(x k ) T (x−x k ) + 1
Ngoài ra, dễ thấy điều kiện cần để q(x) đạt giá trị cực tiểu là:
Giả sử ma trận H(x k ) khả nghịch thì điểm tiếp theo nên xem xét chính là điểm x k+1 = x k −H − 1 (x k )▽f(x k ).
Có thể chứng minh được phương pháp Newton hội tụ (khá nhanh) với điều kiện điểm xuất phát x 1 nằm sát gần x¯ với ▽f(¯x) = 0 và ma trận
H(¯x) là khả nghịch Để khắc phục điều kiện ngặt nghèo này, phương pháp
Newton cải biên đã được đề xuất Tuy nhiên đây là giải thuật phức tạp.
Giải bài toán Minf(x) = (x 1 −2) 4 +(x 1 −2x 2 ) 2 bằng phương pháp Newton.
Quá trình giải được minh họa trong bảng tóm tắt:
Thuật toán Newton có thể áp dụng quy tắc Armijo để xác định bước đi tối ưu Dưới đây là mô tả thuật toán Newton bằng ngôn ngữ MATLAB: ```matlabfunction nw=newton_amo(epxilon, k) format short e clc;```
Xluu=[1; 1]; count =0; ss; ep=1/2; while and(ss > epxilon, count < k) count=count + 1; grad=[dh1x(X); dh1y(X)];
H=[dh2x(X) dh2xy(X); dh2xy(X) dh2y(X)];
%Quytac Armijo; alpha=1; dk=-inv(H)*grad; while f(X+ alpha*dk)-f(X) > ep*alpha*grad.*dk alpha=alpha*lamda; dk=-inv(H)*grad; end; lamdak = alpha;
X= X + lamdak*dk; ss=chuan11(X - Xluu, 2);
Các thuật toán không sử dụng đạo hàm
Phương pháp tìm trực tiếp (Direct search)
Xét bài toán: Tìm x ∗ sao cho f(x) → max;x∈ R n
Tư tưởng chính của thuật toán là tại mỗi bước, chỉ thay đổi một thành phần xi của x, trong khi các thành phần khác vẫn giữ nguyên Quá trình này tiếp tục cho đến khi đạt được giá trị cực đại.
* Cho các giá trị củax (0) = [x (0) 1 , , x (0) n ] T và số gia của biến số△x(△x 1 , ,△xn)
* Cho một thành phần của x biến đổi, các thành phần khác giữ nguyên: x (1) 1 = x (0) 1 +△x 1 → tính α−f(x (0) 1 , x (0) 2 , , x (0) n )
+ Nếu f(x) không cải tiến được cả hai phía (với x (0) 1 +△x 1 và x (0) 1 − △x 1 ) thì cố định x (0) 1 không cho biến đổi nữa.
+ Tiếp tục tiến hành với x (1) 2 = x (0) 2 ± △x 2 cho đến khi tất cả các biến đều được biến đổi.
Trong Bước 1, tại mỗi bước dịch chuyển theo một biến độc lập, giá trị hàm mục tiêu được so sánh với giá trị trước đó Nếu hàm mục tiêu được cải thiện, giá trị cũ sẽ được thay thế bằng giá trị mới trong các so sánh tiếp theo Ngược lại, nếu không có cải tiến, giá trị cũ sẽ được giữ nguyên.
Bước 2: Tìm theo mẫu (Pattern search)
Khi kết thúc Bước 1, ta xác định được x ( k ) Ở bước tiếp theo ta lấy theo mẫu.
Tức là: x (k+1) = tx (k) −x (b) x (k+1) = tx (k) i −x (b) i Trong đó: x ( b ) là điểm cơ sở (base point), ở lần lặp đầu x ( b ) =x (0) t là số biến thăm dò cần thiết Đối với f(x 1 , x 2 ) ta có t = 2.
* Xuất phát từ điểm x (k+1) tính f(x (k+1) ) và so với giá trị f(x) ở bước tìm theo mẫu để xem Bước 2 có kết quả không.
* Nếu Bước 2 có kết quả tại x ( k +2) thì tìm theo mẫu được coi là có kết quả nếu: f(x (k+2) ) ≥ f(x (k) ) và quá trình được lặp lại với điểm xuất phát x ( b ) =x ( k )
Nếu Bước 2 không mang lại kết quả, cần kết luận rằng việc tìm kiếm theo mẫu đã không thành công Do đó, cần thực hiện lại Bước 1 để xác định hướng mới một cách hiệu quả hơn.
* Nếu Bước 1 liên tiếp không cho hướng mới hiệu quả thì liên tiếp giảm
△x cho tới khi hoặc xác định được hướng mới có hiệu quả, hoặc △x đã nhỏ hơn sai số cho phép.
Việc không có khả năng tăng f(x) khi △x đã khá bé tức là tối ưu cục bộ đã đạt được.
Phương pháp trực tiếp thường chậm hội tụ hơn so với phương pháp sử dụng đạo hàm, nhưng lại tiện lợi hơn vì không cần tính toán đạo hàm.
Thuật toán có thể cài đặt được bằng ngôn ngữ lập trình MATLAB.
Phương pháp Powell
Bước 1: Chọn điểm xuất phát x (k) 0 (điểm dừng x 0 , bước lặp k)
Khik = 0, chọn các hướng song song với các trục tọa độ củaR n :s ( 1 k ) , , s ( n k )
Dùng phương pháp tối ưu một tham số: f(x (k) i+1 + λis (k) i ) → min để xác định λi.
Khi đó xác định được λ (k) i và do đó xác định được: x ( i+1 k ) = x ( i k ) +λ ( i k ) s ( i k ) ;i = 1,2, , n
Bước 2: Chọn điểm tiếp theo: x (k) n +1 = 2x (k) n −x (k) 0
Tiếp tục tìm theo hướng Gradient liên hợp.
Phương pháp Nelder và Mead
J.A Nelder và R.Mead đã dùng đơn hình là những đa diện biến dạng (flexible polyhedron) nhờ ba phép biến đổi: ánh xạ gương, phép co và phép dãn.
Thuật toán được thực hiện theo các bước:
Bước 1: Trong không gian R n , chọn một đơn hình có đỉnh tại các điểm
(x 1 , x 2 , , xn +1) Tính giá trị các hàm mục tiêu f(x) ở các đỉnh của đơn hình fi = f 1 (x), , fn +1(x) = f(xn +1).
Bước 2: Xác định các giá trị của hàm f: giá trị lớn nhất f 1 , giá trị tiếp theo fg, giá trị nhỏ nhất fb; các đỉnh tương ứng là: x 1 , x 2 , xb.
Bước 3: Xác định trọng tâm của hình (trừ đỉnh x1) theo công thức: x 0 = n 1 P xi;i 6= 1 Tính f(x 0 ).
Bước 4: Thực hiện ánh xạ gương với x1 và x0 để nhận được xr, tính toán f(xr) = fr Nếu hệ số ánh xạ α > 0, vị trí xr được xác định theo công thức: xr − x0 = α(x0 − x1), từ đó có thể tính xr = (1 + α)x0 − αx1, với α được tính bằng |xr − x0|/|x0 − x1|.
Bước 5: So sánh giá trị fr và fb
1/ Nếu fr < fb thì ta nhận được giá trị nhỏ nhất của hàm Hướng từ x 0 đến xr là hướng tốt nhất cho dịch chuyển, ta kéo dãn theo hướng đó và tìm điểm xp Hệ số dãn γ > 1 được tìm từ biểu thức: xp −x 0 = γ(xr −x 0 ) xp = γxr + (1−γ)x 0 γ = |xp−x0|/|xr−x0|
Để tính giá trị f(xp) = fp, thực hiện các bước sau: a) Nếu fp < fb, thay x1 bằng điểm xp và kiểm tra tính hội tụ của đơn hình đến cực tiểu Nếu hội tụ, dừng tính; nếu không, quay lại Bước 2 b) Nếu fp > fb, loại bỏ điểm xp vì đã vượt quá xa, thay x1 bằng xr và kiểm tra sự hội tụ Nếu vẫn chưa hội tụ, trở lại Bước 2.
2/ Nếu fr > fb nhưng fr < fg thì xr là điểm tốt hơn so với hai điểm khác của đơn hình Thay x1 bằng xr Kiểm tra nếu chưa hội tụ thì quay về Bước 2.
3) Nếu fr > fb nhưng fr > fg thì chuyển sang Bước 6.
Bước 6: So sánh các giá trị fr và f 1
1/ Nếu fr > f 1 thì chuyển về phép co (Bước 6, đoạn 2):
Nếu fr < f1 thì thay x1 bởi điểm xr và thay f1 bởi fr.
Nếu fr > fg chuyển sang phép co.
Khi trường hợp fr > f1 xảy ra, chúng ta đã dịch chuyển quá xa từ x1 đến x0, do đó cần điều chỉnh lại bằng phép co để xác định x0 Công thức được sử dụng là xc - x0 = β(x1 - x0) với 0 < β < 1, trong đó β là hệ số co Kết quả cuối cùng được tính bằng xc = βx1 + (1 - β)x0.
- Trường hợp fr < f 1 ta thay x 1 bằng xr và sau đó thực hiện phép co để tìm xc như sau: xc −x0 = β(xr −x0) xc = βxr+ (1−β)x 0
Bước 7: So sánh các giá trị fc và f 1 Tính fc
1/ Nếu fc f1 thì rõ ràng việc cố gắng tìm giá trị nhỏ hơn f1 không đạt được cần sang Bước 8.
Bước 8: Thu nhỏ kích thước của đơn hình tại một nửa, lấy xb làm chuẩn. Như vậy điểm xi được thay bằng điểm: xi − 1
2(xi+xb) Tính các giá trị fi(i = 1,2, , n+ 1) Kiểm tra sự hội tụ nếu chưa hội tụ thì quay lại Bước 2.
Nếu σ nhỏ hơn độ chính xác ǫ thì giá trị các hàm rất gần nhau và do đó điểm cực tiểu gần là xb.
* Chọn đơn hình là tam giác với ba đỉnh ban dầu là: x (0) 1 = [8; 9] T ;x (0) 2 = [10; 11] T ;x (0) 3 = [8; 11] T
* Bước lặp k=0 f(8; 9) = 45;f(10; 11) = 12;f(8; 11) = 65 Xác định trọng tâm của x (0) 1 và x (0) 3 x (0) 4.1 = 1
Ta nhận được x (0) 4 = [8; 10] T Ánh xạ qua x (0) 4 : x (0) 5 1 = 8 + 1(8−10) = 6 x (0) 5.2 = 10 + 1(10−11) = 9
Ta được x (0) 5 = [6; 9] T và f(6; 9) Vì f(6; 9) < f(8; 9) E ta thực hiện phép dãn: x (0) 6 1 = 8 + 2(6−8) = 4 x (0) 6 2 = 10 + 2(9−10) = 8
Cuối cùng ta nhận được x ∗ = [5; 6] T và f(x ∗ ) = 0.
Một số thuật toán giải số bài toán tối ưu phi tuyến có ràng buộc
Chương 3 tập trung vào việc khám phá các thuật toán giải bài toán tối ưu phi tuyến có ràng buộc, bao gồm khái niệm hàm Lagrange, phương pháp hàm phạt và các thuật toán tìm nghiệm xấp xỉ Các kết quả được trình bày dựa trên tài liệu tham khảo [2], [3], [9].
3.1 Một số kiến thức cơ bản
Hàm Lagrange
Xét bài toán quy hoạch phi tuyến có ràng buộc tổng quát:
Lúc đó, hàm Lagrange tương ứng với bài toán trên có dạng sau:
F(x, λ) = f(x) +λ 1 g 1 (x) + +λmgm(x), với điều kiện λi ≥ 0,∀i = 1, m(các số λi ≥ 0,∀i = 1, m được gọi là các nhân tử Lagrange).
thì F(x, λ) = f(x) +λ T G(x) Đặt λi = s 2 i , hàm Lagrange được định nghĩa trên đây được viết lại dưới dạng F(x, s 2 ) = f(x) + m
Chúng ta gọi các điểm (x, λ) = (x, s 2 ) là điểm dừng của hàm Lagrange nếu điểm (x, s) ∈ R n+m thỏa mãn hệ điều kiện sau đây:
Thiết lập điều kiện tối ưu Kuhn - Tucker
Trong phần này, chúng ta sẽ khám phá cách thiết lập điều kiện tối ưu Kuhn - Tucker cho bài toán quy hoạch phi tuyến có ràng buộc Bài viết sẽ trình bày một số ví dụ cụ thể để minh họa mà không đi sâu vào việc chứng minh các điều kiện này một cách chặt chẽ.
Điều kiện Kuhn - Tucker là điều kiện quan trọng nhất trong lý thuyết tối ưu phi tuyến, đóng vai trò nền tảng cho các phương pháp tối ưu phi tuyến cổ điển.
Xét hệ điều kiện bao gồm điều kiện dừng của hàm Lagrange và điều kiện ràng buộc của Bài toán quy hoạch phi tuyến có ràng buộc (3.1)
Hệ điều kiện trên đây được gọi là điều kiện Kuhn - Tucker của Bài toán quy hoạch phi tuyến có ràng buộc (3.1)
Thiết lập điều kiện Kuhn - Tucker cho Bài toán quy hoạch phi tuyến có ràng buộc sau:
Minf(x) = (x 1 + 1) 2 + (x 2 −1) 2 Với điều kiện x = (x1, x2) ∈ D là miền ràng buộc được xác định bởi
Có thể kiểm nghiệm được rằng trong ví dụ này chúng ta có Bài toán quy hoạch phi tuyến có ràng buộc với hàm Lagrange:
F(x, λ) = (x 1 +1) 2 +λ 1 (x 1 −2)+λ 2 (x 2 −1)−λ 3 x 1 −λ 4 x 2 ,(λi ≥ 0,∀i= 1,4). Điều kiện Kuhn - Tucker của bài toán được viết như sau:
Từ (3.2) và (3.6) suy ra: x 1 [2(x 1 + 1) +λ 1 ] = 0⇒ x 1 = 0 ⇒ theo (3.4) ta có λ 1 = 0
Với điều kiện λ 1 = λ 2 = 0, ta thấy trong hai điểm (x 1 = 0, x 2 = 0) và (x 1 = 0, x 2 = 1)chỉ có điểm (x 1 = 0, x 2 = 1) với(λ 1 = λ 2 = 0, λ 3 = 3, λ 4 0) thỏa mãn điều kiện dừng của hàm Lagrange.
Vậy phương án tối ưu toàn cục là (x1 = 0, x2 = 1) với fmin = 1.
Bằng cách sử dụng hàm Lagrange, bài toán quy hoạch phi tuyến có ràng buộc có thể được chuyển đổi thành bài toán không ràng buộc Điều này đạt được bằng cách thay thế hàm mục tiêu bằng hàm Lagrange và bổ sung các biến nhân tử Nhờ vậy, chúng ta có thể áp dụng các thuật toán đã được trình bày trong chương.
Chúng ta có thể giải bài toán này bằng hai phương pháp Tuy nhiên, có thể xây dựng các thuật toán giải trực tiếp mà không cần đến hàm Lagrange Dưới đây, chúng ta sẽ xem xét một số thuật toán này.
Một số thuật toán
Thuật toán Gradient 35 3.2.2 Phương pháp hàm phạt (Penalty function method) 38
Thuật toán Gradient Định nghĩa: Nón các hướng chấp nhận được tại a ∈ D là tập:
Hướng chấp nhận tại a:z = (x−a)+ε(x (0) −a);ε > 0.x (0) điểm xuất phát. Bước 1: Tìm điểm xuất phát x (0) ∈D
+ Giải bài toán quy hoạch tuyến tính phụ
Bước 3: Kiểm tra điều kiện tối ưu: Đặt σk ▽f(x (k) ),(x ∗ −x (k) ) + Nếu σk ≥ 0 ⇒ Xopt = x ( ∗ ) ⇒ Dừng
+ Nếu σk < 0 chưa tối ưu Khi đó hướng chấp nhận được là: z (k) = (x ( ∗ ) −x (k) ) +εk(x (0) −x (k) ) Để thuật toán hội tụ, ta sẽ chọn εk = minn
0 < σ < 1 trong đó ta thường lấy σ = 1
Bước 4: Xác định phương án tiếp sau:
+ Xác định λ ( k ) lớn nhất: Đặt ϕ(λ) =f(x (k) +λz (k) ) λ ( k ) = max{λ > 0, x ( k ) +λz ( k ) ∈ D, ϕ ′ (λ)≤ 0}
Chú ý λ (k) thỏa mãn f(x (k) +λz (k) ) → min|λ >0, x (k) +λz (k) ∈ D Nhận xét
Phương pháp Gardient chuyển đổi bài toán phi tuyến thành chuỗi các bài toán QHTT phụ, giúp đơn giản hóa quá trình tìm kiếm giải pháp tối ưu Các bài toán này có thể được giải quyết hiệu quả bằng phần mềm MATLAB thông qua thủ tục linprog( ).
+ Việc xác định bước đi tối ưu luôn thực hiện được bằng các thuật toán chia đôi hoặc lát cắt vàng vì f là hàm lồi.
Thuật toán có thể được mô phỏng qua các ngôn ngữ lập trình khi chúng ta xác định rõ thủ tục tính toán nón P(a) cho từng bài toán cụ thể.
Ví dụ 6 Hàm mục tiêu f(x) = −6x 1 −4x 2 +x 2 1 +x 2 2 + 18 → min Các ràng buộc:
Tìm x ∗ sao cho thỏa mãn mục tiêu và các ràng buộc.
Lấy một điểm bất kỳ trong miền ràng buộc: x (0) = (1; 5; 3)
Tại điểm này f(x (0) ) = 8,25 Đối Gradient − ▽f(x):
− ▽f(x (0) ) 6= 0 nên x (0) không phải điểm cực trị.
Vì d dλ 2 △ 2 f = −26 < 0 nên λ = 0,5 đại lượng △f đạt giá trị lớn nhất.Chọn điểm x (1) = (1,5 + 3.0,5; 3−2.0,5) = (3; 2)
Thử lại xem x (1) có trong miền ràng buộc không?
Nghĩa là không có cách di chuyển nào từx (1) làm giảmf nữa, vậyx (1) =x ( ∗ ) x ( ∗ ) = [3; 2] T ;f(x(∗)) = 5
3.2.2 Phương pháp hàm phạt (Penalty function method)
Bài toán cơ bản của quy hoạch phi tuyến tính bị ràng buộc tổng quát có dạng: f(x)→ min gj(x) ≤ 0;j = 1, m
Tìm x ( ∗ ) sao cho mục tiêu và các ràng buộc được thỏa mãn.
Mục đích của phương pháp hàm phạt là đưa việc giải bài toán bị ràng buộc về việc giải một chuỗi các bài toán không bị ràng buộc.
Trong phương pháp hàm phạt, ta thay thế hàm mục tiêu ban đầu f(x) bởi hàm mục tiêu mở rộng chứa thông số dương rk;k = 1,2,3,
HàmPk được gọi là hàm phạt, tham sốrk dương được gọi là tham số phạt. Hàm Gj của ràng buộc gj(x) được xây dựng sao cho:
- Bên ngoài tập chấp nhận được thì P(x, rk) khác với f(x):
- Khi giải liên tiếp các bài toán không ràng buộc
P(x, rk)→ min;k = 1,2, thì Gj →0, do đó P(x ∗ , r) → f(x ∗ )
Các phương pháp hàm phạt được phân chia thành hai nhóm chính: phương pháp hàm phạt trong và phương pháp hàm phạt ngoài Phương pháp hàm phạt trong, hay còn gọi là phương pháp hàm phạt nội tại, thường sử dụng hàm Gj với một dạng cụ thể.
Cực tiểu hàm Pk trong miền nghiệm chấp nhận được hội tụ về nghiệm của bài toán cơ bản f(x) khi thông số rk thay đổi đều đặn Phương pháp hàm phạt ngoài, hay còn gọi là exterior penalty function method, thường sử dụng hàm GJ được chọn theo một dạng cụ thể.
Gj =max[0, gj(x)] hoặc Gj = {max[0,−gj(x)]} 2
Khi tham số rk thay đổi liên tục, cực tiểu của hàm Pk sẽ nằm ngoài miền nghiệm chấp nhận được và dần hội tụ về nghiệm của bài toán cơ bản f(x).
Theo phương pháp hàm phạt trong, hàm mục tiêu mở rộng là:
→ min Để giải bài toán không ràng buộc của P(x, r) ta dùng điều kiện cần:
Các phương trình này cho: x ∗ 1 (r) r 1 2 + 1 1 2
1 r 3 2 + r 1 2 1 2 Để nhận được nghiệm của bài toán gốc, ta thấy: fmin = lim r → 0Pmin(r) x ∗ 1 = lim r → 0x ∗ 1 (r) x ∗ 2 = lim r → 0x ∗ 2 (r) Các giá trị của f, x ∗ 1 , x ∗ 2 được cho trong bảng sau:
Sau đây chúng ta sẽ nghiên cứu chi tiết một số thuật toán sử dụng tư tưởng hàm phạt
A Một số phương pháp hàm phạt điểm trong
Hàm phạt p(x) thỏa mãn tính chất: i/ không âm và liên tục trên tập intD={x∈ R :gi(x)< 0, i = 1, , m} ii/ p(x)→ +∞ khi gi(x)→ 0 −
Hai hàm phạt điểm trong được sử dụng nhiều, do Fiacco và McCormick đưa ra, là: p(x) =− m
Phương pháp hàm phạt điểm bắt đầu từ một điểm x₁ trong tập chấp nhận D, nhằm giải quyết một chuỗi bài toán tối ưu không ràng buộc minψ(x, αk) với điều kiện x ∈ Rⁿ Trong đó, ψ(x, αk) được định nghĩa là f(x) + αkp(x), với {αk} là dãy tham số dương giảm dần về 0.
Để chuẩn bị cho thuật toán, trước tiên cần chọn một số ε > 0 nhỏ để kiểm tra điều kiện dừng Tiếp theo, chọn một điểm x₁ thuộc D sao cho gi(x₁) < 0, với i = 1, , m Sau đó, xác định tham số phạt α₁ > 0 và một số a nằm trong khoảng (0,1) Cuối cùng, đặt k = 1.
Bước k 1 : Xuất phát từxkgiải bài toán tối ưu không ràng buộc minψ(x, αk) với điều kiện x∈ R n nhận được nghiệm xk+1,
Bước k 2 : if αkp(xk +1)< ε Then Dừng thuật toán (lấy xk +1 là nghiệm tối ưu của bài toán (P)
Bước k 3 ; Đặt tham số phạt mới αk +1 :=àαk Đặt k := k+ 1 Chuyển về Bước lặp k. Định lí 3.1
Thuật toán 3.1 có những đặc điểm nổi bật như sau: Đầu tiên, hàm ψ(x, α) luôn lớn hơn hoặc bằng f(x) với mọi α > 0 và x là điểm chấp nhận được Thứ hai, điều kiện gi(xk) phải nhỏ hơn 0 cho tất cả i từ 1 đến m Cuối cùng, hàm ψ(xk, αk) sẽ hội tụ đến giá trị tối ưu của bài toán (P) khi chuỗi {αk} tiến đến 0, và mọi điểm tụ của chuỗi {xk} đều là nghiệm tối ưu của bài toán (P).
Chứng minh i/ Hiển nhiên ii/ Nếu gi(xk)=0 , ta suy ra ψ(xk, αk) không hữu hạn. iii/ Nếu x ∗ là nghiệm của (P), ta cần chứng minh lim k →∞ψ(xk, αk) = f(x ∗ )
Vì αk ց 0,{ψ(xk, αk)} là dãy giảm và ψ bị chặn dưới (do f liên tục trên tập compac D nên bị chặn dưới) và αkp(x) ≥ 0), nên ta suy ra ψ(xk, αk) hội tụ với ψ0 ≥ f(x ∗ ).
Thật vậy: ψ(xk, αk)≥ f(xk) ≥ f(x ∗ ) ψ 0 = lim k → + ∞ψ(xk, αk)≥ f(x ∗ ) Nếu ε = ψ 0 −f(x ∗ )> 0, do f liên tục nên ta có thể chọn x¯ sao cho f(¯x)< f(x ∗ ) + ε
Lấy k đủ lớn sao cho
Ta có ψ 0 ≤ ψ(xk, αk) (vì {ψ(xk, αk)} là dãy giảm hội tụ với ψ 0 )
≤ ψ(¯x, αk) (vì ψ(xk, αk) đạt cực tiểu tại xk)
=ψ 0 Điều này mâu thuẫn Do đó, ε= ψ 0 −f(x ∗ ) = 0, tức là ψ 0 = f(x ∗ )
Tiếp theo, nếu x¯ là điểm hội tụ của {xk}, tức x¯ = limxk 1, theo i/ ψ(xk i , αk i ) ≥ f(xk i )
Từ đây ta suy ra ψ 0 = limψ(xk i, αk i) ≥ f(¯x) Điều này có nghĩa là x¯ là cực tiểu
Chú ý Điểm cực tiểu của ψ(x, α) đều nằm trong tập chấp nhận được.
Mệnh đề 3.1 khẳng định rằng đối với hàm lồi f: R^n → R và tập lồi không rỗng D ⊂ R^n, bài toán tối thiểu hóa f(x) với x thuộc D có những đặc điểm quan trọng Cụ thể, nếu x* là nghiệm tối ưu địa phương, thì x* cũng là nghiệm tối ưu toàn cục Hơn nữa, nếu x* là nghiệm tối ưu địa phương chặt hoặc f là hàm lồi chặt, thì x* sẽ là nghiệm tối ưu toàn cục duy nhất của bài toán.
Giả sử f là hàm lồi khả vi trên R n, thì x ∗ ∈ R n là nghiệm cực tiểu toàn cục của bài toán tối thiểu hóa min{f(x)|x∈ R n} khi và chỉ khi ▽f(x ∗ ) = 0 Một trong những phương pháp để giải bài toán này là thuật toán Fiacco - Cormick.
Hàm mục tiêu: f(x)→ min(max)
Các ràng buộc: gi(x) ≥ 0;i= 1,2, , I hj(x) = 0;j = 1,2, , J Hàm mục tiêu mở rộng được xây dựng ở dạng hàm phạt trong:
X j =1 h 2 j (x) rk là dãy số thực, đơn điệu giảm trong quá trình tính: r 0 > r 1 > r 2 > > 0.
Ba cách chọn giá trị đầu r 0 khi tính P(x, rk) → min a) rk = 1 b) Đặt p(x) I
Lấy x (0) là một điểm trong của miền chấp nhận được,
Trong đó H là ma trận Hessian của hàm p(x) tại x (0)
Thuật toán được mô tả bằng ngôn ngữ lập trình MATLAB như sau: function mfc=method_fiacco_cormick(epxilon, k) format short e; clc; r=1; muy=1/2;
X=[0; 1/2]; ss1; while ss1> epxilon count=0; ss; ep=1/2; lamdak =2/3; Xluu=[1; 1]; while and(ss > epxilon, count < k) count=count + 1; grad=[dh1px(X, r); dh1py(X, r)]; alpha=1; dk=-grad;
%+ xac dinh buoc di toi uu lamdak
X= X+lamdak*dk; ss=chuan1(X - Xluu, 2);
Xluu = X; end; ss1s(r*g(X)); r = r*muy; end; mcf=X; count;
Các kết quả thực hiện thuật toán được cho trong bảng dữ liệu sau đây
Bảng 3.3: Nghiệm xấp xỉ tối ưu sau các bước lặp f(x, y) = x 2 +y 2 g(x, y) =x+y−2
Số bước lặp Sai số Nghiệm xấp xỉ
Hàm mục tiêu: f(x) → min(max)
Hàm mục tiêu mở rộng được xây dựng ở dạng hàm phạt trong:
Dấu + khi tìm minf(x), dấu - khi tìm maxf(x); rk là nhân tử ở bước lặp thứ k; wj là trọng số (thường chọn wj = 1) Thuật toán:
+ Giải bài toán không ràng buộcPk = P(x, rk) =f(x)±rk. m
P j=1 w j g i (x) →min (Sử dụng thuật toán Gradient và quy tắc Armijo)
≤ ε (Trong cài đặt thường chọn điều kiện rk < ε) thỡ thuật toỏn dừng Ngược lại hiệu chỉnh rk +1 =àrk
Thuật toán Carroll được mô tả bằng ngôn ngữ MATLAB như sau: function mc=method_carroll(epxilon, k) format short e clc; r=1;
In the iterative process, we initialize X with the values [2; 2] and set a threshold for r, ensuring it remains greater than 10 and less than -10 The count starts at zero, with a stopping condition based on the convergence of ss to epsilon and the count being less than k We compute the gradient using the functions dh1px and dh1py, and set the initial step size alpha to 1 The search direction dk is determined as the negative gradient We then adjust alpha by checking the improvement in the objective function p, continuing to update alpha by multiplying it with lamda until the condition is satisfied Finally, we capture the optimal step size lamdak.
X= X+lamdak*dk; ss=chuan1(X - Xluu, 2);
Các kết quả thực hiện thuật toán được cho trong bảng dữ liệu sau đây
Bảng 3.4: Nghiệm xấp xỉ tối ưu sau các bước lặp f(x, y) = x 2 +y 2 g(x, y) =x+y−2
Số bước lặp Sai số Nghiệm xấp xỉ
B Phương pháp hàm phạt điểm ngoài
Hàm phạt p(x) định nghĩa bởi p(x) m
X i=1 θ(gi(x)) trong đó θ là một hàm một biến liên tục và thỏa mãn θ(y) = 0 nếu y ≤ 0 và θ(y) > 0 nếu y > 0.
Thông thường, hàm phạt p(x) có dạng p(x) : m
[max{0, gi(x)}] 2 Hàm mục tiêu của dãy bài toán tối ưu không ràng buộc tương ứng với bài toán (P) là ψ(x, αk) =f(x) +αkp(x)
Dãy tham số {αk} là dãy số dương, tăng dần đến vô cùng Đại lượng αkp(x) thể hiện mức độ phạt; khi x là phương án chấp nhận được của bài toán (P), lượng phạt bằng 0 Ngược lại, nếu x không phải là phương án chấp nhận được, nó sẽ phải chịu mức phạt là αkp(x).
Bước chuẩn bị: Cho số ε > 0 đủ bé (để kiểm tra điều kiện dừng của thuật toán) Chọn một điểm x 1 ∈ R n Chọn một tham số phạt α 1 > 0 và một số à ∈ (0,1) Đặt k = 1;
Bước k 1 : Giải bài toán tối ưu không ràng buộc minψ(x, αk) với điều kiện x∈ R n
Gọi nghiệm của bài toán này là xk +1.
Bước k2: if αkp(x k+1 )< ε Then Dừng thuật toán (lấy x k+1 là nghiệm tối ưu của bài toán (P)
Bước k 3 : Đặt tham số phạt mới αk +1 := àαk Đặt k := k+ 1 Chuyển vềBước k. Định lí 3.3
Thuật toán 3.3 có những đặc điểm quan trọng như sau: Đầu tiên, hàm ψ(x, α) luôn lớn hơn hoặc bằng f(x) với mọi α > 0 và x thuộc R n Thứ hai, dãy {ψ(xk, αk)} sẽ tăng lên khi αk tăng Cuối cùng, dãy {ψ(xk, αk)} hội tụ đến giá trị tối ưu của bài toán (P) khi αk tiến tới vô cùng, và mọi điểm tích lũy của xk đều là nghiệm tối ưu của (P).
Hàm mục tiêu: f(x) → min(max)
Các ràng buộc: gi(x) ≥ 0;i= 1,2, , I hj(x) = 0;j = 1,2, , J Hàm mục tiêu mở rộng được xây dựng ở dạng hàm phạt ngoài:
Trong đó: wi = 1 đối với gi(x) ≥ 0 wi = 0 đối với gi(x) < 0
Thuật toán được mô tả bằng ngôn ngữ MATLAB như sau function mp=pietrzykowski_chuan(epxilon, k) format short clc; t=4/3;
In the optimization process, we start with an initial point X set to [0; 0] and define a stopping condition based on the difference ss1 between the function p(X, t) and f(X) The loop continues while ss1 remains greater than a small threshold, epxilon, with a maximum iteration count, k Within this loop, we compute the gradient of the function using partial derivatives dh1px and dh1py, initializing the step size alpha to 1 The descent direction dk is determined as the negative gradient We adjust alpha by reducing it with a factor of lamda (2/3) until the improvement in the function value meets a specified condition The final step size, lamdak, is established once the criteria are satisfied.
X= X+lamdak*dk; ss=chuan1(X - Xluu, 2);
Xluu = X; end; ss2=chuan1(X-Xluu1, 2)
Xluu1 = X; ss1=p(X, t)-f(X) t=t*muy end; mcf=X
Các kết quả thực hiện thuật toán được cho trong bảng dữ liệu sau đây
Bảng 3.5: Nghiệm xấp xỉ tối ưu sau các bước lặp f(x, y) = x 2 +y 2 g(x, y) =x+y−3
Số bước lặp Sai số Nghiệm xấp xỉ
Luận văn tập trung vào việc nghiên cứu các thuật toán giải gần đúng cho bài toán quy hoạch phi tuyến có ràng buộc, và đã đạt được những kết quả quan trọng trong lĩnh vực này.
1 Trình bày các thuật toán cơ bản giải mô hình bài toán quy hoạch tuyến tính bao gồm: Thuật toán hình học, thuật toán đơn hình.
2 Nghiên cứu mô hình bài toán quy hoạch lồi tổng quát.
3 Nghiên cứu các thuật toán tìm nghiệm tối ưu của hàm lồi một biến số, cài đặt các thuật toán trên ngôn ngữ lập trình MATLAB.