机器人路径规划:基于Q-learning算法的移动机器人路径规划(可以更改地图,起点,终点),MATLAB代码

news2024/11/20 21:24:00

一、Q-learning算法

Q-learning算法是强化学习算法中的一种,该算法主要包含:Agent、状态、动作、环境、回报和惩罚。Q-learning算法通过机器人与环境不断地交换信息,来实现自我学习。Q-learning算法中的Q表是机器人与环境交互后的结果,因此在Q-learning算法中更新Q表就是机器人与环境的交互过程。机器人在当前状态s(t)下,选择动作a,通过环境的作用,形成新的状态s(t+1),并产生回报或惩罚r(t+1),通过式(1)更新Q表后,若Q(s,a)值变小,则表明机器人处于当前位置时选择该动作不是最优的,当下次机器人再次处于该位置或状态时,机器人能够避免再次选择该动作action. 重复相同的步骤,机器人与环境之间不停地交互,就会获得到大量的数据,直至Q表收敛。QL算法使用得到的数据去修正自己的动作策略,然后继续同环境进行交互,进而获得新的数据并且使用该数据再次改良它的策略,在多次迭代后,Agent最终会获得最优动作。在一个时间步结束后,根据上个时间步的信息和产生的新信息更新Q表格,Q(s,a)更新方式如式(1):

式中:st为当前状态;r(t+1)为状态st的及时回报;a为状态st的动作空间;α为学习速率,α∈[0,1];γ为折扣速率,γ∈[0,1]。当α=0时,表明机器人只向过去状态学习,当α=1时,表明机器人只能学习接收到的信息。当γ=1时,机器人可以学习未来所有的奖励,当γ=0时,机器人只能接受当前的及时回报。

每个状态的最优动作通过式(2)产生:

Q-learning算法的搜索方向为上下左右四个方向,如下图所示:

Q-learning算法基本原理参考文献:

[1]王付宇,张康,谢昊轩等.基于改进Q-learning算法的移动机器人路径优化[J].系统工程,2022,40(04):100-109.

二、部分代码

close all
clear
clc
global maze2D;
global tempMaze2D;
NUM_ITERATIONS =500; % 最大训练次数(可以修改)
DISPLAY_FLAG = 0; % 是否显示(1 显示; 0 不显示)注意:设置为0运行速度更快
CurrentDirection = 4; % 当前机器人的朝向(1-4具体指向如下) 机器人只能上下左右移动,且每次只能移动一格,移动前需要判断是否转向
% 1 - means robot facing up
% 2 - means robot facing left
% 3 - means robot facing right
% 4 - means robot facing down

%% 起始点 坐标
startX=20;startY=1;
goalX=1;goalY=20;
%% 导入地图
data1=load('data.txt');
data1(find(data1==0))=50;
data1(find(data1==1))=0;
data1(startX,startY)=70;
data1(goalX,goalY)=100;
maze2D=data1;
orgMaze2D = maze2D;
tempMaze2D = orgMaze2D;
CorlorStr='gray';

三、部分结果

(1)第一次运行结果

机器人最终路径:
    20     1
    19     1
    18     1
    17     1
    17     2
    17     3
    17     4
    17     5
    16     5
    15     5
    14     5
    13     5
    13     6
    13     7
    13     8
    13     9
    13    10
    12    10
    11    10
    10    10
     9    10
     8    10
     7    10
     7    11
     7    12
     7    13
     7    14
     7    15
     7    16
     7    17
     7    18
     6    18
     6    19
     6    20
     5    20
     4    20
     3    20
     2    20
     1    20

机器人最终路径长度为 38
机器人在最终路径下的转向及移动次数为 56

(2)第二次运行结果

机器人最终路径:
    20     1
    19     1
    19     2
    18     2
    17     2
    17     3
    17     4
    17     5
    16     5
    15     5
    15     6
    14     6
    14     7
    13     7
    13     8
    13     9
    13    10
    13    11
    12    11
    12    12
    11    12
    10    12
     9    12
     9    13
     9    14
     9    15
     8    15
     8    16
     8    17
     8    18
     8    19
     7    19
     6    19
     5    19
     4    19
     3    19
     2    19
     1    19
     1    20

机器人最终路径长度为 38
机器人在最终路径下的转向及移动次数为 75

四、完整MATLAB代码

见下方名片

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

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

相关文章

AIGC 探究:人工智能生成内容的技术原理、广泛应用、创新应用、版权问题与未来挑战

AIGC(Artificial Intelligence Generated Content)即人工智能生成内容,其核心在于利用深度学习技术,尤其是基于神经网络的模型,来模拟人类创作过程,自主生成高质量的文本、图像、音频、视频等各类内容。神经…

MySQL8.0的下载、安装配置教程、连接数据可视图形化界面和卸载及MySQL基本使用教程

文章目录 MySQL8.0下载安装MySQL卸载常见问题解决方式MySQL基本使用教程(使用MySQLworkbench) 1、创建数据库2、创建表、删除表3、修改表的名字4、为数据表增加、修改、删除字段5、关于修改数据库名字6、拓展:pycharm操作MySQL 首先&#…

Diagrams:Show Me​

大家好,今天给大家介绍的 GPTs 叫 Diagrams:Show Me。 首先,让Diagrams:Show Me介绍一下自己,了解一下他的基本功能 然后,让他告诉我们,我们要怎么与他进行交互。 按照他给出的例子来体验一下他的功能。先来第一个例子…

cog predict docker unknown flag: --file

如图: 使用cog predict -i image“link-to-image” 出现docker unknown flag: --file的问题。 解决方法(对我可行):切换cog版本。 这个是我一开始的cog安装命令(大概是下的最新版?)&#xff1…

StarUML笔记之从UML图生成C++代码

StarUML笔记之从UML图生成C代码 —— 2024-04-14 文章目录 StarUML笔记之从UML图生成C代码1.Add Diagram2.在TOOLBOX中左键点击Class,松开,然后在中间画面再左键点击,即可出现UML3.修改类图,并添加接口,方法,属性,我…

12-LINUX--进程间的通信

进程间通信:采用IPC机制(进程间的用户空间相互独立,内核空间共享),有管道,信号量,共享内存,消息队列,套接字。 一.管道 管道可以用来在两个进程之间传递数据&#xff0c…

C语言入门(第三天:函数、指针)

一、函数 1.1 函数概述 作用:提高代码的编写效率,实现对代码的重用 函数使用步骤 定义函数 理解为制作工具,工具只需要制作1次即可 调用函数 理解为使用工具 1.2 无参无返回值 1.3 有参无返回值(重点) 函数参数的作用:增加…

怎么提升公众号上限

正常可以申请多少个公众号?目前如果我们是企业主体的话(包括个体户),申请公众号默认是可以申请2个公众号数量的。不过对于很多公司来说,2个公众号的数量肯定是远远不够用的,不同的产品不同品牌不同部门都可…

基于R语言实现的beta二项回归模型【理解与实现】

本实验,创建一组使用二项分布模拟的数据(不带额外的随机性),和另一组使用Beta二项分布模拟的数据(引入了随机成功概率 p,从而增加了数据的离散性。 现在假设我们站在上帝视角,有两组不知道分布…

【可能是全网最丝滑的LangChain教程】七、LCEL表达式语言

系列文章地址 【可能是全网最丝滑的LangChain教程】一、LangChain介绍-CSDN博客 【可能是全网最丝滑的LangChain教程】二、LangChain安装-CSDN博客 【可能是全网最丝滑的LangChain教程】三、快速入门LLM Chain-CSDN博客 【可能是全网最丝滑的LangChain教程】四、快速入门Re…

Oracle ORA-28547:connection to server failed,probable Oracle Net admin error

使用Navicat连接oracle数据库时报ORA-28547错误 因为Navicat自带的oci.dll并不支持oracle11g,需要去官网下载支持的版本。 1.去oracle下载对应的oci.dll文件 下载地址:Oracle Instant Client Downloads 可以用 11.2.0.4 2. 复制刚下载下来的instant…

【无人机/平衡车/机器人】详解STM32+MPU6050姿态解算—卡尔曼滤波+四元数法+互补滤波(文末附3个算法源码)

效果: MPU6050姿态解算-卡尔曼滤波+四元数+互补滤波 目录 基础知识详解 欧拉角

嵌入式第三天:(C语言入门)

目录 一、跳转关键字 break: continue: goto: 二、函数 概述: 函数的使用: 无参无返回值: 有参无返回值: 有参有返回值: 返回值注意点: 函数的声明&#xff…

微信跳转页面时发生报错

报错如下图所示: 解决方法:(从下面四种跳转方式中任选一种,哪种能实现效果就用哪个) 带历史回退 wx.navigateTo() //不能跳转到tabbar页面 不带历史回退 wx.redirectTo() //跳转到另一个页面wx.switchTab() //只能…

Linux: softirq 简介

文章目录 1. 前言2. softirq 实现2.1 softirq 初始化2.1.1 注册各类 softirq 处理接口2.1.2 创建 softirq 处理线程 2.2 softirq 的 触发 和 处理2.1.1 softirq 触发2.1.2 softirq 处理2.1.2.1 在 中断上下文 处理 softirq2.1.2.2 在 ksoftirqd 内核线程上下文 处理 softirq 3.…

[lesson26]类的静态成员函数

类的静态成员函数 静态成员函数 在C中可以定义静态成员函数 静态成员函数是类中特殊的成员函数静态成员函数属于整个类所有可以通过类名直接访问公有静态成员函数可以通过对象名访问公有静态成员函数 静态成员函数的定义 直接通过static关键字修饰成员函数 静态成员函数 vs…

4.Godot图片素材的获取和编辑

游戏开发中经常遇到图片素材的需求 1. 图片素材的准备 术语:Sprite 精灵,游戏开发中指一张图片来源不明的图片,切勿在商业用途使用,以免引起版权风险。 1. 在学习阶段,可以百度或者从一些资源网站获取,这…

Unity类银河恶魔城学习记录12-13 p135 Merge Skill Tree with Dogge skill源代码

Alex教程每一P的教程原代码加上我自己的理解初步理解写的注释,可供学习Alex教程的人参考 此代码仅为较上一P有所改变的代码 【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili​​​​​​​ Inventory.cs using System.Collections.Generic; using Un…

分布式结构化数据表Bigtable

文章目录 设计动机与目标数据模型行列时间戳 系统架构主服务器Chubby作用子表服务器SSTable结构子表实际组成子表地址组成子表数据存储及读/写操作数据压缩 性能优化局部性群组(Locality groups)压缩布隆过滤器 Bigtable是Google开发的基于GFS和Chubby的…

Apple:叠加提示 - 高效的 RAG 优化方式

发表机构:Apple 本文介绍了一种新的检索增强生成(RAG)提示方法——叠加提示(superposition prompting),该方法可以直接应用于预训练的基于变换器的大模型(LLMs),无需微调…