Tải bản đầy đủ (.pdf) (51 trang)

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

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (2.15 MB, 51 trang )

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


Thống nhất phiên bản MATLAB

2

Các biến
tính toán
xong

Chọn thư
mục làm
việc

Trường lịch
sử các 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 trong MATLAB, đầu câu lệnh
>>
Dấu chấm phẩy ở cuối dòng sẽ tránh việc in kết quả ra trường >> a=2;
câu lệnh (khi ta không cần in kết quả ra 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 tiếp
2
theo

help
Hiển thị các thông tin chi tiết về 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ữ cái viết thường và viết hoa được phân biệt khác nhau trong MATLAB
>>A=2
>>A+a
MATLAB coi tất cả các biến đều ở dạng mảng (arrays)
Trong MATLAB tên biến được bắt đầu từ chữ cái và có chiều >>A_a_bc_9=12
Tên biến
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
+
>>2+3*6^2/4-7
Các
phép toán thông *
dụng
/

^
Tránh trùng
>>pi
với các tên pi
biến tích hợp sin
của hệ thống, cos
như các hằng v.v..
số, tên hàm

3


4

Ma trận trong MATLAB
Đối tượng

Véctơ hàng

Cách thực hiện

Ví dụ

Ngoặc vuông, Dấu cách

A=[1 2 3 4]

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]

Véctơ cột

Cách 3: Đảo véc tơ hàng thành cột bằng dấu ‘ B=[5 2 3]'
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
456
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)

Ma trận [mxn]

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

Phần tử trong ma trận

Cách thực hiệ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

Ví dụ

A(2,3)
A(2:3,1:3)


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.

6


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

7


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)


Giới thiệu về Optimization Toolbox
STT
1
2
3
4

5
6


Loại bài toán
Cực tiểu hóa hàm 1 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 các ràng buộc
tuyến tính và phi tuyến
fmincon
(Constrained Minimization)
Cực tiểu hóa nửa vô hạn
fseminf
(Semi-Infinite Minimization)


Các thuật toán của các công cụ


11


Các thuật toán của các công cụ

12


CỰC TIỂU HÓA HÀM MỘT BIẾN SỐ
f  x   min; 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

13



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
f  x   0.65 
 0.65 x arctan   ; x  0;0.5
2
1 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

14


2) Bước 2: Tạo M-file hàm mục tiêu, ví dụ Objfun.m

Sửa lại code
của hà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


15


3) Bước 3: Tạo M-file Script lời giải, ví dụ Solve.m

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 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

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

0

1

2

3


4
5
Iteration

6

7

8

9


18

CỰC TIỂU HÓA HÀM NHIỀU BIẾN SỐ KHÔNG
RÀNG BUỘC
f  x   min; x   x1 , x2 , , xn 
[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ố:

f  x   f  x1 , x2   x1 x2 

50 20

 min
x1 x2

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

Current Function Value: 30
75
70
65

Function value

60
55
50
45
40
35
30

0

2

4

6

8

Iteration

10

12

14


23

CỰC TIỂU HÓA HÀM NHIỀU BIẾN SỐ KHÔNG
RÀNG BUỘC
f  x   min; x   x1 , x2 , , xn 
[x,fval,exitflag,output] = fminsearch(@Objfun,x0,options)
Cú pháp này sử dung pp Nelder-Mead và chỉ tìm được cực tiểu local
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


4) Bước 4: Tạo M-file Script lời giải, ví dụ Solvefminsearch.m


24

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


×