遗传算法的旅行商问题实现,写得还挺清晰的,思路也蛮完整。用 Matlab 搞过 TSP 的朋友应该知道,城市一多起来,手动排路径基本不,这种进化式思路就挺合适了。代码里从初始化种群到交叉、变异、适应度评估都有,而且注释也算良心,看着不累。
路径编码用的是蛮直观的城市序列,比如[1, 5, 3, 2, 4, 1]
,代表从 1 出发,按这个顺序转一圈再回来。你要是第一次玩遗传算法,也不用慌,结构清晰、模块划分也明白:初始种群、交叉、变异都在自己的函数里。
适应度函数设计得也靠谱,反比于路径长度,这样距离越短适应度越高。轮盘赌和锦标赛两种选择机制也都兼顾到了,可以按需切换,挺灵活的。交叉操作用了部分匹配法,保证子代的合法性,蛮贴心的。
变异部分没写得太花,但该有的操作都有,比如两个城市互换位置,这种简单粗暴的方式在 TSP 里效果还不错,尤其配合精英保留策略用的时候。
整个算法循环结构清晰,终止条件也做了限制。还有一个点值得一提:如果你是用 Matlab 做优化课设或者科研项目,这些代码直接能上手,稍改一下参数就能跑出自己的版本,效率也不错。
资源在这里:【旅行商问题】使用遗传算法 TSP 问题 matlab 源码.zip,有需要的可以顺手存一份。
如果你对遗传算法还不熟,建议配合这篇一起看:基于遗传算法的旅行商问题求解,比较系统,对照着源码看更好上手。