遗传算法中字符串长度如何设置

遗传算法中字符串长度如何设置,第1张

遗传算法中字符串长度直接调用类似于strlen之类的函数就可以。遗传算法中字符串长度直接调用类似于strlen之类的函数就可以,调用strlen之类的函数可设置字符串的长度。遗传算法是根据大自然中生物体进化规律而设计提出的。

优化的算法有很多种,从最基本的梯度下降法到现在的一些启发式算法,如遗传算法(GA),差分演化算法(DE),粒子群算法(PSO)和人工蜂群算法(ABC)。

举一个例子,遗传算法和梯度下降:

梯度下降和遗传算法都是优化算法,而梯度下降只是其中最基础的那一个,它依靠梯度与方向导数的关系计算出最优值。遗传算法则是优化算法中的启发式算法中的一种,启发式算法的意思就是先需要提供至少一个初始可行解,然后在预定义的搜索空间高效搜索用以迭代地改进解,最后得到一个次优解或者满意解。遗传算法则是基于群体的启发式算法。

遗传算法和梯度下降的区别是:

1.梯度下降使用误差函数决定梯度下降的方向,遗传算法使用目标函数评估个体的适应度

2.梯度下降是有每一步都是基于学习率下降的并且大部分情况下都是朝着优化方向迭代更新,容易达到局部最优解出不来;而遗传算法是使用选择、交叉和变异因子迭代更新的,可以有效跳出局部最优解

3.遗传算法的值可以用二进制编码表示,也可以直接实数表示

遗传算法如何使用它的内在构造来算出 α 和 β :

主要讲一下选择、交叉和变异这一部分:

1.选择运算:将选择算子作用于群体。选择的目的是把优秀(适应值高)的个体直接遗传到下一代。选择 *** 作是建立在群体中个体的适应度评估基础上的。

2.交叉运算:将交叉算子作用于群体。遗传算法中起核心作用的就是交叉算子。交叉算子是将种群中的个体两两分组,按一定概率和方式交换部分基因的 *** 作。将交叉算子作用于群体。遗传算法中起核心作用的就是交叉算子。例如:(根据概率选取50个个体,两两配对,交换x,y,比如之前两个是(x1,y1),(x2,y2),之后变成了(x1,y2),(x2,y1))

3.变异运算:将变异算子作用于群体。即是对群体中的个体串的某些基因座上的基因值作变动。(x2可能变为x2+δ,y1变为y1+δ)

种群P(t)经过选择、交叉、变异运算之后得到下一代种群P(t+1)。

遗传算法就是通过对大量的数据个体使用选择、交叉和变异方式来进化,寻找适合问题的最优解或者满意解。

遗传算法参数的用处和设置:

1.编码选择:通常使用二进制编码和浮点数编码,二进制适合精度要求不高、特征较少的情况。浮点数适合精度高、特征多的情况

2.种群:种群由个体组成,个体中的每个数字都代表一个特征,种群个体数量通常设置在40-60之间;迭代次数通常看情况定若计算时间较长可以在100内,否则1000以内都可以。

3.选择因子:通常有轮盘赌选择和锦标赛选择,轮盘赌博的特点是收敛速度较快,但优势个体会迅速繁殖,导致种群缺乏多样性。锦标赛选择的特点是群多样性较为丰富,同时保证了被选个体较优。

4.交叉因子:交叉方法有单点交叉和两点交叉等等,通常用两点交叉。交叉概率则选择在0.7-0.9。概率越低收敛越慢时间越长。交叉 *** 作能够组合出新的个体,在串空间进行有效搜索,同时降低对种群有效模式的破坏概率。

5.变异因子:变异也有变异的方法和概率。方法有均匀变异和高斯变异等等;概率也可以设置成0.1。变异 *** 作可以改善遗传算法的局部搜索能力,丰富种群多样性。

6.终止条件:1、完成了预先给定的进化代数;2、种群中的最优个体在连续若干代没有改进或平均适应度在连续若干代基本没有改进;3、所求问题最优值小于给定的阈值.

遗传算法是一种进化算法,进化是什么哪?就是种群逐渐适应生存环境,种群中个体不断得到改良的过程。

遗传算法是一种对生物遗传的模拟、在算法中,初始化一个种群,种群中的每个染色体个体都是一种解决方案,我们通过适应性fitness来衡量这个解决方案的好坏。并对它们进行选择、变异、交叉的 *** 作,找到最优的解决方案。

总结一下遗传算法的基本的步骤:

1.初始化一个种群,并评估每条染色体所对应个体的适应度。

2.选择、交叉、变异,产生新的种群

3.再评估每个个体的适应值,如果适应值达到要求或者达到最大循环次数,否则重复2,不断产生新种群。

知道了GA的大致流程之后、来具体分析一下细节,怎么实现吧

我们知道遗传算法起源于生物遗传,因此在种群中每个个体就是一个染色体,那如何对染色体进行编码,让它表示我们的解决方案那(就是把现实要优化的参数用编码表示成一个染色体)。这里就遇到了一个编码、解码的问题,我们将需要优化的目标编码成染色体,然后再解码为我们可以用来计算fitness的解;

一般在进行参数优化时,一般有两种方式:实数编码、二进制编码

实数编码:基因直接用实数进行表示,这样的表示方法比较简单,不用特意解码了,但是在交叉和变异时,容易过早收敛,陷入局部最优。

二进制编码:将基因用二进制的形式表示,将参数的值转化为二进制形式,这样交叉、变异时更好 *** 作,多样性好,但是占用的存储空间大,需要解码。

染色体就称为个体。对于一次实验,个体就是需要优化参数的一种解、许多这样的个体就构成了种群。

在面对群体中那么多个体时,如何判断个体的好坏呢,就是通过适应值函数了,将解带入适应值函数,适应值越大、解越好。

在遗传算法中,我们怎么使得里面的个体变得越来越优秀呢?

核心思想就是:选择优秀的、淘汰不好的,并且为了生成更好的解,我们要尝试交叉、变异,带来新的解。

选择就是从当前的种群中选择出比较好的个体、淘汰不好的个体

常见的选择方法有:轮盘赌选择、锦标赛选择、最佳保留选择等等

轮盘赌选择就是根据每个个体fitness和种群所有fitness之和比较,确定每个个体被选中的概率,然后进行n次选择,选择n个个体构成新种群,是一种放回抽样的方式。

锦标赛就是每次从种群中选择m个个体,选择最优的,放入新种群,重复选择,直到新种群中个体数目达到n。

最佳保留选择就是在轮盘赌的基础上,将fitness个体先加进新种群,因为轮盘赌是一种概率模型,可能存在最优个体没有进入新种群的情况。

在选择之后,就要考虑产生新的、更优秀的解,为种群带来新的血液。遗传算法的思路是交叉两个优秀的解,往往get好的解。

交叉通过在经过选择的种群中,随机选择一对父母,将它们的染色体进行交叉,生成新的个体,替代原来的解。

常用的交叉方法有:单点交叉、多点交叉等等。

交叉就像生物里面,染色体交换基因一样的~但是并不是种群中所有个体都进行交叉的,实现时可以,设置一个交叉率和交叉概率,随机选择种群中两个体、随机一个数,小于交叉率就进行交叉 *** 作,并根据交叉概率判断交叉的程度,从而生成新个体,反之就保留这两个体。

变异也是一种产生新个体的方式,通过改变个体上基因,期望产生更好的解。比如在以二进制编码的个体上,将里面的0、1进行等位变化啥的,就是0变1、1变0这样。同样也要考虑变异率、变异产生的新解是不可控的,可能很好,也可能很坏,不能像交叉一样,确保一定的效果,所以往往变异率设置的比较小。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/11127111.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-13
下一篇 2023-05-13

发表评论

登录后才能评论

评论列表(0条)

保存