基于遗传算法的约束最小化

这个例子展示了如何使用遗传算法最小化一个受非线性不等式约束和边界的目标函数。

约束的最小化问题

我们要最小化一个简单的二元适应度函数x1x2

f(x) = 100 * (x1^2 - x2) ^2 + (1 - x1)^2;x

满足以下两个非线性约束和界

X1 *x2 + X1 - x2 + 1.5 <=0,(非线性约束)10 - X1 *x2 <=0,(非线性约束)0 <= X1 <= 1, (bound) 0 <= x2 <= 13 (bound)

上述适应度函数被称为'cam',描述在L.C.W. Dixon和G.P. Szego (eds.), Towards Global Optimisation 2, North-Holland, Amsterdam, 1978。

适应度函数的编码

我们创建一个MATLAB文件名为simple_fitness.m代码如下:

函数y = simple_fitness (x) y = 100 * (x (1) ^ 2 - x (2)) ^ 2 + (1 - x (1)) ^ 2;

遗传算法函数遗传算法假设适应度函数只有一个输入x在哪里x在问题中有和变量数量一样多的元素。适应度函数计算函数的值,并在其一个返回参数中返回该标量值y

约束函数的编码

我们创建一个MATLAB文件名为simple_constraint.m代码如下:

c = [1.5 + x(1)*x(2) + x(1) - x(2);x - x (1) * (2) + 10);测查= [];

遗传算法函数假定约束函数将接受一个输入x在哪里x在问题中有和变量数量一样多的元素。约束函数计算所有不等式和等式约束的值,并返回两个向量c量表信分别。

尽量减少使用遗传算法

来最小化适应度函数遗传算法函数时,我们需要将函数句柄传递给适应度函数,并指定变量的数量作为第二个参数。下界和上界如下所示乌兰巴托分别。此外,我们还需要向非线性约束函数传递函数句柄。

ObjectiveFunction = @simple_fitness;据nvar = 2;%变量数Lb = [0 0];%下界Ub = [1 13];%上界ConstraintFunction = @simple_constraint;[x, fval] = ga (ObjectiveFunction,据nvar ,[],[],[],[], 磅,乌兰巴托,...ConstraintFunction)
优化终止:适应度值的平均变化小于选项。函数容忍度和约束违背小于options. constraintolerance。
x =1×20.8122 - 12.3104
fval = 1.3574 e + 04

注意,对于我们的约束最小化问题遗传算法函数将突变函数改为mutationadaptfeasible.默认突变函数,mutationgaussian,只适用于无约束极小化问题。

遗传算法约束极小化的算子

遗传算法求解器处理线性约束和边界不同于非线性约束。在整个优化过程中,所有的线性约束和界限都得到满足。然而,遗传算法可能不满足每一代的所有非线性约束。如果遗传算法收敛于一个解,非线性约束将在该解处得到满足。

遗传算法利用突变和交叉功能在每一代产生新的个体。的方式遗传算法满足线性和有界约束的是使用突变和交叉函数,只生成可行点。例如,在前面的调用中遗传算法,默认突变函数mutationgaussian不满足线性约束,所以mutationadaptfeasible而不是使用。如果您提供自定义突变函数,则该自定义函数必须仅生成相对于线性和有界约束可行的点。工具箱中的所有交叉函数生成满足线性约束和边界的点。

我们指定mutationadaptfeasible随着MutationFcn通过创建选项来解决最小化问题optimoptions函数。

选择= optimoptions (@ga,“MutationFcn”, @mutationadaptfeasible);%接下来我们运行GA求解器。[x, fval] = ga (ObjectiveFunction,据nvar ,[],[],[],[], 磅,乌兰巴托,...ConstraintFunction选项)
优化终止:适应度值的平均变化小于选项。函数容忍度和约束违背小于options. constraintolerance。
x =1×20.8122 - 12.3103
fval = 1.3573 e + 04

添加可视化

接下来,我们使用optimoptions选择两个plot函数。第一个绘图函数是gaplotbestf它绘制出每一代人口的最佳和平均得分。第二个绘图函数是gaplotmaxconstr,绘制出每一代非线性约束的最大违背约束。控件将信息显示到命令窗口,我们还可以可视化算法的进程显示选择。

选择= optimoptions(选项,“PlotFcn”{@gaplotbestf, @gaplotmaxconstr},...“显示”“通路”);%接下来我们运行GA求解器。[x, fval] = ga (ObjectiveFunction,据nvar ,[],[],[],[], 磅,乌兰巴托,...ConstraintFunction选项)
最佳最大失速生成函数计数f(x)约束生成
1 2524 13579.8 2.99e -07 0
2 4986 13578.2 1.686e-05 0
3 7918 14031 0 0
4 17371 13573.5 0.0009928 0优化终止:适应度值的平均变化小于选项。函数容忍度和约束违背小于options. constraintolerance。

x =1×20.8122 - 12.3103
fval = 1.3574 e + 04

提供起点

可以提供一个最小化的起始点遗传算法函数的InitialPopulationMatrix选择。的遗传算法函数将使用第一个fromInitialPopulationMatrix作为约束极小化的起点。有关指定初始填充的描述,请参阅文档遗传算法

X0 = [0.5 0.5];起始点(行向量)选项。InitialPopulationMatrix = X0;%接下来我们运行GA求解器。[x, fval] = ga (ObjectiveFunction,据nvar ,[],[],[],[], 磅,乌兰巴托,...ConstraintFunction选项)
最佳最大失速生成函数计数f(x)约束生成
1 2520 13578.1 0.000524 0
2 4982 13578.2 1.024e-05 0
3 7914 14030.5 0 0
4 17379 13708.4 0.0001674 0优化终止:适应度值的平均变化小于选项。函数容忍度和约束违背小于options. constraintolerance。

x =1×20.8089 - 12.3626
fval = 1.3708 e + 04