Geatpy简介

Geatpy是一个高性能实用型进化算法工具箱,提供许多已实现的进化算法中各项重要操作的库函数,并提供一个高度模块化、耦合度低的面向对象的进化算法框架,利用“定义问题类 + 调用算法模板”的模式来进行进化优化,可用于求解单目标优化、多目标优化、复杂约束优化、组合优化、混合编码进化优化等,并且能和SCOOP等框架紧密配合进行分布式计算。

TSP问题

某人从A点出发,要走遍每一个点,且每个点只去一次,最后要返回A点。起止点是明确的,我们只需要考虑中间点的到达顺序即可,因此决策变量维数为点的数量减1。起点A为0点,因此决策变量的下界为1,上界为决策变量维数。

代码实现

Geatpy有很多内置的进化算法模板,这里用到的是单目标增强精英保留的遗传算法模板。我们需要知道所有点的坐标,然后用Problem类对问题进行描述,最后设置模板参数,对问题进行求解。

import geatpy as ea
import numpy as np
import matplotlib.pyplot as plt# TSP坐标点
places=[[35.0, 35.0], [41.0, 49.0], [35.0, 17.0], [55.0, 45.0], [55.0, 20.0], [15.0, 30.0],[25.0, 30.0], [20.0, 50.0], [10.0, 43.0], [55.0, 60.0], [30.0, 60.0], [20.0, 65.0], [50.0, 35.0], [30.0, 25.0], [15.0, 10.0], [30.0, 5.0], [10.0, 20.0], [5.0, 30.0],[20.0, 40.0], [15.0, 60.0]]
#print(len(places))# 定义问题
class MyProblem(ea.Problem):  # 继承Problem父类def __init__(self):name = 'MyProblem'  # 初始化name(函数名称,可以随意设置)M = 1  # 初始化M(目标维数)maxormins = [1]  # 初始化maxormins(目标最小最大化标记列表,1:最小化该目标;-1:最大化该目标)Dim = len(places) - 1 # 初始化Dim(决策变量维数)varTypes = [1] * Dim  # 初始化varTypes(决策变量的类型,元素为0表示对应的变量是连续的;1表示是离散的)lb = [1] * Dim  # 决策变量下界ub = [Dim] * Dim  # 决策变量上界lbin = [1] * Dim  # 决策变量下边界(0表示不包含该变量的下边界,1表示包含)ubin = [1] * Dim  # 决策变量上边界(0表示不包含该变量的上边界,1表示包含)# 调用父类构造方法完成实例化ea.Problem.__init__(self, name, M, maxormins, Dim, varTypes, lb, ub, lbin, ubin)# 新增一个属性存储旅行地坐标self.places = np.array(places)def aimFunc(self, pop):  # 目标函数x = pop.Phen.copy()  # 得到决策变量矩阵# 添加最后回到出发地X = np.hstack([x, x[:, [0]]]).astype(int)ObjV = []  # 存储所有种群个体对应的总路程for i in range(pop.sizes):journey = self.places[X[i], :]  # 按既定顺序到达的地点坐标distance = np.sum(np.sqrt(np.sum(np.diff(journey.T) ** 2, 0)))  # 计算总路程ObjV.append(distance)pop.ObjV = np.array([ObjV]).T"""调用模板求解"""
if __name__ == '__main__':"""================================实例化问题对象============================"""problem = MyProblem()  # 生成问题对象"""==================================种群设置=============================="""Encoding = 'P'  # 编码方式,采用排列编码NIND = 50  # 种群规模Field = ea.crtfld(Encoding, problem.varTypes, problem.ranges, problem.borders)  # 创建区域描述器population = ea.Population(Encoding, Field, NIND)  # 实例化种群对象(此时种群还没被初始化,仅仅是完成种群对象的实例化)"""================================算法参数设置============================="""myAlgorithm = ea.soea_SEGA_templet(problem, population)  # 实例化一个算法模板对象myAlgorithm.MAXGEN = 500 # 最大进化代数myAlgorithm.mutOper.Pm = 0.5  # 变异概率myAlgorithm.logTras = 0  # 设置每隔多少代记录日志,若设置成0则表示不记录日志myAlgorithm.verbose = True  # 设置是否打印输出日志信息myAlgorithm.drawing = 1  # 设置绘图方式(0:不绘图;1:绘制结果图;2:绘制目标空间过程动画;3:绘制决策空间过程动画)"""===========================调用算法模板进行种群进化========================"""[BestIndi, population] = myAlgorithm.run()  # 执行算法模板,得到最优个体以及最后一代种群BestIndi.save()  # 把最优个体的信息保存到文件中"""==================================输出结果=============================="""print('评价次数:%s' % myAlgorithm.evalsNum)print('时间已过 %s 秒' % myAlgorithm.passTime)if BestIndi.sizes != 0:print('最短路程为:%s' % BestIndi.ObjV[0][0])print('最佳路线为:')best_journey = np.hstack([0, BestIndi.Phen[0, :], 0])for i in range(len(best_journey)):print(int(best_journey[i]), end=' ')print()# 绘图plt.figure()plt.plot(problem.places[best_journey.astype(int), 0], problem.places[best_journey.astype(int), 1], c='black')plt.plot(problem.places[best_journey.astype(int), 0], problem.places[best_journey.astype(int), 1], 'o',c='black')for i in range(len(best_journey)):plt.text(problem.places[int(best_journey[i]), 0], problem.places[int(best_journey[i]), 1],chr(int(best_journey[i]) + 65), fontsize=20)plt.grid(True)plt.xlabel('x坐标')plt.ylabel('y坐标')plt.savefig('roadmap.svg', dpi=600, bbox_inches='tight')else:print('没找到可行解。')

运算结果


种群信息导出完毕。
评价次数:25000
时间已过 0.5235998630523682 秒
最短路程为:244.7126675640766
最佳路线为:
0 4 13 2 15 14 16 17 5 6 18 8 7 19 11 10 1 9 3 12 0

参考资料

1.Geatpy官网 http://geatpy.com/index.php/quickstart/

2.Geatpy的GitHub链接 https://github.com/geatpy-dev/geatpy

遗传算法工具箱Geatpy求解TSP相关推荐

  1. Python遗传算法工具箱的使用(一)求解带约束的单目标优化

    加了个小目录~方便定位查看~ 前言 正文 一. 基础术语: 二. 遗传算法基本算子: 三.完整实现遗传算法: 四.后记: 前言 网上有很多博客讲解遗传算法,但是大都只是"点到即止" ...

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  9. MATLAB遗传算法GA求解TSP旅行商问题,可选PMX交叉、OX交叉及其它多种交叉方式,在算法中引入2-opt变异算子

    MATLAB遗传算法GA求解TSP旅行商问题,可选PMX交叉.OX交叉及其它多种交叉方式,在算法中引入2-opt变异算子.进化逆转算子提高算法局部搜索能力,利用国际通用的TSPLIB数据集中的eil5 ...

最新文章

  1. 聚焦OA品牌:OA产品影响力是选型关键
  2. POJ 3111 K Best (最大化平均值,贪心 二分)难度⭐⭐⭐
  3. BeX5报表开发中Excel格式修改的一个小问题
  4. Java排序算法之——希尔排序
  5. python 判断是否有余数_判断多个坐标是否在同一条直线上|Python练习系列[13]
  6. Spring Tool Suite 4安装Lombok
  7. vb 软件时间限制_带时间限制的软件加密锁
  8. 口腔行业的隐形冠军,现代牙科集团掘金步入新阶段
  9. qcom usb驱动下载_艾肯Mobile Q驱动下载
  10. Pollard-rho的质因数分解
  11. 12/14 计算器雏形
  12. That's why you go away
  13. [转]词根词缀记单词3-主讲victor老师
  14. 古风系统仙侠文推荐_言情古风仙侠小说推荐——查看: 言情小说排行榜(1)
  15. Java Thread 和 Park
  16. nmcli命令及team链路聚合
  17. 第十届(2022年)全国大学生机械创新设计大赛参赛须知
  18. 量化交易 米筐 单因子回测框架(因子方向性确定)
  19. 20200401-移相全桥文献
  20. 7-15 说反话-加强版 (20 分)#

热门文章

  1. 汇道科技:PHP编程语言可以应用在哪些方面?
  2. uniapp禁止页面上下滚动
  3. 光通信器件与系统(西交大朱京平笔记) -5-5 EDFA的结构
  4. 计算机专业开题报告论证记录如何写,浙江大学软件学院研究生开题报告论证流程说明...
  5. 浪潮nf5280m5安装linux网卡,浪潮英信服务器NF5280M5
  6. 【Scratch案例实操】Scratch小鸡吃虫 scratch编程案例教学 scratch创意编程 少儿编程教案
  7. 解决:element切换tab时table的抖动问题
  8. Vim中代码格式化实现
  9. 实现web前端上传excel文件到flask服务器
  10. java如何加密_Java如何实现密码加密