Bài giảng Tối ưu hóa trong thiết kế cơ khí - Chương 11: Ứng dụng MATLAB giải các bài toán tối ưu hóa

x – xuất ra giá trị x làm cho hàm mục tiêu đạt cực tiểu fval – xuất ra giá trị hàm mục tiêu tại điểm cực tiểu x exitflag – xuất ra giá trị để xác định điều kiện dừng tính toán, cụ thể là: • exitflag=1: có nghĩa là hàm đã hội tụ tại điểm lời giải x nếu Stopping Criteria = 'TolX‘ • exitflag=0: có nghĩa là số lượng tính hàm mục tiêu hoặc số lượng vòng lặp đã đạt ngưỡng cho phép nếu Stopping Criteria = 'MaxIter' hoặc 'MaxFunEvals' • exitflag=-1: có nghĩa là thuật toán bị dừng vì hàm đầu ra • exitflag=-2: có nghĩa là khoảng giá trị bị sai (a>b) output – xuất ra các thông tin về số vòng lặp tính toán, số lần tính hàm số, các thuật toán tại các bước tính và thông báo cuối cùng Objfun – tên của M-file xác định hàm mục tiêu a,b – giá trị 2 biên của biến x options – các thuộc tính cần thiết cho việc giải bài toán bằng hàm fminbnd, được xác định trước dòng cú pháp

pdf51 trang | Chia sẻ: thanhle95 | Ngày: 15/07/2021 | Lượt xem: 29 | Lượt tải: 0download
Bạn đang xem trước 20 trang tài liệu Bài giảng Tối ưu hóa trong thiết kế cơ khí - Chương 11: Ứng dụng MATLAB giải các bài toán tối ưu hóa, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
Trường Đại học Công nghiệp thành phố Hồ Chí Minh Khoa Công nghệ Cơ khí CHƯƠNG 11: ỨNG DỤNG MATLAB GIẢI CÁC BÀI TOÁN TỐI ƯU HÓA Thời lượng: 3 tiết 2 Thống nhất phiên bản MATLAB Trường câu lệnh Các biến tính toán xong Trường lịch sử các câu lệnh đã dùng Chọn thư mục làm việc 3 Làm quen với MATLAB Dấu >> Ký tự nhắc mặc định trong MATLAB, đầu câu lệnh >> Dấu ; Dấu chấm phẩy ở cuối dòng sẽ tránh việc in kết quả ra trường câu lệnh (khi ta không cần in kết quả ra cho cửa sổ ngắn gọn) >> a=2; Dấu Dấu ba chấm ở cuối dòng cho phép tiếp tục code ở dòng tiếp theo >> a= 2 help tên_câu_lệnh Hiển thị các thông tin chi tiết về câu lệnh mà người dùng cần sử dụng >>help linprog Chữ cái viết thường và viết hoa được phân biệt khác nhau trong MATLAB >> a=2 >>A=2 >>A+a MATLAB coi tất cả các biến đều ở dạng mảng (arrays) Tên biến Trong MATLAB tên biến được bắt đầu từ chữ cái và có chiều dài tối đa 31 ký tự bao gồm chữ cái (in hoa và viết thường là khác nhau), số và dấu gạch dưới >>A_a_bc_9=12 Các phép toán thông dụng + - * / ^ >>2+3*6^2/4-7 Tránh trùng với các tên biến tích hợp của hệ thống, như các hằng số, tên hàm pi sin cos v.v.. >>pi 4 Ma trận trong MATLAB Đối tượng Cách thực hiện Ví dụ Véctơ hàng Ngoặc vuông, Dấu cách A=[1 2 3 4] Véctơ cột Cách 1: Ngoặc vuông và xuống dòng B=[5 2 ] Cách 2: Ngoặc vuông và dấu chấm phẩy B=[5;2;3] Cách 3: Đảo véc tơ hàng thành cột bằng dấu ‘ B=[5 2 3]' Ma trận [mxn] Cách 1: áp dụng véc tơ hàng và cột: dấu cách và xuống dòng A=[1 2 3 4 5 6 7 8 9] Cách 2: Dấu cách và dấu chấm phẩy A=[1 2 3;4 5 6; 7 8 9] Ma trận 1 đơn vị ở đường chéo - eye(m,n) – ma trận mxn - eye(n) – ma trận vuông kích thước n eye(4) eye(3,4) Ma trận toàn 1 ones(m,n) hoặc ones(n) ones(3) Ma trận toàn 0 zeros(m,b) hoặc zeros(n) zeros(4) Tạo ra 1 dãy cấp số cộng M:icr:N M:N – khi icr=1 theo mặc định 100:-7:50 50:100 5 Ma trận trong MATLAB (tiếp) Đối tượng Cách thực hiện Ví dụ Phần tử trong ma trận Dấu ngoặc tròn: - A(i,j) chọn phần tử hàng i, cột j của ma trận A - A(m1:m2,n1:n2) Chọn các phần tử từ hàng m1 đến hàng m2, cột n1 đến cột n2 A(2,3) A(2:3,1:3) 6 Kịch bản (Scripts) Là một dạng M-file đơn giản nhất, không có biến vào và biến ra. Nó chỉ gồm một chuỗi các trình tự câu lệnh. 7 Hàm số (Function) function [O_1,O_2,,O_m] = function_name (I_1,I_2,,I_n) %----------------------------------------------------------------------- % Ở dưới ghi function body end 8 function [ p ] = func1( x ) %func1 of this function goes here %Detailed explanation goes here p=x^3-2*x+cos(x); end 9 function [x1,x2] = PTB2(a,b,c) % Ham PTB2 dung de giai phuong trinh bac 2 co dang a*x^2+b*x+c=0 % Tham bien dau vao la 3 he so a, b, c trong do a !=0 Delta = b^2-4*a*c; x1 = (-b+sqrt(Delta))/(2*a); x2 = (-b-sqrt(Delta))/(2*a); [x1 x2] end [x1, x2] = feval('PTB2',1,2,-5) 10 Giới thiệu về Optimization Toolbox STT Loại bài toán Hàm sử dụng 1 Cực tiểu hóa hàm 1 biến số (Scalar Minimization) fminbnd 2 Cực tiểu hóa hàm nhiều biến số không có ràng buộc (Unconstrained Minimization) fminunc fminsearch 3 Quy hoạch tuyến tính (Linear Programming) linprog 4 Quy hoạch bậc hai (Quadratic Programming) quadprog 5 Cực tiểu hóa hàm phi tuyến với các ràng buộc tuyến tính và phi tuyến (Constrained Minimization) fmincon 6 Cực tiểu hóa nửa vô hạn (Semi-Infinite Minimization) fseminf 11 Các thuật toán của các công cụ 12 Các thuật toán của các công cụ 13 CỰC TIỂU HÓA HÀM MỘT BIẾN SỐ   min;f x a x b   [x,fval,exitflag,output] = fminbnd(@Objfun,a,b,options) x – xuất ra giá trị x làm cho hàm mục tiêu đạt cực tiểu fval – xuất ra giá trị hàm mục tiêu tại điểm cực tiểu x exitflag – xuất ra giá trị để xác định điều kiện dừng tính toán, cụ thể là: • exitflag=1: có nghĩa là hàm đã hội tụ tại điểm lời giải x nếu Stopping Criteria = 'TolX‘ • exitflag=0: có nghĩa là số lượng tính hàm mục tiêu hoặc số lượng vòng lặp đã đạt ngưỡng cho phép nếu Stopping Criteria = 'MaxIter' hoặc 'MaxFunEvals' • exitflag=-1: có nghĩa là thuật toán bị dừng vì hàm đầu ra • exitflag=-2: có nghĩa là khoảng giá trị bị sai (a>b) output – xuất ra các thông tin về số vòng lặp tính toán, số lần tính hàm số, các thuật toán tại các bước tính và thông báo cuối cùng Objfun – tên của M-file xác định hàm mục tiêu a,b – giá trị 2 biên của biến x options – các thuộc tính cần thiết cho việc giải bài toán bằng hàm fminbnd, được xác định trước dòng cú pháp 14 CỰC TIỂU HÓA HÀM MỘT BIẾN SỐ Tìm cực tiểu hàm số    2 0.75 1 0.65 0.65 arctan ; 0;0.5 1 f x x x x x           1) Bước 1: Tạo 1 thư mục cho bài toán, ví dụ fminbnd1 Vào trong thư mục 15 2) Bước 2: Tạo M-file hàm mục tiêu, ví dụ Objfun.m function f = Objfun( x ) %OBJFUN Summary of this function goes here % Detailed explanation goes here f= 0.65 - (0.75/(1+x^2))- 0.65*x*atan(1/x); end Sửa lại code của hàm 16 3) Bước 3: Tạo M-file Script lời giải, ví dụ Solve.m clear;clc;format long;warning('off'); % Nhap mien xac dinh cua bien x: a<=x<=b a=0; b=0.5; % Chon Algorithm (Chon mot trong so duoi day) %Alg='active-set'; %Alg='trust-region-reflective'; Alg='interior-point'; %Alg='levenberg-marquardt'; %Alg='trust-region-dogleg'; %Alg='lm-line-search'; % Chon Stopping Criteria GTN=1e-4;GTL=1e4; % Neu Stopping Criteria la sai so cua tham bien StCr='TolX'; % Neu Stopping Criteria la so luong Iterations %StCr='MaxIter'; % Neu Stopping Criteria la so luong tinh cac ham so %StCr='MaxFunEvals'; if strcmp(StCr,'MaxIter')==1 || strcmp(StCr,'MaxFunEvals')==1 GT=GTL; elseif strcmp(StCr,'TolX')==1 GT=GTN; end options = optimset('Algorithm',Alg,'Display','iter',StCr,GT,'PlotFcns',@optimplotfval); [x,fval,exitflag,output]=fminbnd(@Objfun,a,b,options) 17 0 1 2 3 4 5 6 7 8 9 -0.32 -0.31 -0.3 -0.29 -0.28 -0.27 -0.26 -0.25 -0.24 -0.23 Iteration F u n c ti o n v a lu e Current Function Value: -0.31002 18 CỰC TIỂU HÓA HÀM NHIỀU BIẾN SỐ KHÔNG RÀNG BUỘC    1 2min; , , , nf x x x x x [x,fval,exitflag,output, grad,hessian] = fminunc(@Objfun,x0,options) x – xuất ra véctơ tham biến x làm cho hàm mục tiêu đạt cực tiểu fval – xuất ra giá trị hàm mục tiêu tại điểm cực tiểu x exitflag – xuất ra giá trị để xác định điều kiện dừng tính toán, cụ thể là: • exitflag>0: có nghĩa là hàm đã hội tụ tại điểm lời giải x • exitflag=0: có nghĩa là số lượng tính hàm mục tiêu hoặc số lượng vòng lặp đã đạt ngưỡng cho phép nếu Stopping Criteria = 'MaxIter' hoặc 'MaxFunEvals' • exitflag<0: Hàm không hội tụ tại điểm lời giải output – xuất ra các thông tin về số vòng lặp tính toán, số lần tính hàm số, các thuật toán tại các bước tính, v.v grad – xuất ra véctơ Gradient của hàm số tại điểm lời giải hessian – xuất ra ma trận Hessian của hàm số tại điểm lời giải x0 – véc tơ tham biến khởi đầu Objfun - tên của M-file xác định hàm mục tiêu 19 Tìm cực tiểu hàm số:    1 2 1 2 1 2 50 20 , minf f x x x x x x     x 1) Bước 1: Tạo 1 thư mục cho bài toán, ví dụ MultiUncon1 2) Bước 2: Tạo M-file hàm mục tiêu, ví dụ Objfun.m function f = Objfun( x ) %OBJFUN Summary of this function goes here % Detailed explanation goes here f = x(1)*x(2) + 50/x(1) + 20/x(2); end 3) Bước 3: Tạo M-file Script lời giải, ví dụ Solvefminunc.m 20 clear;clc;format long;warning('off'); % Nhap vecto tham bien khoi dau: x0 = [1,1]; % Chon Algorithm (Chon mot trong so duoi day) %Alg='active-set'; %Alg='trust-region-reflective'; %Alg='interior-point'; %Alg='levenberg-marquardt'; Alg='trust-region-dogleg'; %Alg='lm-line-search'; % Chon Stopping Criteria GTN=1e-4;GTL=1e4; % Neu Stopping Criteria la sai so cua tham bien %StCr='TolX'; % Neu Stopping Criteria la sai so cua ham so StCr='TolFun'; % Neu Stopping Criteria la so luong Iterations %StCr='MaxIter'; % Neu Stopping Criteria la so luong tinh cac ham so %StCr='MaxFunEvals'; if strcmp(StCr,'MaxIter')==1 || strcmp(StCr,'MaxFunEvals')==1 GT=GTL; elseif strcmp(StCr,'TolX')==1 || strcmp(StCr,'TolFun')==1 GT=GTN; end options = optimset('Algorithm',Alg,'Display','iter',StCr,GT,'PlotFcns',@optimplotfval); [x,fval,exitflag,output, grad,hessian] = fminunc(@Objfun,x0,options) 21 22 0 2 4 6 8 10 12 14 30 35 40 45 50 55 60 65 70 75 Iteration F u n c ti o n v a lu e Current Function Value: 30 23 CỰC TIỂU HÓA HÀM NHIỀU BIẾN SỐ KHÔNG RÀNG BUỘC    1 2min; , , , nf x x x x x [x,fval,exitflag,output] = fminsearch(@Objfun,x0,options) x – xuất ra véctơ tham biến x làm cho hàm mục tiêu đạt cực tiểu fval – xuất ra giá trị hàm mục tiêu tại điểm cực tiểu x exitflag – xuất ra giá trị để xác định điều kiện dừng tính toán, cụ thể là: • exitflag>0: có nghĩa là hàm đã hội tụ tại điểm lời giải x • exitflag=0: có nghĩa là số lượng tính hàm mục tiêu hoặc số lượng vòng lặp đã đạt ngưỡng cho phép nếu Stopping Criteria = 'MaxIter' hoặc 'MaxFunEvals' • exitflag<0: Hàm không hội tụ tại điểm lời giải output – xuất ra các thông tin về số vòng lặp tính toán, số lần tính hàm số, các thuật toán tại các bước tính, v.v x0 – véc tơ tham biến khởi đầu Objfun - tên của M-file xác định hàm mục tiêu Cú pháp này sử dung pp Nelder-Mead và chỉ tìm được cực tiểu local 24 4) Bước 4: Tạo M-file Script lời giải, ví dụ Solvefminsearch.m clear;clc;format long;warning('off'); % Nhap vecto tham bien khoi dau: x0 = [1,1]; % Chon Algorithm (Chon mot trong so duoi day) %Alg='active-set'; %Alg='trust-region-reflective'; %Alg='interior-point'; %Alg='levenberg-marquardt'; Alg='trust-region-dogleg'; %Alg='lm-line-search'; % Chon Stopping Criteria GTN=1e-4;GTL=1e4; % Neu Stopping Criteria la sai so cua tham bien %StCr='TolX'; % Neu Stopping Criteria la sai so cua ham so StCr='TolFun'; % Neu Stopping Criteria la so luong Iterations %StCr='MaxIter'; % Neu Stopping Criteria la so luong tinh cac ham so %StCr='MaxFunEvals'; if strcmp(StCr,'MaxIter')==1 || strcmp(StCr,'MaxFunEvals')==1 GT=GTL; elseif strcmp(StCr,'TolX')==1 || strcmp(StCr,'TolFun')==1 GT=GTN; end options = optimset('Algorithm',Alg,'Display','iter',StCr,GT,'PlotFcns',@optimplotfval); [x,fval,exitflag,output] = fminsearch(@Objfun,x0,options) 25 Optimization terminated: the current x satisfies the termination criteria using OPTIONS.TolX of 1.000000e-004 and F(X) satisfies the convergence criteria using OPTIONS.TolFun of 1.000000e-004 26 0 5 10 15 20 25 30 35 40 45 30 35 40 45 50 55 60 65 70 75 Iteration F u n c ti o n v a lu e Current Function Value: 30 27 QUY HOẠCH TUYẾN TÍNH       minT m n p n f              x c x A x a B x b lb x ub 1 1 1 1 1 1 2 2 2 2 2 2 ; ; ; ; ; ; n n n n n n c x a b l u c x a b l u c x a b l u                                                                              c x a b lb ub     11 12 1 21 22 2 1 2 11 12 1 21 22 2 1 2 n n m n m m mn n n p n p p pn a a a a a a a a a b b b b b b b b b                            A B 28 [x,fval,exitflag,output,lambda] = linprog(c,A,a,B,b,lb,ub,x0,options) x – xuất ra véctơ tham biến x làm cho hàm mục tiêu đạt cực tiểu fval – xuất ra giá trị hàm mục tiêu tại điểm cực tiểu x exitflag – xuất ra giá trị để xác định điều kiện dừng tính toán, cụ thể là: • exitflag=1: có nghĩa là hàm đã hội tụ tại điểm lời giải x • exitflag=0: có nghĩa là số lượng tính hàm mục tiêu hoặc số lượng vòng lặp đã đạt ngưỡng cho phép nếu Stopping Criteria = 'MaxIter' • exitflag=-2: Không tìm được một điểm hợp lệ nào • exitflag=-3: Miền ràng buộc là vô hạn • exitflag=-4: Giá trị NaN (không phải là số) xuất hiện trong quá trình tính toán • exitflag=-5: Cả bài toán gốc và đối ngẫu của nó đều vô nghiệm • exitflag=-7: Hướng tìm kiếm càng lúc càng nhỏ, không thể tìm được các điểm tốt hơn output – xuất ra các thông tin về số vòng lặp tính toán, số lần tính hàm số, các thuật toán tại các bước tính, v.v x0 – véc tơ tham biến khởi đầu c,A,a,B,b,lb,ub – lần lượt các véc tơ, ma trận dữ liệu bài toán 29 Giải bài toán quy hoạch tuyến tính sau:    1 2 8 2 0 ; ; 10 ; ; ; ; 3 0 3 x x                             c x a b lb ub       3 2 1 2 2 1 ; 0 1           A B Đổi lại yêu cầu của mục tiêu:   1 22 3 minf x x   x Nhận diện được các véc tơ và ma trận dữ liệu đề bài: 1) Bước 1: Phân tích bài toán 2) Bước 2: Tạo M-file script cho bài toán, ví dụ LP1.m 30 clear;clc;format long;warning('off'); c=[-2,-3] A=[1,2; 2,1; 0,1] a=[8,10,3] B=[] b=[] lb=zeros(2,1) ub=[] x0=[] options = optimset('LargeScale', 'off', 'Simplex', 'on','Display','iter') [x,fval,exitflag,output,lambda] = linprog(c,A,a,B,b,lb,ub,x0,options) 31 Giải bài toán quy hoạch tuyến tính sau:         1 1 2 2 minTf            x c x A x a A x a B x b lb x ub 1 2 3 1 2 4 5 6 1 2 7 2 5 0 2 3 7 5 10 1 2 ; ; ; ; ; ; ; 4 8 1 37 15 5 8 5 4 6 1 10 x x x x x x                                                                                          c x a a b lb ub      1 2 1 2 3 0 0 0 0 1 2 3 0 0 3 0 0 0 2 1 1 1 1 1 1 1 ; ; 0 0 1 2 3 0 0 4 0 2 0 3 5 0 3 0 1 0 0 0 0 1 2 3                         A A B 1) Bước 1: Phân tích bài toán 32 2) Bước 2: Tạo M-file script cho bài toán, ví dụ LP2.m clear;clc;format long;warning('off'); c=[1,-2,3,-4,5,-6]' A1=[1,2,3,0,0,0; 0,1,2,3,0,0; 0,0,1,2,3,0; 0,0,0,1,2,3] A2=[3,0,0,0,-2,1; 0,4,0,-2,0,3] B=[1,1,1,1,1,1; 5,0,-3,0,1,0] a1=[5,7,8,8]' a2=[5,7]' b=[10,15]' A=[-A1; A2] a=[-a1; a2] lb=[-2,0,-1,-1,-5,1]' ub=[7,2,2,3,4,10]' x0=[] options = optimset('LargeScale', 'off', 'Simplex', 'on','Display','iter') [x,fval,exitflag,output,lambda] = linprog(c,A,a,B,b,lb,ub,x0,options) 33 QUY HOẠCH BẬC HAI         1 min 2 T T n n m n p n f                x x H x c x A x a B x b lb x ub     11 12 1 21 22 2 1 2 11 12 1 21 22 2 1 2 n n m n m m mn n n p n p p pn a a a a a a a a a b b b b b b b b b                            A B 1 1 1 1 1 1 2 2 2 2 2 2 ; ; ; ; ; ; n n n n n n c x a b l u c x a b l u c x a b l u                                                                              c x a b lb ub [H] chính là ma trận Hessian của hàm mục tiêu 34 [x,fval,exitflag,output,lambda] = quadprog(H,c,A,a,B,b,lb,ub,x0,options) x – xuất ra véctơ tham biến x làm cho hàm mục tiêu đạt cực tiểu fval – xuất ra giá trị hàm mục tiêu tại điểm cực tiểu x exitflag – xuất ra giá trị để xác định điều kiện dừng tính toán, cụ thể là: • exitflag=1: có nghĩa là hàm đã hội tụ tại điểm lời giải x • exitflag=3: có nghĩa là sự thay đổi giá trị hàm mục tiêu đã nhỏ hơn sai số cho phép • exitflag=4: có nghĩa là cực tiểu địa phương đã được tìm thấy • exitflag=0: có nghĩa là số lượng tính hàm mục tiêu hoặc số lượng vòng lặp đã đạt ngưỡng cho phép nếu Stopping Criteria = 'MaxIter' • exitflag=-2: Bài toán không giải được • exitflag=-3: Miền ràng buộc là vô hạn • exitflag=-4: Hướng tìm kiếm không phải là hướng tốt, không thể tìm được các điểm tốt hơn • exitflag=-7: Giá trị của hướng tìm kiếm quá nhỏ, không có tiến triển • output – xuất ra các thông tin về số vòng lặp tính toán, số lần tính hàm số, các thuật toán tại các bước tính, v.v x0 – véc tơ tham biến khởi đầu H,c,A,a,B,b,lb,ub – lần lượt các véc tơ, ma trận dữ liệu bài toán 35 2 1 430 2 2 2 1 2 4 1 2 1 3 2 3 2 4 3 4 0 4 8 72 5 93 6 x xx x x x x x x x x x x x x x            4 4 6 12 0 0 0 7 7 4 9 9 5 8 4 5 4 8                   H Dựa vào mầu để nhận diện 36 Giải bài toán quy hoạch bậc 2 sau: 1) Bước 1: Phân tích bài toán           1 2 2 2 8 2 0 ; ; 10 ; ; ; ; 3 0 3 1 2 2 0 ; 2 1 ; 0 4 0 1 x x                                                  c x a b lb ub H A B 2) Bước 2: Tạo M-file script cho bài toán, ví dụ QP1.m 37 clear;clc;format long;warning('off'); H=[2,0; 0,4]; c=[2,3]'; A=[1,2; 2,1; 0,1]; a=[8,10,3]'; B=[]; b=[]'; lb=[0,0]'; ub=[inf,inf]'; x0=[]'; % Chon Algorithm (Chon mot trong so duoi day) %Alg='active-set'; %Alg='trust-region-reflective'; %Alg='interior-point'; %Alg='levenberg-marquardt'; Alg='trust-region-dogleg'; %Alg='lm-line-search'; % Chon Stopping Criteria GTN=1e-4;GTL=1e4; % Neu Stopping Criteria la sai so cua tham bien %StCr='TolX'; % Neu Stopping Criteria la sai so cua ham so StCr='TolFun'; % Neu Stopping Criteria la so luong Iterations %StCr='MaxIter'; if strcmp(StCr,'MaxIter')==1 GT=GTL; elseif strcmp(StCr,'TolX')==1 || strcmp(StCr,'TolFun')==1 GT=GTN; end options = optimset('Algorithm',Alg,'Display','iter',StCr,GT); [x,fval,exitflag,output,lambda]=quadprog(H,c,A,a,B,b,lb,ub,x0,options) % Ve do thi x1=[-4:0.1:4]; x2=[-4:0.1:4]; [X1,X2]=meshgrid(x1,x2); f=X1.^2 + 2*X2.^2 + 2*X1 + 3*X2; meshc(X1,X2,f); hold on plot(x(1),x(2),'r*') 38 Giải bài toán quy hoạch bậc 2 sau: 1) Bước 1: Phân tích bài toán           1 2 3 3 3 4 0 6 6 ; ; ; ; 0 ; ; 2 12 0 2 1 0 1 1 1 1 4 2 ; ; 1 1 2 0 2 4 x x x                                                           c x a b lb ub H A B 2) Bước 2: Tạo M-file script cho bài toán, ví dụ QP2.m 39 clear; clc; format long; H=[2,1,0; 1,4,2; 0,2,4]; c=[4,6,12]'; A=[1,1,1; -1,-1,2]; a=[6,2]'; B=[]; b=[]'; lb=[0,0,0]'; ub=[inf,inf,inf]'; x0=[]'; % Chon Algorithm (Chon mot trong so duoi day) %Alg='active-set'; %Alg='trust-region-reflective'; %Alg='interior-point'; %Alg='levenberg-marquardt'; Alg='trust-region-dogleg'; %Alg='lm-line-search'; % Chon Stopping Criteria GTN=1e-4;GTL=1e4; % Neu Stopping Criteria la sai so cua tham bien %StCr='TolX'; % Neu Stopping Criteria la sai so cua ham so StCr='TolFun'; % Neu Stopping Criteria la so luong Iterations %StCr='MaxIter'; if strcmp(StCr,'MaxIter')==1 GT=GTL; elseif strcmp(StCr,'TolX')==1 || strcmp(StCr,'TolFun')==1 GT=GTN; end options = optimset('Algorithm',Alg,'Display','iter',StCr,GT); [x,fval,exitflag,output,lambda]=quadprog(H,c,A,a,B,b,lb,ub,x0,options) %Neu tim max f: doi cua f se chinh la gia tri cuc dai %[x,fval,exitflag,output,lambda]=QUADPROG(H,c,A,a,B,b,lb,ub,x0,options) 40 Cực tiểu hóa hàm phi tuyến với các ràng buộc            1 2 min 0; 1.. 0; 1.. j k m n p n T n f g j r h k s x x x                      x x x A x a B x b lb x ub x 1 1 1 1 1 2 2 2 2 2 ; ; ; ; n n n n n x a b l u x a b l u x a b l u                                                     
Tài liệu liên quan