/**仅记录自己的学习历程**/
一、概述
在阅读本文之前,可以先阅读这两篇文章(文章1,文章2),不需要理解理论部分,概览全文,着重看一下原文举的例子,有助于理解遗传算法的实现原理。
前面的理论部分看不懂没有关系,后面有很详细的实例说明,把例子看懂并自己动手敲个代码(源码我会上传,但一定要自己亲自去实现一下,这样才能对遗传算法的每一步以及参数的意义有深刻的认识),再回过头来看遗传算法的理论部分,相信遗传算法你就入门了。
标准遗传算法的步骤如下:
(1)构造满足约束条件的染色体。由于遗传算法不能直接处理解空间中的解,所以必须通过编码将解表示成适当的染色体。实际问题的染色体有多种编码方式,染色体编码方式的选取应尽可能的符合问题约束,否则将影响计算效率。
(2)随机产生初始群体。初始群体是搜索开始的一组染色体,其数量应适当选择。
(3)计算每个染色体的适应度。适应度是反应染色体优劣的唯一指标,遗传算法就是要寻求适应度最大的染色体。
(4)使用复制、交叉和变异算子产生子群体。这三个算子是遗传算法的基本算子,其中复制体现了优胜劣汰的自然规律,交叉体现了有性繁殖的思想,变异体现了进化过程中基因突变。
(5)重复步骤,直到满足终止条件为止。
从生物学角度简单来说,每一个染色体就代表一个个体,N个个体形成一个种群,计算每一个个体的适应度大小,从种群中挑选适应度大的个体,进行遗传、交叉、变异操作生成下一代种群。
从数学角度出发,上面的话翻译下来的意思就是说对某个待解决的问题先生成N个初始解,形成一个解集。计算每一个解的好坏,留下好的解,对留下的解进行一番倒腾,再生成一组解,不断循环,最后解集中的解趋近于理想值。
遗传算法是一种复杂度为O(1)的并行全局搜索算法。
与传统方法相比,遗传算法的优越性主要表现在首先,在遗传算子的作用下,遗传算法具有很强的搜索能力,能以很大的概率找到问题的全局最优解其次,由于它固有的并行性,能有效处理大规模的优化问题。
二、求解TSP问题
前面理论和优点说了一大堆,遗传算法到底该怎么用呢?下面通过解决TSP问题,我们来看看如何将问题转化,进而使用遗传算法求解(掌握思想最重要,用什么语言无所谓,我这里使用Matlab,不用担心不会Matlab,我会很详细的解释每一行