遗传算法
优化遗传算法
可以解决某些变量为整数值时的问题。给予IntCon
的向量x整数组件:
[x, fval exitflag] = ga(据nvar fitnessfcn, A, b ,[],[],...磅,乌兰巴托,nonlcon IntCon选项)
IntCon
是包含x整数值组件。例如,如果你想限制x (2)
和x (10)
要成为整数,请设置IntCon
到[2,10]
.
这个surrogateopt
解算器也接受整数约束。
存在以下问题类型的限制:遗传算法
可以用整数变量求解。特别地,遗传算法
当存在整型变量时,不接受任何等式约束。有关详细信息,请参见整数遗传算法求解器的特点.
遗传算法
当为每个变量提供下限和上限时,可以最好地解决整数问题x组件。
此示例显示如何找到Rastrigin函数的最小值,以便x是一个整数x是否进一步限制在该地区 .
为你的问题设定界限
磅=(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 x
≤b
,将第二个不等式乘以-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
.在不存在容差的情况下,非线性等式约束永远不能满足,当有可行解时,求解器无法实现。
写表达式范数(x)=4
作为两个“小于零”的不等式:
规范(x) - 4
≤0
(规范(x) - 4)
≤0
.
在不等式中允许一个小的公差:
范数(x)-4-tol
≤0
-(范数(x)-4)-tol
≤0
.
编写一个实现这些不等式的非线性不等式约束函数:
函数[c,ceq]=eqCon(x)ceq=[];rad=4;tol=1e-3;confcnval=标准(x)-rad;c=[confcnval-tol;-confcnval-tol];
设置选项:
MaxStall=50
-允许解算器尝试一段时间。
FunctionTolerance = 1平台以及
-指定比通常更严格的停止标准。
最大生成数=300
-允许比默认值更多的代。
PlotFcn=@gaplotbestfun
-观察优化情况。
选择= optimoptions(“遗传算法”,“MaxStallGenerations”,50岁,FunctionTolerance, 1平台以及……“PlotFcn”“MaxGenerations”,300年,@gaplotbestfun);
设置下限和上限以帮助解算器:
nVar=5;lb=-5*个(1,nVar);ub=5*个(1,nVar);
解决问题:
rng(0,捻线机)%的再现性[x, fval exitflag] = ga (@ackleyfcn,据nVar ,[],[],[],[], ...磅,乌兰巴托,@eqCon[1 3 5],选择);优化终止:惩罚适应值的平均变化小于options.FunctionTolerance和约束冲突小于options.ConstraintTolerance。
检查解决方案:
x、 fval,exitflag,范数(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
.
尽管存在正退出标志,但解决方案并非全局最优。请再次运行问题并检查解决方案:
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
分量是整数,并且是x2
是4
,在给定的相对公差范围内1 e - 3
.
请注意这个过程可能会失败;遗传算法
难以同时处理整数和等式约束。
遗传算法
使用遗传算法
最有效的整数问题,遵循以下准则。
尽可能紧密地绑定每个组件。这种做法给遗传算法
最小搜索空间,使能遗传算法
最有效地搜索。
如果不能绑定组件,则指定一个适当的初始范围。默认情况下,遗传算法
创建具有范围的初始填充[-1e4,1e4]
为每个组件。当默认值不合适时,更小或更大的初始范围可以提供更好的结果。要更改初始范围,请使用初始填充范围
选择。
如果有超过10个变量,则使用人口规模
选择权。六个或更多变量的默认值为200。对于较大的人口规模:
遗传算法
可能需要很长时间才能聚合。如果您达到了最大代数(退出标志0
),增加价值最大世代
选择。
降低突变率。这样做,就增加了价值交叉分数
从其默认的0.8
到0.9
或更高。
增加价值精英帐户
从其默认的0.05*人口规模
到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。