遗传算法
优化遗传算法
可以解决某些变量为整数值时的问题。给IntCon
的向量x整数组件:
[x, fval exitflag] = ga(据nvar fitnessfcn, A, b ,[],[],...磅,乌兰巴托,nonlcon IntCon选项)
IntCon
一个正整数向量是否包含x整数值组件。例如,如果你想限制x (2)
和x (10)
如果是整数,设置IntCon
来(2, 10)
.
的surrogateopt
求解器也接受整数约束。
请注意
这类问题存在限制遗传算法
可以用整型变量求解。特别是,遗传算法
当存在整型变量时,不接受任何等式约束。有关详细信息,请参见整数遗传算法求解器的特点.
提示
遗传算法
当你为每一个都提供上界和下界时,最能解决整数问题x组件。
这个例子展示了如何找到最小的拉斯特里金函数限制,所以第一个分量x是一个整数。的组件x是否进一步限制在该地区 .
为你的问题设定界限
磅=(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
选择。
遗传算法
忽略了ParetoFraction
,DistanceMeasureFcn
,InitialPenalty
,PenaltyFactor
选项。
列出的限制主要是自然的,而不是随意的。例如:
没有支持整数约束的混合函数。万博1manbetx所以遗传算法
当存在整数约束时,不使用混合函数。
要获得整型变量,遗传算法
使用特殊的创建、交叉和变异功能。
在同一个问题中不能使用相等约束和整数约束。你可以通过在每个线性等式约束中加入两个不等式约束来绕过这个限制。例如,试图包含约束
3.x1- 2x2= 5,
创建两个不等式约束:
3.x1- 2x2≤5
3.x1- 2x2≥5。
将这些约束写在表单中一个x
≤b
,将第二个不等式乘以-1
:
3x1+ 2x2≤5。
可以使用一个
=(3 2; 3、2)
和b
=(5; 5)
.
请注意这个过程可能会失败;遗传算法
难以同时处理整数和等式约束。
例:具有非线性等式约束的整数规划。这个例子试图在五个维度中找到Ackley函数的最小值(包括你的软件),约束条件如下:
x (1)
,x (3)
,x (5)
都是整数。
规范(x) = 4
.
Ackley函数很难最小化。添加整数和等式约束增加了难度。
为了包含非线性等式约束,给出一个较小的公差托尔
这允许x
在托尔
的4
.在不存在容差的情况下,非线性等式约束永远不能满足,当有可行解时,求解器无法实现。
写表达式规范(x) = 4
作为两个“小于零”的不等式:
规范(x) - 4
≤0
(规范(x) - 4)
≤0
.
允许对不平等有一点宽容:
Norm (x) - 4 - tol
≤0
-(norm(x) - 4) - tol
≤0
.
写一个非线性不等式约束函数,实现这些不等式:
函数[c, ceq] = eqCon(x) ceq = [];rad = 4;托尔= 1 e - 3;concnval = norm(x) - rad;C =[确认- tol;-确认- tol];
设置选项:
MaxStallGenerations = 50
允许解算器尝试一段时间。
FunctionTolerance = 1平台以及
—指定比通常更严格的停止标准。
MaxGenerations = 300
-允许比默认值更多的代。
PlotFcn = @gaplotbestfun
—观察优化。
选择= optimoptions (“遗传算法”,“MaxStallGenerations”, 50岁,“FunctionTolerance”1平台以及...“MaxGenerations”, 300,“PlotFcn”, @gaplotbestfun);
设置下界和上界来帮助求解:
据nVar = 5;磅= 5 * 1(1,据nVar);乌兰巴托= 5 * 1(1,据nVar);
解决问题:
rng (0,“旋风”)%的再现性[x, fval exitflag] = ga (@ackleyfcn,据nVar ,[],[],[],[],...磅,乌兰巴托,@eqCon[1 3 5],选择);
优化终止:平均改变在的点球健身价值少比选项。FunctionTolerance和约束违反是少比options.ConstraintTolerance。
检查解决方案:
X,fval,exitflag,norm(X) X = 0 -1.7367 -3.0000 -0.0000 -2.0000 fval = 5.2303 exitflag = 1 ans = 4.0020
奇怪的x
组件是指定的整数。的规范x
是4
,在给定的相对容忍范围内1 e - 3
.
尽管有积极的退出标志,但解决方案并非全球最优。再次运行该问题并检查解决方案:
选择= 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
分量是整数,范数是x2
是4
,在给定的相对容忍范围内1 e - 3
.
请注意这个过程可能会失败;遗传算法
难以同时处理整数和等式约束。
遗传算法
使用遗传算法
最有效的整数问题,遵循以下准则。
尽可能紧密地绑定每个组件。这种做法给遗传算法
最小搜索空间,使能遗传算法
最有效地搜索。
如果不能绑定组件,则指定一个适当的初始范围。默认情况下,遗传算法
创建一个带有范围的初始种群e4 [1, 1 e4]
为每个组件。当默认值不合适时,更小或更大的初始范围可以提供更好的结果。要更改初始范围,请使用InitialPopulationRange
选择。
如果有超过10个变量,则使用PopulationSize
选择。对于六个或更多的变量,默认值是200。对于庞大的人口规模:
遗传算法
可能需要很长时间才能聚合。如果您达到了最大代数(退出标志0
),增加价值MaxGenerations
选择。
降低突变率。这样做,就增加了价值CrossoverFraction
选项的默认值0.8
来0.9
或更高版本。
增加价值EliteCount
选项的默认值0.05 * PopulationSize
来0.1 * PopulationSize
或更高版本。
有关选项的信息,请参见遗传算法
选项
输入参数。
遗传算法
算法整数规划与遗传算法
涉及基本算法的几个修改(见遗传算法是如何工作的).整数规划:
[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。