📜  实值参数(GA)的变异算法

📅  最后修改于: 2021-04-30 03:15:56             🧑  作者: Mango

遗传算法(GA)是自适应启发式搜索算法,属于进化算法的较大部分。在每一代中,染色体(我们的候选溶液)都经过突变,交叉和选择,以产生更好的种群,其染色体更接近我们所需的溶液。变异运算子是一元运算运算符,只需要一位父代即可进行运算。它是通过从我们选择的染色体(父本)中选择一些基因,然后对它们应用所需的突变运算符来实现的。

在本文中,我将讨论四种用于实值参数的变异算法-
1)均匀变异
2)不统一
3)边界突变
4)高斯变异

在这里,我们考虑一个具有n个实数的染色体(这是我们的基因),而x i代表一个基因,而i属于[1,n]。

均匀变异–

在均匀突变中,我们从染色体中选择一个随机基因,假设x i并为其分配一个统一的随机值。
令x i在[a i ,b i ]范围内,然后将U(a i ,b i )赋给x i
U(a i ,b i )表示范围[a i ,b i ]内的统一随机数。

Algorithm –
1.    Select a random integer number i from [1,n]
2.    Set xi to U(ai,bi).

边界突变–

在边界变异我们从染色体选择一个随机的基因,让我们说X I和分配上限或下限X I到它的。
令x i在[a i ,b i ]范围内,然后将i i或b i分配给x i
我们还选择一个变量r = U(0,1)(r是介于0和1之间的数字)。
如果r大于或等于0.5,则将b i分配给x i,否则将i i分配给x i

Algorithm –
1.    select a random integer number i form [1,n]
2.    select a random real value r from (0,1).
3.    If(r >= 0.5)
             Set xi to bi
       else
             Set xi to ai

非均匀变异–

在非均匀突变中,我们从染色体中选择一个随机基因,假设x i并为其分配一个非均匀随机值。
令x i在[a i ,b i ]范围内,然后给它分配一个非均匀的随机值。

我们使用一个函数,
f(G)=(r2 *(1-G / Gmax))b,
其中r2 =(0,1)之间的统一随机数
G =当前代数
Gmax =最大代数
b =形状参数
在这里,我们选择(0,1)之间的统一随机数r1。
如果r大于或等于0.5,则将(b i -x i )* f(G)分配给x i,否则,我们分配(a i + x i )* f(G)。

Algorithm –
1.    Select a random integer i within [1,n]
2.    select two random real values r1 ,r2 from (0,1).
3.    If(r1 >= 0.5)
             Set xi to (bi-xi) * f(G)
       else
             Set xi to (ai+ xi) * f(G)

高斯变异–

高斯变异利用高斯误差函数。与前面提到的算法相比,它的收敛效率要高得多。我们选择一个随机基因,假设x i属于[a i ,b i ]范围。令突变的弹簧为x’i 。每个变量都有一个突变实力运算符(σI)。我们使用σ=σI /(B I -aⅰ)作为所有n个变量的固定无量纲参数;
因此,后代X” i被给定-

x’i= xi + √2 * σ * (bi-ai)erf-1(u’i)

此处erf()表示高斯误差函数。

erf(y)=2⁄√π ∫y0 e-t2 dt

为了计算u i ‘,我们首先从(0,1)范围内选择一个随机值u i ,然后使用以下公式

if(ui>=0.5)
    u’i=2*uL*(1-2*ui)
else
    u’i=2*uR*(2*ui-1)

同样,u L和u R由公式给出

uL=0.5(erf( (ai-xi)⁄(√2(bi-ai)σ) )+1)
uR=0.5(erf( (bi-xi)⁄(√2(bi-ai)σ) )+1)

参考 –
1.https://www.iitk.ac.in/kangal/papers/k2012016.pdf
2. https://en.wikipedia.org/wiki/Mutation_(genetic_algorithm)
3.http://read.pudn.com/downloads152/ebook/662702/gaotv5.pdf