打字猴:1.70050773e+09
1700507730
1700507731 设计一个映射函数
1700507732
1700507733
1700507734
1700507735
1700507736
1700507737 x是21位的二进制编码,例如。F(x)是二进制编码到十进制实数的映射函数。
1700507738
1700507739 第2步:设计初始群体
1700507740
1700507741
1700507742 设计一定量的群体,每个个体都用一个二进制编码来表示,使用程序循环生成N个21位二进制编码,当发现时就进行舍弃并重新生成,直到生成N个满足要求的21位二进制编码。
1700507743
1700507744 第3步:遴选与生育
1700507745
1700507746 首先,比较当前N个H(x)的值。然后,将其从大到小排序,选择最大的前M个对象作为可以生育后代的备选。最后,在这M个备选对象中进行两两之间的基因重组(如图11-21所示)。
1700507747
1700507748
1700507749
1700507750
1700507751 图11-21 基因重组
1700507752
1700507753
1700507754 根据排列组合,每一代会产生个下一代对象。在两两组合的过程中,可能会在这21位中的第1位后到第21位前的任意位置断开然后重组,这个位置是随机的。
1700507755
1700507756 以2个基因组为例:
1700507757
1700507758 101010101010101010101
1700507759
1700507760 000011110000111100001
1700507761
1700507762 假如在第7位后断开,那么生成的2个后代的基因组就是
1700507763
1700507764 000011101010101010101
1700507765
1700507766 101010110000111100001
1700507767
1700507768
1700507769 最终,一共产生了个新的后代基因。
1700507770
1700507771
1700507772
1700507773 在当前的M个评价函数值最大的基因和个新的后代基因中再次进行这个评价函数的排序,并选择前M个作为产生下一代的备选基因。
1700507774
1700507775 在这个过程中,可以用概率p来调整其中某一位由0变成1或由1变成0的可能性,这个环节叫作“变异”,它给某个基因组提供了从一个多维空间中评价函数较低位置跳跃到较高位置的机会。虽然也有一定的概率会从较高位置跳跃到较低位置,但是跳跃到较高位置的会有更大的概率被保留下来。
1700507776
1700507777 接下来,循环进行这个遴选与剩余的过程,直到连续K轮的函数最大值不再增加,就可以判断为函数收敛。在这个算法中,N、M、K都属于可调整的参数。一般来说,N、M、K越大,找到优质解的可能性也就越大(代价是消耗的计算资源增多)。
1700507778
1700507779 遗传算法是启发式(Heuristic Algorithm)算法的一种,因为在这种几乎没有确切方向的优化场景中,需要让计算机来进行一定的“智能”选择。这种“智能”就是我们通过对基因的编码,以及对基因编码的交换,从中找出那些在一轮一轮的遴选中由计算机挑选出来的编码体现出更好特性的对象。这些优秀的对象所蕴含的编码就是逼近最优解的模板,并通过不断尝试重构这些编码来获取更好的解,这一发掘过程是一种人启发计算机的过程。
[ 上一页 ]  [ :1.70050773e+09 ]  [ 下一页 ]