• 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[r]
(1)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
(2)Thống phiên MATLAB
Trường câu lệnh
Các biến tính tốn xong
Trường lịch sử câu lệnh dùng
(3)Làm quen với MATLAB
Dấu >> Ký tự nhắc mặc định MATLAB, đầu câu lệnh >> Dấu ; Dấu chấm phẩy cuối dòng tránh việc in kết trường câu lệnh (khi ta không cần in kết 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
>> a=…
help
tên_câu_lệnh Hiển thị thông tin chi tiết câu lệnh mà người dùng cần sử dụng
>>help linprog
Chữ viết thường viết hoa phân biệt khác MATLAB
>> a=2 >>A=2 >>A+a MATLAB coi tất biến dạng mảng (arrays)
Tên biến
Trong MATLAB tên biến chữ có chiều 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
>>A_a_bc_9=12
Các phép tốn thơng dụng + - * / ^ >>2+3*6^2/4-7
Tránh trùng với tên biến tích hợp hệ thống, số, tên hàm
pi sin cos v.v
(4)Ma trận MATLAB
Đối tượng Cách thực Ví dụ
Véctơ hàng Ngoặc vng, Dấu cách A=[1 4]
Véctơ cột
Cách 1: Ngoặc vng xuống dịng B=[5
2 ]
Cách 2: Ngoặc vuông dấu chấm phẩy B=[5;2;3]
Cách 3: Đảo véc tơ hàng thành cột dấu ‘ B=[5 3]'
Ma trận [mxn]
Cách 1: áp dụng véc tơ hàng cột: dấu cách xuống dòng
A=[1 9]
Cách 2: Dấu cách dấu chấm phẩy A=[1 3;4 6;
8 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)
Tạo dãy cấp số cộng M:icr:N
M:N – icr=1 theo mặc định
(5)Ma trận MATLAB (tiếp)
Đối tượng Cách thực Ví dụ
Phần tử ma trận 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
(6)Kịch (Scripts)
(7)Hàm số (Function)
function [O_1,O_2,…,O_m] = function_name (I_1,I_2,…,I_n)
% -
% Ở ghi function body
(8)function [ p ] = func1( x )
%func1 of this function goes here %Detailed explanation goes here
(9)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
(10)Giới thiệu Optimization Toolbox
STT Loại toán Hàm sử
dụng 1 Cực tiểu hóa hàm 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 ràng buộc tuyến tính phi tuyến
(Constrained Minimization)
fmincon
6 Cực tiểu hóa nửa vơ hạn
(11)(12)(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 giá trị 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: có nghĩa hàm hội tụ điểm lời giải x Stopping Criteria = 'TolX‘ • exitflag=0: có nghĩa số lượng tính hàm mục tiêu số lượng vòng lặp đạt
ngưỡng cho phép Stopping Criteria = 'MaxIter' 'MaxFunEvals' • exitflag=-1: có nghĩa thuật tốn bị dừng hàm đầu
• exitflag=-2: có nghĩa khoảng giá trị bị sai (a>b)
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 thơng báo cuối
Objfun – tên M-file xác định hàm mục tiêu
a,b – giá trị biên biến x
(14)CỰC TIỂU HÓA HÀM MỘT BIẾN SỐ
Tìm cực tiểu hàm số
0.75 1
0.65 0.65 arctan ; 0;0.5
1
f x x x
x x
1) Bước 1: Tạo thư mục cho tốn, ví dụ fminbnd1
(15)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
(16)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 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 =
(17)0 -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
(18)CỰC TIỂU HĨA HÀM NHIỀU BIẾN SỐ KHƠNG RÀNG BUỘC
min; 1, 2, , n
f x x x x x
[x,fval,exitflag,output, grad,hessian] = fminunc(@Objfun,x0,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 tốn, cụ thể là: • exitflag>0: có nghĩa hàm hội tụ điểm lời giải x
• exitflag=0: có nghĩa số lượng tính hàm mục tiêu số lượng vòng lặp đạt ngưỡng cho phép Stopping Criteria = 'MaxIter' 'MaxFunEvals'
• exitflag<0: Hàm khơng hội tụ đ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…
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
x0 – véc tơ tham biến khởi đầu
(19)Tìm cực tiểu hàm số: 2
1
50 20
, min
f f x x x x
x x
x
1) Bước 1: Tạo thư mục cho 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
(20)% Nhap vecto tham bien khoi dau:
x0 = [1,1];
% 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';
% 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 =