遗传算法求解TSP问题

问题还是模拟退火算法文章里面的问题

遗传算法求解的参数设定如下:种群大小 M=50;最大代数 G=10。交叉率Pc=1 ,交叉概率为1能保证种群的充分进化;变异率Pm=0.1 ,一般而言,变异发生的可能性较小

(1)编码策略

采用十进制编码,用随机序列w0,w1,w2…w101 作为染色体,其中0<wi<1 ( i=1,2,3,…),w0=0 ,w101=1 ;每一个随机序列都和种群中的一个个体相对应,例如,9个目标问题的一个染色体为
[0.23,0.82,0.45,0.74,0.87,0.11,0.56,0.69,0.78],
其中编码位置 i代表目标 ,位置 i的随机数表示目标 i在巡回中的顺序,将这些随机数按升序排列得到如下巡回
6-1-3-7-8-4-9-2-5

(2) 初始种群

(3)目标函数

目标函数为侦察所有目标的路径长度,适应度函数就取为目标函数
min f(pi0,pi1,…,pi101) =Σdpi(i)-pi(i+1)

(4) 交叉操作

例如

设交叉点为第四个基因处,则

交叉操作的方式有很多种选择,应该尽可能选取好的交叉方式,保证子代能继承父代的优良特性。

(5)变异操作

变异也是实现群体多样性的一种手段,同时也是全局寻优的保证。具体设计如下,按照给定的变异率,对选定变异的个体,随机地取三个整数,满足 1<u<v<w<100把u,v 之间(包括 u和 v)的基因段插到w 后面。

(6)选择

采用确定性的选择策略,也就是说在父代种群和子代种群中选择目标函数值最小的 个个体进化到下一代,这样可以保证父代的优良特性被保存下来。

python代码实现

#程序文件Pex17_2.py
import numpy as np
from numpy.random import randint, rand, shuffle
from matplotlib.pyplot import plot, show, rc
a=np.loadtxt("Pdata17_2.txt")
xy,d=a[:,:2],a[:,2:]; N=len(xy)
w=50; g=10  #w为种群的个数,g为进化的代数
J=[];
for i in np.arange(w):c=np.arange(1,N-1); shuffle(c)c1=np.r_[0,c,101]; flag=1while flag>0:flag=0for m in np.arange(1,N-3):for n in np.arange(m+1,N-2):if d[c1[m],c1[n]]+d[c1[m+1],c1[n+1]]<\d[c1[m],c1[m+1]]+d[c1[n],c1[n+1]]:c1[m+1:n+1]=c1[n:m:-1]; flag=1c1[c1]=np.arange(N)  #这一步是因为后面有个argsort:表示对数据进行从小到大进行排序,返回数据的索引值J.append(c1)
J=np.array(J)/(N-1)
for k in np.arange(g):A=J.copy()c1=np.arange(w); shuffle(c1) #交叉操作的染色体配对组c2=randint(2,100,w)  #交叉点的数据for i in np.arange(0,w,2):temp=A[c1[i],c2[i]:N-1]  #保存中间变量A[c1[i],c2[i]:N-1]=A[c1[i+1],c2[i]:N-1]A[c1[i+1],c2[i]:N-1]=tempB=A.copy()by=[]  #初始化变异染色体的序号while len(by)<1: by=np.where(rand(w)<0.1)by=by[0]; B=B[by,:]G=np.r_[J,A,B]ind=np.argsort(G,axis=1)  #把染色体翻译成0,1,…,101NN=G.shape[0]; L=np.zeros(NN)for j in np.arange(NN):for i in np.arange(101):L[j]=L[j]+d[ind[j,i],ind[j,i+1]]ind2=np.argsort(L)J=G[ind2,:]
path=ind[ind2[0],:]; zL=L[ind2[0]]
xx=xy[path,0]; yy=xy[path,1]; rc('font',size=16)
plot(xx,yy,'-*'); show()  #画巡航路径
print("所求的巡航路径长度为:",zL)


所求的巡航路径长度为: 41879.87855580798

python遗传算法求解TSP问题相关推荐

  1. 基于遗传算法求解TSP问题(旅游路径规划,Python实现,超详细,可视化,结果分析)

    ps:作者是很用心写的,如果觉得不错,请给作者一点鼓励噢!(点赞收藏评论噢) 基于遗传算法求解TSP问题 摘要 巡回旅行商问题(TSP)是组合优化中的经典问题.常见的TSP问题求解算法例如穷举法.贪心 ...

  2. 人工智能导论——遗传算法求解TSP问题实验

    一.实验目的: 熟悉和掌握遗传算法的原理.流程和编码策略,并利用遗传算法求解组合优化问题,理解求解TSP问题的流程并测试主要参数对结果的影响. 二.实验原理: 旅行商问题,即TSP问题(Traveli ...

  3. 局部搜索、模拟退火和遗传算法求解TSP问题

    模拟退火和遗传算法求解TSP问题 源代码传送门:GITHUB 数据传送门:TSPLIB 文章目录 模拟退火和遗传算法求解TSP问题 摘要 1 导言 1.1 问题重述 1.2 TSP问题选择 1.3 思 ...

  4. 【建模算法】基于遗传算法求解TSP问题(matlab求解)

    [建模算法]基于遗传算法求解TSP问题(matlab求解) TSP (traveling salesman problem,旅行商问题)是典型的NP完全问题,即其最坏情况下的时间复杂度随着问题规模的增 ...

  5. 【老生谈算法】matlab实现遗传算法求解TSP问题——TSP问题

    遗传算法求解TSP问题MATLAB实现 1.文档下载: 本算法已经整理成文档如下,有需要的朋友可以点击进行下载 序号 文档(点击下载) 本项目文档 [老生谈算法]遗传算法求解TSP问题MATLAB实现 ...

  6. 【运筹优化】GA遗传算法求解TSP问题(Java实现)

    文章目录 代码 Genome基因类 GeneticAlgorithm_TSP遗传算法类 运行结果 代码 Genome基因类 import lombok.Data; import lombok.NoAr ...

  7. 【Matlab】 遗传算法求解TSP问题

    [Matlab] 遗传算法求解TSP问题 文章目录 [Matlab] 遗传算法求解TSP问题 前言 一.问题描述 二.实验设计 1.问题案例 2.读入数据 3.适应度计算 4. 选择子代 5. 结果输 ...

  8. 基于遗传算法求解TSP问题(JAVA)

    一.TSP问题 TSP问题(Travelling Salesman Problem)即旅行商问题,又译为旅行推销员问题.货郎担问题,是数学领域中著名问题之一.假设有一个旅行商人要拜访n个城市,他必须选 ...

  9. 遗传算法求解TSP问题(python版)

    简介 改进和实现遗传算法,用以对旅行商问题(TSP问题)进行建模和近似求解,从而深入对启发式算法的理解. 算法流程 遗传算法解决TSP的流程是以下几部分:初始化种群.计算适应度函数.选择.交叉.变异然 ...

  10. 【人工智能导论】遗传算法求解TSP问题(含源码github)

    源程序:Github链接 Symmetric traveling salesman problem (TSP) Given a set of n nodes and distances for eac ...

最新文章

  1. 大三后端暑期实习面经总结——SSM微服务框架篇
  2. mysql repalication_MySQL主从复制的原理及配置方法(比较详细)
  3. 掌握ConstraintLayout(十)按比例设置视图大小
  4. Kettle日常使用汇总整理
  5. android app 集成 信鸽推送
  6. zip(), dict(), itertools.repeat(), list(迭代器)
  7. 在Linux上安装nginx时遇到的问题,真的好坑啊!!!!
  8. linux安装 icc编译器,安装 Intel Compiler (ifort icc icpc)
  9. 历时四年,给Google提交的Android Framework Bug终于被Fixed了
  10. JAVA入门级教学之(关于JVM的内存管理机制)
  11. .net core orm框架_轻量级高性能PHP框架ycroute
  12. 防火墙(ASA)高级配置之URL过滤、日志管理、透明模式
  13. baidumap vue 判断范围_vue中百度地图API的调用
  14. 华晨中华v3车质量怎么样_宝马发动机加持,销量仅个位数?这些车有点惨
  15. 民间股神:上海殷保华的股票操盘手奇人绝技
  16. 出身平凡的郭盛华,究竟是如何逆袭成为传奇人物的?
  17. 2017年江苏高考数学14题
  18. 论文阅读|Cascade R-CNN
  19. maximum.accumulate函数及ndarray和list比较
  20. 豆瓣民谣排行100爬取练习

热门文章

  1. 99行代码的《冰雪奇缘》,收下我的膝盖!
  2. 服务器换主板要重装系统吗,换主板需要重装系统吗【解决方案】
  3. 正确的java学习顺序--刚入门的同学可以看这里
  4. Java解析cron表达式
  5. Dynamips GNS3
  6. EXTJS4.0视频教程(网盘下载)
  7. Oracle 创建索引
  8. 如何安装SQL2005 EXPRESS版
  9. java实现扫雷小游戏【完整版】
  10. [小说连载]张小庆,在路上(2)- 兰博和威震天