遗传算法中包含了如下5个基本要素:
(1)对参数进行编码;
(2)设定初始种群大小;
(3)适应度函数的设计;
(4)遗传操作设计;
(5)控制参数设定(包括种群大小、最大进化代数、交叉率、变异率等)。
下面使用python编程对中国28个省会城市的TSP问题进行了求解,python的版本是2.7.14。百度地图提供了JavaScript API,能够很方便地获取各城市之间的路径距离。这里有一段获取28个城市之间距离的JS代码,将其复制到百度地图JavaScript API的一些示例网页上,然后点击运行,再点击右侧相应的按钮即可获取各城市之间的距离。
1 <html> 2 <head> 3 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 4 <meta name="viewport" content="initial-scale=1.0, user-scalable=no" /> 5 <style type="text/css"> 6 body, html{width: 100%;height: 100%;overflow: hidden;margin:0;font-family:"微软雅黑";} 7 #l-map{height:100px;width:100%;} 8 #r-result{width:100%; font-size:1px;line-height:12px;} 9 </style> 10 <script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=您的密钥"></script> 11 <title>计算驾车时间与距离</title> 12 </head> 13 <body> 14 <div ></div> 15 <div > 16 <input type="button" value = "计算各省会城市间距离矩阵" onclick = "getCityDistance()" /> 17 <div ></div> 18 </div> 19 </body> 20 </html> 21 <script type="text/javascript"> 22 // 百度地图API功能 23 var map = new BMap.Map("l-map"); 24 map.centerAndZoom(new BMap.Point(116.404, 39.915), 5); 25 var city = [ 26 "北京", "长春", "沈阳", "哈尔滨", "石家庄", "济南", 27 "呼和浩特", "太原", "郑州", "南京", "上海", "杭州", 28 "福州", "南昌", "武汉", "合肥", "长沙", "广州", 29 "重庆", "西安", "海口", "贵阳", "昆明", "成都", 30 "兰州", "西宁", "拉萨", "乌鲁木齐" 31 ]; 32 33 var i = 0, j = 1; 34 35 function getCityDistance() 36 { 37 setInterval(getCityDistance1, 6000); 38 } 39 40 function getCityDistance1() 41 { 42 if(i >= city.length - 1) 43 { 44 return; 45 } 46 var output = ""; 47 city1 = city[i]; 48 city2 = city[j]; 49 var searchComplete = function (results) 50 { 51 if(transit.getStatus() != BMAP_STATUS_SUCCESS) 52 { 53 return ; 54 } 55 var plan = results.getPlan(0); 56 output += plan.getDistance(false) + ", "; //获取距离 57 document.getElementById("result").innerHTML += output; 58 } 59 var transit = new BMap.DrivingRoute( 60 map, 61 {renderOptions: {map: map, autoViewport: false}, onSearchComplete: searchComplete, onPolylinesSet: function(){}} 62 ); 63 64 transit.search(city1, city2); 65 66 j++; 67 if(j >= city.length) 68 { 69 i++; 70 j = i + 1; 71 } 72 73 } 74 </script>