最优化问题的matlab求解

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1、解析解法和图解法
f f f |x x0 0, |x x0 0,..., |x x0 0 x1 x2 xn
例:用解析法求解以下函数的最小值
z e3t sin(4t 2) 4e0.5t cos2t 0.5
>>syms t; y=exp(-3*t)*sin(4*t+2)+4*exp(-0.5*t)*cos(2*t)-0.5; ezplot(y,[0 4]) y1=diff(y); ezplot(y1,[0 4]) t0=solve(y1) y2=diff(y1); b=subs(y2,t,t0)
(1) E n,f , gi , h j 是定义在 En 上的实值函
其它情况: 求目标函数的最大值或约束条件为大于等于零 的情况,都可通过取其相反数化为上述一般形式.
标准型为:
Min F(X) s.t.
AX b AeqX beq G( X ) 0 Ceq( X ) 0 VLB X VUB
最速下降法算法:
1. 给定初始点 x
(1)
0 ,令 k=1; E ,给定误差
(k )
n
2. 计算搜索方向 d 3. 如果
f
Fra Baidu bibliotek ;
(k )
(k )
d
(k )

,则迭代终止,否则通过下列一维搜索
f
0
求 : min
(k )
x
(k )
d

4. 令 x
( k 1)
(k)
方向前进的步长
( k 1)
(k )
(4) 得到新的点 X (k+1), X
X ( k ) ( k ) P ( k )
检验 X (k+1)是否最优,如果是最优,则迭代结束,
k 1,转到(2)执行。 注意:数值求解最优化问题的计算效率取决 于确定搜索方向P (k)和步长 ( k ) 的效率。
非线性规划
定义 如果目标函数或约束条件中至少有一个是非线性函数 时的最优化问题就叫做非线性规划问题.
一般形式:
m in f X
gi X 0 s.t. h j X 0 i 1,2,...,m; j 1, 2,..., l.
其中 X x1, x2 ,, xn T 数,简记: f : En E1, gi : En E1, h j : En E1
2、二次规划
目标函数: min
1 X HX CX 2
约束条件:
AX b Aeq X Beq xm x xM
命令形式: [X,f,flag,c]=quadprog(H,C,A,b,Aeq,Beq,xm,xM,x0,opt) 功能:各个参数的解释如前,若各个约束条件不存在, 则用空矩阵来代替。
function y=fun071(x,a,b) y=x(1)^2/a+x(2)^2/b; x0=[1,1];a=2;b=2; x=fminunc(@fun071,x0,[],a,b) X=(0,0)
3、全局最优解和局部最优解
例: 已知函数 y(t ) e2t cos10t e3t 6 sin 2t , t 0, 试观察不同
直接法
直接法是一种数值方法。这种方法的基 本思想是迭代,通过迭代产生一个点序列 { X(k) },使之逐步接近最优点。 只用到目标函数。 如黄金分割法、Fibonacci、随机搜索法。
迭代法一般步骤
(1) 选定初始点 X (0),k=0 (2) 寻找一个合适的方向 P (k),k=0,1,2,… P (k)为第 k+1 步的搜索方向。 (3) 求出沿 P
2、数值解法
命令形式1: x=fminsearch(fun,x0) %简单形式 [x,f,flag,out]=fminsearch(fun,x0,opt,p1,p2,…) %一般形式 功能:与fsolve()中的参数控制形式类似。 注:若函数是多元的,要表达成向量的形式。 命令形式2: x=fminunc(fun,x0) %简单形式 [x,f,flag,out]=fminunc(fun,x0,opt,p1,p2,…) %一般形式 功能:与fsolve()中的参数控制形式类似。
fun.m ~ f(x)的m文件名
x0 ~初始点;
x ~最优解
P1,P2, … ~传给fun的参数 基本用法: 中间输入项缺省用[]占据位 x=fminunc(@fun,x0) 置 x=fminunc(@fun,x0,options,P1,P2,...)
x2 y 2 例: min a b 其中a b 2
否则 k
最速下降法(steepest descent method) 由法国数学家Cauchy于1847年首先提出。在每次迭代中, 沿最速下降方向(负梯度方向)进行搜索,每步沿负梯度方 向取最优步长,因此这种方法称为最优梯度法。 特点: 方法简单,只以一阶梯度的信息确定下一步的搜索方向,收 敛速度慢; 越是接近极值点,收敛越慢; 它是其它许多无约束、有约束最优化方法的基础。 该法一般用于最优化开始的几步搜索。
功能:各个参数的解释如前,若各个约束条件不存 在,则用空矩阵来代替。
例:求解 min 2 x1 x2 4 x3 3 x4 x5
2 x2 x3 4 x4 2 x5 54 s.t. 3 x1 4 x2 5 x3 x4 x5 62 x , x 0, x 3.32, x 0.678, x 2.57 3 4 5 1 2

x
(k )

(k )
d
(k )
,置 k=k+1,转( 2)步执行。
Matlab求解步骤
用Matlab求解上述问题,基本步骤分三步: 1. 首先建立M文件fun.m,定义目标函数F(X): function f=fun(X); f=F(X);
2. 若约束条件中有非线性约束 :G(X) 0 或 Ceq(X)=0, 则建立M文件nonlcon.m定义函数G(X)与Ceq(X): function [G,Ceq]=nonlcon(X) G=... Ceq=...
目标函数:
约束条件: 其中:
min z CX
C 价值向量
AX (, )b X 0
x1 x2 X x n
b
资源向量
X 决策变量向量
b1 b2 b b m
C (c1 , c2 ,, cn )
[ ]作为参数传入; nonlcon:如果包含非线性等式或不等式约束,则将这些函 数编写一个Matlab函数 nonlcon就是定义这些函数的程序文件名;
不等式约束 G(x)<=0
等式约束 Ceq(x)=0. 如果nonlcon=‘mycon’ ; 则myfun.m定义如下
function [G,Ceq] = mycon(x)
其中X为n维变元向量,G(X)与Ceq(X)均为非线性函数组成 的向量,其它变量的含义与线性规划、二次规划中相同.
非线性规划的求解算法
(1)间接法 (2)直接法
直接搜索法
以梯度法为基础的间接法
间接法
在非线性最优化问题当中,如果目标函 数能以解析函数表示,可行域由不等式约束 确定,则可以利用目标函数和可行域的已知 性质,在理论上推导出目标函数为最优值的 必要条件,这种方法就称为间接法(也称为 解析法) 。 一般要用到目标函数的导数。
例:求解
min f ( x ) 2 x12 -4 x1 x2 4 x2 2 -6 x1-3x 2 x1 x2 3 4 x1 x2 9 x1 , x2 0
>>H=[4,-4;-4,8]; C=[-6,-3]; A=[1,1;4,1]; b=[3;9]; Ae=[];Be=[]; ff=optimset; ff.LargeScale='off'; ff.TolX=1e-15; ff.Display='iter'; [X,f,flag,c]=quadprog(H,C,A,b,Ae,Be,zeros(2,1),ff)
最优化问题的Matlab求解
数学规划的一般模型
Min(或Max) z f ( x), x ( x1 ,, x n )T s.t. gi ( x) 0, i 1,2, m
x~决策变量 f(x)~目标函数 gi(x)0~约束条件
无约束最优化
Min z f ( x), x ( x1 ,, x n )T
约束最优化
1、线性规划 目标函数: min z c1 x1 c2 x2 cn xn 约束条件:
a11 x1 a12 x2 a1n xn ( , )b1 a x a x a x ( , )b 21 1 22 2 2n n 2 a x a x a x ( , )b m2 2 mn n m m1 1 x1 , x2 , , xn 0
的初值得出其最小值。
>>f=inline('exp(-2*t)*cos(10*t)+exp(-3*(t+2))*sin(2*t)','t');
t0=1;[t1,f1]=fminsearch(f,t0)
t1=0.92275390625000,f1=-0.15473299821860 >>t0=0.1;[t2,f2]=fminsearch(f,t0) t2=0.29445312500000,f2=-0.54362463738706
>> c=[-2,-1,-4,-3,-1]; A=[0 2 1 4 2;3 4 5 -1 -1]; b=[54;62]; Ae=[];Be=[]; xm=[0,0,3.32,0.678,2.57]; ff=optimset; ff.LargeScale=‘off’;%是否采用大规模算法 ff.TolX=1e-15;%解的控制精度 ff.Display=‘iter’;%显示信息的级别 [X,f,flag,c]=linprog(c,A,b,Ae,Be,xm,[],[],ff)
例: 求二元函数 z ( x2 2x )e x
2
y 2 xy
的最小值。
>>f=inline('(x(1)^2-2*x(1))*exp(-x(1)^2-x(2)^2-(1)*x(2))','x'); x0=[0,0]; ff=optimset;ff.Display='iter'; x=fminsearch(f,x0,ff) >>x=fminunc(f,x0,ff)
a11 a12 a1n A a a a mn m1 m 2
目标函数:
min z CX
约束条件:
AX b Aeq X Beq xm x xM
命令形式2: [X,f,flag,c]=linprog(C,A,b,Aeq,Beq,xm,xM,x0,opt)
输出极值点
M文件
迭代的初值
变量上下限
参数说明
(6) [x,fval]= fmincon(...) (7) [x,fval,exitflag]= fmincon(...) (8)[x,fval,exitflag,output]= fmincon(...)
输入参数的几点说明
模型中如果没有A,b,Aeq,beq,VLB,VUB的限制,则以空矩阵
3. 建立主程序.非线性规划求解的函数是fmincon,命令的基本格 式如下: (1) x=fmincon(‘fun’,X0,A,b) (2) x=fmincon(‘fun’,X0,A,b,Aeq,beq) (3) x=fmincon(‘fun’,X0,A,b, Aeq,beq,VLB,VUB)
(4) x=fmincon(‘fun’,X0,A,b,Aeq,beq,VLB,VUB,’nonlcon’) (5)x=fmincon(‘fun’,X0,A,b,Aeq,beq,VLB,VUB,’nonlcon’,options)
相关文档
最新文档