非线性规划问题的求解方法
=diff(fx2,'x1');fx2x2=diff(fx2,'x2');
for k=1:100
x1=a(k);x2=b(k);e=m(k);
for n=1:100
f1=subs(fx1);
f2=subs(fx2);
f11=subs(fx1x1);
f12=subs(fx1x2);
A
11
f21=subs(fx2x1);
A
14
(二)拉格朗日乘子法 (三)可行方向法与广义简约梯度法 (四)SQP方法
A
15
三.Matlab求解有约束问题
•
A
16
运行输出:
x= 24.0000 12.0000 12.0000
fval =
-3.4560e+03
A
17
(二)非负条件下线性最小二乘lsqnonneg •
A
18
• (三)有约束线性最小二乘lsqlin
最速下降法(负梯度法) Newton法 共轭梯度法 拟Newton法 变尺度法
A
4
二.有约束问题
(一)罚函数法(SUMT) 1、算法思想: 将有约束优化问题转化为一系列无约束优化问题 进行求解.(Sequential Unconstrained Minimization Technique-SUMT) 2、算法类型: 外点法(外惩法) 内点法(内惩法)
else
m(k+1)=c*m(k);
A
12
end end
结果:
•
ans =
•
• 1.0000
•
•
• ans =
•
• -7.1594e-004
•
•
• k=
•
• 14
A
13
小结
讲解了两个求解有约束非线性规划问题的特点. 易于实现,方法简单. 没有用到目标函数的导数.
问题的转化技巧(近似为一个无约束规划).
4.2、内点法(内部惩罚函数法): min F ( x, )
s.t. x S
算法: ( 1) 给 定 初 始 内 点 x (0) S , 允 许 误 差 e>0,
障 碍 参 数 (1) , 缩 小 系 数 b ( 0 ,1) , 置 k= 1 ;
( 2) 以 x (k1) 为 初 始 点 , 求 解 下 列 规 划 问 题 :
A
5
• 3、问题:
A
6
4.1、外点法(外部惩罚函数法): •
如何将此算法模块化?
A
7
外点法框图: kk1
初始 x(0),1 0,1 0,k1
以x(k)为初始点 , 解
min f ( x) k p( x)
得到 x (k 1)
No
k1k
kp(x(k1)) yes
停 x (k 1) opt
A
8
min f ( x ) ( k ) B ( x )
s.t. x S
, 令 x (k) 为 所 求 极 小 点
( 3) 如 果 (k) B ( x (k) ) e , 则 停 止 计 算 , 得 到 结 果x (k) ,
(k 1) b (k )
( 4) 否 则 令
, 置 k= k+ 1 , 返 回 ( 2 )。
非线性规划问题的求解方法
A
1
Content
无约束非线性规划问题 有约束非线性规划问题
Matlab求解有约束非线性规划问题
A
2
一.无约束问题
• 一维搜索
指寻求一元函数在某区间上的最优值点的方法。这类方法不仅有实用 价值,而且大量多维最优化方法都依赖于一系列的一维最优化。
逐次插值逼近法 近似黄金分割法(又称0.618法) • 无约束最优化
指寻求 n元实函数f在整个n维向量空间Rn上的最优值点的方法。无约 束最优化方法大多是逐次一维搜索的迭代算法。这些迭代算法的基本
A
3
思想是:在一个近似点处选定一个有利搜索方向,沿这个方向进行一 维寻查,得出新的近似点。然后对新点施行同样手续,如此反复迭代, 直到满足预定的精度要求为止。根据搜索方向的取法不同,可以有各 种算法。
f22=subs(fx2x2);
if(double(sqrt(f1^2+f2^2))<=0.002)
a(k+1)=double(x1);b(k+1)=double(x2);f0(k+1)=double(subs(f));
break;
else
X=[x1 x2]'-inv([f11 f12;f21 f22])*[f1 f2]';
A
9
内点法框图 kk1
x(0) S0 , 1 0, [0,1], 0, k 1
min
s.t.
f (x) kq(x) x S0
从 x ( k )出发 ,
求得 x ( k 1)
No
k1 k
kq(x(k1))
yes
停
x(k1) opt
A
10
内点法的matlab程序:
m=zeros(1,50);a=zeros(1,50);b=zeros(1,50);f0=zeros(1,50);
x1=X(1,1);x2=X(2,1);
end
end
if(double(sqrt((a(k+1)-a(k))^2+(b(k+1)b(k))^2))<=0.001)&&(double(abs((f0(k+1)-f0(k))/f0(k)))<=0.001)
a(k+1)
b(k+1)
k
f0(k+1)
break;
syms x1 x2 e;
m(1)=1;c=0.2;a(1)=2;b(1)=-3;
f=x1^2+x2^2-e*(1/(2*x1+x2-2)+1/(1-x1)); f0(1)=15;
fx1=diff(f,'x1');fx2=diff(f,'x2');fx1x1=diff(fx1,'x1');fx1x2=diff(fx1,'x2'乘lsqnonlin
A
20
求解x,使得下式最小
10
e e ( 2 2 k k x 1 k x 2) 2
k 1
运行输出:
x= 0.2578 0.2578
resnorm = 124.3622
A
21
Thank you for your attention!
A
22