ps:介于本咸鱼最近才有想翻身的念头,原理什么的就不写了,网上一搜一大堆。对了,本咸鱼因为忘了c的大部分内容,加上刚学python,所以代码看起来很不简练。希望各位大佬不吝赐教。这些代码也是参考其他博客写的。

# GA.py
import numpy as np
import matplotlib.pyplot as plt
import math
import random# 交叉概率
pc = 0.8
# 变异概率
pm = 0.15
# 进化数
evolution = 500
# 城市数
city_num = 40
# 城市坐标范围
x_port = 1000
y_port = 1000
# 种群数
size = 500# 随机生成城市坐标
city_x, city_y = np.random.randint(0, x_port, city_num), np.random.randint(0, y_port, city_num)
# 生成距离矩阵
Distance = np.zeros([city_num, city_num])
for i in range(city_num):for j in range(city_num):Distance[i][j] = math.sqrt((city_x[i] - city_x[j]) ** 2 + (city_y[i] - city_y[j]) ** 2)# 适应度函数
def get_distance(path):distance = 0for i in range(len(path)-1):distance += Distance[path[i], path[i+1]]distance = distance + Distance[path[len(path)-1], 0]return distance# 初始化种群
def get_races(size):races = []for i in range(size):races.append(np.random.permutation(city_num))return races# 选择
def tournament(old_races, size):pool = []for _ in range(size):i, j = np.random.randint(0, size, 2)if get_distance(old_races[i]) < get_distance(old_races[j]):pool.append(old_races[i])else:pool.append(old_races[j])return pool# 交配
def crossover(pool, city_num):new_races = []while len(new_races) < len(pool):i1, i2 = np.random.randint(0, len(pool), 2)p1 = pool[i1].copy()p2 = pool[i2].copy()# 概率大于pc就直接加入新种群,小于就进行交叉if np.random.random() > pc:new_races.extend([p1, p2])else:# 交叉p1, p2 = cross(p1, p2, city_num)# 概率小于pm就进行变异if np.random.random() < pm:# 变异p1 = variation(p1, city_num)p2 = variation(p2, city_num)new_races.extend([p1, p2])return new_races# 变异
def variation(path, city_num):i1, i2 = random.sample(range(0, city_num - 1), 2)path[i1], path[i2] = path[i2], path[i1]return path# 交叉
#交叉这部分代码高度重复,可惜本咸鱼能力有限,没想到怎么解决,希望各位大佬在评论区给出解决方案
def cross(p1, p2, city_num):i1 = random.randint(0, city_num - 2)i2 = random.randint(i1 + 1, city_num - 1)temp1 = p2[i1:i2]temp2 = p1[i1:i2]p1len = 0p2len = 0newp1 = []newp2 = []for i in p1:if p1len == i1:newp1.extend(temp1)p1len += 1if i not in temp1:newp1.append(i)p1len += 1for j in p2:if p2len == i1:newp2.extend(temp2)p2len += 1if j not in temp2:newp2.append(j)p2len += 1return newp1, newp2
# main.py
from GA import *def main():races = get_races(size)len = []for i in range(evolution):pool = tournament(races, size)races = crossover(pool, city_num)result = min([get_distance(j) for j in races])len.append(result)print('最终路线为:{}'.format(races[-1]))print('最终距离为:{:.2f}'.format(len[-1]))# 最终路线的城市坐标final_path = races[-1]final_path_x = []final_path_y = []for i in range(city_num):final_path_x.append(city_x[final_path[i]]), final_path_y.append(city_y[final_path[i]])final_path_x.append(city_x[final_path[0]])final_path_y.append(city_y[final_path[0]])# 绘制城市路线图plt.figure(1)plt.plot(final_path_x, final_path_y, 'o')plt.plot(final_path_x, final_path_y)plt.title('City')plt.xlabel('City_x')plt.ylabel('City_y')# 绘制进化次数-距离图plt.figure(2)plt.plot(len)plt.title('Total Distance')plt.xlabel('evolution')plt.ylabel('distance')plt.show()if __name__ == '__main__':main()

遗传算法求解TSP问题(Python)相关推荐

  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. 如何在提交前撤消#39;git add#39;?
  2. 【Python学习系列二十一】pandas库基本操作
  3. LINUX内核分析第四周——扒开系统调用的三层皮
  4. 强化学习(三)---马尔科夫决策过程
  5. 锁屏壁纸开发 Android,Android开发自己的锁屏壁纸
  6. python 之遍历目录树(可匹配输出特定后缀的文件)
  7. 从 Eclipse 到 IDEA,就像从金字塔到太空堡垒!
  8. c#中高效的excel导入oracle的方法
  9. Android应用开发
  10. 三级计算机信息安全基础知识
  11. 索尼MUC-M2BT1换电池+爆改
  12. R plot图片背景设置为透明_万能转换:R图转成Word、PPT、Excel、HTML、Latex、矢量图等...
  13. python 用泽勒算法计算该天是星期几
  14. 软银没有中国,孙正义失去一切
  15. es nested字段的空值查询问题
  16. 用openAI写个js的排序算法(快速排序算法)
  17. 我的世界1.12.2java下载_我的世界java版整合包
  18. 2021最新某团_token参数分析、可获取商家列表、商家详情数据
  19. ros wiki learning
  20. 重庆市永川区信息化建设管理办公室协同办公容灾备份项目

热门文章

  1. 七月算法机器学习 7 工作流程与模型调优
  2. 20200113每日一句
  3. 190629每日一句
  4. 190425每日一句
  5. Python 和 C++实现 九九乘法表
  6. Atitit 数据库核心技术index索引技术 btree hash lsm fulltxt目录1.1. HASH
  7. Atitit 数据挖掘技术体系 目录 1. 统计分析(分组聚合等 1 2. Tag标注 结构化 1 2.1. · 复杂数据类型挖掘(Text, Web 2 2.2. ,图形图像,视频,音频等) 2
  8. atitit 知识压缩的总结 学习方法总结v2 t55.docx 目录 1.1. 压缩目的 1 1.2. 压缩分类 无损压缩 有损压缩 1 2. 功能指标 2 2.1. 压缩比:有损压缩一般1
  9. Atitit 异常的实现原理 与用户业务异常
  10. Atitti.数字证书体系cer pfx attilax总结