遗传算法的简单应用-巡回旅行商(TSP)问题的求解
2015-06-21 00:46
316 查看
上篇我们用遗传算法求解了方程,其中用到的编码方式是二进制的编码,实现起来相对简单很多,
就连交配和变异等操作也是比较简单,但是对于TSP问题,就稍微复杂一点,需要有一定的策略,
才能较好的实现。
这次的TSP问题的题目是:
随机产生10~30个城市,每个城市之间的距离也是随机产生,距离的范围是[1,50],求最优的路径
==========================================================
下面就是具体的求解,由于我的策略是基于知网上的《一种改进的遗传算法求解TSP问题》这篇文章,
所以把这篇文章先放上来。下面我简单介绍一下这篇文章关于求解TSP问题的策略,然后附上参照这篇
文章写的代码。
策略简述:
1、染色体编码
为了充分利用城市间相邻边的信息和距离的信息,不采用二进制编码而是采用整数编码,即每个染
色体都是一个1到N的排列,表示周游路线的城市间的先后顺序序列。
View Code
其中的方法,实现不唯一,时间比较敢,也没有作一定的优化,只是为了熟悉算法而写的。
希望能帮到初学者,也欢迎各位提出修改意见。
完整代码可在这下载
https://github.com/hwqdt/Catcher.TSP
就连交配和变异等操作也是比较简单,但是对于TSP问题,就稍微复杂一点,需要有一定的策略,
才能较好的实现。
这次的TSP问题的题目是:
随机产生10~30个城市,每个城市之间的距离也是随机产生,距离的范围是[1,50],求最优的路径
==========================================================
下面就是具体的求解,由于我的策略是基于知网上的《一种改进的遗传算法求解TSP问题》这篇文章,
所以把这篇文章先放上来。下面我简单介绍一下这篇文章关于求解TSP问题的策略,然后附上参照这篇
文章写的代码。
策略简述:
1、染色体编码
为了充分利用城市间相邻边的信息和距离的信息,不采用二进制编码而是采用整数编码,即每个染
色体都是一个1到N的排列,表示周游路线的城市间的先后顺序序列。
/// <summary> /// 插入式变异(ISM) /// 思路:1.产生两个随机位置;2.将第二个位置的数放在第一个位置的数的前面 /// </summary> /// <param name="str1">要变异的个体</param> /// <returns>变异过后的个体</returns> static string Opreation_Mutation(string str1) { int pos1 = rd.Next(1, city_count);//产生两个位置 int pos2 = rd.Next(1, city_count); if (pos1 < pos2) { string s = str1[pos2 - 1].ToString(); return str1.Insert(pos1 - 1, s).Remove(pos2, 1); } else if (pos1 > pos2) { string s = str1[pos1 - 1].ToString(); return str1.Insert(pos2 - 1, s).Remove(pos1, 1); } else//如果相等的两个位置,则重新产生小范围的随机数 { int pos3 = rd.Next(1, city_count / 2); int pos4 = rd.Next(city_count / 2, city_count); string s = str1[pos2 - 1].ToString(); return str1.Insert(pos1 - 1, s).Remove(pos2, 1); } }
View Code
其中的方法,实现不唯一,时间比较敢,也没有作一定的优化,只是为了熟悉算法而写的。
希望能帮到初学者,也欢迎各位提出修改意见。
完整代码可在这下载
https://github.com/hwqdt/Catcher.TSP
相关文章推荐
- 字符串过滤掉所有最邻近的“<”和“>”之间的字符
- HDOJ 1501 Zipper(dfs)
- 自己实现基于key-value的NoSQL数据库(四)—— 新版本的数据库
- SSH整合实例详解
- [Hadoop] 在Ubuntu系统上一步步搭建Hadoop(单机模式)
- JS原型链
- leetcode 224 Basic Calculator
- 西普学院逆向writeup ---------你会吗??
- 多租户模式
- 交换排序-冒泡排序
- Zookeeper集群环境搭建实践
- poj 2388 Who's in the Middle
- VS2013快捷键
- 数据结构和算法-010 数组排序 希儿排序
- ENode框架Conference案例分析系列之 - 业务简介
- 配置trac
- 运行与结果
- uva6511 强连通分量
- OpenCV+C++ 视频图片相互转换
- 剑指offer第三题:二维数组中查找