1、遗传算法的作用
遗传算法主要思想就是利用达尔文优胜劣汰的原则,选择好的保留,不好的淘汰,最终目的找到最优解。
2、遗传算法的求解
因为是利用达尔文的思想来解题,顺着遗传规律,设定一个有20头猪的自然环境(有公有母),在一个规定的环境中生存、进化。
生物在不断的繁衍进化,这20头猪都会繁衍进化吗?不一定吧,总会有特别绅士的,所以假设80%的猪释放了天性,繁衍了另外一代的猪。此时猪就会发生进化,进化的过程是基因变异的过程,但也不是每头猪都会变异,变异的概率是很小的,假设为0.01。这个环境中只能容纳20头猪,注定要淘汰一批猪,淘汰有淘汰的规则,不能揪几头猪就说是笨猪,不要了,要设定淘汰的机制。这个机制就与我们求解的方程、问题有关,通过计算得到他们的适应值,谁适应谁存活。依次不断繁衍,最终就会得到会飞的猪。
说明:20代表种群大小,80%代表交叉概率,1%代表突变概率,迭代次数,结果精确度为初始变量,其数值大小视情而定,完全依赖于经验。
根据上面的分析了解了遗传算法的流程,但是具体要怎么做呢?怎么模仿这个过程呢?举例说明,求解方程f(x)=-2x2+5x-10,0<x<4最大值。
1)20头猪怎么表示?用一串二进制数表示基因(个体)
以题为例,确定基因长度(二进制串长度),设精确度为10-3,则有211<(4-0)103<212,则需要12位二进制数表示,随机产生20个12位的二进制数。
2)交配的过程怎么表示?单点交叉
交配过程就是基因重组的过程,方法有很多,以单点交叉法为例,随机选择两条基因交配,然后随机产生交叉位置,在交叉点以后所有二进制数交换,得到新的基因。
父母基因 | 交叉位置 | 子代基因 |
101110010111 010010010110 | 6 | 101110010110 010010010111 |
3)变异的过程怎么表示?
繁衍产生的新个体,新个体的基因会以一定的概率发生基因变异。
变异基因 | 变异位置 | 新基因 |
101110010110 010010010111 | 4 6 | 101010010110 010011010111 |
4)淘汰的过程怎么表示?轮盘赌
首先要建立淘汰个体的标准,也就是这些个体的对环境的适应情况,那么就要创建适应度函数,一般适应度函数根据目标函数而来,此例中可以直接使用目标函数作为适应度函数。
在进行计算之前,要将二进制串转换为在取值范围内的十进制数,然后根据适应度函数计算适应值。个体被选中的概率与适应值成正比。其中适应值计算公式为:
个体被选中的概率:
累计概率为:
接下来开始优胜劣汰,淘汰不好的个体。
首先产生[0,1]之间的随机数,并对应累计概率的取值范围找到选择的个体,举例说明。
个体 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
选中概率 | 0.13 | 0.25 | 0.09 | 0.21 | 0.11 | 0.15 | 0.06 |
累计概率 | 0.13 | 0.38 | 0.47 | 0.68 | 0.79 | 0.94 | 1 |
随机数为0.52,在累计概率的3-4之间则,选择4号个体
5)什么时候终止?
终止条件一般采用繁衍次数的计算方式,繁衍50代,到第50代停止繁衍,并在此时的种群中计算最优适应值即可,得到最优解和相应的未知值。
3、遗传算法的特点
1)与问题领域无关切快速随机的搜索能力;
2)搜索从群体出发,具有潜在的并行性,可以进行多个个体的同时比较;
3)搜索使用评价函数启发,过程简单 ;
4)使用概率机制进行迭代,具有随机性;
5)具有可扩展性,容易与其他算法结合。
4、遗传算法的不足
1)遗传算法的编程实现比较复杂,首先需要对问题进行编码,找到最优解之后还需要对问题进行解码;
2)另外三个算子的实现也有许多参数,如交叉率和变异率,并且这些参数的选择严重影响解的品质,而目前这些参数的选择大部分是依靠经验;
3)没有能够及时利用网络的反馈信息,故算法的搜索速度比较慢,要得要较精确的解需要较多的训练时间;
4)算法对初始种群的选择有一定的依赖性,能够结合一些启发算法进行改进;
5)算法的并行机制的潜在能力没有得到充分的利用,这也是当前遗传算法的一个研究热点方向。
遗传算法的衍生算法,混合遗传算法(传统梯度类算法、单纯形法及模拟退火),合作型协同进化算法。