主要内容

混合整数遗传算法优化

求解混合整数优化问题

遗传算法可以解决某些变量为整数值时的问题。给intcon的一个向量x整数类型的组件:

[x, fval exitflag] = ga(据nvar fitnessfcn, A, b ,[],[],...磅,乌兰巴托,nonlcon intcon选项)

intcon是包含x整数值的组件。例如,如果您想要限制x (2)而且x (10)设置为整数intcon(2, 10)

surrogateopt求解器也接受整数约束。

请注意

问题的类型存在限制遗传算法可以用整数变量求解。特别是,遗传算法当有整数变量时,不接受非线性等式约束。详情请参见整数ga求解器的特征

提示

遗传算法当你为每个提供上界和下界时,就能最好地解决整数问题x组件。

Rastrigin函数的混合整数优化

这个例子展示了如何找到Rastrigin函数的最小值,因此x为整数。的组成x是否进一步限制进入该地区 5 π x 1 2 0 π - 2 0 π x 2 - 4 π

为你的问题设定边界

Lb = [5*pi,-20*pi];Ub = [20*pi,-4*pi];

设置一个plot函数,以便查看ga的进度

Opts = optimoptions(“遗传算法”“PlotFcn”, @gaplotbestf);

调用ga求解器,其中x(1)具有整数值

rng (1,“旋风”可重复性%Intcon = 1;[x, fval exitflag] = ga (@rastriginsfcn 2 ,[],[],[],[],...磅,乌兰巴托,[],intcon选择)

{

优化终止:惩罚适应度值的平均变化小于选项。FunctionTolerance和约束违规小于options. constraintolerance。
x =1×216.0000 - -12.9325
Fval = 424.1355
Exitflag = 1

Ga快速收敛到解。

整数ga求解器的特征

对于问题的类型有一些限制遗传算法可以在包含整数约束时求解:

  • 无非线性等式约束。任何非线性约束函数都必须返回[]对于非线性等式约束。有关可能的解决方法,请参见具有非线性等式约束的整数规划

  • 只有doubleVector人口类型。

  • 没有杂化函数。遗传算法对象的任何设置HybridFcn选择。

  • 遗传算法忽略了ParetoFractionDistanceMeasureFcnInitialPenalty,PenaltyFactor选项。

所列的限制主要是自然的,而不是任意的。例如,没有混合函数支持整数约束。所以遗传算法当存在整数约束时,不使用混合函数。

具有非线性等式约束的整数规划

本例试图在五个维度中定位Ackley函数(在运行本例时包含)的最小值,约束条件如下:

  • x (1)x (3),x (5)都是整数。

  • Norm (x) = 4

遗传算法求解器不支持非线性等式约束,只支持非线性不等式约束。这个例子展示了一个适用于某些问题的解决方法,但不能保证有效。

阿克利函数很难最小化。添加整数和等式约束会增加难度。

为了包含非线性等式约束,给出一个小的公差托尔这允许x的范数在托尔为4。在没有公差的情况下,非线性等式约束永远不满足,求解器不能得到一个可行解。

写出表达式Norm (x) = 4两个"小于零"不等式。

x - 4 0

- x - 4 0

在不平等中允许有一点容忍度。

x - 4 - t o l 0

- x - 4 - t o l 0

写一个非线性不等式约束函数eqCon这实现了这些不平等。

类型eqCon
function [c, ceq] = eqCon(x) ceq = [];Rad = 4;Tol = 1e-3;Confcnval =范数(x) - rad;C = [confcnval - tol;-confcnval - tol];

设置这些选项:

  • MaxStallGenerations= 50 -允许求解器尝试一段时间。

  • FunctionTolerance= 1e-10 -指定比通常更严格的停止条件。

  • MaxGenerations= 500 -允许比默认值更多的代。

  • PlotFcn@gaplotbestfun—观察优化结果。

Opts = optimoptions(“遗传算法”“MaxStallGenerations”, 50岁,“FunctionTolerance”1平台以及...“MaxGenerations”, 500,“PlotFcn”, @gaplotbestfun);

设置下界和上界来帮助求解器。

nVar = 5;lb = -5*ones(1,nVar);ub = 5*ones(1,nVar);

解决问题。

rng (0,“旋风”可重复性%[x, fval exitflag] = ga (@ackleyfcn,据nVar ,[],[],[],[],...lb,ub,@eqCon,[1 3 5],opts);

{

优化终止:惩罚适应度值的平均变化小于选项。FunctionTolerance和约束违规小于options. constraintolerance。

检查解决方案。

x fval exitflag、规范(x)
x =1×50 0.9706 1.0000 3.6158 -1.0000
Fval = 5.9676
Exitflag = 1
Ans = 4.0020

奇怪的x如指定的那样,组件是整数。的规范x为4,到1e-3的给定相对公差内。

尽管有积极的退出标志,解决方案不是全局最优的。在更大的人群中再次运行该问题并检查解决方案。

Opts = optimoptions(Opts,“显示”“关闭”“PopulationSize”, 400);(x2, fval2, exitflag2) = ga (@ackleyfcn,据nVar ,[],[],[],[],...lb,ub,@eqCon,[1 3 5],opts);

{

检查第二个解。

x2, fval2 exitflag2,规范(x2)
x2 =1×5-1.0000 2.0082 -1.0000 -2.9954 1.0000
Fval2 = 4.2385
Exitflag2 = 1
Ans = 4.0006

第二次运行给出了一个更好的解(更低的适应度函数值)。还是奇数x的范数是整数x2为4,到1e-3的给定相对公差内。

注意,这个过程可能会失败;遗传算法难以同时处理整数和非线性等式约束。

有效的整数遗传算法

使用遗传算法对于整数问题,最有效的方法是遵循以下准则。

  • 尽可能紧密地绑定每个组件。这种做法遗传算法最小的搜索空间,启用遗传算法最有效地搜索。

  • 如果不能绑定组件,则指定适当的初始范围。默认情况下,遗传算法创建具有范围的初始填充e4 [1, 1 e4]对于每个组件。当默认值不合适时,较小或较大的初始值范围可以获得更好的结果。要更改初始范围,请使用InitialPopulationRange选择。

  • 方法设置总体大小,如果变量超过10个,则设置总体大小大于默认值PopulationSize选择。对于6个或更多的变量,默认值为200。对于庞大的人口规模:

    • 遗传算法要花很长时间才能汇合。如果达到最大代数(退出标志)0),增加的值MaxGenerations选择。

    • 降低突变率。的值CrossoverFraction选项的默认值0.80.9或更高版本。

    • 的值增加EliteCount选项的默认值0.05 * PopulationSize0.1 * PopulationSize或更高版本。

有关选项的信息,请参见遗传算法选项输入参数。

整数遗传算法算法

整数规划遗传算法涉及到对基本算法的几处修改(参见遗传算法是如何工作的).对于整数规划:

  • 默认情况下,特殊的创建、交叉和突变函数强制变量为整数。详情请参见Deep等人。[2]

  • 如果使用非默认的创建、交叉或突变函数,遗传算法在每个迭代中强制执行线性可行性和关于整数约束的可行性。

  • 遗传算法试图最小化一个惩罚函数,而不是适应度函数。惩罚函数包含一个表示不可行性的术语。这个惩罚函数默认与二元比赛选择相结合,为后代选择个体。总体中某一成员的惩罚函数值为:

    • 如果成员是可行的,则罚函数为适应度函数。

    • 如果成员是不可行的,则惩罚函数为总体中可行成员的最大适应度函数,加上(不可行的)点的约束违例次数之和。

    关于惩罚函数的详细信息,请参见Deb[1]

参考文献

Deb, Kalyanmoy。一种有效的遗传算法约束处理方法。应用力学与工程的计算机方法,186(2-4),pp. 311 - 34,2000。

[2] Deep, Kusum, Krishna Pratap Singh, M.L. Kansal和C. Mohan。求解整数和混合整数优化问题的实数编码遗传算法。应用数学与计算,32 (2),pp. 505-518, 2009。

相关的话题

Baidu
map