可行性运用具体问题具体分析优化
住编辑任务
问题描述
这个例子展示了如何使用优化
Live Editor任务使用多种求解器。问题是要找到一个点
满足这些约束条件:
.
画出约束函数为零的曲线。要看区域的哪一部分是可行的(负约束函数值),绘制约束函数等于-1/2的曲线。使用plotobjconstr
函数出现在脚本结束.
plotobjconstr
附近似乎有一个小的可行区域 .注意,不存在所有约束值都小于-1/2的点,因此可行集很小。
运用具体问题具体分析优化
住编辑任务
找到一个可行的点,发射优化
通过选择Live Script中的Live Editor任务任务>优化在代码选项卡或插入选项卡。选择基于问题的任务。
设置问题变量x
下界-5,上界5。设置问题变量y
下限-10,上限10。设置初始点x
To 2和fory
2。
设置目标来最大.
创建代表这三个约束条件的不等式。你的任务应该与这幅图相匹配。
将任务模式切换为解决问题.任务选择fmincon
求解,得到以下解。
初始点效应
从不同的起始点开始会导致fmincon
找不到解决办法设x的起始点为-2。
这一次fmincon
找不到可行的解决方案。
尝试不同的解算器
试图找到一个解决方案,尝试不同的求解器。设置解算器为遗传算法
.方法中指定求解器指定依赖于问题的求解器选项扩展器。为了监视求解器的进度,将plot函数设置为马克斯约束违反.
遗传算法
在约束公差范围内找到一个可行点。
遗传算法
找到一个不同的解fmincon
.这个解决办法有点不可行。要获得不可行性较低的解决方案,可以将约束容差选项设置为比默认值更低的值。或者,尝试不同的求解器。
试一试surrogateopt
试着使用surrogateopt
解算器。设置图形函数为马克斯约束违反;该设置不会自动从遗传算法
解决方案。
surrogateopt
达到一个可行的解决方案,但不停止当它第一次达到一个解决方案。相反,surrogateopt
继续迭代,直到达到函数求值极限。要更早地停止迭代,请指定一个输出函数,在最大约束违反达到1e-6或更少的时候停止求解器。这样做会导致求解器更早地停止。使用surrout
助手函数,该函数出现在脚本结束.要指定此函数,请创建该函数的函数句柄。
outfun = @surrout;
中指定此函数句柄指定依赖问题求解选项> options >诊断>输出功能下拉菜单。
这一次,求解器在大约30次函数计算之后停止,而不是200次。这个解决方案与前一个稍有不同,但都是可行的解决方案。
结论
的具体问题具体分析优化
Live Editor任务帮助您尝试在一个问题上使用不同的求解器,甚至求解器具有不同的语法,例如fmincon
而且surrogateopt
.该任务还可以帮助您设置绘图函数和设置其他选项。
任务在这里显示为最终状态。请随意使用不同的求解器和选项进行试验。
辅助函数
此代码创建plotobjconstr
helper函数。
函数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”,“上”);持有从结束
此代码创建objconstr
helper函数。
函数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;结束
此代码创建surrout
helper函数
函数stop = surrouting (~,optimValues,~) stop = false;如果optimValues。constrviolation e-6 < = 1约束容忍度%停止= true;结束结束
另请参阅
优化|fmincon
|遗传算法
(全局优化工具箱)|surrogateopt
(全局优化工具箱)
相关的话题
- 解决非线性可行性问题,基于问题
- 研究线性不可行性
- 解决问题的可行性(全局优化工具箱)
- 具体问题具体分析优化工作流程