MATLAB非线性优化fmincon.doc

  1. 1、本文档共7页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 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)

tiangou + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档