混合整数遗传算法
优化
求解混合整数优化问题
遗传算法
可以解决某些变量为整数值时的问题。给intcon
的一个向量x整数类型的组件:
[x, fval exitflag] = ga(据nvar fitnessfcn, A, b ,[],[],...磅,乌兰巴托,nonlcon intcon选项)
intcon
是包含x整数值的组件。例如,如果您想要限制x (2)
而且x (10)
设置为整数intcon
来(2, 10)
.
的surrogateopt
求解器也接受整数约束。
请注意
问题的类型存在限制遗传算法
可以用整数变量求解。特别是,遗传算法
当有整数变量时,不接受非线性等式约束。详情请参见整数ga求解器的特征.
提示
遗传算法
当你为每个提供上界和下界时,就能最好地解决整数问题x组件。
Rastrigin函数的混合整数优化
这个例子展示了如何找到Rastrigin函数的最小值,因此x为整数。的组成x是否进一步限制进入该地区 .
为你的问题设定边界
Lb = [5*pi,-20*pi];Ub = [20*pi,-4*pi];
设置一个plot函数,以便查看ga的进度
Opts = optimoptions(“遗传算法”,“PlotFcn”, @gaplotbestf);
调用ga求解器,其中x(1)具有整数值
rng (1,“旋风”)可重复性%Intcon = 1;[x, fval exitflag] = ga (@rastriginsfcn 2 ,[],[],[],[],...磅,乌兰巴托,[],intcon选择)
优化终止:惩罚适应度值的平均变化小于选项。FunctionTolerance和约束违规小于options. constraintolerance。
x =1×216.0000 - -12.9325
Fval = 424.1355
Exitflag = 1
Ga快速收敛到解。
整数ga求解器的特征
对于问题的类型有一些限制遗传算法
可以在包含整数约束时求解:
无非线性等式约束。任何非线性约束函数都必须返回
[]
对于非线性等式约束。有关可能的解决方法,请参见具有非线性等式约束的整数规划.只有
doubleVector
人口类型。没有杂化函数。
遗传算法
对象的任何设置HybridFcn
选择。遗传算法
忽略了ParetoFraction
,DistanceMeasureFcn
,InitialPenalty
,PenaltyFactor
选项。
所列的限制主要是自然的,而不是任意的。例如,没有混合函数支持整数约束。所以遗传算法
当存在整数约束时,不使用混合函数。
具有非线性等式约束的整数规划
本例试图在五个维度中定位Ackley函数(在运行本例时包含)的最小值,约束条件如下:
x (1)
,x (3)
,x (5)
都是整数。Norm (x) = 4
.
的遗传算法
求解器不支持非线性等式约束,只支持非线性不等式约束。这个例子展示了一个适用于某些问题的解决方法,但不能保证有效。
阿克利函数很难最小化。添加整数和等式约束会增加难度。
为了包含非线性等式约束,给出一个小的公差托尔
这允许x的范数在托尔
为4。在没有公差的情况下,非线性等式约束永远不满足,求解器不能得到一个可行解。
写出表达式Norm (x) = 4
两个"小于零"不等式。
.
在不平等中允许有一点容忍度。
.
写一个非线性不等式约束函数eqCon
这实现了这些不平等。
类型eqCon
function [c, ceq] = eqCon(x) ceq = [];Rad = 4;Tol = 1e-3;Confcnval =范数(x) - rad;C = [confcnval - tol;-confcnval - tol];
设置这些选项:
MaxStallGenerations
= 50 -允许求解器尝试一段时间。FunctionTolerance
= 1e-10 -指定比通常更严格的停止条件。MaxGenerations
= 500 -允许比默认值更多的代。PlotFcn
=@gaplotbestfun
—观察优化结果。
Opts = optimoptions(“遗传算法”,“MaxStallGenerations”, 50岁,“FunctionTolerance”1平台以及...“MaxGenerations”, 500,“PlotFcn”, @gaplotbestfun);
设置下界和上界来帮助求解器。
nVar = 5;lb = -5*ones(1,nVar);ub = 5*ones(1,nVar);
解决问题。
rng (0,“旋风”)可重复性%[x, fval exitflag] = ga (@ackleyfcn,据nVar ,[],[],[],[],...lb,ub,@eqCon,[1 3 5],opts);
优化终止:惩罚适应度值的平均变化小于选项。FunctionTolerance和约束违规小于options. constraintolerance。
检查解决方案。
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,到1e-3的给定相对公差内。
尽管有积极的退出标志,解决方案不是全局最优的。在更大的人群中再次运行该问题并检查解决方案。
Opts = optimoptions(Opts,“显示”,“关闭”,“PopulationSize”, 400);(x2, fval2, exitflag2) = ga (@ackleyfcn,据nVar ,[],[],[],[],...lb,ub,@eqCon,[1 3 5],opts);
检查第二个解。
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,到1e-3的给定相对公差内。
注意,这个过程可能会失败;遗传算法
难以同时处理整数和非线性等式约束。
有效的整数遗传算法
使用遗传算法
对于整数问题,最有效的方法是遵循以下准则。
尽可能紧密地绑定每个组件。这种做法
遗传算法
最小的搜索空间,启用遗传算法
最有效地搜索。如果不能绑定组件,则指定适当的初始范围。默认情况下,
遗传算法
创建具有范围的初始填充e4 [1, 1 e4]
对于每个组件。当默认值不合适时,较小或较大的初始值范围可以获得更好的结果。要更改初始范围,请使用InitialPopulationRange
选择。方法设置总体大小,如果变量超过10个,则设置总体大小大于默认值
PopulationSize
选择。对于6个或更多的变量,默认值为200。对于庞大的人口规模:遗传算法
要花很长时间才能汇合。如果达到最大代数(退出标志)0
),增加的值MaxGenerations
选择。降低突变率。的值
CrossoverFraction
选项的默认值0.8
来0.9
或更高版本。的值增加
EliteCount
选项的默认值0.05 * PopulationSize
来0.1 * PopulationSize
或更高版本。
有关选项的信息,请参见遗传算法
选项
输入参数。
整数遗传算法
算法
整数规划遗传算法
涉及到对基本算法的几处修改(参见遗传算法是如何工作的).对于整数规划:
参考文献
Deb, Kalyanmoy。一种有效的遗传算法约束处理方法。应用力学与工程的计算机方法,186(2-4),pp. 311 - 34,2000。
[2] Deep, Kusum, Krishna Pratap Singh, M.L. Kansal和C. Mohan。求解整数和混合整数优化问题的实数编码遗传算法。应用数学与计算,32 (2),pp. 505-518, 2009。