- 1、本文档共7页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
MATLAB非线性优化fmincon
active-set and sqp algorithms 不接受用户提供的海塞矩阵,对拉格朗日的海塞矩阵提供一个拟牛顿的近似值;
目标函数估值次数与迭代次数?
优化成功或失败
一、求解失败
1、在到达迭代次数阈值或目标函数估值次数阈值时,求解器没有最小化目标到要求的精度,此时求解器停止。接下来,可以尝试以下方法:
(1)设置‘Display’为‘iter’,查看每步的迭代信息,这些信息包括:目标函数(Fval or f(x) or Resnorm)是否是下降的;检查约束越界(Max constraint)是否是递减趋向于0;查看一阶优化是否是递减趋向于0;查看置信域半径(Trust-region radius)是否下降趋向于一个小的值。若其中至少一种情况为是,就表示结果是不断改善的。如果结果是不断改善的,可以采取下边的措施:设置MaxIter、MaxFunEvals比默认值大的值,默认值可以在优化工具箱或求解器的函数参考页的优化表中查看;从最后计算出的点开始重新求解。如果结果没有改善,尝试以下其他的方法。
(2)放松精度
如果TolX或TolFun太小,当求解器达到一个最小值时可能也不会识别到,这就会导致无限次徒劳的迭代。DiffMaxChange和DiffMinChange选项能影响求解器的改善,它们控制求导估计中有限差分的步长。
(3)从不同的初始点重新开始求解
(4)检查目标函数和约束函数的定义
举个例子,可以检查目标函数和非线性约束函数在某些特定点处返回正确的值。不可行的点不一定导致函数的错误。
(5)对问题进行中心化和标准化
当每个坐标轴对目标函数和约束函数有相同的影响时,求解器更能可靠的运行,对每个坐标轴方向乘以合适的量使得每个坐标轴的影响相同,在特定的坐标轴上加上合适的值使得它们长度一致。
(6)提供解析的梯度和雅可比矩阵
如果用户不提供解析的梯度或雅可比矩阵,求解器会用有限差分来估计这些值,因此提供这些导数可以减少运算时间,提高计算准确度。
对于约束问题,提供梯度还有另一个好处----求解器到达一个点x时能满足该点是可行的,但有限差分在x点周围可能会导致不可行的点,在这种情况下,求解器可能会失败或突然中断。
(7)提供海塞矩阵
当提供海塞矩阵时,求解器能运行的更可靠,而且运行的次数比较少。
2、无可行点
在TolCon约束精度内,求解器不能找到一个满足所有约束条件的点,此时,可以尝试以下方法:
(1)检查线性约束
通过求解一个线性规划问题来找到一个满足界约束和线性约束的点。
i)定义一个目标函数是常值0的线性规划问题
f = zeros(size(x0)); % assumes x0 is the initial point
ii)求解这个线性规划问题看是否有一个可行点
xnew = linprog(f,A,b,Aeq,beq,lb,ub);
iii)如果有可行点xnew,用xnew作为初始点去求解原始问题
iv)如果没有可行点,那说明原始模型建的不好,检查界约束和线性约束。
(2)检查非线性约束
在保证界约束和线性约束是可行的之后,检查非线性约束:
i)设置目标函数为0,然后求解优化问题,如果能找到一个可行点xnew,令x0=xnew返回到原始问题中去
ii)如果用0目标函数不能找到一个可行点,尝试几个不同的初始点重新求解,如果找到了一个可行点xnew,令x0=xnew并返回到原始问题中去,如果仍没找到可行点,试着用下列方法放松约束条件。
a.改变非线性约束函数c为c-Δ,Δ是一个正数,这会使得非线性约束更容易满足。
b.尝试用原始的目标函数或0目标函数对新的约束函数寻找一个可行点。如果找到一个可行点,那么减少Δ,并在之前找到的点处开始对新的约束函数重新找一个可行点;如果没有找到一个可行点,试着增大Δ并重新找。
如果一直没有找到可行点,那么原始问题可能确实是不可行的,重新检查约束函数的定义。
3、问题是无界的
求解器到达一个目标函数小于目标阈值界的点,那么
(1)原问题可能确实无界,即存在一系列满足问题约束的点xi,使得lim f(xi) = –∞。
(2)检查原问题建模正确,求解器是最小化目标函数,如果想得到最大化,将目标函数乘以-1.
(3)试着标准化或中心化原问题。
(4)放松目标函数界精度,用optimset减少ObjectiveLimit设定的精度值。
二、求解可能成功
1、最后的点等于初始点
初始点可能是局部极小点,因为它的一阶导数接近0,如果并不确定初始点确实是一个局部极小点,尝试下边的步骤:
(1)从不同的点开始重新求解
(2)检查目标函数和约束函数定义正确。
(3)改变精度,如TolFun,TolCon,TolX
(4)标准化原问题,使得每个坐标轴有相同的影响。
(5)提供解析
文档评论(0)