此示例显示了如何使用遗传算法最小化受非线性不等式约束和界限的目标函数。
我们希望最小化两个变量的简单健身功能X1
和X2
分F(X)= 100 *(X1 ^ 2 - ×2)^ 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.描述的上述的适应度函数被称为“凸轮”Dixon和G.P.Szego(编辑),往全球性优化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
有一样多的元素的问题变量的数量。约束函数计算的所有的不等式和等式约束两个矢量中的值,并返回C
和CEQ
分别。
GA.
使用使用的健身功能GA.
功能,我们需要一个功能句柄适应度函数传递以及指定变量的数量作为第二个参数。下限和上限作为提供磅
和UB.
分别。此外,我们还需要在一个函数句柄传递到非线性约束功能。
ObjectiveFunction = @simple_fitness;nvars = 2;变量的数量%LB = [0 0];%下限UB = [1 13];%上限约束函数= @simple_constraint;[X,FVAL] = GA(ObjectiveFunction,nvars,[],[],[],[],LB,UB,......约束功能)
优化终止:在健身值平均变化小于options.FunctionTolerance和约束违反小于options.ConstraintTolerance。
X =1×20.8122 12.3104
fval = 1.3574e + 04
请注意,我们的约束最小化问题,GA.
功能改变了突变功能umatationAptFeasible.
。默认的突变作用,mutationgaussian
,仅适用于无疑最小化问题。
GA.
运营商对于约束优化这GA.
求解器处理线性约束和界限与非线性约束不同。整个优化都满足所有线性约束和界限。然而,GA.
可能无法满足每一代的所有非线性约束。如果GA.
收敛为溶液,非线性约束将在该溶液来满足。
GA.
使用变异和交叉功能,在每一代产生新的个体。该方式GA.
满足线性和束缚约束是使用仅生成可行点的突变和交叉功能。例如,在以前的召唤中GA.
,默认变异函数mutationgaussian
不会满足线性约束等umatationAptFeasible.
代替使用。如果提供自定义突变函数,则此自定义函数必须仅生成与线性和绑定约束可行的点。工具箱中的所有交叉函数都会生成满足线性约束和边界的点。
我们指定umatationAptFeasible.
作为MutationFcn
我们最小化通过创建选项问题optimoptions
功能。
选项= optimoptions(@ga,'mutationfcn',@ mutationadaptfeasible);%接下来我们运行GA求解器。[X,FVAL] = GA(ObjectiveFunction,nvars,[],[],[],[],LB,UB,......约束功能,选项)
优化终止:在健身值平均变化小于options.FunctionTolerance和约束违反小于options.ConstraintTolerance。
X =1×20.8122 12.3103
fval = 1.3573e + 04
接下来,我们使用optimoptions
选择两个情节功能。第一曲线功能gaplotbestf
,这绘制了每一代人口的最佳和平均得分。第二个绘图功能是gaplotmaxconstr
,该地块的最大约束违反的非线性限制在每一代。我们也可以通过在命令窗口中显示的信息可视化算法的进步展示
选项。
选项= optimoptions(选项,'plotfcn'{@ gaplotbestf,@ gaplotmaxconstr},......'展示'那'ITER');%接下来我们运行GA求解器。[X,FVAL] = GA(ObjectiveFunction,nvars,[],[],[],[],LB,UB,......约束功能,选项)
最佳MAX Stall Generatifc-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 17918 14031 0 0 4 17371 13573.5 0.0009928 0优化终止:适合值的平均变化小于options.FunctionTolerance和约束违规小于选项.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(ObjectiveFunction,nvars,[],[],[],[],LB,UB,......约束功能,选项)
最好最大失速代Func键数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.FunctionTolerance在健身值平均变化和约束违反小于options.ConstraintTolerance。
X =1×20.8089 12.3626
fval = 1.3708e + 04