非线性约束的使用遗传算法

假设你想最小化两个变量的简单适应度函数x1x2

最小值 x f x One hundred. x 1 2 x 2 2 + 1 x 1 2

服从下列非线性不等式的约束和界

x 1 x 2 + x 1 x 2 + 1.5 0 (非线性约束) 10 x 1 x 2 0 (非线性约束) 0 x 1 1 (绑定) 0 x 2 13 (绑定)

首先创建适应度和约束函数。首先,创建一个名为simple_fitness.m如下:

函数y = simple_fitness (x) y = 100 * (x (1) ^ 2 - x (2)) ^ 2 + (1 - x (1)) ^ 2;
simple_fitness.m附带全局优化工具箱软件。)

遗传算法函数,遗传算法,假设适应度函数将接受一个输入x,在那里x元素的数量与问题中变量的数量相同。适应度函数计算函数的值,并在它的一个返回参数中返回标量值,y

然后创建一个文件,simple_constraint.m,包含约束条件

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

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

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

ObjectiveFunction = @simple_fitness;据nvar = 2;%变量LB = [0 0];%下界UB = [1 13];%上界ConstraintFunction = @simple_constraint;rng(1,'twister') % for再现性[x,fval] = ga(objecvefunction, vars,…[],[],[],[], 磅,乌兰巴托,ConstraintFunction)
优化终止:适应度值的平均变化小于选项。函数容忍度和约束违背小于options. constraintolerance。X = 0.8123 12.3137 fval = 1.3581e+04

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

如果有整数约束,遗传算法不强制线性约束的可行性,而是将任何违反线性约束的行为添加到惩罚函数中。看到整数ga算法

遗传算法利用突变和交叉功能在每一代产生新的个体。遗传算法通过使用只生成可行点的变异和交叉函数来满足线性和有界约束。例如,在前面的调用中遗传算法,突变函数mutationguassian不一定服从约束的约束。当有约束或线性约束时,默认遗传算法变异函数是mutationadaptfeasible.如果您提供自定义突变函数,则该自定义函数必须仅生成相对于线性和有界约束可行的点。所包含的所有交叉函数生成满足线性约束和边界的点crossoverheuristic函数。

要看优化的进度,要用好optimoptions函数创建选择两个绘图函数的选项。第一个绘图函数是gaplotbestf它绘制出每一代人口的最佳和平均得分。第二个绘图函数是gaplotmaxconstr,绘制出每一代非线性约束的最大违背约束。控件在命令窗口中显示信息,也可以可视化算法的进度“显示”选择。

选择= optimoptions(“遗传算法”,“PlotFcn”{@gaplotbestf, @gaplotmaxconstr},“显示”,“iter”);

重新运行遗传算法解算器。

[x, fval] = ga (ObjectiveFunction,据nvar ,[],[],[],[],...磅,乌兰巴托,ConstraintFunction选项)
1 2520 13603.6 00 2 4982 13578.2 5.718e-06 03 7538 14033.9 00 4 11116 13573.7 0.0009577 0优化终止:适应度值的平均变化小于选项。函数容忍度和约束违背小于options. constraintolerance。X = 0.8122 12.3104 fval = 1.3574e+04

您可以为最小化提供一个起点遗传算法函数的InitialPopulationMatrix选择。的遗传算法函数将使用第一个fromInitialPopulationMatrix作为约束极小化的起点。

X0 = [0.5 0.5];% Start point (row vector) options = optimoptions('ga',options,'InitialPopulationMatrix',X0);

现在,重新运行遗传算法解算器。

[x, fval] = ga (ObjectiveFunction,据nvar ,[],[],[],[],...磅,乌兰巴托,ConstraintFunction选项)
Best Max Stall Generation function -count f(x) Constraint Generations 1 2520 13578.1 0.0005269 0 2 4982 13578.2 1.815e-05 03 8008 14031.3 00 4 13525 14054.9 005 17620 13573.5 0.0009986 0优化终止:适应度值的平均变化小于选项函数容忍度和约束违背小于options. constraintolerance。X = 0.8122 12.3103 fval = 1.3573e+04

相关的话题