主要内容

混合整数遗传算法优化

解决混合整数规划问题

遗传算法当某些变量是整数值可以解决问题。给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的进步

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

把遗传算法解算器x(1)整数值

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

图遗传算法包含一个坐标轴对象。坐标轴对象和标题最好的:424.136的意思是:614.506包含2线类型的对象。这些对象代表最好的惩罚值,意味着惩罚值。

优化终止:点球健身价值低于平均变化的选择。FunctionTolerance和约束违反小于options.ConstraintTolerance。
x =1×216.0000 - -12.9325
fval = 424.1355
exitflag = 1

ga收敛迅速的解决方案。

整数遗传算法解算器的特性

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

  • 没有非线性等式约束。任何非线性约束函数必须返回[]非线性等式约束。一个可能的解决方法,请参阅例如:用非线性等式约束整数规划

  • 只有doubleVector人口类型。

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

  • 遗传算法忽略了ParetoFraction,DistanceMeasureFcn,InitialPenalty,PenaltyFactor选项。

上市的限制主要是自然的,不是任意的。例如,没有混合功能支持整数约束。金宝app所以遗传算法不使用混合函数当有整数约束。

例如:用非线性等式约束整数规划

这个例子试图找到《函数的最小(包括软件)与这些约束五个维度:

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

  • 规范(x) = 4

《函数最小化是困难的。添加整数和等式约束增加了困难。

包括非线性等式约束,给小公差托尔这允许标准x托尔4。没有公差,非线性等式约束是永不满足,解决者没有意识到当它有一个可行的解决方案。

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

    规范(x) - 40
    (规范(x) - 4)0
    (1)
  2. 允许一个小公差的不平等:

    规范(x) - 4 -托尔0
    (规范(x) - 4) -托尔0
    (2)
  3. 编写一个非线性不等式约束函数实现这些不平等:

    函数测查[c] = eqCon测查(x) = [];rad = 4;托尔= 1 e - 3;confcnval =规范(x) - rad;c = [confcnval -托尔;-confcnval -托尔);
  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(据nVar @ackleyfcn, [], [], [], [],磅,乌兰巴托,@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. 尽管积极的退出旗,不是全局最优的解决方案。再次运行问题并研究解决方案:

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

    检查第二个解决方案:

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

    第二运行提供了更好的解决方案(低适应度函数值)。再一次,奇怪x组件是整数,和正常的x24在给定的相对宽容1 e - 3

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

有效的整数遗传算法

使用遗传算法最有效的整数问题,遵循这些指导方针。

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

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

  • 如果你有10多个变量,设置一个人口规模大于默认使用PopulationSize选择。默认值是200 6个或更多的变量。庞大的人口规模:

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

    • 减少突变率。为此,增加的价值CrossoverFraction从其默认的选项0.80.9或更高版本。

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

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

整数遗传算法算法

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

  • 默认情况下,特殊的创建、交叉和变异函数执行变量是整数。,深等。[2]

  • 如果您使用默认的创建、交叉或变异函数,遗传算法执行线性可行性和可行性对整数约束在每个迭代。

  • 罚函数遗传算法试图最小化,而不是适应度函数。罚函数包含一个术语的不可行性。这种罚函数结合二进制锦标赛选择默认为后代选择个人。人口的罚函数值的成员是:

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

    • 如果成员不可行,罚函数的最大适应度函数可行的成员之间的人口,加上一笔(不可行)的约束违反。

    罚函数的详细信息,请参阅黛比[1]

引用

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

[2]Kusum,克里希纳普拉塔普辛格,马丁Kansal和c·莫汉。一个真正解决整数编码的遗传算法和混合整数规划问题。应用数学和计算,212(2),505 - 518年,2009页。

相关的话题