目标:在解空间中尽可能地找到最优解,找不到最优解,就找比较好的解,希望能跳出局部最优解
步骤:
1.在解空间中选择一部分的点来构成一个种群,每个点都是一个解,每个点都应该用统一的编码方式来进行编码。于是,一个解可以类比成一个染色体,而经过编码以后,染色体就会以基因的形式而存在。
2.确定一个适应度函数,计算每一个个体(染色体)的适应度。以此作为某个个体存活可能性大小比较的依据。
3.构建一个新的种群。构建新的种群主要经过这么几个步骤:选择------>交叉-------->变异
a. 选择,选择的过程主要是从原有的种群中挑选出满足交叉率要求的个体
b. 交叉,根据选择出来的父母本,进行交叉,交换不同的基因片段,产生新的子代
c. 变异,新产生的子代基因会发生变异,可能会出现新的性状
4.对新构成的种群,进行上面的操作,直到达成终止条件。
-------------------以上是遗传算法的基本步骤---------------------------
-------------------以下是一些需要注意的内容--------------------------
1.如何编码?
2.如何构建种群?
3.如何选择?
4.如何交叉?
5.如何变异?
6.如何终止?
7.精英主义
1.如何编码?
编码的方式有很多种:比如,二进制编码,实数编码,排列编码等等
二进制编码就是利用一串01字符来表示个体,需要将每个样本的每个特征值都改写成二进制的形式
实数编码就是利用一个实数(小数点后四五位通常)来表示个体
排列编码就是利用1到9 这几个整数来进行编码,组成一个整数队列 eg. randperm(N)
2.如何构建种群?
在构建新的种群的过程中,会有很多种不同的方法:
① 从上一代种群中不断地挑选父本母本,产生新的子代,放入新的种群,直到这个种群被子代填满为止。此时得到的种群里面的个体全部都是新的子代,上一代种群的所有染色体全部消失
②从上一代种群中不断地挑选父本母本,判断这两者是否有可能发生交叉(即随机生成的交叉概率是否大于既定的交叉概率),如果有,那么就产生新的子代放入到种群中;如果没有,那么就将这两个个体放入下一代种群,成为下一代种群里面的新的个体
③父本母本生成子代以后直接替换掉种群里面适应度最低的个体
3.如何选择?
就选择方法而言,可以有轮盘赌,排序选择,竞标选择等等
轮盘赌:(将染色体按适应度从高到低进行排序)将每一个染色体的适应度都normalization,用自己的适应度除以适应度之和,将适应度转化成[0,1]之间的数。随机生成一个[0,1]之间的数,落入轮盘中。取累积概率中第一个大于随机概率的那个染色体作为选择出来的父本母本。
4.如何交叉?
根据不同的编码方式有不同的交叉方式
二进制:单点交叉,多点交叉,均匀交叉,算术交叉。前三种都是交换的形式,最后一种是混合的形式(想象成颜料)
实数:同二进制
排列:选染色体1的交叉点前段整数+染色体2未在染1前段出现的整数
5.如何交叉?
二进制:0变1,1变0
实数:加上或者减去一个特别小的数
排列:染色体里面的基因(整数)交换位置
6.如何终止?
①.找到了所需的最优解
②.达到了固定的种群代数
③.达到了资源预算
④.新的子代不再产生更优的解
⑤.人工干预
7.精英主义(Elistim):
在从上代种群到下代种群的过程中,我们希望能够保留那些适应度比较高的个体,让其在下一代种群中也出现。
遗传算法GA: http://www.obitko.com/tutorials/genetic-algorithms/index.php
GA wikipedia : https://en.wikipedia.org/wiki/Genetic_algorithm
轮盘赌:https://en.wikipedia.org/wiki/Fitness_proportionate_selection
选择策略:http://www.cnblogs.com/legend1130/p/5333087.html