主要内容

可行性运用具体问题具体分析优化住编辑任务

问题描述

这个例子展示了如何使用优化Live Editor任务使用多种求解器。问题是要找到一个点 x y 满足这些约束条件:

y + x 2 2 + 0 1 y 2 1

y 经验值 - x - 3.

y x - 4

画出约束函数为零的曲线。要看区域的哪一部分是可行的(负约束函数值),绘制约束函数等于-1/2的曲线。使用plotobjconstr函数出现在脚本结束

plotobjconstr

图中包含一个axes对象。坐标轴对象包含3个轮廓类型的对象。

附近似乎有一个小的可行区域 x 1 7 5 y - 3. .注意,不存在所有约束值都小于-1/2的点,因此可行集很小。

运用具体问题具体分析优化住编辑任务

找到一个可行的点,发射优化通过选择Live Script中的Live Editor任务任务>优化代码选项卡或插入选项卡。选择基于问题的任务。

设置问题变量x下界-5,上界5。设置问题变量y下限-10,上限10。设置初始点xTo 2和fory2。

设置目标最大

创建代表这三个约束条件的不等式。你的任务应该与这幅图相匹配。

feasibility_setup.png

将任务模式切换为解决问题.任务选择fmincon求解,得到以下解。

feasibility_sol1.png

初始点效应

从不同的起始点开始会导致fmincon找不到解决办法设x的起始点为-2。

feasibility_setup2.png

这一次fmincon找不到可行的解决方案。

feasibility_sol2.png

尝试不同的解算器

试图找到一个解决方案,尝试不同的求解器。设置解算器为遗传算法.方法中指定求解器指定依赖于问题的求解器选项扩展器。为了监视求解器的进度,将plot函数设置为马克斯约束违反

feasibility_setup3.png

遗传算法在约束公差范围内找到一个可行点。

feasibility_sol3.png

遗传算法找到一个不同的解fmincon.这个解决办法有点不可行。要获得不可行性较低的解决方案,可以将约束容差选项设置为比默认值更低的值。或者,尝试不同的求解器。

试一试surrogateopt

试着使用surrogateopt解算器。设置图形函数为马克斯约束违反;该设置不会自动从遗传算法解决方案。

feasibility_sol4.png

surrogateopt达到一个可行的解决方案,但不停止当它第一次达到一个解决方案。相反,surrogateopt继续迭代,直到达到函数求值极限。要更早地停止迭代,请指定一个输出函数,在最大约束违反达到1e-6或更少的时候停止求解器。这样做会导致求解器更早地停止。使用surrout助手函数,该函数出现在脚本结束.要指定此函数,请创建该函数的函数句柄。

outfun = @surrout;

中指定此函数句柄指定依赖问题求解选项> options >诊断>输出功能下拉菜单。

feasibility_setup5.png

feasibility_sol5.png

这一次,求解器在大约30次函数计算之后停止,而不是200次。这个解决方案与前一个稍有不同,但都是可行的解决方案。

结论

的具体问题具体分析优化Live Editor任务帮助您尝试在一个问题上使用不同的求解器,甚至求解器具有不同的语法,例如fmincon而且surrogateopt.该任务还可以帮助您设置绘图函数和设置其他选项。

任务在这里显示为最终状态。请随意使用不同的求解器和选项进行试验。

生活任务

辅助函数

此代码创建plotobjconstrhelper函数。

函数plotobjconstr [XX, YY] = meshgrid (2:0.1:2 4:0.1:2);ZZ = objconstr ([XX (:), YY (:))) .Ineq;ZZ =重塑(ZZ,[大小(XX), 3]);h =图;甘氨胆酸ax =;轮廓(ax, XX, YY, ZZ (:,: 1), [0] 1/2,“r”“ShowText”“上”);持有轮廓(ax, XX, YY, ZZ (:,: 2), [0] 1/2,“k”“ShowText”“上”);轮廓(ax, XX, YY, ZZ (:,:, 3), [0] 1/2,“b”“ShowText”“上”);持有结束

此代码创建objconstrhelper函数。

函数F = objconstr(x) c(:,1) = (x(:,2) + x(:,1).^2)。^ 2 + 0.1 * x(:, 2)。^ 2 - 1;C (:,2) = x(:,2) - exp(-x(:,1)) + 3;C (:,3) = x(:,2) - x(:,1) + 4;f.Ineq = c;结束

此代码创建surrouthelper函数

函数stop = surrouting (~,optimValues,~) stop = false;如果optimValues。constrviolation e-6 < = 1约束容忍度%停止= true;结束结束

另请参阅

||(全局优化工具箱)|(全局优化工具箱)

相关的话题

Baidu
map