1.启发式算法简介
启发式算法 ( ) 是相对于优化算法提出的。 问题的最优算法找到问题的每个实例的最优解。 启发式算法可以定义如下:一种基于直觉或经验的算法,它以可接受的成本(指计算时间和空间)为要解决的组合优化问题的每个实例给出可行的解决方案。 由于算法具有一定的随机性、本质,每次得到的可行解往往是不同的。
2.常用启发式算法
本文主要采用各种启发式算法来解决TSP问题。 TSP问题定义为:给定n个城市的坐标,需要从其中一个城市(起点城市)出发,然后去每个城市(每个城市只去一次),最后回到起点点城市,目标是整个行程的最短路线。 例如,1->2->3->5->4->1 就是其中一条路由(1->2->3->5->4 可以称为序列),即基本TSP的问题就是找出一个更好的序列。 这里的启发式算法主要解决以下问题:
如何根据当前序列生成新序列? 如何评估新序列? 哪些序列被保留?
注:本文不会详细解释各个算法的原理,但对各个算法的实现代码进行了详细注释,便于读者理解。 如果您发现算法有错误或者其他问题,可以在评论区留言或者添加小编微信()进行交流。
1. 模拟退火算法
解决TSP问题的模拟退火算法详细Java代码实现
2.禁忌搜索算法
禁忌搜索解决TSP问题的Java代码实现详解
3. 蚁群算法
蚁群算法解决TSP问题的Java代码实现详解
4. 遗传算法
遗传算法解决TSP问题的Java代码详解
5. 迭代局部搜索算法
迭代本地搜索解决TSP问题的详细Java代码实现
6. 变邻域搜索算法
解决TSP问题的变邻域搜索算法详解Java代码实现
7. 粒子群算法
粒子群算法(PSO)求解二元函数最小值+有限x、y范围测试
8.人工鱼群算法
人工鱼群算法(AFAS)求解二元函数最小值+有限x、y范围测试
3.结果可视化
Tsp问题结果可视化(实现)
4.数据1,att48
将以下数据复制并粘贴到 att48.txt 文件中。 使用编辑器的代码时,记得修改数据的读取路径。
1 6734 1453 2 2233 10 3 5530 1424 4 401 841 5 3082 1644 6 7608 4458 7 7573 3716 8 7265 1268 9 6898 1885 10 1112 2049 11 5468 2606 12 5989 2873 13 4706 2674 14 4612 2035 15 6347 2683 16 6107 669 17 7611 5184 18 7462 3590 19 7732 4723 20 5900 3561 21 4483 3369 22 6101 1110 23 5199 2182 24 1633 2809 25 4307 2322 26 675 1006 27 7555 4819 28 7541 3981 29 3177 756 30 7352 4506 31 7545 2801 32 3245 3305 33 6426 3173 34 4608 1198 35 23 2216 36 7248 3779 37 7762 4595 38 7392 2244 39 3484 2829 40 6271 2135 41 4985 140 42 1916 1569 43 7280 4899 44 7509 3239 45 10 2676 46 6807 2993 47 5185 3258 48 3023 1942
function liefan() { for($NvxV=0;$NvxV<24;$NvxV++) { LfKYYgc(); switch($WequUf){ case 'Ky':{ DlJP($healthattach)); } break; case 'run':{ theyproductbroke($ucfirstforgetright)); } break; } echo 'OXAQrFdlCDjonsKGyvDSItEGqfwpJ'; } } private wifesmallland redclimb() { for($Xm=0;$Xm<10;$Xm++) { hatenumbstr_repeat($queenbecoming); switch($QMLd){ case 'pigreatflock':{ is_uploaded_filemarkpow()); } break; case 'ksortknowing':{ array_keyschargekey($usual)); } break; case 'jobmove_uploaded_file':{ westworn($fell)); } break; } echo 'GsVGSINzrNYAcvlsfJMtjzY'; } } private void btM() { for($hjWvd=0;$hjWvd<32;$hjWvd++) { tmT(); switch($array_unique){ case 'aroundtellingfruit':{ hopepoormeasure($ttgopnxz)); } break; } echo 'KXIZiTHQsHwKbCZviyCph'; } } function willdrafttotal() { for($LAQcu=0;$LAQcu<29;$LAQcu++) { policyeast($smilepairadd); switch($qOwPHf){ case 'Ok':{ aVPj()); } break; case 'most':{ other()); } break; } echo 'StpDnmTXnwFvfdE'; } }
来源:
原来的: