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

news2024/11/16 9:17:26

一、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)随机生成24个城市

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

(3)随机生成18个城市

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

四、完整Python代码

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

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

相关文章

Linux驱动学习—输入子系统

1、什么是输入子系统? 输入子系统是Linux专门做的一套框架来处理输入事件的,像鼠标,键盘,触摸屏这些都是输入设备,但是这邪恶输入设备的类型又都不是一样的,所以为了统一这些输入设备驱动标准应运而生的。…

使用FFmpeg+EasyDarwin搭建音视频推拉流测试环境

1. 前言 在上一篇文章《使用VS2017在win10 x64上编译调试FFmpeg(附源码和虚拟机下载)》中,我们讲解了如何搭建FFmpeg源码编译和调试环境。 调试FFmpeg,还需要搭建流媒体服务器。流媒体服务器的作用是通过网络对外提供音视频服务…

固乔快递查询助手:一键批量查询,省时省力

在快递行业飞速发展的今天,高效、准确地掌握快递信息对于电商卖家、物流公司管理者以及经常需要查询快递信息的消费者来说至关重要。固乔快递查询助手正是为此而生,它的批量查询功能为用户带来前所未有的便利和高效。 首先,如何下载固乔快递查…

Win10子系统Ubuntu实战(二)

在 Windows 10 中安装 Ubuntu 子系统(Windows Subsystem for Linux,简称 WSL)有几个主要的用途和好处:Linux 环境的支持、跨平台开发、命令行工具、测试和验证、教育用途。总体而言,WSL 提供了一种将 Windows 和 Linux…

统信UOS虚拟机安装VirtualBox扩展使用USB功能

为什么要安装VirtualBox扩展包? 安装 Oracle VM VirtualBox 扩展包的原因是,它提供了对 USB 2.0、USB 3.0、远程桌面协议 VRDP(VirtualBox Remote Desktop Protocol)等实用功能的支持,以增强 VirtualBox 的功能。这些…

一文读懂大型语言模型参数高效微调:Prefix Tuning与LLaMA-Adapter

芝士AI吃鱼 在快速发展的人工智能领域中,高效、有效地使用大型语言模型变得日益重要,参数高效微调是这一追求的前沿技术,它允许研究人员和实践者在最小化计算和资源占用的同时,重复使用预训练模型。这还使我们能够在更广泛的硬件范…

STK 特定问题建模(五)频谱分析(第一部分)

文章目录 简介一、GEO星地通信收发机设计1.1 GEO卫星仿真1.2 地面接收机仿真 二、LEO星座及天线设计 简介 本篇对卫星通信中的频谱利用率、潜在干扰对频谱的影响进行分析,以LEO卫星信号对GEO通信链路影响为例,分析星地链路频谱。 建模将从以下几个部分…

PandoraNext—一个让你呼吸顺畅的ChatGPT

博客地址 PandoraNext—一个让你呼吸顺畅的ChatGPT-雪饼 (xue6ing.cn)https://xue6ing.cn/archives/pandora--yi-ge-rang-ni-hu-xi-shun-chang-de-chatgpt 项目 项目地址 pandora-next/deploy 项目介绍 支持多种登录方式: 账号/密码 Access Token Session To…

基于YOLOv5+单目的物体距离和尺寸测量

目录 1,YOLOv5原理介绍 2,单目测尺寸以及距离原理 2.1单目测物体距离 2.2单目测物体尺寸 3,成果展示 3.3测距离 3.2测尺寸: 1,YOLOv5原理介绍 YOLOv5是目前应用广泛的目标检测算法之一,其主要结构分为两个部分&a…

地理科学数据库近千个网站合集(2024年最新版)

树谷online,还有更多的直接获取的数据 树谷资料库大全(2024年1月4日更新) 地理科学数据库网站导航收集近1000个相关网站,由刘洪老师(成都地质调查中心高级工程师)长期维护,定期更新&#xff0…

宏景eHR fileDownLoad SQL注入漏洞复现

0x01 产品简介 宏景eHR人力资源管理软件是一款人力资源管理与数字化应用相融合,满足动态化、协同化、流程化、战略化需求的软件。 0x02 漏洞概述 宏景eHR fileDownLoad 接口处存在SQL注入漏洞,未经过身份认证的远程攻击者可利用此漏洞执行任意SQL指令,从而窃取数据库敏感…

【Linux】通过两台linux主机配置ssh实现互相免密登陆

以下是通过两台Linux主机配置SSH实现互相免密登录的代码及操作流程: node1主机IP:192.168.48.129 server主机IP:192.168.48.130 1、在node1主机上生成密钥对: ssh-keygen -t rsa 2、将node1主机的公钥发送到server主机&#x…

Python 编写不同时间格式的函数

该代码是一个时间相关的功能模块,提供了一些获取当前时间的函数。 Report_time() 函数返回当前时间的格式化字符串,例如 "20240110114512"。Y_M_D_h_m_s_time() 函数返回当前时间的年、月、日、时、分、秒的元组格式。Y_M_D_h_m_s() 函数返回…

乐鑫ESP32与SD NAND的协同应用|MK-米客方德

SD NAND在乐鑫ESP32上的作用 SD NAND是贴片式TF卡,可以用于存储数据,比如视频图片或者代码 乐鑫ESP32一颗具有双核处理器的嵌入式系统芯片,有丰富的外设接口,包括Wi-Fi、蓝牙、UART、SPI、I2C等,使其适用于各种物联网…

Vulnhub靶机:Corrosion1

一、介绍 运行环境:Virtualbox 攻击机:kali(10.0.2.15) 靶机:corrosion:1(10.0.2.12) 目标:获取靶机root权限和flag 靶机下载地址:https://www.vulnhub.com/entry/c…

鸿蒙原生应用再添新丁!京东入局鸿蒙

鸿蒙原生应用再添新丁!京东入局鸿蒙 来自 HarmonyOS 微博1月10日消息,#京东启动鸿蒙原生应用开发#!优惠信息、派送进度都可以随时随地便捷查询。双方将携手为消费者带来全场景“多快好省”购物体验,更智能,更贴心&…

分享两个概念:非受检异常和受检异常

分享两个概念:非受检异常和受检异常 愿你的每一天都充满阳光和笑声,愿每一步都是轻松与愉快。在新的旅程中,愿你找到勇气攀登高峰,找到智慧化解困境。 愿你的心中充满温暖和善意,愿你的梦想如彩虹般美丽且真实。愿你发…

1.10 力扣回溯中等题

93. 复原 IP 地址 代码随想录 (programmercarl.com) 有效 IP 地址 正好由四个整数(每个整数位于 0 到 255 之间组成,且不能含有前导 0),整数之间用 . 分隔。 例如:"0.1.2.201" 和 "192.168.1.1"…

SpringBoot:详解Bean装配

🏡浩泽学编程:个人主页 🔥 推荐专栏:《SpringBoot从官方文档学习》《java项目分享》 《RabbitMQ》《Spring》《SpringMVC》 🛸学无止境,不骄不躁,知行合一 文章目录 前言一、IoC容…

【QML COOK】- 006-用C++定义一个QML元素类型

Qt原本是一个C图形框架,因此QML也少不了C。QML通常只负责显示,而后台逻辑由C实现,因此掌握C和QML之间的交互非常必要。 本例实现一个最简单的例子,用C定义一个QML的元素类型并在QML使用它。 需求是在窗口上显示鼠标点击的次数。…