主要内容

混合整数遗传算法优化

求解混合整数优化问题

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

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

IntCon一个正整数向量是否包含x整数值组件。例如,如果你想限制x (2)x (10)如果是整数,设置IntCon(2, 10)

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

请注意

这类问题存在限制遗传算法可以用整型变量求解。特别是,遗传算法当存在整型变量时,不接受任何等式约束。有关详细信息,请参见整数遗传算法求解器的特点

提示

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

Rastrigin函数的混合整数优化

这个例子展示了如何找到最小的拉斯特里金函数限制,所以第一个分量x是一个整数。的组件x是否进一步限制在该地区 5 π x 1 2 0 π - 2 0 π x 2 - 4 π

为你的问题设定界限

磅=(5 *π,-20 *π);乌兰巴托=(20 *π,4 *π);

设置绘图功能,以便您可以查看ga的进度

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

当x(1)具有整数值时调用ga求解器

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

优化终止:惩罚适应度值的平均变化小于选项。函数容忍度和约束违背小于options. constraintolerance。
x =1×216.0000 - -12.9325
fval = 424.1355
exitflag = 1

遗传算法能迅速收敛到解。

整数遗传算法求解器的特点

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

  • 没有线性等式约束。你必须有Aeq = []说真的= [].有关可能的解决方案,请参见没有平等的约束

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

  • 只有doubleVector人口类型。

  • 没有自定义创建功能(CreationFcn选择),交叉功能(CrossoverFcn选项),突变函数(MutationFcn选项),或初始分数(InitialScoreMatrix选项)。如果你提供其中任何一种遗传算法覆盖他们的设置。

  • 遗传算法只使用二元比赛选择函数(SelectionFcn选项),并覆盖任何其他设置。

  • 没有混合功能。遗传算法的任何设置HybridFcn选择。

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

列出的限制主要是自然的,而不是随意的。例如:

  • 没有支持整数约束的混合函数。万博1manbetx所以遗传算法当存在整数约束时,不使用混合函数。

  • 要获得整型变量,遗传算法使用特殊的创建、交叉和变异功能。

没有平等的约束

在同一个问题中不能使用相等约束和整数约束。你可以通过在每个线性等式约束中加入两个不等式约束来绕过这个限制。例如,试图包含约束

3.x1- 2x2= 5,

创建两个不等式约束:

3.x1- 2x2≤5
3.x1- 2x2≥5。

将这些约束写在表单中一个xb,将第二个不等式乘以-1

3x1+ 2x2≤5。

可以使用一个(3 2; 3、2)b(5; 5)

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

例:具有非线性等式约束的整数规划。这个例子试图在五个维度中找到Ackley函数的最小值(包括你的软件),约束条件如下:

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

  • 规范(x) = 4

Ackley函数很难最小化。添加整数和等式约束增加了难度。

为了包含非线性等式约束,给出一个较小的公差托尔这允许x托尔4.在不存在容差的情况下,非线性等式约束永远不能满足,当有可行解时,求解器无法实现。

  1. 写表达式规范(x) = 4作为两个“小于零”的不等式:

    规范(x) - 40
    (规范(x) - 4)0

  2. 允许对不平等有一点宽容:

    Norm (x) - 4 - tol0
    -(norm(x) - 4) - tol0

  3. 写一个非线性不等式约束函数,实现这些不等式:

    函数[c, ceq] = eqCon(x) ceq = [];rad = 4;托尔= 1 e - 3;concnval = norm(x) - rad;C =[确认- tol;-确认- tol];
  4. 设置选项:

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

    • FunctionTolerance = 1平台以及—指定比通常更严格的停止标准。

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

    • PlotFcn = @gaplotbestfun—观察优化。

    选择= optimoptions (“遗传算法”“MaxStallGenerations”, 50岁,“FunctionTolerance”1平台以及...“MaxGenerations”, 300,“PlotFcn”, @gaplotbestfun);
  5. 设置下界和上界来帮助求解:

    据nVar = 5;磅= 5 * 1(1,据nVar);乌兰巴托= 5 * 1(1,据nVar);
  6. 解决问题:

    rng (0,“旋风”%的再现性[x, fval exitflag] = ga (@ackleyfcn,据nVar ,[],[],[],[],...磅,乌兰巴托,@eqCon[1 3 5],选择);
    优化终止:平均改变点球健身价值选项。FunctionTolerance约束违反options.ConstraintTolerance。

  7. 检查解决方案:

    X,fval,exitflag,norm(X) X = 0 -1.7367 -3.0000 -0.0000 -2.0000 fval = 5.2303 exitflag = 1 ans = 4.0020

    奇怪的x组件是指定的整数。的规范x4,在给定的相对容忍范围内1 e - 3

  8. 尽管有积极的退出标志,但解决方案并非全球最优。再次运行该问题并检查解决方案:

    选择= optimoptions (“遗传算法”选择,“显示”“关闭”);(x2, fval2, exitflag2) = ga (@ackleyfcn,据nVar ,[],[],[],[],...磅,乌兰巴托,@eqCon[1 3 5],选择);

    检验第二种解决方案:

    x2, fval2 exitflag2,规范(x2)
    X2 = -2.0000 2.8930 0 -1.9095 0 fval2 = 4.5520 exitflag2 = 0 ans = 4.0020

    第二次运行给出了一个更好的解决方案(较低的适应度函数值)。再一次,奇怪x分量是整数,范数是x24,在给定的相对容忍范围内1 e - 3

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

有效的整数遗传算法

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

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

  • 如果不能绑定组件,则指定一个适当的初始范围。默认情况下,遗传算法创建一个带有范围的初始种群e4 [1, 1 e4]为每个组件。当默认值不合适时,更小或更大的初始范围可以提供更好的结果。要更改初始范围,请使用InitialPopulationRange选择。

  • 如果有超过10个变量,则使用PopulationSize选择。对于六个或更多的变量,默认值是200。对于庞大的人口规模:

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

    • 降低突变率。这样做,就增加了价值CrossoverFraction选项的默认值0.80.9或更高版本。

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

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

整数遗传算法算法

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

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

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

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

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

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

  • 遗传算法当存在整数约束时,不强制线性约束。相反,遗传算法将线性约束违反纳入惩罚函数。

参考文献

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

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

相关的话题