本文主要是介绍遗传算法中的CROSSOVER和MUTATION,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
结合上次发的代码,这次再多说点,今天看了别人的代码,才晓得在实值编码下crossover和mutation的做法。
1:crossover,对于实值编码的染色体一般进行crossover的时候,是先随机选择2个parent,然后选择一部分进行交换,这样的做法是最常见的。而在我上面的代码中是(parent1+parent2)/2 来做了。那么就在这里说下选择部分进行交换的做法。
比如群体的size是N,先选择最好的M个,那么就需要在产生N-M个才能维持好种群的大小。怎么产生着N-M个后代?做法是这样的,假设每个染色体的长度是K,那么先把M个种群中的染色体的第一个基因,按照倍数复制成长度为N-M,接着随机再给这个N-M排序下,组成了N-M个后代的第一个基因,以此类推,就完成了任意2个parent的基因交换和重组。
2:mutation中最常见的就是以X的概率去mutation,那么怎么弄?这个mutation是针对每个染色体上的每个基因的,做法是这样的,遍历这N个染色体上的K个基因,然后产生随机数,如果这个随机数小于X,那么久给这个基因做mutation,如果大于则不更改,具体的实现的时候可以灵活点。
至此,这就是crossover和mutation的常见做法。
这篇关于遗传算法中的CROSSOVER和MUTATION的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!