encoding,natural selection,selection,crossover,mutation
第一题:binary genetic algorithm a b简单的做一个单点交叉就好了。
这个题就是很简单的突变,
如果采取了精英策略,elitism strategy,那么最好的那一个个体不参与突变。
这里就出现了,NkeepN_{keep}Nkeep为0的情况,所以:
很简单,根据题目a得到的概率,可以得到答案:
这里不考虑y中存在相同的元素的情况。
格雷编码方式比二进制的遗传算法的编码好在哪里呢?先来看二进制传统编码的缺点:
其实就是这个骤变,127和128的十进制只是差1,但是二进制其实8个比特每一个数字都变化了,而这样会导致基因交叉的时候造成巨大的差异。
如何在binary genetic algorithm中使用格雷码呢?先用把原来的问题用二进制来表示,然后再把二进制的表示转换成格雷码的表示,然后后面迭代的过程相同,最后再吧格雷码转换成二进制,再转换成真是的连续数字即可。
整个过程其实就多了一个从二进制编码与格雷码的相互转换。
格雷码与二进制编码的转换
第一位格雷码和二进制码相同,然后第二个格雷码就是上一个二进制码和这个二进制码的异或,就是不相同取1,相同取0;
从格雷码转换回去的话,第一位是相同的,然后第二个二进制码使用上一位的二进制码和这一位的格雷码的异或。
就是先交换,然后在父母中去掉重复的基因,然后再随机把剩下的不重复的基因给对应的孩子。
或者这样做:
这个就是寻找重复的基因,然后交换重复的基因,然后找下一个重复的基因。
对parent编码,查找每一个基因在refence list中的索引