约束极小化使用遗传算法
,具体问题具体分析
这个例子展示了如何最小化目标函数,非线性不等式约束和边界,使用遗传算法
在具体问题具体分析的方法。solver-based版本的这个问题,看到使用遗传算法约束最小化。
约束的最小化问题
对于这个问题,适应度函数最小化是一个简单的二维变量的函数X
和Y
。
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, [],“所有”)))举行从
创建优化变量、问题和约束
设置这个问题,创建优化变量x
和y
。当您创建的变量范围。
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。
索尔=结构体字段:x: 0.8123 y: 12.3103
fval = 9.1268 e + 04
非线性约束的原因遗传算法
在每个迭代中解决许多子问题。所示的阴谋和迭代显示,解决方案只有很少的迭代过程。然而,Func-count
列在每个迭代的迭代显示显示了许多函数评估。
不支金宝app持的功能
如果你的目标或非线性约束函数不支持(见金宝app金宝app支持操作优化变量和表达式),使用fcn2optimexpr
将其转换成一种适用于具体问题具体分析的方法。例如,假设的约束
,你有约束
,在那里
修改后的贝塞尔函数吗besseli (x)
。(不支持贝塞尔函数功能。)金宝app创建这个约束使用fcn2optimexpr
。首先,创建一个优化的表达式
。
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。
sol2 =结构体字段:x: 0.4999 y: 3.9979
fval2 = 960.8300
引用
[1]狄克逊,l·c·W。每分钟,G。Szego (eds)。对全球优化2。北荷兰:爱思唯尔的科学有限公司,阿姆斯特丹,1978年。