主要内容

混合整数遗传算法优化

求解混合整数优化问题

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

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

intcon是一个正整数向量,包含x整数值的组件。例如,如果你想限制x (2)而且x (10)为整数,setintcon(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);

调用其中x(1)为整数值的ga求解器

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

{

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

Ga很快收敛到解。

整数ga求解器的特征

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

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

  • 只有doubleVector人口类型。

  • 没有混合函数。遗传算法属性的任何设置HybridFcn选择。

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

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

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

这个例子试图在五个维度中找到Ackley函数的最小值(当你运行这个例子时包含),约束条件如下:

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

  • Norm (x) = 4

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

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

为了包含非线性等式约束,给一个小的公差托尔这允许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 = norm(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和constraint违例要小于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选择。

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

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

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

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

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

整数遗传算法算法

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

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

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

  • 遗传算法试图最小化惩罚函数,而不是适应度函数。惩罚函数包括一个不可行项。默认情况下,这个惩罚函数与二元竞赛选择相结合,为后代选择个体。总体中一个成员的惩罚函数值为:

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

    • 如果成员是不可行的,惩罚函数是种群中可行成员的最大适应度函数,加上(不可行的)点的约束违反的总和。

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

参考文献

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

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

相关的话题