的surrogateopt
求解器接受整数约束和非线性约束。比较有整数约束和没有整数约束的非线性问题的解。整数约束使解位于一个合理的精细网格上。
目标函数为
该目标函数是非负的,在该点处取其最小值为0 =[1.3333, 1.0370]。
该问题有两个非线性约束函数。
绘制非线性约束的可行区域。
(X, Y) = meshgrid (2: .01:3);Z = (5*sinh(y /5) >= X.^4);当满足第一个约束时,% Z=1,否则Z=0Z = Z+ 2*(5*tanh(X./5)) >= y ^2 - 1;% Z=2,满足第二个约束% Z=3,满足两个约束条件冲浪(X, Y, Z,“线型”,“没有”);无花果= gcf;fig.Color =' w ';%白色背景视图(0,90)包含(“x_1”) ylabel (“x_2”)
黄色区域显示了满足这两个约束的地方。
surrogateopt
要求目标函数和约束函数是同一函数的一部分,该函数返回一个结构。目标函数在Fval
字段,约束在Ineq
字段。属性的输出objconstr
函数在这个例子到此结束.
将问题设置为两个变量都有整数约束,x (1)
和x (2)
.
Intcon = [1 2];
缩放这个问题,这样变量就被缩放了s = 1/10
,在那里年代
繁殖的变量。
s = 0.1;f = @ (x) objconstr (x,年代);
为了使这种缩放有效,您需要将边界缩放为 .设置未缩放的边界为 然后按比例 .
磅= (2,2)/ s;乌兰巴托= (3 3)/ s;
通过缩放年代
,问题有效有间隔年代
在每个组件x (1)
和x (2)
.将整数点绘制成有间距的网格年代
.
持有在网格在甘氨胆酸ax =;sp = 2:销售:3;斧子。XTick = sp;斧子。YTick = sp;斧子。层=“高级”;斧子。GridAlpha = 1/2;斧子。XTickLabel ='';斧子。YTickLabel ='';包含(“x_1”) ylabel (“x_2”)举行从
设置选项以使用比默认更严格的约束,并使用surrogateoptplot
图的功能。
选择= optimoptions (“surrogateopt”,“PlotFcn”,“surrogateoptplot”,“ConstraintTolerance”1 e-6);
调用surrogateopt
来解决这个问题。
rng默认的%的再现性[溶胶,fval eflag outpt] = surrogateopt (f,磅,乌兰巴托,intcon选择)
surrogateopt停止,因为它超过了'options.MaxFunctionEvaluations'设置的函数求值限制。
索尔=1×25个1
fval = 0.8634
eflag = 0
outpt =结构体字段:rngstate: [1x1 struct] message: 'surrogateopt stopped because it exceeded the function evaluation limit by…'
在图上用红色圆圈标出解决方案。注意,目标函数值约为0.86。
图(图);持有在plot3 (sol (1) * s,索尔(2)*年代,5,“罗”)举行从
将有整数约束的解与没有整数约束的解进行比较。
[sol2, fval2 eflag2 outpt2] = surrogateopt (f,磅,乌兰巴托,[],选择)
surrogateopt停止,因为它超过了'options.MaxFunctionEvaluations'设置的函数求值限制。
sol2 =1×24.3928 - 0.3723
fval2 = 0.8152
eflag2 = 0
outpt2 =结构体字段:rngstate: [1x1 struct] message: 'surrogateopt stopped because it exceeded the function evaluation limit by…'
这里,目标函数值约为0.815。整数约束使目标函数值增加不超过10%。把新的解和之前的整数解画出来。放大以更清楚地看到解决点。
图(图)在plot3 (sol2 (1) * s, sol2 (2) * s, 5,“k *’,“MarkerSize”xlim([0 1]) ylim([-1/2 /2])保持从
此代码创建objconstr
helper函数。这个函数缩放变量x
的因素年代
,返回的目标函数值Fval
场的F
结构的非线性约束,并返回Ineq
场的F
结构。
函数F = objconstr(x,s) x = x*s;有趣=日志(1 + 3 * (x (2) - (x (1) ^ 3 - x (1))) ^ 2 + (x (1) - 4/3) ^ 2);C1 = x(1)^4 - 5*sinh(x(2)/5);C2 = x(2)^2 - 5*tanh(x(1)/5) - 1;C = [c1 c2];F.Fval =乐趣;F.Ineq = c;结束