Chương trình giải ví dụ thuật toán Frank Wolfe

Một phần của tài liệu Bài toán quy hoạch phi tuyến có ràng buộc (Trang 55 - 62)

Đầu vào. Ví dụ ở phần trên.

Đầu ra. Nghiệm cực tiểu và giá trị cực tiểu tại nghiệm. Chương trình được viết trên maple 16 như sau

> restart;

> with(linalg); with(LinearAlgebra); with(student); with(geometry); with(simplex); with(combinat); # Nhập hàm hai biến

> f := proc (x, y) options operator, arrow; x^2+2*y^2-16*x-20*y end proc; # Điều kiện ràng buộc

> dkrb := {x >= 0, y >= 0, -2*x-y <= -2,

-x+y <= 4, -x+2*y <= 8, x+y <= 10}; # Tạo thủ tục tính đạo hàm riêng của f

> dhrx := proc (a)

local x, y, g; g := diff(f(x, y), x); x := a; eval(g) end proc;

> dhry := proc (b)

local x, y, g; g := diff(f(x, y), y); y := b; eval(g) end proc;

# Tim gia tri x^1 bang cach giai qui hoach tuyen tinh voi dkrb nhu tren > fbd := proc (x, y) options operator, arrow; x+y end proc;

> minimize(fbd(x, y), dkrb);

> tnbd := minimize(fbd(x, y), dkrb); > assign(tnbd);

#Tao mang luu tru nghiem

> ng := array(1 .. 30); g := array(1 .. 30); ngtg := array(1 .. 2); d := array(1 .. 30); tk := array(1 .. 30);

> for i to 30 do

ng[i] := array(1 .. 2); g[i] := array(1 .. 2); d[i] := array(1 .. 2)

end do; > k := 1;

# Gan gia tri nghiem ban dau vaof nghiem[1] ung voi x^1 > ng[k][1] := x;

> ng[k][2] := y;

> unassign(’x’); unassign(’y’); # Tinh gradient cua gia tri ban dau > g[k][1] := dhrx(ng[k][1]);

> g[k][2] := dhry(ng[k][2]); > eval(g[k]);

> unassign(’x’); unassign(’y’); #Ham tich vo huong cua gradient > tvhg := proc (x, y)

options operator, arrow; g[k][1]*(x-ng[k][1])+g[k][2]*(y-ng[k][2]) end proc; > eval(tvhg(x, y)); > minimize(tvhg(x, y), dkrb); > tntg := minimize(tvhg(x, y), dkrb); > assign(tntg); > ngtg[1] := x; > ngtg[2] := y; > unassign(’x’); unassign(’y’); # Dieu kien cho vong lap

> dk := g[k][1]*(ngtg[1]-ng[k][1])+g[k][2]*(ngtg[2]-ng[k][2]); > Digits := 4;

> if dk >= 0 then

print(f(ng[k][1], ng[k][2])); printl("Tai diem: "); print(ng[k]) end if;

> while dk < 0 do

g[k][1] := dhrx(ng[k][1]); g[k][2] := dhry(ng[k][2]); tvhg := proc (x, y) options operator, arrow;

g[k][1]*(x-ng[k][1])+g[k][2]*(y-ng[k][2]) end proc; minimize(tvhg(x, y), dkrb); (adsbygoogle = window.adsbygoogle || []).push({});

tntg := minimize(tvhg(x, y), dkrb); assign(tntg); ngtg[1] := x; ngtg[2] := y; unassign(’x’); unassign(’y’); dk := g[k][1]*(ngtg[1]-ng[k][1])+g[k][2]*(ngtg[2]-ng[k][2]); d[k][1] := ngtg[1]-ng[k][1]; x := ng[k][1]+t*d[k][1]; d[k][2] := ngtg[2]-ng[k][2]; y := ng[k][2]+t*d[k][2]; if ‘and‘(d[k][1] = 0, d[k][2] = 0) then break end if; ‘&varphi;‘ := proc (t) options operator, arrow;

f(x, y) end proc; tkk := fsolve(diff(‘&varphi;‘(t), t) = 0); if tkk >= 1 then tk[k] := 1 else tk[k] := tkk end if; tk[k]; ng[k+1][1] := ng[k][1]+tk[k]*d[k][1]; ng[k+1][2] := ng[k][2]+tk[k]*d[k][2]; f(ng[k+1][1], ng[k+1][2]); k := k+1;

unassign(’x’); unassign(’y’) end do;

Kết quả của quá trình chạy chương trình ví dụ được cho ở bảng sau

k dk tk xk+1 f(xk+1)

1 (3; 6)T 1 (4; 6)T −96

2 (6;−6)T 0, 33333333 (6; 4)T −108.000

3 (−2; 2)T 0 (6; 4)T −108.000

KẾT LUẬN

Luận văn đã tìm hiểu và nghiên cứu bao quát được các phương pháp giải bài toán tối ưu phi tuyến có ràng buộc với các ưu nhược điểm được nêu ở phần mở đầu.

Tiếp theo là một số kiến thức chuẩn bị giúp ích cho việc chứng minh và giải thích một số vấn đề liên quan đến hai thuật toán siêu phẳng cắt Kelley và Frank- Wolfe được nêu ở chương chính.

Cuối cùng là phần nội dung, luận văn đã trình bày được quá trình thực hiện thuật toán, giải thích điều kiện dừng của thuật toán và ứng dụng công cự lập trình Maple để kiểm tra kết quả ví dụ một cách nhanh chóng.

Tuy nhiên, luận văn này chỉ dừng lại ở việc giải các ví dụ đối với f(x)là hàm hai biến đơn giản. Do vậy, hướng phát triển tiếp theo của luận văn đó là giải quyết bài toán nhiều biến và tổng quát hơn..

Mặc dù tôi đã cố gắng để hoàn thành luận văn nhưng không thể tránh được có thiếu sót, rất mong nhận được sự góp ý chân thành của quý thầy cô và bạn đọc.

Tài liệu tham khảo

[1] Nguyễn Hữu Điển (2006),Một số vấn đề về thuật toán, NXB Giáo dục.

[2] Nguyễn Nhật Lệ (2001),Tối ưu hóa ứng dụng, NXB Khoa học và kỹ thuật.

[3] Nguyễn Đức Nghĩa - Vũ Văn Thiệu - Trịnh Anh Phúc (2012),Các phương pháp cực tiểu hóa ràng buộc, Bộ môn KHMT, Viện CNTT trường ĐHBK Hà Nội.

[4] Bùi Thế Tâm - Trần Vũ Thiệu (1998), Các phương pháp tối ưu hóa, NXB Giao

thông vận tải.

[5] Nguyễn Hải Thịnh (2006),Tối ưu hóa, NXB Bách khoa Hà Nội.

[6] Danzig G.B and Thapa M.N (2003), Linear programming 2 - Theory and Exten- sions,Springer Verlag, New York Berlin, Heideiberg.

[7] David G.Luenberger - Yingu Ye (2008), Linear and Nonlinear programming,

Dept. of Mgmt, Sience and Engineering Stanford University, Stanford, CA, USA.

[8] Enrique Dell Castillo - Douglas C.montgomery - Daniel R. Mc Carville (1996),

Modified Desirability Function for multiple response optimization, University of

Texes, Arizana state University Tenpe, AZ85287−5906.

[9] Makhatar S.bazara - Hanif d.Sherali - C.M Shetty (2006), Nonlinear program- ming. Theory and Algorithins, John Wiley and Suns, Inc.

[10] Wenya sun - Ya-xiang Yuan (2006),Optimization theory and methods , Sprinjer Science Pusiness Media, LLC,23 street NewYork NY 10013, USA.

(adsbygoogle = window.adsbygoogle || []).push({});

Một phần của tài liệu Bài toán quy hoạch phi tuyến có ràng buộc (Trang 55 - 62)