matlab中的非线性规划求解fmincon函数
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
这个函数的基本形式为
x = fminco n(fun,x0,A,b,Aeq,beq,lb,ub,nonlco n,option s)
其中fun为你要求最小值的函数,可以单写一个文件设置函数,如以上给的例子中。
1.如果fun中有N个变量,如x y z, 或者是X1,X2,X3, 什么的,自己排个顺序,在fun中统一都是用x(1),x(2)....x(n) 表示的。
2. x0, 表示初始的猜测值,大小要与变量数目相同
3. A b 为线性不等约束,A*x <= b, A应为n*n阶矩阵,学过线性代数应不难写出A和b
4 Aeq beq为线性相等约束,A eq*x = beq。
Aeq beq同上可求
5 lb ub为变量的上下边界,正负无穷用-Inf和In f表示, lb ub应为N阶数组
6 nonlco n 为非线性约束,可分为两部分,非线性不等约束 c,非线性相等约束,ceq
可按下面的例子设置
functi on [c,ce] = nonlco n1(x)
c = -x(1)+x(2)^2-4;
ce = []; % no nonlin ear equali ty constr aints
7,最后是opt ions,可以用OPT IMSET函数设置,见上例
具体可见OP TIMSE T函数的帮助文件。
对于优化控制,MATLAB提供了18个参数,这些参数的具体意义为:
option s(1)-参数显示控制(默认值为0)。
等于1时显示一些结果。
option s(2)-优化点x的精度控制(默认值为1e-4)。
option s = optims et('TolX',1e-8)
option s(3)-优化函数F的精度控制(默认值为1e-4)。
option s = optims et('TolFun',1e-10)
option s(4)-违反约束的结束标准(默认值为1e-6)。
option s(5)-算法选择,不常用。
option s(6)-优化程序方法选择,为0则为BF CG算法,为1则采用D F P算法。
option s(7)-线性插值算法选择,为0则为混合插值算法,为1则采用立方插算法。
option s(8)-函数值显示(目标—达到问题中的L ambd a )
option s(9)-若需要检测用户提供的梯度,则设为1。
option s(10)-函数和约束估值的数目。
option s(11)-函数梯度估值的个数。
option s(12)-约束估值的数目。
option s(13)-等约束条件的个数。
option s(14)-函数估值的最大次数(默认值是100×变量个数) option s(15)-用于目标—达到问题中的特殊目标。
option s(16)-优化过程中变量的最小有限差分梯度值。
option s(17)- 优化过程中变量的最大有限差分梯度值。
option s(18)-步长设置 (默认为1或更小)。
Foptio ns已经被o ptim set和o p timg et代替,详情请查函数o ptim set和o p timg et。
ps: 以上x = fminco n(fun,x0,A,b,Aeq,beq,lb,ub,nonlco n,option s)
括号中的参数,需从左到右依次给出,可只给部分。
如可写为x = fminco n(fun,x0,A,b) x = fminco n(fun,x0,A,b,Aeq,beq) x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub)
如中间某些约束为空,可以用[]表示,如可写为 x = fminco n(fun,x0,A,b,[],[],lb,ub)
fminco n函数
fminco n函数浅析(转载)
命令格式:
[x,fval,exitfl ag,output,lambda,grad,hessia n] = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlco n,option s)
如matla b帮助文档中所述,fminco n命令使用的算法对于大规模优化问题和中等问题是有所区分的:
Large-ScaleOptimi zatio n
The large-scalealgori thm is a subspa ce trustregion method and is basedon the inter i o r-reflec tiveNewton method descri bed in [1] and [2]. Each iterat ion involv es the approx imate soluti on of a largelinear system usingthe method of precon ditio ned conjug ate gradie nts (PCG)..
Medium-ScaleOptimi zatio n
fminco n uses a sequen tialquadra tic progra mming(SQP) method. In this method, the functi on solves a quadra tic progra mming(QP) subpro blemat each iterat ion. An estim a t e of the Hessia n of the Lagran gianis update d at each iterat ion usingthe BFGS formul a. A line search is perfor med The QP subpro blemis solved usingan active set strate gy.
这里试图回答三个问题:
1.
什么Larg e-ScaleOptimi zatio n,什么是Med ium-Scale Optimi zatio n?
2.
fimcon提供的su bspac e trustregion和sequ entia l quadra tic progra mming方法原理?
3.
BFGS公式和线性搜索是什么?
问题1
所谓大规模问题指的是出现在工程,化学等领域中有大量优化变量的问题。
由于自变量的
维数很高,这样的问题是被分解成多个低维子问题来求解的。
Medium-Scale优化问题实际上是mat lab自己提出和大规模问题对应的一个概念,就是通常一般的优化算法,如牛顿法,最速下降法之类的处理优化变量不是很多的问题。
问题2
对于大规模问题,fminco n采用了s u bspa ce trustregion优化算法。
这种算法是把目标函数在点x的邻域泰勒展开(x可以认为是人为提供的初始猜测),这个展开的邻域就是所谓的
trus t region,泰勒展开进行到二阶项为止:
Q(x) = 1/2*<x,Hx> + <f,x>
(1)
这时目标函数在某一个局部的特性就可以“看出来了”。
在这样的一个邻域里,我们求一
个新的点x1,使得目标函数值减小,这个问题相比于原来的问题要简单。
然而实际上对于存在非常大规模优化变量的问题,直接对这个子问题的求解仍然是不可忍受的。
同时我们注意到,由于泰勒展开要进行的第二项,这就要求我们能够提供一阶导计算的函数。
如果我们不能提供一阶导表达式,二阶导(Hessia n矩阵)matlab是无法计算的。
所以我们使用f minc on命令而不给一阶导表达式,fminco n会放弃使用大规模算法。
如前所述,原问题转化后的直接求解仍然是无法忍受的,通过进一步近似subs pace trustregion将这个问题局限在tr ust region的二维子空间内求解。
序列二次规划方法是将一个带有等式和不等式约束(可以是非线性)的非线性优化问题转
化为二次规划问题求解,二次规划问题类似公式(1)形式。
具体转化过程可以参考:/~adpadu/talks/sqp1.pdf
问题3
对于medi um-scale问题,求解二次规划问题涉及到H essi an矩阵。
H essia n矩阵的近似计算是通过拟牛顿法得到的,拟牛顿法提供了两个公式可用于He ssian矩阵(或其逆)的迭代:BFGS公式和DFP公式),而初始的He ssian矩阵是任意给的,如给一个单位阵I。
BFGS公式如下:
H(k+1) = H(k) + <q(k),q(k)>/<q(k),s(k)> - <s(k)H(k), s(k)H(k)>/<s(k), H(k)s(k)> (3)
总结:
fminco n运行首先检查有无梯度表达提供,如有则选则大规模算法(s ubspa ce trustregion),由此涉及到H e ssia n阵的近似计算,由于已提供了梯度的公式,则Hessi an阵可以直接通过有限差分计算。
但是如果用户直接提供了H essi an计算公式,则直接计算。
如果没有梯度表达式提供,fminco n选则SQ P算法,算法中Hes sian阵可以通过B F GS迭代,初始Hess ian阵任给。
注意BFGS公式中q项是需要计算目标函数梯度得到的。
所以Hess ian 矩阵的近似计算是需要用到有限差分法。