主要内容

约束极小化使用遗传算法,具体问题具体分析

这个例子展示了如何最小化目标函数,非线性不等式约束和边界,使用遗传算法在具体问题具体分析的方法。solver-based版本的这个问题,看到使用遗传算法约束最小化

约束的最小化问题

对于这个问题,适应度函数最小化是一个简单的二维变量的函数XY

camxy = @ (X, Y) (4 - 2.1 . * X。^ 2 + X ^ 4. / 3)。* X。^ 2 + X。* Y + (4 + 4。* Y ^ 2)。* Y ^ 2;

这个函数是描述在迪克森和Szego[1]

此外,非线性约束问题。

x * y + x - y + 1.5 < = 0(非线性约束)10 - x * y < = 0(非线性约束)0 < = x < = 1(绑定)0 < = y < = 13(绑定)

情节上的非线性约束区域适应度函数的曲面图。约束限制的解决方案上面的小区域两个红色的曲线。

x1 = linspace (0,1);日元= (x1 - 1.5)。/ (x1 - 1);y2 = 10. / x1;(X, Y) = meshgrid (x1, linspace (0, 13));Z = camxy (X, Y);冲浪(X, Y, Z,“线型”,“没有”)举行z1 = camxy (x1, y1);z2 = camxy (x1, y2);plot3 (x1, y1, z1,的r -,x1, y2、z2的r -1)xlim ([0]) ylim (13 [0]) zlim ([0, max (Z, [],“所有”)))举行

图包含一个坐标轴对象。坐标轴对象包含3个类型的对象的表面,线。

创建优化变量、问题和约束

设置这个问题,创建优化变量xy。当您创建的变量范围。

x = optimvar (“x”,“下界”0,“UpperBound”1);y = optimvar (“y”,“下界”0,“UpperBound”13);

创建一个优化的目标表达式。

凸轮= camxy (x, y);

创建一个与这个目标函数优化问题。

概率= optimproblem (“客观”、凸轮);

创建两个非线性不等式约束,包括他们的问题。

prob.Constraints。cons1 = x * y + x - y + 1.5 < = 0;prob.Constraints。cons2= 10 - x*y <= 0;

回顾这个问题。

显示(概率)
OptimizationProblem:解:x, y最小化:(((((4 - (2.1 . * x ^ 2)) + (x。^ 4。/ 3)。* x ^ 2) + (x, y)) + (((4) + (4。* y ^ 2)) * y ^ 2))受cons1: ((((x。* y) + x) - y) + 1.5) < = 0 cons2主题:(10 - (x, y)) < = 0变量范围:0 < = x < = 1 0 < = y < = 13

解决问题

解决问题,指定遗传算法解算器。

[溶胶,fval] =解决(概率,“规划求解”,“遗传算法”)
用遗传算法解决问题。优化完成:健身价值低于平均变化的选择。FunctionTolerance和约束违反小于options.ConstraintTolerance。
索尔=结构体字段:x: 0.8122 y: 12.3103
fval = 9.1268 e + 04

添加可视化

观察解算器的进展,指定选项,选择两个情节功能。绘制函数gaplotbestf情节的最佳目标函数值在每一个迭代,和情节功能gaplotmaxconstr在每个迭代中情节的最大约束违反。这两个情节功能单元阵列。同样,显示的信息解算器的进展在命令窗口中通过设置显示选项“通路”

选择= optimoptions (@ga,“PlotFcn”{@gaplotbestf, @gaplotmaxconstr},“显示”,“通路”);

解算器,包括选项论点。

[溶胶,fval] =解决(概率,“规划求解”,“遗传算法”,“选项”选项)
用遗传算法解决问题。单目标优化:2变量(s) 2非线性不等式约束(s)选项:CreationFcn: @gacreationuniform CrossoverFcn: @crossoverscattered SelectionFcn: @selectionstochunif MutationFcn: @mutationadaptfeasible最好马克斯摊位代Func-count 91357.8 f (x)约束代1 2520 0 0 2 0 3 7914 4982 91324.1 4.55 e-05 97166.6 0 0 4 16145 91268.4 - 0.0009997 0优化完成:健身价值低于平均变化的选择。FunctionTolerance和约束违反小于options.ConstraintTolerance。

图遗传算法包含2轴对象。轴与标题最好对象1:91268.4的意思是:91268.3,包含一代,ylabel健身价值包含2线类型的对象。一个或多个行显示的值只使用这些对象标记代表最好的健身,健身。轴与标题最大约束对象2:0.00099968,包含一代,ylabel马克斯约束包含一行对象显示它的值只使用标记。

索尔=结构体字段:x: 0.8123 y: 12.3103
fval = 9.1268 e + 04

非线性约束的原因遗传算法在每个迭代中解决许多子问题。所示的阴谋和迭代显示,解决方案只有很少的迭代过程。然而,Func-count列在每个迭代的迭代显示显示了许多函数评估。

不支金宝app持的功能

如果你的目标或非线性约束函数不支持(见金宝app金宝app支持操作优化变量和表达式),使用fcn2optimexpr将其转换成一种适用于具体问题具体分析的方法。例如,假设的约束 x y 1 0 ,你有约束 1 ( x ) + 1 ( y ) 1 0 ,在那里 1 ( x ) 修改后的贝塞尔函数吗besseli (x)。(不支持贝塞尔函数功能。)金宝app创建这个约束使用fcn2optimexpr。首先,创建一个优化的表达式 1 ( x ) + 1 ( y )

bfun = fcn2optimexpr (@ (t, u) besseli (t) + besseli (u), x, y);

接下来,取代约束cons2与约束bfun > = 10

prob.Constraints。cons2= bfun >= 10;

解决这个问题。解决方案是不同的,因为约束区域是不同的。

[sol2, fval2] =解决(概率,“规划求解”,“遗传算法”,“选项”选项)
用遗传算法解决问题。单目标优化:2变量(s) 2非线性不等式约束(s)选项:CreationFcn: @gacreationuniform CrossoverFcn: @crossoverscattered SelectionFcn: @selectionstochunif MutationFcn: @mutationadaptfeasible最好马克斯摊位代Func-count f (x)约束代1 2512 974.044 960.998 4974 0 0 2 0 0 3 7436 963.12 0 0 4 12001 960.83 - 0.0009335 0优化完成:健身价值低于平均变化的选择。FunctionTolerance和约束违反小于options.ConstraintTolerance。

图遗传算法包含2轴对象。轴与标题最好对象1:960.83的意思是:960.841,包含一代,ylabel健身价值包含2线类型的对象。一个或多个行显示的值只使用这些对象标记代表最好的健身,健身。轴与标题最大约束对象2:0.000933461,包含一代,ylabel马克斯约束包含一行对象显示它的值只使用标记。

sol2 =结构体字段:x: 0.4999 y: 3.9979
fval2 = 960.8300

引用

[1]狄克逊,l·c·W。每分钟,G。Szego (eds)。对全球优化2。北荷兰:爱思唯尔的科学有限公司,阿姆斯特丹,1978年。

另请参阅

||

相关的话题