强化学习应用(五):基于Q-learning算法的无人车配送路径规划(通过Python代码)

news2025/2/25 18:26:57

一、Q-learning算法介绍

Q-learning是一种强化学习算法,用于解决基于环境的决策问题。它通过学习一个Q-table来指导智能体在不同状态下采取最优动作。下面是Q-learning算法的基本步骤:

1. 定义环境:确定问题的状态和动作空间,并创建一个变量来表示环境。

2. 初始化Q-table:创建一个Q-table,其大小与状态和动作空间相匹配,并将所有Q值初始化为0。

3. 设置超参数:设置一些超参数,如学习率(alpha)、折扣因子(gamma)和探索率(epsilon)。学习率控制了Q值的更新速度,折扣因子决定了未来奖励的重要性,探索率决定了智能体在探索和利用之间的平衡。

4. 执行Q-learning算法:在每个时间步骤中,智能体根据当前状态选择一个动作。可以使用epsilon-greedy策略,在探索率epsilon的概率下选择一个随机动作,否则选择具有最高Q值的动作。执行所选动作后,智能体观察到新的状态和奖励。

5. 更新Q值:根据Q-learning更新规则,使用以下公式更新Q-table中的Q值:

  Q(s, a) = (1 - alpha) * Q(s, a) + alpha * (r + gamma * max(Q(s', a')))

  其中,s是当前状态,a是当前动作,r是观察到的奖励,s'是新的状态,a'是在新状态下具有最高Q值的动作,alpha是学习率,gamma是折扣因子。

6. 重复执行步骤4和步骤5,直到达到停止条件,如达到最大迭代次数或Q值收敛。

通过不断迭代更新Q值,Q-learning算法能够学习到最优的策略,使智能体在环境中获得最大的累积奖励。

二、无人车配送路径规划介绍

无人车配送路径规划是指无人车将货物送达到所有客户中,并返回起始位置,并使得无人车路径最短。无人车配送路径规划可以简单抽象为旅行商问题(Traveling salesman problem, TSP)。TSP问题可以描述为一个商品推销员去若干城市推销商品,要求遍历所有城市后回到出发地,目的是选择一个最短的路线。当城市数目较少时,可以使用穷举法求解。而随着城市数增多,求解空间比较复杂,无法使用穷举法求解,因此可以采用强化学习提高求解TSP问题的效率。

三、Q-learning算法求解无人车配送路径规划

3.1部分代码

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

import matplotlib.pyplot as plt
from Qlearning import Qlearning
#Chos: 1 随机初始化地图; 0 导入固定地图
chos=1
node_num=41 #当选择随机初始化地图时,自动随机生成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()


3.2部分结果

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

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

(2)随机生成19个城市

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

(3)随机生成22个城市

Q-learning得到的

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

四、完整Python代码

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

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

相关文章

NI PXIe-6386国产替代,8路AI(16位,14 MS/s/ch),2路A​O,24路DIO,PXI多功能I/O模块

PXIe-6386 PXIe,8路AI(16位,14 MS/s/ch),2路A​O,24路DIO,PXI多功能I/O模块 PXIe-6386是一款同步采样的多功能DAQ设备。该模块提供了模拟 I/O、数字I/O、四个32位计数器和模拟和数字触发。板载N…

2024年【G1工业锅炉司炉】考试及G1工业锅炉司炉考试资料

题库来源:安全生产模拟考试一点通公众号小程序 G1工业锅炉司炉考试根据新G1工业锅炉司炉考试大纲要求,安全生产模拟考试一点通将G1工业锅炉司炉模拟考试试题进行汇编,组成一套G1工业锅炉司炉全真模拟考试试题,学员可通过G1工业锅…

【现代密码学】笔记3.1-3.3 --规约证明、伪随机性《introduction to modern cryphtography》

【现代密码学】笔记3.1-3.3 --规约证明、伪随机性《introduction to modern cryphtography》 写在最前面私钥加密与伪随机性 第一部分密码学的计算方法论计算安全加密的定义:对称加密算法 伪随机性伪随机生成器(PRG) 规约法规约证明 构造安全…

LeetCode刷题.15(哈希表与计数排序解决41. 缺失的第一个正数)

给你一个未排序的整数数组 nums ,请你找出其中没有出现的最小的正整数。 请你实现时间复杂度为 O(n) 并且只使用常数级别额外空间的解决方案。 示例 1: 输入:nums [1,2,0] 输出:3 示例 2: 输入:nums …

MCS-51---串行通信的特点

目录 一.同步通信和异步通信 1.异步通信 2.同步通信 二.串行通信的方式 1.单工 2.半双工 3.全双工 三.串行通信的速率 四.MCS-51单片机结构 五.串行口的控制 1.串行口控制寄存器(SCON) 2.电源控制寄存器(PCON) 六.波特率的设计 七.串行口的工作方式 1.方式0 2.…

NLP论文阅读记录 - WOS | ROUGE-SEM:使用ROUGE结合语义更好地评估摘要

文章目录 前言0、论文摘要一、Introduction1.1目标问题1.2相关的尝试1.3本文贡献 二.相关工作三.本文方法四 实验效果4.1数据集4.2 对比模型4.3实施细节4.4评估指标4.5 实验结果4.6 细粒度分析 五 总结 前言 ROUGE-SEM: Better evaluation of summarization using ROUGE combin…

操作系统详解(5.1)——信号(Signal)的相关题目

系列文章: 操作系统详解(1)——操作系统的作用 操作系统详解(2)——异常处理(Exception) 操作系统详解(3)——进程、并发和并行 操作系统详解(4)——进程控制(fork, waitpid, sleep, execve) 操作系统详解(5)——信号(Signal) 文章目录 题目第一问第二问第三问 题目…

python24.1.14while循环

当条件结束时间未知时,while循环比for循环更合适 实践

Debian(Linux)局域网共享文件-NFS

NFS (Network File system) 是一种客户端-服务器文件系统协议,允许多个系统或用户访问相同的共享文件夹或文件。最新版本是 NFS-V4,共享文件就像存储在本地一样。它提供了中央管理,可以使用防火墙和 Kerberos 身份验证进行保护。 本文将指导…

docker-compose部署kafka、SASL模式(密码校验模式)

一.基础kafka部署 zookeeper,kafka,kafka-ui docker-compose.yml 注意点:192.168.1.20 是宿主机的ip version: "3" services:zookeeper:image: wurstmeister/zookeepercontainer_name: zookeeperrestart: alwaysports:- 2181:2…

未来的失业将是常态吗?

2024年,科技巨头谷歌、亚马逊都在本周宣布大规模裁员,影响到众多部门。此外,社交平台 Discord 表示将裁员 17%,游戏服务商 Unity Software 宣布将裁员 25%,语言学习应用程序 Duolingo 则称解雇了 10% 的正式职工&#…

使用 rosdep 管理依赖关系

什么是rosdep? rosdep是 ROS 的依赖管理实用程序,可以与 ROS 包和外部库一起使用。 是一个命令行实用工具,用于标识和安装依赖项以生成或安装包。 在以下情况下,可以调用或调用它:rosdep 构建工作区并需要适当的依赖项…

关于CodeReview的一些实践和思考

在日常开发中,Code Review 的重要性日益凸显。它不仅有助于提升代码质量,还促进了团队成员之间的知识共享和技能提升。本文将主要聚焦于 Code Review,分享在这个过程中的一些心得和思考。 CodeReview常用到的一些术语 之前看到公司的大佬经…

ssm基于Java的众惠商城的设计与实现论文

摘 要 如今社会上各行各业,都喜欢用自己行业的专属软件工作,互联网发展到这个时候,人们已经发现离不开了互联网。新技术的产生,往往能解决一些老技术的弊端问题。因为传统用户购物信息管理难度大,容错率低&#xff0c…

Python基础知识:整理14 利用pyecharts生成地图

1 地图可视化的基本使用 from pyecharts.charts import Map from pyecharts.options import VisualMapOpts # 准备地图对象 map Map()# 准备数据 data [("北京市", 8), ("上海市", 99), ("广州省", 199), ("重庆市", 400), ("…

【Python学习】Python学习18- 方法OS 文件/目录方法

目录 【Python学习】Python学习17- File方法 前言os.access()语法: os.chdir(path)语法 os.chflags(path, flags)语法 os.chmod(path, mode)os.chown(path, uid, gid)os.chroot(path)os.close(fd)os.unlink(path)os.popen(command[, mode[, bufsize]])os.read(fd, …

【数据开发】大型离线数仓OLAP数据开发指南(目录)

文章目录 1、什么离线数仓OLAP2、OLAP数仓建设3、OLAP数仓开发指南 1、什么离线数仓OLAP 离线数仓OLAP(Online Analytical Processing)是一种数据分析技术,它通过对离线数据仓库中的数据进行分析,为企业提供决策支持的数据分析服…

瑞_Java开发手册_(五)MySQL数据库

文章目录 (一) 建表规约(二) 索引规约(三) SQL 语句(四) ORM 映射附:雪花算法(Java) 🙊前言:本文章为瑞_系列专栏之《Java开发手册》的MySQL数据库篇,主要介绍建表规约、索引规约、SQL语句、ORM映射。由于博…

Http协议简述

目录 HTTP-概述 2.1.1 介绍 2.2.2 特点 2.2 HTTP-请求协议 2.3 HTTP-响应协议 2.3.1 格式介绍 2.3.2 响应状态码 HTTP-概述 2.1.1 介绍 HTTP:Hyper Text Transfer Protocol(超文本传输协议),规定了浏览器与服务器之间数据传输的规则。 http是互联…

牛刀小试---二分查找(C语言)

题目&#xff1a;在给定的升序数组中查找指定的数字n&#xff0c;并输出其下标 代码举例&#xff1a; #include <stdio.h> int main() {int arr[] { 1,2,3,4,5,6,7,8,9,10 };//给定的升序数组int left 0;//定义左下标int right sizeof(arr) / sizeof(arr[0]) - 1;//…