主要内容

解决问题的可行性

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

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 等号两边同时减去等号右边。为了便于绘图,以向量化的方式编写函数,其中每一行代表一个点。此助手函数的代码,名为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. maxfunctionevalues '设置的函数计算限制。
x =1×21.7312 - -3.0312
Fval = 1x0空双行向量
exitflag = 0
输出=结构体字段:[-0.0800 -0.2083 -0.7625] rngstate: [1x1 struct] message: 'surrogateopt stopped because it exceeded the function evaluation limit set by…' message: 'surrogateopt stopped because it exceeded the function evaluation limit set by…'
试验=结构体字段:X: [200x2 double] inq: [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”);indexx = max(trials.Ineq,[],2) <= opts. constraintolerance;可行点指数图(h);持有情节(trials.X (indx, 1), trials.X (indx, 2),‘*’) xlim([1 2]) ylim([-3.5 -2.5]

图中包含一个轴。轴线包含类型轮廓、线4个对象。

此代码创建objconstrhelper函数。

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

另请参阅

相关的话题