使用基于问题的 Optimize
实时编辑器任务求解可行性问题
问题描述
此示例说明如何使用 Optimize
实时编辑器任务通过各种求解器找到可行点。问题可以表示为找到满足以下约束的点 :
.
绘制约束函数等于零的曲线。要查看域的哪个部分可行(约束函数值为负),请绘制约束函数值等于 -1/2 的曲线。使用此脚本末尾的 plotobjconstr
函数。
plotobjconstr
附近似乎有一个小的可行域。请注意,不存在所有约束值都小于 -1/2 的点,因此可行集很小。
使用基于问题的 Optimize
实时编辑器任务
要找到可行点,请通过选择代码选项卡或插入选项卡上的任务 > 优化,从实时脚本启动 Optimize
实时编辑器任务。选择基于问题的任务。
将问题变量 x
设置为下界为 -5,上界为 5。将问题变量 y
设置为下界为 -10,上界为 10。将 x
的初始点设置为 2,将 y
的初始点设置为 -2。
将目标设置为可行性。
创建表示三个约束的不等式。您的任务如下图所示。
将任务模式切换到求解问题。该任务会选择 fmincon
求解器并得出以下解。
初始点的影响
从不同初始点开始可能会导致 fmincon
找不到解。将 x 的初始点设置为 -2。
此时 fmincon
找不到可行解。
尝试使用其他求解器
要找到解,请尝试使用其他求解器。将求解器设置为 ga
。为此,请在指定与问题相关的求解器选项扩展按钮中指定求解器。为了监控求解器进度,请将绘图函数设置为最大约束违反值。
ga
找到一个在约束容差范围内的可行点。
ga
找到的解与 fmincon
不同。该解不太可行。要获得不可行性较低的解,您可以将约束容差选项设置为小于默认值的值。或者,尝试使用其他求解器。
尝试 surrogateopt
尝试使用 surrogateopt
求解器。将绘图函数设置为最大约束违反值;此设置不会自动从 ga
解继承。
surrogateopt
找到一个可行解,但在第一次找到解时不停止。surrogateopt
而是会继续迭代,直到达到其函数计算限制。要提前停止迭代,请指定输出函数,一旦最大约束违反值达到 1e-6 或更小,该函数就会停止求解器。这样做会导致求解器更早停止。使用 surrout
辅助函数,它位于此脚本末尾。要指定此函数,请创建该函数的函数句柄。
outfun = @surrout;
在指定与问题相关的求解器选项 > 选项 > 诊断 > 输出函数下拉菜单中指定此函数句柄。
此时,求解器在大约 30 次(而不是 200 次)函数计算后停止。该解与上一个解略有不同,但均为可行解。
结论
借助基于问题的 Optimize
实时编辑器任务,您可以尝试使用其他求解器来求解问题,即使这些求解器具有不同语法,如 fmincon
和 surrogateopt
。该任务还可以帮助您设置绘图函数,以及其他选项。
此处显示的任务处于其最终状态。您可以随意试用不同的求解器和选项。
辅助函数
以下代码会创建 plotobjconstr
辅助函数。
function plotobjconstr [XX,YY] = meshgrid(-2:0.1:2,-4:0.1:2); ZZ = objconstr([XX(:),YY(:)]).Ineq; ZZ = reshape(ZZ,[size(XX),3]); h = figure; ax = gca; contour(ax,XX,YY,ZZ(:,:,1),[-1/2 0],'r','ShowText','on'); hold on contour(ax,XX,YY,ZZ(:,:,2),[-1/2 0],'k','ShowText','on'); contour(ax,XX,YY,ZZ(:,:,3),[-1/2 0],'b','ShowText','on'); hold off end
以下代码会创建 objconstr
辅助函数。
function 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; end
以下代码创建 surrout
辅助函数
function stop = surrout(~,optimValues,~) stop = false; if optimValues.constrviolation <= 1e-6 % Tolerance for constraint stop = true; end end
另请参阅
优化 | fmincon
| ga
(Global Optimization Toolbox) | surrogateopt
(Global Optimization Toolbox)
相关主题
- Solve Nonlinear Feasibility Problem, Problem-Based
- Investigate Linear Infeasibilities
- Solve Feasibility Problem (Global Optimization Toolbox)
- 基于问题的优化工作流