python遗传算法求解TSP问题
遗传算法求解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问题相关推荐
- 基于遗传算法求解TSP问题(旅游路径规划,Python实现,超详细,可视化,结果分析)
ps:作者是很用心写的,如果觉得不错,请给作者一点鼓励噢!(点赞收藏评论噢) 基于遗传算法求解TSP问题 摘要 巡回旅行商问题(TSP)是组合优化中的经典问题.常见的TSP问题求解算法例如穷举法.贪心 ...
- 人工智能导论——遗传算法求解TSP问题实验
一.实验目的: 熟悉和掌握遗传算法的原理.流程和编码策略,并利用遗传算法求解组合优化问题,理解求解TSP问题的流程并测试主要参数对结果的影响. 二.实验原理: 旅行商问题,即TSP问题(Traveli ...
- 局部搜索、模拟退火和遗传算法求解TSP问题
模拟退火和遗传算法求解TSP问题 源代码传送门:GITHUB 数据传送门:TSPLIB 文章目录 模拟退火和遗传算法求解TSP问题 摘要 1 导言 1.1 问题重述 1.2 TSP问题选择 1.3 思 ...
- 【建模算法】基于遗传算法求解TSP问题(matlab求解)
[建模算法]基于遗传算法求解TSP问题(matlab求解) TSP (traveling salesman problem,旅行商问题)是典型的NP完全问题,即其最坏情况下的时间复杂度随着问题规模的增 ...
- 【老生谈算法】matlab实现遗传算法求解TSP问题——TSP问题
遗传算法求解TSP问题MATLAB实现 1.文档下载: 本算法已经整理成文档如下,有需要的朋友可以点击进行下载 序号 文档(点击下载) 本项目文档 [老生谈算法]遗传算法求解TSP问题MATLAB实现 ...
- 【运筹优化】GA遗传算法求解TSP问题(Java实现)
文章目录 代码 Genome基因类 GeneticAlgorithm_TSP遗传算法类 运行结果 代码 Genome基因类 import lombok.Data; import lombok.NoAr ...
- 【Matlab】 遗传算法求解TSP问题
[Matlab] 遗传算法求解TSP问题 文章目录 [Matlab] 遗传算法求解TSP问题 前言 一.问题描述 二.实验设计 1.问题案例 2.读入数据 3.适应度计算 4. 选择子代 5. 结果输 ...
- 基于遗传算法求解TSP问题(JAVA)
一.TSP问题 TSP问题(Travelling Salesman Problem)即旅行商问题,又译为旅行推销员问题.货郎担问题,是数学领域中著名问题之一.假设有一个旅行商人要拜访n个城市,他必须选 ...
- 遗传算法求解TSP问题(python版)
简介 改进和实现遗传算法,用以对旅行商问题(TSP问题)进行建模和近似求解,从而深入对启发式算法的理解. 算法流程 遗传算法解决TSP的流程是以下几部分:初始化种群.计算适应度函数.选择.交叉.变异然 ...
- 【人工智能导论】遗传算法求解TSP问题(含源码github)
源程序:Github链接 Symmetric traveling salesman problem (TSP) Given a set of n nodes and distances for eac ...
最新文章
- 大三后端暑期实习面经总结——SSM微服务框架篇
- mysql repalication_MySQL主从复制的原理及配置方法(比较详细)
- 掌握ConstraintLayout(十)按比例设置视图大小
- Kettle日常使用汇总整理
- android app 集成 信鸽推送
- zip(), dict(), itertools.repeat(), list(迭代器)
- 在Linux上安装nginx时遇到的问题,真的好坑啊!!!!
- linux安装 icc编译器,安装 Intel Compiler (ifort icc icpc)
- 历时四年,给Google提交的Android Framework Bug终于被Fixed了
- JAVA入门级教学之(关于JVM的内存管理机制)
- .net core orm框架_轻量级高性能PHP框架ycroute
- 防火墙(ASA)高级配置之URL过滤、日志管理、透明模式
- baidumap vue 判断范围_vue中百度地图API的调用
- 华晨中华v3车质量怎么样_宝马发动机加持,销量仅个位数?这些车有点惨
- 民间股神:上海殷保华的股票操盘手奇人绝技
- 出身平凡的郭盛华,究竟是如何逆袭成为传奇人物的?
- 2017年江苏高考数学14题
- 论文阅读|Cascade R-CNN
- maximum.accumulate函数及ndarray和list比较
- 豆瓣民谣排行100爬取练习