主要内容

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

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,“线型”“没有”);FIG = 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,s);

为了使这个缩放有效,你需要缩放边界 1 / 年代 .将无缩放边界设置为 - 2 x 3. 然后按 1 / 年代

Lb = [-2,-2]/s;Ub = [3,3]/s;

通过缩放年代时,问题有效地具有的间距年代在每个组件中x (1)而且x (2).将整数点画成有间距的网格年代

持有网格Ax = gca;Sp = -2:s:3;斧子。XTick = sp;斧子。YTick = sp;斧子。层=“高级”;斧子。GridAlpha = 1/2;斧子。XTickLabel =;斧子。YTickLabel =;包含(“x_1”) ylabel (“x_2”)举行

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

解决规模问题

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

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

调用surrogateopt解决问题。

rng默认的%用于再现性[sol,fval,eflag,outpt] = surrogateopt(f,lb,ub,intcon,opts)

{

surrogateopt停止,因为它超过了'options.MaxFunctionEvaluations'设置的函数计算限制。
索尔=1×25个1
Fval = 0.8634
Eflag = 0
outpt =带字段的结构:Elapsedtime: 77.0724 funccount: 200 constrviolation: -0.0375 ineq: [-0.0375 -1.4883] rngstate: [1x1 struct] message: 'surrogateopt停止,因为它超过了函数计算限制…'

将解决方案绘制为图上的红色圆圈。注意,目标函数值约为0.86。

图(图);持有plot3 (sol (1) * s,索尔(2)*年代,5,“罗”)举行

图中包含一个轴对象。坐标轴对象包含两个类型为surface、line的对象。

与不带整数约束的解比较

将有整数约束的解决方案与没有整数约束的解决方案进行比较。

[sol2,fval2,eflag2,outpt2] = surrogateopt(f,lb,ub,[],opts)

{

surrogateopt停止,因为它超过了'options.MaxFunctionEvaluations'设置的函数计算限制。
sol2 =1×24.3631 - 0.3626
Fval2 = 0.8153
Eflag2 = 0
outpt2 =带字段的结构:Elapsedtime: 45.3679 funccount: 200 constrviolation: -1.7294e-05 ineq: [-1.7294e-05 -1.4339] rngstate: [1x1 struct] message: 'surrogateopt停止,因为它超过了函数计算限制…'

这里,目标函数值约为0.815。整数约束使目标函数值增加不超过10%。将新的解与之前的整数解一起绘制出来。放大以更清楚地看到解决方案点。

图(图)plot3 (sol2 (1) * s, sol2 (2) * s, 5,“k *’“MarkerSize”,12) xlim([0 1]) ylim([-1/2 /2])保持

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

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;结束

另请参阅

相关的话题

Baidu
map