智能优化算法——遗传算法(GA)(纯理论,不包含代码)

今天接着PSO,记录一下遗传算法的实现原理。(若有错误,请大佬帮忙指正!)(同样,主要参考b站视频学习加入自己的一些理解,如果想要看视频学习,可以直接移步最后参考链接)
遗传算法概述:遗传算法(Genetic Algorithm,GA)是一种基于遗传进化思想的优化算法,被广泛应用于寻找复杂问题的最优解。它是模拟生物进化过程中的自然选择、交叉和变异等基本遗传操作的一种方法。遗传算法将优化问题看作是在候选解的空间中进行搜索,通过不断进化得到更优的解。与其他优化算法相比,遗传算法具有并行性、全局搜索能力强、对目标函数的要求低等优点,因此在许多领域得到了广泛的应用。
遗传算法通常包含以下几个基本步骤:

  1. 初始化种群:首先生成一个随机的种群,其中包含若干个个体,每个个体表示问题的一种解决方案。
  2. 评估适应度:为了评估每个个体的优劣程度,需要定义一个适应度函数,用于计算每个个体的适应度值。
  3. 选择操作:根据适应度值,选取若干个个体作为“父代”,用于产生下一代。
  4. 交叉操作:将选出的父代个体进行交叉,生成新的个体作为下一代。
  5. 变异操作:对新一代中的某些个体进行变异操作,引入新的变化,增加解空间的探索能力。
  6. 重复步骤2-5,直到达到预定的停止条件。
    输出结果:从最终的种群中选出适应度最高的个体,作为问题的最优解。
    遗传算法中,适应度函数的设计是关键,它需要合理地反映出问题的性质和要求,以便能够对个体进行正确的评估。同时,选择、交叉和变异操作的具体实现也需要根据问题的性质进行调整,以达到更好的优化效果。

算法背景:模拟生物在自然环境中的遗传和金华的过程而形成的自适应全局搜索算法。

基本原理:基于——交叉、变异、复制三大方法

以下是交叉和变异的图解:这一列一列的都是一个个的编码。对每个个体(编码)进行交叉和编译,然后择优录取。
智能优化算法——遗传算法(GA)(纯理论,不包含代码)_第1张图片

编码(十分重要):

因为生活中的问题可能是一个具体问题,无法像上述的交叉和变异一样的操作,所以在GA算法之前,我们需要将问题可行解化,将问题转化为抽象编码,适用于GA算法的形式。还有,GA算法能处理那一种一串串的数字,即一串数字代表一个信息,所以才需要进行编码。生活中有可能是具体某个数值代表信息,无法使用GA,所以需要编码成一串数字才可应用。

  • 常见的几种编码方式:
    (1):二进制编码(常用),将某一个数值转化成为一个二进制串,以适用于GA算法。
    (2):TSP问题,将自定义数字含义组成一串数,以解决问题。例如:某十个城市的某个解可以表示为[3, 2,1,4, 5,6, 7,8, 9,0]
    (3):根据不同的情况进行不同的抽象编码。
    总之,就是将解能表示成为可以交叉、变异等操作的解。
    常规方法,利用二进制编码步骤:
    1、用一个二进制串表示这个十进制的数值
    2、给定数值解的区间范围:[1, 10]
    3、给定精度:1e^-5,两个数值解的间隔
    4、编码:为每个数值分配一个独一无二的二进制串
    注意:不一定就是一个十进制数的二进制编码就直接就是将这个十进制数转化成为二进制数,这是不一定的,只是他们之间存在着一种映射关系。那么在二进制编码中,想要实现每个数值都能分配到一个独一无二的串,那么串的个数就要大于等于数值解的个数,一个长度为n的二进制串,一共能表示2^n个数值解。

解码:有编码肯定有解码(略)

基本原理之——复制、交叉、变异

  • 复制:每个个体会进行复制操作,常规的复制方法有:
    (1):将个体的适应度大小映射为概率进行复制,适应度高的个体会有更大的概率复制,且复制的份数也会越多——轮盘赌法
    (2):对适应度高的N/4的个体进行复制,然后用这些个体把N/4的个体替换掉——精英产生精英
    (3):用当前个体的复制体替换掉下一个个体,反之也行,也可以随机替换。
    (4):根据不同标准把“好的个体”替换掉“坏的个体”,同样把“坏解”替换“好解”也可以。
    总之复制的方法非常多,要自己根据需求选择。

  • 交叉:交叉的方法也非常多,不是某个一定好,一定要按照某种交叉方法来,常用的交叉方法如下:
    (1):按照顺序交叉、两两个体之间按照一定概率进行交叉。例如1和2,2和3,或者1和2,2和4等等
    (2):也可以三三个体,五五个体进行交叉,均可以。
    (3):对适应度高的前N/2个个体或者适应度高的前N/4个个体之间互相交叉。
    (4):或者不按顺序,随机从前N/2个中选一个交叉
    (5):或者多段交叉,不是一段交叉也可以。

  • 变异:同理,变异的方法也非常多,要灵活使用,但是注意变异率不宜设置过高。
    (1):对每一个个体均进行变异
    (2):只对适应度低的后N/4个个体或者N/2个个体进行变异
    (3):也可以按照每个个体的适应度,将适应度映射成为变异的概率然后进行变异
    (4):也不一定就是单个位点变异,也可以多个位点一起变异。
    注意:因为编码之后,解就变成了一串串的编码了,所以交叉指的是两个个体之间的相互交换相同的位置,如下图所示。并且变异是针对某个个体自己单独的变异,同样是编码之后的变异,所以变异指的是某一串编码中的一个或者多个位点中的数变成了别的数,从而变成了新的一串编码的过程。如下图所示:
    智能优化算法——遗传算法(GA)(纯理论,不包含代码)_第2张图片

算法实现:选好复制、交叉、变异三个方法的实现策略,然后去根据自己的需求编写程序实现。

算法优缺点:

  • 优点:(1)参数少,理论优势强、(2):变异机制赋予了群体跳出局部极值的能力

  • 缺点:虽然都有变异机制,但是在进化的后期,大家都差不多了,也就容易陷入局部最优,并且算法实现比较繁琐。

算法拓展:无论是蚁群、免疫、鱼群、蝙蝠等算法,这类启发式的算法背后的思想都是一样的,即:择优进化,“好的”根据一定的策略变得更好,“差的”根据一定策略向“好的”方向发展,如果下一次不好,就不更新即可,如果“好”的话再更新,这样就会形成一个保底机制——即下一次的一定不会比现在更差,只会更好。

程序实现思路:通过一定的策略,生成一个解,每次循环生成的解比上一次的好,则更新这个解,否则就不更新,那么一直迭代下去也能得到一个比较好的结果。

对比PSO与GA算法:

  • PSO算法是大家一起找,然后有人找到了,大家再慢慢向最优靠拢,是个连续的收敛至最优,但是PSO收敛比较慢,且有可能会有个别个体因为种种原因无法收敛至全局最优

    - GA算法很大的特点就是有交叉、变异的存在,即解会“瞬移”,就会出现解的跳变,有可能一下子就找到了最优解,而不同于PSO的慢慢向最优解靠拢。且GA算法的交叉变异机制会让解不容易收敛致局部最优,且GA算法收敛速度较快。

参考:

通俗易懂讲算法-最优化之遗传算法(GA)
感谢知识分享!

你可能感兴趣的:(算法,小白说废话,数学建模,算法,数学建模,数据建模)