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

news2025/2/25 15:09:15

一、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, 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, 14, 17, 11, 2, 13, 22, 3, 21, 6, 16, 10, 23, 12, 20, 24, 18, 9, 7, 8, 19, 4, 15, 5, 1]

(3)随机生成20个城市

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

四、完整Python代码

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

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

相关文章

1.5矩阵元素的引用

通过下标来引用矩阵的元素 A(3, 2)表示A矩阵第3行第2列的元素。 >> arr [1,2,3;4,5,6]; >> arr(4, 5) 10arr 1 2 3 0 04 5 6 0 00 0 0 0 00 0 0 0 10>> 如果引用元素超过矩阵的大小将自…

ssm基于spring和vue开发的web新闻流媒体平台论文

摘 要 如今的时代,是有史以来最好的时代,随着计算机的发展到现在的移动终端的发展,国内目前信息技术已经在世界上遥遥领先,让人们感觉到处于信息大爆炸的社会。信息时代的信息处理肯定不能用之前的手工处理这样的解决方法&#x…

隧道应用3-Cobalt Strike正反向连接多层内网

Cobalt Strike 正向连接多层内网: teamserver 不允许访问 B ,但是服务器上A有权限( A 与 B 在同一网段),若 A 服务上已经有了 cs 的后门,则可以通过 cs 的正向连接去连接 B ,在 teamserver 通…

基于机器学习的高考志愿高校及专业分析系统

本项目在“基于 Python 的高考志愿高校及专业分析系统”基础上补充添加了机器学习算法对高考总问进行预测; 项目采用了网络爬虫技术,从指定的高考信息网站上抓取了各大高校的历年录取分数线数据。 通过精细的数据清洗过程,这些数据被存储于…

黑马程序员SpringBoot2-开发实用篇

视频连接:开发实用篇-67-手工启动热部署_哔哩哔哩_bilibili 热部署 手动启动热部署 热部署仅包含restart的过程。 自动启动热部署 按CtrlAltShift/打开下列界面。 禁用热部署 配置高级 ConfigurationProperties 宽松绑定/松散绑定 常用计量单位绑定 数据校验 设置…

阿里云优惠券介绍、种类、领取入口及使用教程

阿里云优惠券是阿里云提供的一种优惠活动,旨在帮助用户节省购买云服务产品的费用。本文将为大家详细介绍阿里云优惠券的相关信息,包括优惠券的介绍、种类、领取入口以及使用教程。 一、阿里云优惠券介绍 阿里云优惠券是阿里云提供给用户的一种优惠凭证&…

超强站群系统v9.0:最新蜘蛛池优化技术,一键安装,内容无缓存刷新,高效安全

安全、高效,化的优化利用php性能,使得运行流畅稳定 独创内容无缓存刷新不变,节省硬盘。防止搜索引擎识别蜘蛛池 蜘蛛池算法,轻松构建站点(电影、资讯、图片、论坛等等) 可以个性化每个网站的风格、内容、…

SpringFramework实战指南(二)

SpringFramework实战指南(二) 2.1 Spring 和 SpringFramework概念2.2 SpringFramework主要功能模块2.3 SpringFramework 主要优势 2.1 Spring 和 SpringFramework概念 Spring-ioc 广义的 Spring:Spring 技术栈(全家桶&#xff0…

2.1 常用计算机网络体系结构

2.1 常用计算机网络体系结构 2.1.1 OSI体系结构 1、为了使不同体系结构的计算机网络都能够互联,国际标准化组织于1977年成立了专门机构研究该问题,不久他们就提出了一个试图使各种计算机在世界范围内都能够互连成网的标准框架,也就是著名的…

【基础数据结构】字符串

一、字符串输入 1.scanf("%s",str);分隔符为空格、制表符、回车 2.fgets(str,10,stdin);10为字符串char str[10]长度,可以读取空格字符的字符串,10代表最大读取长度,最多读取9个字符,这个函数自动在读取到换行符停止&…

Jeson nano--安装使用摄像头csi/usb

Jeson nano--安装使用摄像头 一、 安装使用摄像头二、vscode调用摄像头总结 一、 安装使用摄像头 列出与视频设备相关的设备文件 ls /dev/video*显示与 /dev/video0 设备关联的摄像头支持的所有格式及其详细信息。可以查看输出以了解所支持的分辨率、帧率和像素格式等信息。请…

【HarmonyOS】网络数据请求连接与数据持久化操作

从今天开始,博主将开设一门新的专栏用来讲解市面上比较热门的技术 “鸿蒙开发”,对于刚接触这项技术的小伙伴在学习鸿蒙开发之前,有必要先了解一下鸿蒙,从你的角度来讲,你认为什么是鸿蒙呢?它出现的意义又是…

超详细的嵌入式cJSON使用注意事项,持续补充中......

文章目录 一、堆内存不足1.1 问题描述1.2 解决办法 二、内存泄露2.1 忘记Delete2.2 忘记Free2.3 串口数据接收缺少部分字符导致的内存泄露(自己的问题)问题分析 2.4 内存泄露在Cortex-M3内核会发生什么? cJSON开源库地址: cJSON 一、堆内存不足 1.1 问…

ssh 远程登录协议

一、SSH 服务 1.1 SSH 基础 SSH(Secure Shell)是一种安全通道协议,主要用来实现字符界面的远程登录、远程 复制等功能。SSH 协议对通信双方的数据传输进行了加密处理,其中包括用户登录时输入的用户口令,SSH 为建立在应…

mongoose6.0版以上操作mongodb数据库的基本使用

1、介绍 Mongoose 是一个对象文档模型库,官网 http://www.mongoosejs.net/ 2、作用 方便使用代码操作 mongodb 数据库 3、使用流程 3.1、链接数据库 //1. 安装 mongoose---> npm install mongoose --save//2. 导入 mongoose const mongoose require(&quo…

PiflowX-DorisWrite组件

DorisWrite组件 组件说明 往Doris存储写入数据。 计算引擎 flink 组件分组 doris 端口 Inport:默认端口 outport:默认端口 组件属性 名称展示名称默认值允许值是否必填描述例子fenodesFenodes“”无是Doris FE http地址, 支持多个…

PLC-IoT 网关开发札记(4):Xamarin Forms 实现自定义控件(一个开关)

1. 需求 物联网项目中要集成大量的设备,作为一种简单的数字孪生手段,每一型号的设备都需要一个对应的虚拟实现,也就是用界面把这个设备呈现出来。设备有多个可管理的“属性”,对这个设备的监测对应获取这个设备“属性”的值&…

Linux系统编程(十一):高级 IO

参考引用 UNIX 环境高级编程 (第3版)嵌入式Linux C应用编程-正点原子 Linux系统编程(文章链接汇总) 1. 非阻塞 I/O 阻塞就是进入了休眠状态,交出了 CPU 控制权阻塞 I/O 就是对文件的 I/O 操作(读写操作)是阻塞式的&a…

FGSM方法生成交通信号牌的对抗图像样本

背景: 生成对抗样本,即扰动图像,让原本是“停车”的信号牌识别为“禁止驶入” 实验准备 模型:找一个训练好的,识别交通信号牌的CNN模型,灰度图像 模型地址:GitHub - Daulettulegenov/TSR_CNN:…

高级RAG(六): 句子-窗口检索

之前我们介绍了LlamaIndex的从小到大的检索 的检索方法,今天我们再来介绍llamaindex的另外一种高级检索方法: 句子-窗口检索(Sentence Window Retrieval),在开始介绍之前让我们先回顾一下基本的RAG检索的流程,如下图所示: 在执行基…