• 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]
Trang 1Trườ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
Trang 2Thố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
Trang 3Là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
Trang 4Ma trận trong MATLAB
Véctơ cột
2 ]
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]
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)
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
Trang 5Ma trận trong MATLAB (tiếp)
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)
Trang 6Kị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
Trang 7Hàm số (Function)
% -
% Ở dưới ghi function body
end
Trang 8function [ p ] = func1( x )
%func1 of this function goes here
%Detailed explanation goes here
p=x^3-2*x+cos(x);
end
Trang 9function [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)
Trang 10Giớ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
Trang 11Các thuật toán của các công cụ
Trang 12Các thuật toán của các công cụ
Trang 13CỰC TIỂU HÓA HÀM MỘT BIẾN SỐ
[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
Trang 14CỰC TIỂU HÓA HÀM MỘT BIẾN SỐ
1
1) Bước 1: Tạo 1 thư mục cho bài toán, ví dụ fminbnd1
Vào trong thư mục
Trang 15function 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
Trang 16clear;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)
Trang 170 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
Current Function Value: -0.31002
Trang 18CỰC TIỂU HÓA HÀM NHIỀU BIẾN SỐ KHÔNG
RÀNG BUỘC
[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
Trang 19Tìm cực tiểu hàm số: 1 2 1 2
1 2
50 20
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
Trang 20% 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)