主要内容

用整数和非线性约束求解非线性问题

surrogateopt求解器接受整数约束和非线性约束。比较有整数约束和没有整数约束的非线性问题的解。整数约束使解位于一个合理的精细网格上。

目标与约束函数

目标函数为

f x 日志 1 + 3. x 2 - x 1 3. - x 1 2 + x 1 - 4 / 3. 2

该目标函数是非负的,在该点处取其最小值为0 x 4 / 3. 4 / 3. 3. - 4 / 3. =[1.3333, 1.0370]。

该问题有两个非线性约束函数。

x 1 4 5 sinh x 2 / 5 x 2 2 5 双曲正切 x 1 / 5 + 1

绘制非线性约束的可行区域。

(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”

图中包含一个轴对象。axis对象包含一个类型为surface的对象。

黄色区域显示了满足这两个约束的地方。

surrogateopt要求目标函数和约束函数是同一函数的一部分,该函数返回一个结构。目标函数在Fval字段,约束在Ineq字段。属性的输出objconstr函数在这个例子到此结束

精细网格上的比例整数约束

将问题设置为两个变量都有整数约束,x (1)x (2)

Intcon = [1 2];

缩放这个问题,这样变量就被缩放了s = 1/10,在那里年代繁殖的变量。

s = 0.1;f = @ (x) objconstr (x,年代);

为了使这种缩放有效,您需要将边界缩放为 1 / 年代 .设置未缩放的边界为 - 2 x 3. 然后按比例 1 / 年代

磅= (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”)举行

图中包含一个轴对象。axis对象包含一个类型为surface的对象。

解决了问题

设置选项以使用比默认更严格的约束,并使用surrogateoptplot图的功能。

选择= optimoptions (“surrogateopt”“PlotFcn”“surrogateoptplot”“ConstraintTolerance”1 e-6);

调用surrogateopt来解决这个问题。

rng默认的%的再现性[溶胶,fval eflag outpt] = surrogateopt (f,磅,乌兰巴托,intcon选择)

图优化Plot函数包含一个轴对象。轴对象与标题最佳:0.863447现任:1.83438当前:2.18897包含12个对象的类型行。这些对象代表最佳(Infeas),在职(Infeas),随机样本(Infeas),最佳,在职,随机样本,自适应样本(Infeas),自适应样本,代理重置。

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,磅,乌兰巴托,[],选择)

图优化Plot函数包含一个轴对象。轴对象与标题最佳:0.815247在任:0.815358当前:0.815403包含10个对象的类型线。这些对象代表最佳(Infeas),在职(Infeas),随机样本(Infeas),最佳,在职,随机样本,自适应样本(Infeas),自适应样本,代理重置。

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])保持

图中包含一个轴对象。轴对象包含三个对象的类型为面,线。

Helper函数

此代码创建objconstrhelper函数。这个函数缩放变量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;结束

另请参阅

相关的话题