主要内容

使用遗传算法约束最小化

此示例显示了如何使用遗传算法最小化受非线性不等式约束和界限的目标函数。

约束最小化问题

我们希望最小化两个变量的简单健身功能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,并且(绑定)0 <= x2 <= 13(边界)

上述健身功能称为“凸轮”,如L.C.W.迪克森和G.P.Szego(EDS。),迈向全球优化2,北荷兰,阿姆斯特丹,1978年。

编码健身功能

我们创建一个名为的Matlab文件simple_fitness.m.使用以下代码:

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

遗传算法函数GA.假设健身功能将采取一个输入X在哪里X在问题中具有多种元素。健身功能计算函数的值,并返回其返回参数中的标量值y

编码约束函数

我们创建一个名为的Matlab文件simple_constraint.m.使用以下代码:

功能[c,ceq] = simple_constraint(x)c = [1.5 + x(1)* x(2)+ x(1) -  x(2);-x(1)* x(2)+ 10];CEQ = [];

GA.函数假定约束函数将采用一个输入X在哪里X在问题中具有多种元素。约束函数计算所有不等式和平等约束的值并返回两个向量CCEQ.分别。

最小化使用GA.

使用使用的健身功能GA.函数,我们需要通过函数句柄到健身功能,并将变量的数量指定为第二个参数。提供下限和上限UB.分别。此外,我们还需要将功能句柄传递给非线性约束函数。

ObjectiventFunction = @simple_fitness;nvars = 2;%变量数量lb = [0 0];%下限UB = [1 13];%上限约束函数= @simple_constraint;[x,fval] = ga(looptfunction,nvars,[],[],[],[],LB,UB,......约束功能)
优化终止:对options.functionTolance和约束违规的平均变化小于选项.ConstraintTolerance。
X =1×20.8122 12.3104
fval = 1.3574e + 04

请注意,对于我们约束的最小化问题,GA.函数改变了突变函数umatationAptFeasible.。默认突变函数,umatationgaussian.,仅适用于无疑最小化问题。

GA.用于约束最小化的运营商

GA.求解器处理线性约束和界限与非线性约束不同。整个优化都满足所有线性约束和界限。然而,GA.可能无法满足每一代的所有非线性约束。如果GA.收敛于解决方案,将在该解决方案中满足非线性约束。

GA.使用突变和交叉功能在每一代产生新的个人。方式的方式GA.满足线性和束缚约束是使用仅生成可行点的突变和交叉功能。例如,在以前的召唤中GA.,默认突变函数umatationgaussian.不会满足线性约束等umatationAptFeasible.代替使用。如果提供自定义突变函数,则此自定义函数必须仅生成与线性和绑定约束可行的点。工具箱中的所有交叉函数都会生成满足线性约束和边界的点。

我们指定umatationAptFeasible.作为umtationfcn.通过创建选项来实现最小化问题优化选择功能。

选项= Optimoptions(@ga,'mutationfcn',@ mutationAdaptfeasible);%接下来我们运行GA求解器。[x,fval] = ga(looptfunction,nvars,[],[],[],[],LB,UB,......约束功能,选项)
优化终止:对options.functionTolance和约束违规的平均变化小于选项.ConstraintTolerance。
X =1×20.8122 12.3103
fval = 1.3573e + 04

添加可视化

接下来我们使用优化选择选择两个绘图函数。第一个绘图功能是gaplotbestf.,这绘制了每一代人口的最佳和平均得分。第二个绘图功能是Gaplotmaxconstr.,这绘制了每一代中的非线性约束的最大约束。我们还可以通过使用该命令窗口显示信息来可视化算法的进度展示选项。

选项= Optimoptions(选项,'plotfcn',{@ gaplotbestf,@ gaplotmaxconstr},......'展示''iter');%接下来我们运行GA求解器。[x,fval] = ga(looptfunction,nvars,[],[],[],[],LB,UB,......约束功能,选项)
最大的Max Stall Generation Func-count f(x)约束几代
1 2524 13579.8 2.1E-07 0
2 4986 13578.2 1.686E-05 0
3 7918 14031 0 0
4 17371 13573.5 0.0009928 0优化终止:对选项的平均变化少于options.FunctionToleance和约束违规小于选项.ConstraintTolerance。

X =1×20.8122 12.3103
fval = 1.3574e + 04

提供起点

可以提供最小化的开始点GA.通过指定的功能initialpopulationmatrix.选项。这GA.功能将使用第一个单独的人initialpopulationmatrix.作为受约束最小化的起点。有关指定初始群体的描述,请参阅文档GA.

x0 = [0.5 0.5];%起点(行向量)options.InitialPopulationMatrix = X0;%接下来我们运行GA求解器。[x,fval] = ga(looptfunction,nvars,[],[],[],[],LB,UB,......约束功能,选项)
最大的Max Stall Generation Func-count 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.FunctionTolectance和约束违规小于选项.ConstraintTolerance。

X =1×20.8089 12.3626
fval = 1.3708e + 04

相关话题