这个例子展示了如何使用遗传算法最小化一个受非线性不等式约束和边界的目标函数。
我们要最小化一个简单的二元适应度函数x1
和x2
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