主要内容

解决问题的可行性

有些问题要求你找到一个满足所有约束条件的点,而不需要最小化目标函数。例如,假设你有以下约束条件:

y + x 2 2 + 0 1 y 2 1 y 经验值 - x - 3. y x - 4

做任何点 x y 满足的约束?为了找出答案,编写一个函数,返回结构字段中的约束Ineq.用二元向量写出约束条件 x x 1 x 2 而不是 x y .把每个不等式写成函数 c x ,意思是不平等 c x 0 从不等式的两边减去每个不等式的右边。要启用绘图,请以向量化的方式编写函数,其中每一行代表一个点。此helper函数的代码名为objconstr,出现在这个例子到此结束

画出三个函数满足等式的点 - 2 x 2 - 4 y 2 ,并通过绘制函数值为-1/2的等高线来表示这些不等式。

[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”“上”);持有

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

图中显示,在[1.75,-3]附近存在可行点。

设置-5的下界和3的上界,并使用surrogateopt

rng (1)%的再现性磅= (5,5);乌兰巴托= (3 3);[x, fval exitflag、输出试验]= surrogateopt (@objconstr磅,乌兰巴托)

图优化Plot函数包含一个轴。标题为“最大约束违背:-0.0799947”的轴包含2个类型为line的对象。这些对象代表最佳函数值(不可行的)、最佳函数值。

surrogateopt停止,因为它超过了'options.MaxFunctionEvaluations'设置的函数求值限制。
x =1×21.7312 - -3.0312
Fval = 1x0空双行向量
exitflag = 0
输出=结构体字段:rngstate: [1x1 struct] message: 'surrogateopt stopped because it exceeded the function evaluation limit by…'
试验=结构体字段:X: [200x3 double] [200x3 double]

在返回的溶液上检查可行性x

disp (output.ineq)
-0.0800 -0.2083 -0.7625

同样地,对函数求值objconstr在返回溶液处x

disp (objconstr (x) .Ineq)
-0.0800 -0.2083 -0.7625

等价于检查Ineq字段试用解决方案的结构x.首先,找到的索引x试用X字段。

indx = ismember(试验。X, X,“行”);disp (trials.Ineq (indx:))
-0.0800 -0.2083 -0.7625

所有约束函数值均为负值,表示该点x是可行的。

查看被评估的可行点surrogateopt

选择= optimoptions (“surrogateopt”);indx = max(trials.Ineq,[],2) <= opts. constraintolerance;可行点指数图(h);持有情节(trials.X (indx, 1), trials.X (indx, 2),‘*’([1 2]) ylim([-3.5 -2.5]) hold

图中包含一个坐标轴。轴包含等高线、直线等4个对象。

此代码创建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;结束

另请参阅

相关的话题