Bài giảng Tối ưu hóa trong thiết kế cơ khí: Chương 11 - ĐH Công nghiệp TP.HCM

51 74 0
Bài giảng Tối ưu hóa trong thiết kế cơ khí: Chương 11 - ĐH Công nghiệp TP.HCM

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin 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 cung cấp cho người học các kiến thức: Thống nhất phiên bản Matlab, giới thiệu về Optimization Toolbox, cực tiểu hóa hàm một biến số,... Mời các bạn cùng tham khảo.

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 TỐN TỐI ƯU HĨA Thời lượng: tiết Thống phiên MATLAB Các biến tính toán xong Chọn thư mục làm việc Trường lịch sử câu lệnh dùng Trường câu lệnh Làm quen với MATLAB Dấu >> Dấu ; Dấu … Ký tự nhắc mặc định MATLAB, đầu câu lệnh >> Dấu chấm phẩy cuối dòng tránh việc in kết trường >> a=2; câu lệnh (khi ta không cần in kết cho cửa sổ ngắn gọn) >> a=… Dấu ba chấm cuối dòng cho phép tiếp tục code dòng help Hiển thị thông tin chi tiết câu lệnh mà người dùng cần >>help linprog tên_câu_lệnh sử dụng >> a=2 Chữ viết thường viết hoa phân biệt khác MATLAB >>A=2 >>A+a MATLAB coi tất biến dạng mảng (arrays) Trong MATLAB tên biến chữ có chiều >>A_a_bc_9=12 Tên biến dài tối đa 31 ký tự bao gồm chữ (in hoa viết thường khác nhau), số dấu gạch + >>2+3*6^2/4-7 Các phép tốn thơng * dụng / ^ Tránh trùng >>pi với tên pi biến tích hợp sin hệ thống, cos v.v số, tên hàm Ma trận MATLAB Đối tượng Véctơ hàng Cách thực Ví dụ Ngoặc vng, Dấu cách A=[1 4] Cách 1: Ngoặc vng xuống dòng B=[5 ] Cách 2: Ngoặc vuông dấu chấm phẩy B=[5;2;3] Véctơ cột Cách 3: Đảo véc tơ hàng thành cột dấu ‘ B=[5 3]' Cách 1: áp dụng véc tơ hàng cột: dấu cách xuống dòng A=[1 456 9] Cách 2: Dấu cách dấu chấm phẩy A=[1 3;4 6; 9] Ma trận đơn vị đường chéo - eye(m,n) – ma trận mxn - eye(n) – ma trận vng kích thước n eye(4) eye(3,4) Ma trận toàn ones(m,n) ones(n) ones(3) Ma trận toàn zeros(m,b) zeros(n) zeros(4) Ma trận [mxn] Tạo dãy cấp số cộng M:icr:N M:N – icr=1 theo mặc định 100:-7:50 50:100 Ma trận MATLAB (tiếp) Đối tượng Phần tử ma trận Cách thực Dấu ngoặc tròn: - A(i,j) chọn phần tử hàng i, cột j ma trận A - A(m1:m2,n1:n2) Chọn phần tử từ hàng m1 đến hàng m2, cột n1 đến cột n2 Ví dụ A(2,3) A(2:3,1:3) Kịch (Scripts) Là dạng M-file đơn giản nhất, khơng có biến vào biến Nó gồm chuỗi trình tự câu lệnh Hàm số (Function) function [O_1,O_2,…,O_m] = function_name (I_1,I_2,…,I_n) % % Ở ghi function body end function [ p ] = func1( x ) %func1 of this function goes here %Detailed explanation goes here p=x^3-2*x+cos(x); end function [x1,x2] = PTB2(a,b,c) % Ham PTB2 dung de giai phuong trinh bac co dang a*x^2+b*x+c=0 % Tham bien dau vao la he so a, b, c 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) Giới thiệu Optimization Toolbox STT Loại tốn Cực tiểu hóa hàm biến số (Scalar Minimization) 10 Hàm sử dụng fminbnd Cực tiểu hóa hàm nhiều biến số khơng có ràng buộc fminunc (Unconstrained Minimization) fminsearch Quy hoạch tuyến tính linprog (Linear Programming) Quy hoạch bậc hai quadprog (Quadratic Programming) Cực tiểu hóa hàm phi tuyến với ràng buộc tuyến tính phi tuyến fmincon (Constrained Minimization) Cực tiểu hóa nửa vơ hạn fseminf (Semi-Infinite Minimization) 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 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 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*') 37 Giải toán quy hoạch bậc sau: 1) Bước 1: Phân tích tốn  x1  4  0    6      c  6  ; x   x2  ; a    ; b   ; lb  0  ; ub    ; 2    x3  12  0     2 0  1 1 1    H   1 2 ; A    1 2 ;B       33   2) Bước 2: Tạo M-file script cho tốn, ví dụ QP2.m 38 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 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) 39 Cực tiểu hóa hàm phi tuyến với ràng buộc  a11 a12 a a22 21  A   m n   am1 am  b11 b12 b b22 21  B   p n  bp1 bp a1n  a2 n    amn  b1n  b2 n    bpn   x1   a1   b1   l1   u1  x  a  b  l  u  x    ; a    ; b    ; lb    ; ub                        x a b l  n  n  n  n un  f  x    g j  x   0; j  r   hk  x   0; k  s   A  x  a  m n   B  x  b  p n lb  x  ub  T x   x x xn   40 [x,fval,exitflag,output,lambda,grad,hessian]= fmincon(@Objective,x0,A,a,B,b,lb,ub,@NonLinCon,options) x – xuất véctơ tham biến x làm cho hàm mục tiêu đạt cực tiểu fval – xuất giá trị hàm mục tiêu điểm cực tiểu x exitflag – xuất giá trị để xác định điều kiện dừng tính toán, cụ thể là: a) Đối với tất thuật tốn: • exitflag=1: Thước đo tối ưu bậc (First-order optimality measure) nhỏ giá trị thông số TolFun vi phạm ràng buộc lớn (maximum constraint violation) nhỏ giá trị thơng số TolCon • exitflag=0: có nghĩa số lượng tính hàm mục tiêu đạt ngưỡng cho phép Stopping Criteria = FunEvals số lượng vòng lặp đạt ngưỡng cho phép Stopping Criteria = 'MaxIter' • exitflag=-1: Hàm đầu kết thúc thuật tốn • exitflag=-2: Khơng tìm lời giải hợp lệ b) Đối với thuật toán ‘trust-region-reflective’ ‘interior-point’: • exitflag=2: Sự biến thiên x nhỏ giá trị thông số TolX vi phạm ràng buộc lớn nhỏ giá trị thông số TolCon c) Đối với riêng thuật tốn ‘trust-region-reflective’: • exitflag=3: có nghĩa thay đổi giá trị hàm mục tiêu nhỏ sai số cho phép TolFun vi phạm ràng buộc lớn nhỏ giá trị thông số TolCon 41 42 d) Đối với riêng thuật toán ‘active-set’: • exitflag=4: giá trị hướng tìm kiếm (search direction) nhỏ lần giá trị cho phép TolX vi phạm ràng buộc lớn nhỏ giá trị thơng số TolCon • exitflag=5: giá trị hướng tìm kiếm (search direction) nhỏ lần giá trị cho phép TolFun vi phạm ràng buộc lớn nhỏ giá trị thông số TolCon e) Đối với riêng thuật tốn ‘interior-point’: • exitflag=-3: Điểm x xét xuống giá trị ObjectiveLimit vi phạm ràng buộc lớn nhỏ giá trị thông số TolCon lambda – Giá trị toán tử Lagrange điểm lời giải grad – xuất véctơ Gradient hàm số điểm lời giải hessian – xuất ma trận Hessian hàm số điểm lời giải output – xuất thơng tin số vòng lặp tính tốn, số lần tính hàm số, thuật tốn bước tính, v.v… x0 – véc tơ tham biến khởi đầu A,a,B,b,lb,ub – véc tơ, ma trận liệu toán Objective - tên M-file xác định hàm mục tiêu NonLinCon - tên M-file xác định hàm ràng buộc phi tuyến đẳng thức bất đẳng thức Giải toán tối ưu hóa phi tuyến với ràng buộc sau 43 f  x   f  x1 , x2   9.82 x1 x2  x1   2500   x x  500    2500   x12  x22    0 0.5882   x1 x2  0.3 x x2  48.59 x2   10 x2  x1 x2  1.056    x1 3 x1  18 x2  12   x1  x2   x  10 x  2.531  2  x1  14;0.2  x2  0.8  3 18  A       22    B   1 10  12  x   x1  ; a  12  ; b   2.531; x  8      2  2  14   lb  0.2  ; ub  0.8      1) Bước 1: Tạo thư mục cho tốn, ví dụ NonlinCon1 44 2) Bước 2: Tạo M-file hàm mục tiêu, ví dụ Objective.m function f = Objective( x ) %OBJECTIVE Summary of this function goes here % Detailed explanation goes here f= 9.82*x(1)*x(2)+2*x(1); end 3) Bước 3: Tạo M-file hàm hàm ràng buộc phi tuyến đẳng thức bất đẳng thức, ví dụ NonLinCon.m function [ g, h ] = NonLinCon( x ) %NONLINCON Summary of this function goes here % Detailed explanation goes here % Cac rang buoc bat dang thuc g = [2500/(pi*x(1)*x(2))- 500; 2500/(pi*x(1)*x(2))- (pi^2*(x(1)^2+x(2)^2))/0.5882]; % Cac rang buoc dang thuc h = [0.3*x(1)^3*x(2)-48.59*x(2); 10*x(2)/x(1) - x(1)*x(2) + 1.056]; end 4) Bước 4: Tạo M-file Script lời giải, ví dụ Solve.m clear;clc;format long;warning off; 45 A=[3,-18; 1,3]; a=[12,8]'; B=[1,-10]; b=[2.531]'; lb=[2,0.2]'; ub=[14,0.8]'; x0 = [lb(:)+(ub(:)-lb(:))*rand(1,1)]' % Diem khoi dau % Kiem tra gia tri cua ham muc tieu cung nhu cac rang buoc phi tuyen tai diem khoi dau fprintf ('Gia tri ham muc tieu va rang buoc phi tuyen tai diem khoi dau\n'); f=Objective(x0) [g, h] = NonLinCon(x0) % Chon Algorithm (Chon mot so duoi day) %Alg='active-set'; %Alg='trust-region-reflective'; Alg='interior-point'; % Chon Stopping Criteria GTN=1e-6;GTL=1e6; % 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-detailed',StCr,GT,'PlotFcns',@optimplotfval); [x,fval,exitflag,output,lambda,grad,hessian]=fmincon(@Objective,x0,A,a,B,b,lb,ub,@NonLinCon,options ) fprintf('Gia tri rang buoc phi tuyen tai diem cuc tri\n'); [g, h] = NonLinCon(x) f  x   CỰC TIỂU HÓA NỬA VÔ HẠN 46 (Semi-Infinite Minimization)  g j  x   0; j  r   hk  x   0; k  s a1n   a11 a12  a   A  x  a a a 21 22 2n   A      m n  m n  B  x  b   a a a  m2 mn   m1  pn b1n   b11 b12 lb  x  ub b  b b 21 22 2n    T B     x  x x x     n p n    bpn  bp1 bp K x , w    1   x1   a1   b1   l1   u1   K  x, w   x  a  b  l  u   x    ; a    ; b    ; lb    ; ub                          K x , w    x a b l  q q  n  n  n  n  un  [x,fval,exitflag,output,lambda]=fseminf(@Objective,x0,q, myinfcon,A,a,B,b,lb,ub,options) 47 x – xuất véctơ tham biến x làm cho hàm mục tiêu đạt cực tiểu fval – xuất giá trị hàm mục tiêu điểm cực tiểu x exitflag – xuất giá trị để xác định điều kiện dừng tính tốn, cụ thể là: • exitflag=1: Hàm hội tụ điểm lời giải x • exitflag=4: giá trị hướng tìm kiếm (search direction) nhỏ giá trị cho phép vi phạm ràng buộc lớn nhỏ giá trị thơng số TolCon • exitflag=5: giá trị đạo hàm định hướng (directional derivative) nhỏ giá trị cho phép vi phạm ràng buộc lớn nhỏ giá trị thơng số TolCon • exitflag=0: có nghĩa số lượng tính hàm mục tiêu đạt ngưỡng cho phép Stopping Criteria = FunEvals số lượng vòng lặp đạt ngưỡng cho phép Stopping Criteria = 'MaxIter' • exitflag=-1: Hàm đầu kết thúc thuật toán • exitflag=-2: Khơng tìm lời giải hợp lệ x0 – véc tơ tham biến khởi đầu A,a,B,b,lb,ub – véc tơ, ma trận liệu toán Objective - tên M-file xác định hàm mục tiêu myinfcon - tên M-file xác định hàm ràng buộc phi tuyến đẳng thức, bất đẳng thức ràng buộc nửa vô hạn myinfcon function [g,h,K1,K2, ,Kq,S] % Initial sampling interval if isnan(S(1,1)), S = [s1 0; s2 0; sq 0]; % S co q hang end % Sample set w1 = w1_begin:S(1,1):w1_end; w2 = w2_begin:S(2,1):w2_end; wq = wq_begin:S(q,1):wq_end; % Semi-infinite constraints K1 = % 1st semi-infinite K2 = % 2nd semi-infinite Kq = % Last semi-infinite = myinfcon(x,S) and columns % Compute sample set % Compute sample set % Compute sample set constraint at x and w constraint at x and w constraint at x and w % Cac rang buoc bat dang thuc phi tuyen g = [ham_g1; ham_g2; ham_gr]; % Compute nonlinear inequalities at x % Cac rang buoc dang thuc phi tuyen h = [ham_h1; ham_h2; ham_hs]; % Compute nonlinear equalities at x % Plot a graph of semi-infinite constraints % plot(w1,K1,'-',w2,K2,':'),title('Semi-infinite constraints') % drawnow 48 Giải tốn tối ưu hóa nửa vơ hạn sau:  1) Bước 1: Tạo thư mục cho toán, ví dụ Seminf1 2) Bước 2: Tạo M-file hàm mục tiêu, ví dụ Objective.m function f = Objective(x,s) %OBJECTIVE Summary of this function goes here % Detailed explanation goes here f=sum((x-0.5).^2); %f=(x(1)-0.5)^2 + (x(2)-0.5)^2 + (x(3)-0.5)^2; end 3) Bước 3: Tạo M-file hàm hàm ràng buộc phi tuyến đẳng thức, bất đẳng thức nửa vơ hạn, ví dụ myinfcon.m 49 function [g,h,K1,K2,s] = myinfcon(x,s) % Initial sampling interval if isnan(S(1,1)), s = [0.2 0; 0.2 0]; % S co q hang and columns end % Sample set w1 = 0:s(1,1):100; % Compute sample set w2 = 0:s(2,1):100; % Compute sample set % Semi-infinite constraints K1 = sin(w1*x(1)).*cos(w1*x(2)) semi-infinite constraint at x and K2 = sin(w2*x(2)).*cos(w2*x(1)) semi-infinite constraint at x and % g % h % % % 1/1000*(w1-50).^2 - sin(w1*x(3))-x(3)-1; % 1st w 1/1000*(w2-50).^2 - sin(w2*x(3))-x(3)-1; % 2nd w Cac rang buoc bat dang thuc phi tuyen = []; %Trong bai toan khong co rang buoc phi tuyen bat dang thuc nao Cac rang buoc dang thuc phi tuyen = []; %Trong bai toan khong co rang buoc phi tuyen dang thuc nao Plot a graph of semi-infinite constraints plot(w1,K1,'-',w2,K2,':'),title('Semi-infinite constraints') drawnow 4) Bước 4: Tạo M-file Script lời giải, ví dụ Solve.m 50 clear;clc;format long;warning off; A=[]; %Trong bai tap khong co rang buoc tuyen tinh bat dang thuc a=[]'; %Trong bai tap khong co rang buoc tuyen tinh bat dang thuc B=[]; %Trong bai tap khong co rang buoc tuyen tinh dang thuc b=[]'; %Trong bai tap khong co rang buoc tuyen tinh dang thuc lb=[]';%Trong bai tap khong co rang buoc phia truoc cua tham bien ub=[]';%Trong bai tap khong co rang buoc phia sau cua tham bien x0 = [0.5;0.2;0.3]; % Diem khoi dau % Kiem tra gia tri cua ham muc tieu cung nhu cac rang buoc phi tuyen tai diem khoi dau fprintf ('Gia tri ham muc tieu va rang buoc phi tuyen tai diem khoi dau\n'); f=Objective(x0,NaN) [g,h] = myinfcon(x0,NaN) % Chon Algorithm (Chon mot 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-6;GTL=1e6; % 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-detailed',StCr,GT,'PlotFcns',@optimplotfval); [x,fval,exitflag,output,lambda]=fseminf(@Objective,x0,2,@myinfcon,A,a,B,b,lb,ub,options) fprintf('Gia tri rang buoc phi tuyen tai diem cuc tri\n'); [g, h] = myinfcon(x,NaN) 51 ... [x,fval,exitflag,output]=fminbnd(@Objfun,a,b,options) 17 Current Function Value: -0 .31002 -0 .23 -0 .24 -0 .25 Function value -0 .26 -0 .27 -0 .28 -0 .29 -0 .3 -0 .31 -0 .32 Iteration 18 CỰC TIỂU HĨA HÀM NHIỀU BIẾN SỐ KHƠNG RÀNG... %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;... %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

Ngày đăng: 16/05/2020, 01:16

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan