目录

1.思路解读

2.代码解读

3.PPT和代码文件


1.思路解读


2.代码解读

//immune-TSP.py# -*- coding: utf-8 -*-
"""
Created on Sun Feb  2 16:30:16 2020@author: cgz
"""import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus'] = False
#显示画图中文标题NP = 100 #免疫个体数目
G = 500; #最大免疫代数
Pc = 0.1  #交叉率
N = 30 #城市数目
Ncl = 10 #克隆数目#初始抗体群
def ord(N,NP):b = np.zeros((N,NP)) #b就是30行100列的用0填充的数组for i in range(NP):b[:,i] = np.random.permutation(range(0,N))#冒号表示所有行,第i列;表示对0-30的序列进行随机排序return b.astype(int)#定义城市之间的距离
def distance(city_size,loca):dismat = np.zeros((city_size,city_size))for i in range(city_size):for j in range(i,city_size):dismat[i][j] = dismat[j][i] = np.linalg.norm(loca[i] - loca[j])return dismat#代表这条路径的总长度
def fun3(D,f,N):len = D[f[N - 1], f[0]]for i in range(N - 1):len = len + D[f[i]][f[i + 1]]return lenloca=np.random.uniform(0,1000,(N,2))#这个表示范围在0-1000之间,30*2格式 表示每一个城市的地点,可以看做是x,y坐标f = np.zeros((N,NP)) #中间变量
D = distance(N,loca) #D为30个城市的距离矩阵
len = np.zeros((NP,1)) # len 100*1  100行1列的
f = ord(N,NP)   #f为30*100
for i in range(NP):len[i] = fun3(D,f[:,i],N)Index = np.argsort(len,axis=0)#对len按照行进行索引排序
Sortlen = np.zeros((NP,1))#100行1列的
Sortf = np.zeros((N,NP))#30行100列
for i in range(NP):Sortf[:,i] = f[:,Index[i][0]]Sortlen[i,0] = len[Index[i][0],0]   #从小到大#循环
Trace = np.zeros((G,1))
for gen in range(G):af = np.zeros((30,50),dtype=int)alen = np.zeros((50,1))for i in range(50):a = Sortf[:,i]#对前50列依次选取b = np.tile(a,(Ncl,1))#对选取的某一列进行克隆Ca = np.transpose(b)#对b进行转置for j in range(Ncl):p1 = np.random.randint(0,30)p2 = np.random.randint(0,30)while p1 == p2:p1 = np.random.randint(0,30)p2 = np.random.randint(0,30)tmp = Ca[p1,j]Ca[p1,j] = Ca[p2,j]Ca[p2,j] = tmpCa[:,0] = Sortf[:,i]#把克隆的已经变异的第一个赋成原值#克隆抑制Ca = Ca.astype(int) #Ca 30*10Calen = np.zeros((Ncl,1))   #Calen 10*1for j in range(Ncl):Calen[j,0] = fun3(D,Ca[:,j],N)#得出克隆的这10个里面的总长度Index = np.argsort(Calen,axis=0)#对克隆的10个距离数从小到大的排序,值为索引值#这一部分是根据索引值,将路径也按照距离从小到大的进行排序,得到路径从小到大排序,距离从小到大排序SortCalen = np.zeros((Ncl,1))SortCa = np.zeros((N,Ncl))for k in range(Ncl):SortCa[:,k] = Ca[:,Index[k][0]] #SortCa 30*10SortCalen[k,0] = Calen[Index[k][0],0]  #SortCalen 10*1af[:,i] = SortCa[:,0] #af 30*50 对于前50列,依次替换成已经克隆过的每一列的最小值alen[i,0] = SortCalen[0,0]#alen 50*1 距离也做相应的替换#种群刷新bf = np.zeros((N,50),dtype=int) #bf 30*50   对于后50列,重新随机生成抗体,进行排序blen = np.zeros((50,1)) #blen 50*1for i in range(50):a = ord(30,1)a.shape = 30         #将a由二维变成一维bf[:,i] = ablen[i,0] = fun3(D,bf[:,i],N) #依次得到最新生成的50列的距离#免疫种群和新种群合并f = np.append(af,bf,axis = 1)       #30*100len = np.append(alen,blen,axis = 0) #100*1Index = np.argsort(len,axis=0)Sortlen = np.zeros((NP,1)) #Sortlen 100*1Sortf = np.zeros((N,NP))   #Sortf   30*100for i in range(NP):Sortf[:,i] = f[:,Index[i][0]]Sortlen[i,0] = len[Index[i][0],0]   #从小到大Trace[gen,0] = Sortlen[0,0]x=range(500)
Trace.shape=500
plt.figure(figsize=(20,8),dpi=80)
plt.plot(x,Trace)
plt.show()fBest = np.zeros((30,1),dtype=int)
fBest = Sortf[:,0].astype(int)
Bestlen = Trace[-1,0]print(fBest)
print(Bestlen)
plt.figure()for i in range(N-1):plt.plot(loca[fBest,0],loca[fBest,1])
plt.title("最优路径")
plt.show()

3.PPT和代码文件

链接: https://pan.baidu.com/s/1BdEHCppo3YlVW18-rCJL3g 提取码: m4vp

用免疫算法解决TSP问题相关推荐

  1. 【算法】模拟退火算法解决TSP问题的matlab实现

    [算法]模拟退火算法解决TSP问题的matlab实现 参考文章: (1)[算法]模拟退火算法解决TSP问题的matlab实现 (2)https://www.cnblogs.com/wenyehoush ...

  2. MAT之SA:利用SA算法解决TSP(数据是14个虚拟城市的横纵坐标)问题

    MAT之SA:利用SA算法解决TSP(数据是14个虚拟城市的横纵坐标)问题 目录 输出结果 实现代码 输出结果 实现代码 %SA:利用SA算法解决TSP(数据是14个虚拟城市的横纵坐标)问题--Jas ...

  3. 粒子群算法tsp java_粒子群算法解决TSP问题汇总.doc

    PAGE \* MERGEFORMAT 14 河南理工大学计算机科学与技术学院课程设计报告 2014- 2015学年第一学期 课程名称 Java语言程序设计 设计题目 利用粒子群算法解决TSP问题 姓 ...

  4. 粒子群算法tsp java_粒子群算法解决TSP问题

    1. 粒子群算法简介 粒子群算法(particle swarm optimization,PSO)由Kennedy和Eberhart在1995年提出,属于进化算法的一种,是通过对模拟鸟群扑食行为设计的 ...

  5. 蚁群算法解决tsp问题c语言,蚁群算法解决TSP问题程序.doc

    蚁群算法解决TSP问题程序 蚁群算法用于求解TSP问题,经过仿真测试,发现此程序的优化效率和鲁棒性都非常好. 这与在无线多媒体传感器网络路由算法应用到的寻找最佳路径的蚁群算法非常相似. functio ...

  6. 模拟退火算法解决TSP问题

    模拟退火算法解决TSP问题 参考文章: (1)模拟退火算法解决TSP问题 (2)https://www.cnblogs.com/yangmingustb/p/8641124.html (3)https ...

  7. 蚁群算法解决tsp问题python_蚁群算法在解决TSP问题中的应用

    陈灵佳 文章首先对蚁群算法与TSP问题进行简要介绍,在此基础上对蚁群算法在解决TSP问题中的应用进行论述.期望通过本文的研究能够对TSP问题的解决有所帮助. [关键词]蚁群算法 TSP问题 最优解 1 ...

  8. 蚁群算法解决 TSP 问题

    蚁群算法解决 TSP 问题 数据集 Tools.py Ant.py ACO_G.py 运行效果 数据集 json 形式(c.json)的中国各省市经纬度数据集,一共 2241 个市的数据,为后来的 T ...

  9. MATLAB蚁群算法、遗传算法、粒子群算法解决TSP问题(可以直接运行)

    MATLAB蚁群算法.遗传算法.粒子群算法解决TSP问题(可以直接运行) 1. 生成数据文件citys_data.mat 2. 蚁群算法 流程图 代码 结果展示 3.遗传算法 流程图 代码 结果展示 ...

最新文章

  1. 使用ModelForm上传图片
  2. leetcode816. 模糊坐标
  3. python异常处理_Python入门 断言与异常处理
  4. MVC与WebForm最大的区别
  5. 【报告分享】2022十大科技趋势-达摩院.pdf(附下载链接)
  6. 世界杯来了!小程序赛事操作来一波~
  7. Ubuntu 12.10安装配置JDK7环境
  8. 转 web 开发字体
  9. 概率计算机在线,在线抽奖大转盘和概率计算
  10. java8中, 格林威治时间、世界时、祖鲁时间、GMT、UTC、跨时区、夏令时需要用什么类表示呢
  11. Scratch软件编程等级考试二级——201909
  12. Don't let me think 笔记
  13. mysql 查询周一至周五
  14. 关于服务器租用的利弊
  15. Flutter第三方库
  16. ac100 linux,英特尔PROSet/无线驱动程序20.100.0 发布
  17. 北上深杭互联网薪资岗位统计
  18. 无法添加内核模式驱动的打印机
  19. Android终端启用adb功能
  20. week06手写笔记

热门文章

  1. Sentinel-2(哨兵-2)L1C数据辐亮度(辐射定标)和TOA反射率的获取说明
  2. DDD - 概述 - (一)
  3. IntelliJ IDEA 中设置左菜单字体, 编辑器字体和控制台的字体
  4. 在线直播系统源码,多图加载成动画的形式如何实现
  5. 2d激光重定位系列(一)AMCL:算法源码参数 相关资源整合
  6. 三维重建 阈值分割 3D可视化 医学图像分割 CT图像分割及重建系统 可视化编程技术及应用
  7. 数据模型(LP32 ILP32 LP64 LLP64 ILP64 )
  8. 收藏,核心期刊的投稿、审稿、出刊流程详解
  9. Ubuntu设置中没有网络标识(设置中缺少网络设置(Wired))
  10. 什么是NP问题,什么是NP hard问题,什么是NP完全问题。