混合整数遗传算法
优化
解决混合整数规划问题
遗传算法
当某些变量是整数值可以解决问题。给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 *π,-20 *π);乌兰巴托=(20 *π,4 *π);
设置一块函数你可以查看ga的进步
选择= optimoptions (“遗传算法”,“PlotFcn”,@gaplotbestf);
把遗传算法解算器x(1)整数值
rng (1,“旋风”)%的再现性intcon = 1;[x, fval exitflag] = ga (@rastriginsfcn 2 []、[] [], [],…磅,乌兰巴托,[],intcon选择)
优化终止:点球健身价值低于平均变化的选择。FunctionTolerance和约束违反小于options.ConstraintTolerance。
x =1×216.0000 - -12.9325
fval = 424.1355
exitflag = 1
ga收敛迅速的解决方案。
整数遗传算法解算器的特性
有一些限制类型的问题遗传算法
可以解决当你包括整数约束:
没有非线性等式约束。任何非线性约束函数必须返回
[]
非线性等式约束。一个可能的解决方法,请参阅用非线性等式约束整数规划。只有
doubleVector
人口类型。没有混合功能。
遗传算法
覆盖的任何设置HybridFcn
选择。遗传算法
忽略了ParetoFraction
,DistanceMeasureFcn
,InitialPenalty
,PenaltyFactor
选项。
上市的限制主要是自然的,不是任意的。例如,没有混合功能支持整数约束。万博1manbetx所以遗传算法
不使用混合函数当有整数约束。
用非线性等式约束整数规划
这个例子试图找到《函数的最小(包括当你运行这个例子)与这些约束五个维度:
x (1)
,x (3)
,x (5)
都是整数。规范(x) = 4
。
的遗传算法
解算器不支持非线性等式约束,只有万博1manbetx非线性不等式约束。这个例子显示了一个解决方案,适用于一些问题,但不能保证工作。
《函数最小化是困难的。添加整数和等式约束增加了困难。
包括非线性等式约束,给小公差托尔
这允许在x的规范托尔
为4。没有公差,非线性等式约束是永不满足,解决不达成一个可行的解决方案。
写表达式规范(x) = 4
两个“小于零”的不平等。
。
允许一个小公差的不平等。
。
写一个非线性不等式约束函数eqCon
实现这些不平等。
类型eqCon
功能测查[c] = eqCon测查(x) = [];rad = 4;托尔= 1 e - 3;confcnval =规范(x) - rad;c = [confcnval -托尔;-confcnval -托尔);
设置这些选项:
MaxStallGenerations
= 50 -允许解算器尝试一段时间。FunctionTolerance
= 1平台以及——指定一个比平时更加严格的停止准则。MaxGenerations
= 500 -代允许超过违约。PlotFcn
=@gaplotbestfun
——观察优化。
选择= optimoptions (“遗传算法”,“MaxStallGenerations”,50岁,“FunctionTolerance”1平台以及…“MaxGenerations”,500,“PlotFcn”,@gaplotbestfun);
上下边界设置为帮助解决。
据nVar = 5;磅= 5 * 1(1,据nVar);乌兰巴托= 5 * 1(1,据nVar);
解决这个问题。
rng (0,“旋风”)%的再现性[x, fval exitflag] = ga(据nVar @ackleyfcn, [], [], [], [],…磅,乌兰巴托,@eqCon[1 3 5],选择);
优化终止:点球健身价值低于平均变化的选择。FunctionTolerance和约束违反小于options.ConstraintTolerance。
检查解决方案。
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,在给定的相对公差1 e - 3。
尽管积极的退出旗,不是全局最优的解决方案。再次运行这个问题与一个更大的人口和检查解决方案。
选择= optimoptions(选择,“显示”,“关闭”,“PopulationSize”,400);(x2, fval2, exitflag2) = ga(据nVar @ackleyfcn, [], [], [], [],…磅,乌兰巴托,@eqCon[1 3 5],选择);
检查第二个解决方案。
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,在给定的相对公差1 e - 3。
请注意,这个过程可能会失败;遗传算法
难以同时整数和非线性等式约束。
有效的整数遗传算法
使用遗传算法
最有效的整数问题,遵循这些指导方针。
每个组件尽可能紧密绑定。这种做法给
遗传算法
最小的搜索空间,使遗传算法
搜索最有效。如果你不能绑定组件,然后指定一个适当的初始范围。默认情况下,
遗传算法
创建一个初始种群与范围e4 [1, 1 e4]
为每个组件。更小或更大的初始范围可以给更好的结果时,默认值是不合适的。改变初始范围,使用InitialPopulationRange
选择。如果你有10多个变量,设置一个人口规模大于默认使用
PopulationSize
选择。默认值是200 6个或更多的变量。庞大的人口规模:遗传算法
可能需要很长时间才能收敛。如果你达到几代人的最大数量(退出旗0
),增加的价值MaxGenerations
选择。减少突变率。为此,增加的价值
CrossoverFraction
从其默认的选项0.8
来0.9
或更高版本。增加的价值
EliteCount
从其默认的选项0.05 * PopulationSize
来0.1 * PopulationSize
或更高版本。
有关选项的信息,请参阅遗传算法
选项
输入参数。
整数遗传算法
算法
整数规划与遗传算法
涉及到几个修改(见的基本算法遗传算法是如何运作的吗)。整数规划:
引用
[1]Deb, Kalyanmoy。遗传算法的一种有效的约束处理方法。计算机方法在应用力学和工程,186(2 - 4),311 - 338年,2000页。
[2]Kusum,克里希纳普拉塔普辛格,马丁Kansal和c·莫汉。一个真正解决整数编码的遗传算法和混合整数规划问题。应用数学和计算,212(2),505 - 518年,2009页。