遗传算法调参 参数设置

1 原文地址:https://www.cnblogs.com/helloHKTK/p/9772778.html

遗传算法(Genetic algorithm)遵循适者生存、优胜劣汰的法则,即寻优过程中保留有用的,去除无用的。在科学和生产实践中表现为在所有可能的解决方法中找出最符合该问题所要求的条件的解决方法,即找出一个最优解

遗传算法有4个参数需要提前设定,一般在以下范围内进行设置:

(1)群体大小:20~100

(2)遗传算法的终止进化代数:100~500

(3)交叉概率:0.4~0.99

(4)变异概率:0.0001~0.1

算法参数的设计原则

1.种群初始化

初始的种群生成是随机的。在初始种群的赋值之前,尽量进行一个大概率的区间估计,以免初始种群分布在远离全局最优解的编码空间,导致遗传算法的搜索范围受到限制,同时也为算法减轻负担

虽然初始种群中的个体可以随机产生,但最好采用如下策略设定:
(1) 根据问题固有知识,设法把握最优解所占空间在整个问题空间中的分布范围,然后,在此分布范围内设定初始种群;
(2) 先随机产生一定数目的个体,然后从中挑选最好的个体加入到初始群体中。这种过程不断迭代,直到初始群体中个体数目达到了预先确定的规模。

2.种群的规模

​ 群体规模太小,很明显会出现近亲交配,产生病态基因。而且造成有效等位基因先天缺失,即使采用较大概率的变异算子,生成具有竞争力高阶模式的可能性仍然核销,况且大概率变异算子对已有模式的破坏作用极大。同时,遗传算子存在随机误差(模式采样误差),妨碍小群体中有效模式的正确传播,使得种群进化不能按照模式定理产生所预期的期望数量。

​ 群体规模太大,结果难以收敛且浪费资源,稳健性下降

3.变异概率

​ 变异概率太小种群的多样性下降太快,容易导致有效基因的迅速丢失且不容易修补;

​ 变异概率太大,尽管种群的多样性可以得到保证,但是高阶模式被破坏的概率也随之增大

4.交配概率

与变异概率类似,交配概率太大容易破坏已有的有利模式,随机性增大,容易错失最优个体

交配概率太小不能有效更新种群

5.进化代数

进化代数太小,算法不容易收敛,种群还没有成熟

进化代数太大,算法已经熟练或者种群过于早熟不可能再收敛,继续进化没有意义,只会增加时间开支和资源浪费


小结:
遗传算法(GAs)作为一种鲁棒的、实用的优化方法,既可以用于离散域也可以用于连续域上。
关于个体(individual)和染色体(chromosome):在编程的过程中我将两者看作同一个东西。但是实际上:种群由一定数量的个体组成,每个个体实际上是染色体带有特征的实体,染色体又由若干个基因组成。

除了上述参数调整以外,在实际的应用中,我发现基于GA的算法,比如多目标进化算法(Multi-objective evolutionary algorithm)。种群的初始化方法还是很有许多值得探索的地方,有的时候完全的随机化方法并不能得到好的解。

 

2 原文地址:https://ask.csdn.net/questions/675124?utm_medium=distribute.pc_relevant.none-task-ask_topic-BlogCommendFromBaidu-6&depth_1-utm_source=distribute.pc_relevant.none-task-ask_topic-BlogCommendFromBaidu-6

伪代码过程 (谢菲尔德大学的遗传算法工具箱)如下:
1.根据已有的数据,应用神经网络进行拟合,得到神经网络模型参数
2.设置遗传算法的参数
3.while gen FitnV=ranking(-ObjV); %分配适应度值
SelCh=select('sus',Chrom,FitnV,GGAP); %选择
SelCh=recombin('xovsp',SelCh,px); %重组
SelCh=mut(SelCh,pm); %变异
XY=bs2rv(SelCh,FieldD); %子代个体的十进制转换
将子代个体代入神经网络模型,得到评价准则。
重插入子代到父代,得到新种群
代计数器增加
记录每代的最优解及其序号
end

3 原文地址:https://blog.csdn.net/yy2050645/article/details/80724857

对遗传算法的每一步进行详细说明,但是在此之前需要对一些参数进行说明,这些参数将会运用到遗传算法的过程当中。

种群数量:即种群中个体的数量,此处用来表示

变异概率:用来控制种群中发生变异行为的个体的数量,用表示,取值范围在0~1之间

交叉概率:用来控制种群中发生交叉行为的个体的数量,用表示,取值范围在0~1之间

迭代次数:遗传算法终止的条件,用表示,即经过多少代的种群迭代之后停止

我们以目标函数最大化为例来讲解遗传算法的具体步骤:

遗传算法总共可以分为6步:1.编码,2.解码,3.求解适应度,4.复制,5.交叉,6.变异

1.编码:遗传算法中的编码可以采用实数编码,以及二进制编码,在这里我们主要介绍二进制编码。假设优化问题的解为,其中每个决策变量对应的的编码长度为,则一个个体的总的编码长度记做,即每个个体被编码为一个长度为的二进制串。由于我们上文中说明了种群数量为,因此,我们在初始化种群时,将对个个体进行随机编码,即生成个长度为的二进制串作为我们的初始种群,其中每一个二进制串为一个个体。

2.解码:解码的目的是为了得到每个个体对应的解的实际值。具体过程如下。首先我们需要取出一个个体中每个决策变量对应的二进制编码段,某个个体的决策变量对应的编码段为个体的位置到位置,即(假设个体的下标从0开始,并且设),其中包含开始位置对应的二进制位,不包含结束位置对应的二进制位。之后将编码段转换为对应的十进制值。设的取值范围为,则解码后的实际值为。最后我们根据一个个体可以得到一个对应的优化问题的解,最后对整个种群解码后,得到个解。

3.求解适应度:通过第二步解码后,我们便得到了个解,依次将这些解带入到目标函数,求取出目标函数值便得到了这些解所对应的适应度值,我们记为。

4.复制:首先,我们可以将适应度最优的个体找出来,作为复制得到的种群中的第一个个体,作为当前种群最优个体,这个操作也称之为精英保留策略。之后我们再从种群中通过某种选择方案选出个个体,和一开始选出的最优个体组成复制后形成的种群。接下来介绍选择方案,即如何选出个个体。首先通过公式计算出,之后再通过公式计算得出。之后我们通过产生一个0到1之间的随机数,判断位于的哪个位置,例如,如果,则将原先种群中第个个体选出,如此循环次便得到了选出的个个体。

5.交叉:将种群中的的第一个个体,也就是之前选出的最优个体排除在外不参加交叉操作,其他个个体进行交叉操作。首先有序生成个0到1之间的随机数,记录其中小于交叉概率的随机数的位置,将这些位置对应的个体选出来作为进行交叉操作的个体(在程序编写中,我一般限制选出个体的数量大于零且为偶数,如不符合条件则重新生成随机数进行选择)。之后,从选出的个体中每次按顺序遍历出两个个体进行交叉操作。接下来介绍两个个体之间如何进行交叉操作,设个体起始位下标为0,则个体的最后一位对应的下标为。首先产生一个1(包含)到(不包含)之间的随机数,作为这两个个进行体交叉位置,之后将这两个个体在这个位置之后的片段进行交换便完成了交叉操作。依次对之前选出的个体进行此操作,直到被选出的个体全部完成,则种群的交叉操作完成。由于进行了变异操作,种群中最优个体有可能已经发生了变化,因此当完成遍历操作时我们也可以再次进行解码,求适应度,将种群中最优的个体放置在种群的第一个作为新的。

6.变异:首先同交叉操作相同,种群中的第一个个体不进行变异操作,之后的个个体进行变异操作。变异操作的具体方法如下,首先将参加变异操作的个个体连成一条串,其长度为,之后一次产生个0到1之间的随机数,记录小于变异概率的随机数的位置,所有小于变异概率的随机数的位置便是这条串上发生变异的位置,通过这个位置可以找到发生变异的个体的,以及在这个个体上的哪个位置发生的变异。例如,某个小于变异概率的随机数在这条串上的位置为,则可以求得发生变异的个体索引为,“//”表示整除(向下取整),在这个个体上发生变异的位置为,“mod"表示取余。最终确定了变异位置之后,只需观察这个位置上的二进制值是0还是1,如果是0则变异为1,如果是1则变异为0。如此循环直到把所有的发生变异的位置均进行变异操作。最终便产生了新的种群。

最后依次循环执行2至6步来进行种群迭代。

至此,遗传算法的6个步骤都已介绍完毕,需要注意的是,第1步编码操作只在第一次种群迭代时进行,之后的次迭代都只执行2至6步。
 

你可能感兴趣的:(人工智能,算法,遗传算法)