混合整数遗传算法优化

求解混合整数优化问题

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

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

IntCon是包含x整数值组件。例如,如果你想限制x (2)x (10)要成为整数,请设置IntCon[2,10]

这个surrogateopt解算器也接受整数约束。

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

小费

遗传算法当为每个变量提供下限和上限时,可以最好地解决整数问题x组件。

Rastrigin函数的混合整数优化

此示例显示如何找到Rastrigin函数的最小值,以便x是一个整数x是否进一步限制在该地区 5 π x ( 1 ) 2 0 π , - 2 0 π x ( 2 ) - 4 π

为你的问题设定界限

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

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

opts=options(“遗传算法”,“PlotFcn”,@gaplotbestf);

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

rng(1,“龙卷风”)%为了再现性IntCon=1;[x,fval,exitflag]=ga(@rastriginsfcn,2,[],[],[],[],[],[],...lb、ub、[]、IntCon、opts)

优化终止:惩罚适应值的平均变化小于options.FunctionTolerance和约束冲突小于options.ConstraintTolerance。
x=1×216.0000 - -12.9325
fval=424.1355
exitflag = 1

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

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

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

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

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

  • 只有doubleVector人口类型。

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

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

  • 没有混合功能。遗传算法覆盖HybridFcn选择。

  • 遗传算法忽略帕累托分离,DistanceMeasureFcn,InitialPenalty,PenaltyFactor选项。

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

  • 没有支持整数约束的混合函数。金宝app所以遗传算法存在整数约束时不使用混合函数。

  • 要获取整数变量,遗传算法使用特殊的创建、交叉和变异函数。

没有平等约束

不能在同一问题中使用相等约束和整数约束。您可以尝试通过为每个线性等式约束包含两个不等式约束来绕过此约束。例如,尝试包含约束

x1- 2x2= 5,

创建两个不等式约束:

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

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

–3x1+ 2x2≤5。

您可以尝试使用包含相等约束A=(3 2; 3、2)b=(5; 5)

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

例:具有非线性等式约束的整数规划。本例尝试在以下约束条件下,在五个维度中定位Ackley函数的最小值:

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

  • 范数(x)=4

Ackley函数,在从最终种群恢复ga,很难将其最小化。添加整数和相等约束会增加难度。

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

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

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

  2. 在不等式中允许一个小的公差:

    范数(x)-4-tol0
    -(范数(x)-4)-tol0

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

    函数[c,ceq]=eqCon(x)ceq=[];rad=4;tol=1e-3;confcnval=标准(x)-rad;c=[confcnval-tol;-confcnval-tol];
  4. 设置选项:

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

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

    • 最大生成数=300-允许比默认值更多的代。

    • PlotFcn=@gaplotbestfun-观察优化情况。

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

    nVar=5;lb=-5*个(1,nVar);ub=5*个(1,nVar);
  6. 解决问题:

    rng(0,捻线机)%的再现性[x, fval exitflag] = ga (@ackleyfcn,据nVar ,[],[],[],[], ...磅,乌兰巴托,@eqCon[1 3 5],选择);优化终止:惩罚适应值的平均变化小于options.FunctionTolerance和约束冲突小于options.ConstraintTolerance。

  7. 检查解决方案:

    x、 fval,exitflag,范数(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. 尽管存在正退出标志,但解决方案并非全局最优。请再次运行问题并检查解决方案:

    opts=optimoptions('ga',opts,'Display','off');[x2,fval2,exitflag2]=ga(@ackleyfcn,nVar,[],[],[],[],[],[],[],[],[],…lb,ub,@eqCon,[1 3 5],opts);

    检查第二种解决方案:

    2,fval2,exitflag2,norm(X2) X2 = -2.000 2.8930 0 -1.9095 0 fval2 = 4.5520 exitflag2 = 0 ans = 4.0020

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

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

有效整数遗传算法

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

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

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

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

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

    • 降低突变率。这样做,就增加了价值交叉分数从其默认的0.80.9或更高。

    • 增加价值精英帐户从其默认的0.05*人口规模0.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。

相关的话题