Cach Giai Bai Toan Toi Uu Bang Matlab

You might also like

Download as pdf or txt
Download as pdf or txt
You are on page 1of 20

Department of Mechanics, Faculty of Mathematics &

Computer Science, University of Science, Vietnam


N ti l University
National U i it HCMC

HCMC, November-2012
11 Introduction

2 SLP (Sequential Linear Programming)

3 SQP (Sequential Quadratic Programming)

14 IP (Interior – Point)

5 MMA (Moving of Method Asymptotes)

6 Phụ Lục
Bài toán giải tích
min f ( x) = e x1 (4 x12 + 2 x 22 + 4 x1 x2 + 2 x2 + 1)
x

⎧ g1 = x1 x2 − x1 − x2 ≤ 1.5
s.t. ⎨
⎩ g 2 = − x1 x2 ≤ 10
Bài toán số

1 T ⎧| ε |≤ ε max
min ε Aε s.t ⎨
θ 2 ⎩0 ≤ θ ≤ 180
Ta đã lập trình và giải được cho bài toán giải tích bằng hàm
Matlab có sẵn

Để giải bài toán tối ưu bằng SLP ta cần thực hiện hai bước sau
ƒ1 Tạo bài toán con xấp xỉ tuyến tính bằng khai triển Taylor bậc nhất
của bài toán ban đầu
ƒ2 Giải bài toán này bằng phương pháp đơn hình hoặc phương pháp
điểm trong với hàm Matlab “linprog.m”
Ví dụ min f ( x) = e x1 (4 x12 + 2 x 22 + 4 x1 x2 + 2 x2 + 1)
x

⎧ g1 = x1 x2 − x1 − x2 ≤ 1.5
s.t. ⎨
⎩ g 2 = − x1 x2 ≤ 10
1 Tạo bài toán con xấp
ấ xỉ
%----------------------------------------------------
% tao bai toan xap xi
function f = f(x)
( )
% min f_(x)
f (x) = f0 + df*(x-x
df*(x x0) = df*(x-x
df*(x x0)
f = exp(x(1))*(4*x(1)^2 + 2*x(2)^2
% s.t g_(x) = g0 + dg*(x-x0) <= 0
+ 4*x(1)*x(2) + 2*x(2) + 1);
%----------------------------------------------------
function g = g_fun1(x)
g = x(1)*x(2) - x(1) - x(2) + 1.5;
1 5;
df = [subs(df(1),x,x0),subs(df(2),x,x0)];
function g = g_fun2(x)
g01 = g_fun1(x0);
g = -x(1)*x(2)- 10;
g02 = g_fun2(x0);
dg 1 = [subs(dg1(1),x,x0),subs(dg1(2),x,x0)];
dg_1 [subs(dg1(1) x x0) subs(dg1(2) x x0)];
dg_2 = [subs(dg2(1),x,x0),subs(dg2(2),x,x0)];
Ví dụ min f ( x) = e x1 (4 x12 + 2 x 22 + 4 x1 x2 + 2 x2 + 1)
x

⎧ g1 = x1 x2 − x1 − x2 ≤ 1.5
15
s.t. ⎨
⎩ g 2 = − x1 x2 ≤ 10
2 Giải bài toán con xấp xỉ bằng hàm “linprog
linprog.m
m”
%---------------------------------------------------------------
% giai bai toan xap xi bang ham cua Matlab dang
% min Cx Ù f0 + df*(x –xx0)= df*x
% s.t Ax <= b Ù dg*x <= - g0 + dg*x0
%---------------------------------------------------------------
C = [subs(df(1),x,x0),subs(df(2),x,x0)]; % Vector hệ số hàm mục tiêu
A = [dg_1; dg_2]; % ma trận hệ số 2x2
b = -[g01 - dg_1*x0'; g02 - dg_2*x0']; % vector b
options = optimset('LargeScale', 'off', 'Simplex', 'on')
XX = linprog(C,A,b,[],[],LB,UB,[],options);
linprog(C A b [] [] LB UB [] options); % Mặc định là Interior point
Ví dụ min f ( x) = e x1 (4 x12 + 2 x 22 + 4 x1 x2 + 2 x2 + 1)
x

⎧ g1 = x1 x2 − x1 − x2 ≤ 1.5
15
s.t. ⎨
⎩ g 2 = − x1 x2 ≤ 10
Nhiệm vụ

1. Lập trình và giải bài toán giải tích trên nhưng không dùng hàm có
sẵn của Matlab (linprog.m) mà dùng code Simplex (bằng Matlab).
2. Lập trình và giải một bài toán số có ràng buộc bằng code Simplex.

1 T ⎧| ε |≤ ε max
min ε Aε s.t ⎨
θ 2 ⎩0 ≤ θ ≤ 180
Ta đã khai thác và sử dụng thành thạo hàm trong matlab và
giải cho các loại bài toán kể cả bài toán số và bài toán giải tích

Để giải bài toán tối ưu bằng SQP bằng hàm của Matlab ta cần thực
hiện ba bước sau
ƒ1 Tạo hàm mục tiêu
ƒ2 Tạo hàm ràng buộc
ƒ3 G i hàm
Gọi hà Matlab
M l b để giải
iải “fmincon.m”
“f i ”
Ví dụ min f ( x) = e x1 (4 x12 + 2 x 22 + 4 x1 x2 + 2 x2 + 1)
x

⎧ g1 = x1 x2 − x1 − x2 ≤ 1.5
15
s.t. ⎨
⎩ g 2 = − x1 x2 ≤ 10

1 Tạo hàm mục tiêu “f_fun.m”


function f = f_fun(x)
p( ( )) ( ( ) + 2*x(2)^2
f = exp(x(1))*(4*x(1)^2 ( ) + 4*x(1)*x(2)
( ) ( ) + 2*x(2)
( ) + 1);
)

2 Tạo hàm ràng buộc “g_fun.m”


function [c, ceq] = g_fun(x)
% Nonlinear inequality constraints
c = [1.5 + x(1)*x(2) - x(1) - x(2); -x(1)*x(2) - 10];
% Nonlinear equality constraints
ceq = [];
Ví dụ
min f ( x) = e x1 (4 x12 + 2 x 22 + 4 x1 x2 + 2 x2 + 1)
x

⎧ g1 = x1 x2 − x1 − x2 ≤ 1.5
s.t. ⎨
⎩ g 2 = − x1 x2 ≤ 10

3 G i hàm
Gọi hà Matlab
M l b để giải
iải
ObjectiveFunction = @f_fun;
LB = []; % Lower bound
UB = []; % Upper bound
ConstraintFunction = @g_fun;
x0 = [-1,10];
options = optimset(
optimset('Algorithm'
Algorithm ,‘sqp');
sqp );
[x,fval] = ...
fmincon(ObjectiveFunction,x0,[],[],[],[],LB,UB,ConstraintFunction,options)
Ví dụ min f ( x) = e x1 (4 x12 + 2 x 22 + 4 x1 x2 + 2 x2 + 1)
x

⎧ g1 = x1 x2 − x1 − x2 ≤ 1.5
15
s.t. ⎨
⎩ g 2 = − x1 x2 ≤ 10
Nhiệm vụ

1. Lập trình và giải bài toán giải tích trên nhưng không dùng hàm có
sẵn của Matlab (fmincon.m) mà dùng code SQP (bằng Matlab).
2. Lập trình và giải một bài toán số
ố có ràng buộc bằng
ằ code SQP.

1 T ⎧| ε |≤ ε max
min ε Aε s.t ⎨
θ 2 ⎩0 ≤ θ ≤ 180
Ta đã khai thác và sử dụng thành thục hàm trong matlab và giải
cho các loại bài toán kể cả bài toán số và bài toán giải tích

Để giải bài toán tối ưu bằng IP sử dụng hàm của Matlab ta cần thực
hiện ba bước sau giống như SQP
ƒ1 Tạo hàm mục tiêu
ƒ2 Tạo hàm ràng buộc
ƒ3 G i hàm
Gọi hà Matlab
M l b để giải
iải “fmincon.m”
“f i ”
Ví dụ min f ( x) = e x1 (4 x12 + 2 x 22 + 4 x1 x2 + 2 x2 + 1)
x

⎧ g1 = x1 x2 − x1 − x2 ≤ 1.5
15
s.t. ⎨
⎩ g 2 = − x1 x2 ≤ 10
Bước 1 và bước 2 tươngg tự như SQP
Q
3 Gọi hàm Matlab để giải
ObjectiveFunction = @f_fun;
LB = []; % Lower bound Điểm khác so với SQP
UB = []; % Upper bound
ConstraintFunction = @g_fun;
x0 = [[-1,10];
1,10];
options = optimset('Algorithm','interior-point');
[x,fval] = ...
( j , ,[],[],[],[], , , , p )
fmincon(ObjectiveFunction,x0,[],[],[],[],LB,UB,ConstraintFunction,options)
Ví dụ min f ( x) = e x1 (4 x12 + 2 x 22 + 4 x1 x2 + 2 x2 + 1)
x

⎧ g1 = x1 x2 − x1 − x2 ≤ 1.5
s.t. ⎨
⎩ g 2 = − x1 x2 ≤ 10
Nhiệm vụ

1. Lập trình và giải bài toán giải tích trên nhưng không dùng hàm có
sẵn của Matlab (fmincon.m) mà dùng code IP (bằng Matlab).
2. Lập trình và giải một bài toán số có ràng buộc bằng code IP.

1 T ⎧| ε |≤ ε max
min ε Aε s.t ⎨
θ 2 ⎩0 ≤ θ ≤ 180
Ta đã có code giải cho bài toán giải tích của tác giả Krister Svanberg
(Phương pháp này không có trong thư viện Matlab)

Để giải bài toán tối ưu bằng MMA ta cần thực hiện hai bước sau
ƒ1 Tạo bài toán con xấp xỉ dựa trên khai triển Taylor bậc nhất bài toán
ban đầu.
ƒ2 Giải bài toán này bằng phương đối ngẫu Lagrange với hàm
“subsolv.m”
Ví dụ min f ( x) = e x1 (4 x12 + 2 x 22 + 4 x1 x2 + 2 x2 + 1)
x

⎧ g1 = x1 x2 − x1 − x2 ≤ 1.5
15
s.t. ⎨
⎩ g 2 = − x1 x2 ≤ 10
1 T
Tạo bài ttoán
á con xấp
ấ xỉỉ

Tính toán giá trị hàm mục tiêu, ràng buộc và đạo hàm của nó tại điểm x0
function
f i [f0,df,g0,dg]
[f0 df 0 d ] = calculate(x0)
l l ( 0)
syms x1 x2
x = [x1 x2];
f0 = f_fun(x0);
f fun(x0);
df = [subs(diff(f_fun(x),x1),x,x0); subs(diff(f_fun(x),x2),x,x0)];
g0 = [g_fun1(x0);g_fun2(x0)];
dg = [subs(diff(g_fun1(x),x1),x,x0), subs(diff(g_fun1(x),x2),x,x0)
subs(diff(g_fun2(x),x1),x,x0),
b (diff( f 2( ) 1) 0) subs(diff(g_fun2(x),x2),x,x0)];
b (diff( f 2( ) 2) 0)]
Ví dụ min f ( x) = e x1 (4 x12 + 2 x 22 + 4 x1 x2 + 2 x2 + 1)
x

⎧ g1 = x1 x2 − x1 − x2 ≤ 1.5
15
s.t. ⎨
⎩ g 2 = − x1 x2 ≤ 10
1 T
Tạo bài ttoán
á con xấp
ấ xỉỉ

Tạo hàm xấp xỉ bằng file “mmasub.m” tại điểm x0


function [xmma,ymma,zmma,lam,xsi,eta,mu,zet,s,low,upp] = ...
mmasub(m,n,iter,xval,xmin,xmax,xold1,xold2, ...
f0val,df0dx,fval,dfdx,low,upp,a0,a,c,d);
2 Giải bài toán con xấp
ấ xỉ bằng
ằ file “subsolv.m”
function[xmma,ymma,zmma,lam,xsi,eta,mu,zet,s] = ...
subsolv(m,n,epsimin,low,upp,alfa,beta,p0,q0,P,Q,a0,a,b,c,d);
Nhiệm vụ

1. Lập trình và giải một bài toán số có ràng buộc bằng code MMA.

1 T ⎧| ε |≤ ε max
min ε Aε s.t ⎨
θ 2 ⎩0 ≤ θ ≤ 180
Cách thiết lập hàm mục tiêu và ràng buộc cho bài toán số
function [y, ]
[y,w0]=simplep _fitness(x)( )
global Dim
Ex=180.E3; Ey=8.E3;nuxy=0.3;Es=6.E3; nuyx=nuxy*Ey/Ex; m=1/(1-
nuxy*nuyx);Qxx=m*Ex;Qxy=m*Ex*nuyx;Qyy=m*Ey;Qs=Es;
Q(1 1) Q ;Q(1 2) Q ;Q(1 3) 0;Q(2 1) Q ;Q(2 2) Q ;Q(2 3) 0;Q(3 1) 0;
Q(1,1)=Qxx;Q(1,2)=Qxy;Q(1,3)=0;Q(2,1)=Qxy;Q(2,2)=Qyy;Q(2,3)=0;Q(3,1)=0;
Q(3,2)=0;Q(3,3)=Qs;Nx=3750.;Ny=2500.;Nxy=5000.; N(1,1)=Nx;
N(2,1)=Ny;N(3,1)=Nxy; h=1;
%% ---------1 bien thiet ke------------
if Dim ==1; th = [90 0 x x 0 90]; end
%% ---------2 bien thiet ke------------
if Dim ==2; th = [x(1) x(2) x(2) x(1)]; end
%% ---------33 bien thiet ke------------
ke
if Dim ==3; th = [x(1) x(2) x(3) x(3) x(2) x(1)]; end
%% ------------------------------------
[A]=app01(Q,th,h); deps=inv(A)*N; W = norm(deps);
deform=[deps(1) deps(2) deps(3)]'; Hàm mục tiêu
y=1/2*deform'*A*deform;
w0 = W – W0; Hàm ràng buộc

You might also like