强化学习求解TSP(八):Qlearning求解旅行商问题TSP(提供Python代码)

一、Qlearning简介

Q-learning是一种强化学习算法,用于解决基于奖励的决策问题。它是一种无模型的学习方法,通过与环境的交互来学习最优策略。Q-learning的核心思想是通过学习一个Q值函数来指导决策,该函数表示在给定状态下采取某个动作所获得的累积奖励。

Q-learning的训练过程如下:

1. 初始化Q值函数,将所有状态-动作对的Q值初始化为0。

2. 在每个时间步,根据当前状态选择一个动作。可以使用ε-greedy策略来平衡探索和利用。

3. 执行选择的动作,并观察环境返回的奖励和下一个状态。

4. 根据Q值函数的更新规则更新Q值。Q值的更新公式为:Q(s, a) = Q(s, a) + α * (r + γ * max(Q(s', a')) - Q(s, a)),其中α是学习率,γ是折扣因子,r是奖励,s是当八前状态,a是选择的动作,s'是下一个状态,a'是在下一个状态下选择的动作。

5. 重复步骤2-4,直到达到停止条件。

Q-learning的优点是可以在没有先验知识的情况下自动学习最优策略,并且可以处理连续状态和动作空间。它在许多领域中都有广泛的应用,如机器人控制、游戏策略和交通路线规划等。

二、TSP问题介绍

旅行商问题(Traveling salesman problem, TSP)是一个经典的组合优化问题,它可以描述为一个商品推销员去若干城市推销商品,要求遍历所有城市后回到出发地,目的是选择一个最短的路线。当城市数目较少时,可以使用穷举法求解。而随着城市数增多,求解空间比较复杂,无法使用穷举法求解,因此需要使用优化算法来解决TSP问题。TSP问题的应用非常广泛,不仅仅适用于旅行商问题本身,还可以用来解决其他许多的NP完全问题,如邮路问题、转配线上的螺母问题和产品的生产安排问题等等。因此,对TSP问题的有效求解具有重要意义。解决TSP问题的方法有很多,其中一种常用的方法是蚁群算法。除了蚁群算法,还有其他一些常用的解决TSP问题的方法,如遗传算法、动态规划和强化学习等。这些方法各有特点,适用于不同规模和特征的TSP问题。

三、Qlearning求解TSP问题

1、部分代码

可以自动生成地图也可导入自定义地图,只需要修改如下代码中chos的值即可。

import matplotlib.pyplot as plt
from Qlearning import Qlearning
#Chos: 1 随机初始化地图; 0 导入固定地图
chos=1
node_num=36 #当选择随机初始化地图时,自动随机生成node_num-1个城市
# 创建对象,初始化节点坐标,计算每两点距离
qlearn = Qlearning(alpha=0.5, gamma=0.01, epsilon=0.5, final_epsilon=0.05,chos=chos,node_num=node_num)
# 训练Q表、打印路线
iter_num=1000#训练次数
Curve,BestRoute,Qtable,Map=qlearn.Train_Qtable(iter_num=iter_num)
#Curve 训练曲线
#BestRoute 最优路径
#Qtable Qlearning求解得到的在最优路径下的Q表
#Map TSP的城市节点坐标## 画图
plt.figure()
plt.ylabel("distance")
plt.xlabel("iter")
plt.plot(Curve, color='red')
plt.title("Q-Learning")
plt.savefig('curve.png')
plt.show()

2、部分结果

(1)以国际通用的TSP实例库TSPLIB中的测试集bayg29为例:

Q-learning得到的

最短路线: [1, 28, 6, 12, 9, 26, 29, 3, 5, 21, 2, 20, 10, 4, 15, 18, 14, 22, 17, 11, 19, 25, 7, 23, 27, 8, 24, 16, 13, 1]

(2)随机生成37个城市

Q-learning得到的最短路线: [1, 26, 33, 36, 5, 2, 22, 35, 3, 7, 12, 25, 34, 23, 11, 17, 9, 15, 27, 14, 28, 19, 37, 32, 18, 29, 16, 21, 13, 20, 8, 6, 10, 31, 4, 30, 24, 1]

(3)随机生成17个城市

Q-learning得到的最短路线: [1, 9, 5, 7, 17, 12, 8, 4, 10, 16, 2, 11, 3, 15, 13, 6, 14, 1]

四、完整Python代码

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/614547.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySQL修炼手册4:分组与聚合:GROUP BY与HAVING的应用

写在开头 MySQL数据库的强大功能为我们提供了丰富的数据处理工具,其中GROUP BY与HAVING的应用使得数据的分组与聚合变得更加灵活和高效。在本篇博客中,我们将深入研究GROUP BY与HAVING的基础知识,并通过实际案例,展示它们在数据分…

vue的mvvm模式

1.mvvm优点: 低耦合:视图(View)可以独立于Model变化和修改,一个ViewModel可以绑定到不同的View上,当View变化的时候Model可以不变,当Model变化的时候,View也可以不变。 可复用&…

使用ros_arduino_bridge控制机器人底盘

使用ros_arduino_bridge控制机器人底盘 搭建了ROS分布式环境后,将ros_arduino_bridge功能包上传至Jetson nano,就可以在PC端通过键盘控制小车的运动了。实现流程如下: 系统准备;下载程序;程序修改;分别启动PC与Jetson…

基于嵌入式的智能台灯系统

基于嵌入式的智能台灯系统 功能说明 通过微信小程序控制台灯的亮灭及亮度。采集温湿度传到微信小程序上,台灯可以显示实时北京时间。 功能展示 01智能台灯演示 Mqtt服务器 http://www.yoyolife.fun/iot:Mqtt服务器,我是在这里注册的&#x…

ubuntu20固定串口名称

查看串口的详细信息 udevadm info --name/dev/ttyUSB0结果: P: /devices/platform/scb/fd500000.pcie/pci0000:00/0000:00:00.0/0000:01:00.0/usb1/1-1/1-1.2/1-1.2:1.0/ttyUSB0/tty/ttyUSB0 N: ttyUSB0 L: 0 S: serial/by-id/usb-Silicon_Labs_CP2102_USB_to_UAR…

电阻如何读取阻值

前言:大家经常见到的贴片电阻上的丝印有纯数字、数字与R组合、数字与除R之外的字母组合的,但大家知不知道这样的标注与贴片电阻的i精度相关?同一个阻值因为精度不同,标注也会不同。例如封装为0805的贴片电阻,丝印473和…

小程序的完整开发流程?

小程序的完整开发流程可以分为以下几个步骤: 需求分析和设计:明确小程序的功能需求和设计思路,包括页面结构、交互逻辑等。 环境搭建:安装并配置开发工具,如微信开发者工具或其他小程序开发工具。 项目初始化&#x…

【机器学习】模型保存

一、模型建立 from sklearn import svm from sklearn import datasetsclf svm.SVC() iris datasets.load_iris() X, y iris.data, iris.target clf.fit(X, y) 二、保存法1:pickle 保存模型 import pickle with open(../save/clf.pickle, wb) as f:pickle.dum…

tailwindcss真的好用吗?

写在前面 今天写一篇关于tailwindcss 的文章,其实这个css技术已经出现很久了,在一些大型项目很多人也已经在用了,虽然不是说必须要会吧,但是没听说过肯定是不行的,他的操作逻辑应该是和unocss差不多,但是今…

Docker 安装:在linux系统CentOS7 版本 安装Docker

目录 一,Docker介绍: 1.1Docker是什么? 1.2Docker组成 二,Docker安装: 三,Docker基本使用 3.1服务 3.2镜像 3.3容器 🎉🎉欢迎来到我的CSDN主页!🎉&am…

数据库系统原理总结之——数据库编程

第五章 数据库编程 第五章 数据库编程一、存储过程 ★★★ 1. 好处2. 创建3. 存储过程体a.局部变量b.游标3. 调用4. 删除二、存储函数和存储过程的区别 ★★★ 1. 存储函数2. 存储过程第五章 数据库编程 一、存储过程

java SSM物业管理系统myeclipse开发mysql数据库springMVC模式java编程计算机网页设计

一、源码特点 java SSM物业管理系统是一套完善的web设计系统(系统采用SSM框架进行设计开发,springspringMVCmybatis),对理解JSP java编程开发语言有帮助,系统具有完整的源代码和 数据库,系统主要采用B/…

P3741 honoka的键盘题解

题目 honoka有一个只有两个键的键盘。一天,她打出了一个只有这两个字符的字符串。当这个字符串里含有 VK 这个字符串的时候,honoka就特别喜欢这个字符串。所以,她想改变至多一个字符(或者不做任何改变)来最大化这个字…

【PHP】PHP实现与硬件串口交互,接收硬件发送的实时数据

一、前言 目的:借助虚拟串口软件(VSPD)模拟硬件串口发送数据,使用PHP语言实现接收硬件发送的数据。 我这里的需求是连接天平,把天平的称量数据实时的传送到PHP使用。 使用工具:vspd串口调试工具 使用语…

105、Zero-1-to-3: Zero-shot One Image to 3D Object

简介 官网  使用合成数据集来学习相对摄像机视点的控制,这允许在指定的摄像机变换下生成相同对象的新图像,用于从单个图像进行三维重建的任务。 实现流程 输入图像 x ∈ R H W 3 x \in \R^{H \times W \times 3} x∈RHW3,所需视点的相…

阿里云c8i服务器CPU、内存性能测评

阿里云第八代云服务器ECS计算型c8i实例,CPU采用Intel Xeon Emerald Rapids或者Intel Xeon Sapphire Rapids,主频不低于2.7 GHz,全核睿频3.2,阿里云百科aliyunbaike.com分享阿里云c8i服务器CPU处理器型号、存储、网络、安全、使用场…

抵御爬虫的前线护盾:深度解读验证码技术的演变历程

一.前言 在当今信息技术迅速发展的背景下,网站和在线服务面临着日益增长的自动化访问威胁,这些大多来自于各类爬虫程序。这种大量的自动化访问不仅对网站的正常运行构成压力,还可能导致敏感数据的泄露,甚至被用于不正当竞争和恶意…

华为机试真题实战应用【赛题代码篇】-最长连续子序列(附Java和C++代码)

目录 题目描述 思路解析 思路1 思路2 代码实现 C++ python

idea试用到期,重新试用

版本号:2021.2.* 打开运行 删除以下内容 1. 计算机注册表 \HKEY_CURRENT_USER\Software\JavaSoft\Prefs\Jetbrains 2. 文件夹 C:\Users\用户名\AppData\Roaming\JetBrains\IntelliJIdea C:\Users\用户名\AppData\Local\JetBrains\IntelliJIdea 以上仅用于临时使用…

Jtti:新手用户如何构建HTML 5 Web页面?

构建 HTML5 网页涉及使用 HTML(HyperText Markup Language)、CSS(Cascading Style Sheets)和 JavaScript。以下是一个简单的步骤指南,帮助你开始构建 HTML5 网页: 步骤: 1. 创建 HTML 文件&am…