遗传算法解决TSP问题
五一结束后的第一天,也是上课的第一天,今天正式开始算法篇,并且不定期更新机器学习篇。
题目描述
目前有十个城市,他们之间的路径关系如下矩阵所示:
从图中可以看出,城市之间的路径是无向图构成,试求出可以经过所有城市,并且路径最短的一条线路。
典型的TSP问题,求解方法很多,因为最近人工智能课程学习了遗传算法,就使用遗传算法进行求解吧。
算法设计
先描述一下基本的思路:将所有的城市进行编号,十个城市为0到9,并将所有的城市的排列顺序作为基因,将该路径的最后的值作为分数,最后的目的是挑选出路径最短的一条(基因分数最高的一个)。
这里有一个问题,挑选出路径最短的一条就需要确保开始的值足够大,否则会造成挑选不出。
但是,问题千变万化,无论设多大的值,都有可能超出设的这个值。所以对于分数,我们选择另外一种方案:将路径的总大小换算成对应的倒数,这样就可以通过挑选出最大的值来求解,因为路径大小一定为正数,所以,我们将路径的初始值设置为-1.
设置为倒数最大值的另外一个原因就是关于遗传算法的选择问题,后续会进行解释。
算法实现
遗传算法中最重要的两个步骤是选择和交叉变异。