matlab非线性优化fmincon

上传人:简****9 文档编号:95487657 上传时间:2019-08-19 格式:DOC 页数:7 大小:37.50KB
返回 下载 相关 举报
matlab非线性优化fmincon_第1页
第1页 / 共7页
matlab非线性优化fmincon_第2页
第2页 / 共7页
matlab非线性优化fmincon_第3页
第3页 / 共7页
matlab非线性优化fmincon_第4页
第4页 / 共7页
matlab非线性优化fmincon_第5页
第5页 / 共7页
点击查看更多>>
资源描述

《matlab非线性优化fmincon》由会员分享,可在线阅读,更多相关《matlab非线性优化fmincon(7页珍藏版)》请在金锄头文库上搜索。

1、active-set and sqp algorithms 不接受用户提供的海塞矩阵,对拉格朗日的海塞矩阵提供一个拟牛顿的近似值;目标函数估值次数与迭代次数?优化成功或失败一、求解失败1、在到达迭代次数阈值或目标函数估值次数阈值时,求解器没有最小化目标到要求的精度,此时求解器停止。接下来,可以尝试以下方法:(1)设置Display为iter,查看每步的迭代信息,这些信息包括:目标函数(Fval or f(x) or Resnorm)是否是下降的;检查约束越界(Max constraint)是否是递减趋向于0;查看一阶优化是否是递减趋向于0;查看置信域半径(Trust-region radius

2、)是否下降趋向于一个小的值。若其中至少一种情况为是,就表示结果是不断改善的。如果结果是不断改善的,可以采取下边的措施:设置MaxIter、MaxFunEvals比默认值大的值,默认值可以在优化工具箱或求解器的函数参考页的优化表中查看;从最后计算出的点开始重新求解。如果结果没有改善,尝试以下其他的方法。(2)放松精度如果TolX或TolFun太小,当求解器达到一个最小值时可能也不会识别到,这就会导致无限次徒劳的迭代。DiffMaxChange和DiffMinChange选项能影响求解器的改善,它们控制求导估计中有限差分的步长。(3)从不同的初始点重新开始求解(4)检查目标函数和约束函数的定义举个

3、例子,可以检查目标函数和非线性约束函数在某些特定点处返回正确的值。不可行的点不一定导致函数的错误。(5)对问题进行中心化和标准化当每个坐标轴对目标函数和约束函数有相同的影响时,求解器更能可靠的运行,对每个坐标轴方向乘以合适的量使得每个坐标轴的影响相同,在特定的坐标轴上加上合适的值使得它们长度一致。(6)提供解析的梯度和雅可比矩阵如果用户不提供解析的梯度或雅可比矩阵,求解器会用有限差分来估计这些值,因此提供这些导数可以减少运算时间,提高计算准确度。对于约束问题,提供梯度还有另一个好处-求解器到达一个点x时能满足该点是可行的,但有限差分在x点周围可能会导致不可行的点,在这种情况下,求解器可能会失败

4、或突然中断。(7)提供海塞矩阵当提供海塞矩阵时,求解器能运行的更可靠,而且运行的次数比较少。2、无可行点在TolCon约束精度内,求解器不能找到一个满足所有约束条件的点,此时,可以尝试以下方法:(1)检查线性约束通过求解一个线性规划问题来找到一个满足界约束和线性约束的点。i)定义一个目标函数是常值0的线性规划问题f = zeros(size(x0); % assumes x0 is the initial pointii)求解这个线性规划问题看是否有一个可行点xnew = linprog(f,A,b,Aeq,beq,lb,ub);iii)如果有可行点xnew,用xnew作为初始点去求解原始问题

5、iv)如果没有可行点,那说明原始模型建的不好,检查界约束和线性约束。(2)检查非线性约束在保证界约束和线性约束是可行的之后,检查非线性约束:i)设置目标函数为0,然后求解优化问题,如果能找到一个可行点xnew,令x0=xnew返回到原始问题中去ii)如果用0目标函数不能找到一个可行点,尝试几个不同的初始点重新求解,如果找到了一个可行点xnew,令x0=xnew并返回到原始问题中去,如果仍没找到可行点,试着用下列方法放松约束条件。a.改变非线性约束函数c为c-,是一个正数,这会使得非线性约束更容易满足。b.尝试用原始的目标函数或0目标函数对新的约束函数寻找一个可行点。如果找到一个可行点,那么减少

6、,并在之前找到的点处开始对新的约束函数重新找一个可行点;如果没有找到一个可行点,试着增大并重新找。如果一直没有找到可行点,那么原始问题可能确实是不可行的,重新检查约束函数的定义。3、问题是无界的求解器到达一个目标函数小于目标阈值界的点,那么(1)原问题可能确实无界,即存在一系列满足问题约束的点xi,使得lim f(xi) = 。(2)检查原问题建模正确,求解器是最小化目标函数,如果想得到最大化,将目标函数乘以-1.(3)试着标准化或中心化原问题。(4)放松目标函数界精度,用optimset减少ObjectiveLimit设定的精度值。二、求解可能成功1、最后的点等于初始点初始点可能是局部极小点

7、,因为它的一阶导数接近0,如果并不确定初始点确实是一个局部极小点,尝试下边的步骤:(1)从不同的点开始重新求解(2)检查目标函数和约束函数定义正确。(3)改变精度,如TolFun,TolCon,TolX(4)标准化原问题,使得每个坐标轴有相同的影响。(5)提供解析的梯度和海塞矩阵。2、可能的局部最小值(Local Minimum Possible,not Local Minimum Found)求解器可能达到一个局部最小值,但并不确定,因为一阶导数不小于TolFun,为了检查得到的答案是否是可靠的,考虑下边的建议。(1)非平滑函数如果试着最小化一个非平滑的函数,或者有非平滑的约束,那么Loca

8、l Minimum Possible是最好的返回标志,因为一阶导数条件并不适用于非平滑的点。试着检查周围的点来确定结果是否真的可靠。(2)在最后得到的点处开始重新优化在最后得到的点处开始重新优化会得到一个在一阶导数估量上更好的点,更好的一阶导数估量能让人相信结果是可靠的。3、尝试一个不同的算法4、改变精度5、重新标准化原问题6、检查邻近点7、改变有限差分的计算方法中心有限差分用的时间更多,但更准确,可以设置FinDiffType 为central。8、提供解析的梯度或雅可比矩阵9、提供海塞矩阵三、求解成功当求解器返回成功信息时,也可能结果是错误的,下边有几种方法可以验证结果。1、改变初始点初始

9、点对求解结果有很大影响,如果从不同的初始点得到了相同或较差的结果,说明原来求得的界是正确的。2、检查邻近点计算f(xfinal)的值,与f(xfinal)值做比较。3、检查目标函数与约束函数4、局部最优与全局最优(1)为什么求解器找不到最小的最小值通常,求解器返回的是一个局部最小值,该值也可能是一个全局最小值,但并不保证是。这部分讨论求解器得出这种结果的原因,并给出寻找全局最小值的建议。一般求解器是在初始点的basin of attraction找到的最优值,但也有些例外:i)线性规划和正定二次规划是凸的,可行域也是凸的,所以只有一个basin of attraction。在设定某些条件下,l

10、inprog会忽略用户提供的初始点,quadprog也不需要。ii)全局优化工具箱,如simulannealbnd,试着搜索不止一个basin of attraction。(2)寻找一个更小的最小值如果需要一个全局最小值,必须要在全局最小值的basin of attraction内找一个初始点。设置初始点的建议:i)用初始点的一个规则网格ii)如果原始问题在所有的坐标轴上是有界的,那么从均匀分布得到一个随机初始点,如果有些部分是无界的,那么用正态、指数或其他随机分布得到初始点。对全局最优值的位置知道的越少,就要选择越分散的随机分布。例如,正态分布大部分样本在均值的三个标准偏差范围内,但柯西分布(密度函数1/(1 + x2))样本很分散。iii)如果有全局优化工具箱的许可,可以应用GlobalSearch或MultiStart,这些求解器能在上下界范围内自动产生随机初始化点。对可能的初始化点知道的越多,搜寻最优值会越集中,成功的几率会越大。(3)Basins of Attraction如果目标函数f(x)是平滑的,那么负梯度方向f(x)是函数值下降最快的方向。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 商业/管理/HR > 管理学资料

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号