基于Qlearning强化学习的Cart-Pole推车杆平衡控制系统matlab仿真

news/2025/10/31 22:50:25/文章来源:https://www.cnblogs.com/51matlab/p/19181407

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1.算法仿真效果

matlab2022a仿真结果如下(完整代码运行后无水印):

1

2

3

4

5

通过不断与环境交互并更新Q值函数,智能体能够逐渐学习到在不同状态下的最优动作,从而实现杆的平衡控制。

仿真操作步骤可参考程序配套的操作视频。

2.算法涉及理论知识概要

强化学习作为一种强大的机器学习范式,为解决这类复杂的控制问题提供了有效的途径。其中,Q-learning算法因其简单性和通用性,在Cart-Pole推车杆平衡控制系统中得到了广泛应用。本文将深入探讨基于Q-learning强化学习的Cart-Pole推车杆平衡控制系统的原理。

Cart-Pole物理模型

       Cart-Pole系统由一个可在水平轨道上移动的推车和一根通过铰链连接在推车上的杆组成。假设推车的质量为

6

这些方程描述了系统状态随时间的变化规律,是理解和控制Cart-Pole系统的基础。

Cart-Pole推车杆平衡控制系统的目标是设计一个控制器,通过施加合适的力F,使杆在尽可能长的时间内保持垂直平衡状态(即 θ≈0),同时确保推车不超出轨道边界。在实际应用中,这一问题的解决方案可以推广到机器人平衡控制、火箭姿态调整等领域。

Q-learning强化学习
强化学习是一种通过智能体(Agent)与环境(Environment)进行交互,以最大化累积奖励(Reward)为目标的机器学习方法。在Cart-Pole系统中,智能体就是负责控制推车运动的控制器,环境则是Cart-Pole系统本身。
7

Q值函数的更新规则为:

8

控制每次更新的步长。学习率越大,新的经验对Q值的影响越大;学习率越小,Q值的更新越依赖于之前的估计。

在训练完成后,使用训练好的Q表进行测试。在测试过程中,智能体采用贪心策略(即 ϵ=0)选择动作,观察Cart-Pole系统在不同初始状态下的平衡控制效果。可以通过计算系统保持平衡的平均时间、成功平衡的次数等指标来评估控制器的性能。

3.MATLAB核心程序

.............................................................
% 绘制新的状态
figure(1);
% 计算杆的两个端点的 x 坐标
X = [Pos_car, Pos_car+Lens*sin(Ang_car)];
% 计算杆的两个端点的 y 坐标
Y = [0.1, 0.1+Lens*cos(Ang_car)];
% 绘制小车,用绿色矩形表示
obj=rectangle('Position',[Pos_car-0.1,0,0.2,0.1],'facecolor','g');
hold on
% 绘制杆,用蓝色粗线表示
obj2=plot(X,Y,'b','LineWidth',4);
hold on
% 设置坐标轴范围
axis([-0.5 0.5 0 2]);
% 根据外力方向显示图例
if F > 0legend('>','FontSize', 15);
elselegend('<','FontSize', 15);
end
% 更新图形窗口的标题,显示训练次数和最大成功次数
title(strcat('训练次数',num2str(iters)));
hold off% 绘制平均 Q 值随训练次数的变化曲线
figure
plot(Q_save);
% 设置 x 轴标签
xlabel('训练次数');
% 设置 y 轴标签
ylabel('Q value收敛值');% 绘制子图
figure
% 绘制第一个子图,显示杆的角速度随训练次数的变化
subplot(221);
plot(Vang_car_save);
% 设置子图标题
title('pole角速度');% 绘制第二个子图,显示杆的角度随训练次数的变化
subplot(222);
plot(Ang_car_save);
% 设置子图标题
title('pole角度');% 绘制第三个子图,显示小车的速度随训练次数的变化
subplot(223);
plot(V_car_save);
% 设置子图标题
title('pole速度');% 绘制第四个子图,显示小车的位置随训练次数的变化
subplot(224);
plot(Pos_car_save);
% 设置子图标题
title('pole位置');
0Z_016m

  

 

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

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

相关文章

绿源电动车 NFC 学卡 All In One

绿源电动车 NFC 学卡 All In One NFC 钥匙 / NFC 母卡 / NFC 子卡 Apple 钱包,iPhone 上海公共交通卡 ✅绿源电动车 NFC 学卡 All In OneNFC 钥匙 / NFC 母卡 / NFC 子卡demosApple 钱包,iPhone 上海公共交通卡 ✅…

洛谷 P8867 建造军营

传送门。 边双直接缩掉,成为一棵树。下面的【结点】都是指缩之后的。 于是可以定义一个 \(a_u\) 为,\(u\) 点内有军营的方案数,\(b_u\) 为无。 总方案数就对应着,树上每种方案的权值和。 首先考虑一个 DP,设 \(f_…

代码大全2阅读感悟2

读国《代码大全 2》后,最深刻的感悟是 “细节成就卓越”。书中对变量命名、注释撰写、循环优化等细节的剖析,打破了我 “功能实现即可” 的片面认知。一个模糊的变量名、一段缺失的注释,都可能成为后期调试的 “拦路…

代码大全2阅读感悟3

《代码大全 2》让我跳出 “埋头写代码” 的局限,理解了编程的系统性。书中将需求分析、架构设计、编码实现、测试优化视为有机整体,强调每个环节的关联性。原来,脱离整体规划的编码,再精妙也可能偏离目标。这启示我…

【Python】某站音视频爬取(转载)

import pprint import requests import re import jsonsession = requests.session() url = 你需要爬取的音视频网址 headers = {user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, …

代码大全2阅读感悟

《代码大全 2》让我明白,编程规则从不是自由的枷锁。书中对代码规范、命名原则的细致讲解,揭示了 “有序” 背后的高效逻辑。遵循统一标准的代码,不仅能降低协作成本,更能减少后期维护的麻烦。这让我意识到,真正的…

RT-Thread之消息队列使用示例

消息队列(Message Queue)是一种异步通信机制,本教程介绍其API接口及使用示例。消息队列(Message Queue)是一种异步通信机制,其核心功能是:解耦生产者和消费者:发送方和接收方无需同时在线 缓冲与流量整形:应对…

STM32之GPIO输出

在 STM32 的开发中,GPIO(通用输入/输出)是一种极其重要且常用的外设资源。无论是用于控制 LED、按键、电机驱动,还是与其他外设之间通信,GPIO 都是实现这些功能的核心接口。在 STM32 的开发中,GPIO(通用输入/输…

神秘数据结构手法之区间 LIS

给定 \(1\sim n\) 的排列,\(q\) 次询问,每次查询区间 \([l,r]\) 内的最长上升子序列长度。 \(n \leq 10^5\)。这里只讨论排列的情况,如果不是排列,也容易通过重新编号变成在 LIS 上等价的一排列。 \(O(n\sqrt{n}\ …

软考九

软考九Posted on 2025-10-31 22:31 心默默言 阅读(0) 评论(0) 收藏 举报1. 系统设计2. 数据流图

[该退役了]

[该退役了]好了,最近本来说找队友的,结果教练给我找了上次的那个谁 反正是直接导致黑化的决定性因素,也有记录 但是这个人好像是教练的掌中宝啊,不组队还说我伤害了她,然后就宣告不管我了, 简单讲就是这一波是彻…

逆向基础--汇编语言介绍(003)

逆向基础--汇编语言介绍(003)一.前言汇编语言是直接工作在硬件上的一门编程语言,是除了机器语言外的最低层的编程语言了,学习汇编可以帮助我们更加深入的了解cpu,内存等硬件的工作原理。汇编语言和机器语言一般都是一…

文档抽取技术的实现原理及其在法律行业的应用价值分析

想象一位律师,面对堆积如山的案卷:数千页的交易合同、错综复杂的证据材料、浩如烟海的裁判文书。他必须从中精准找出关键条款、锁定矛盾陈述、串联案件事实。这曾是法律工作的常态,耗时耗力且充满疏漏风险。而今,文…

【算法导论】2分治法

【算法导论】2分治法二分查找 using System;class BinarySearch {// 分治法实现二分查找public static int Search(int[] arr, int target, int left, int right){// 基本情况:查找范围为空if (left > right)retur…

c++写得多不如写得少,同样的逻辑写的多报错逆天

#include<iostream> #include<cstdio> #include<cstring> #include<string> #include<cmath> #include<algorithm> #include<vector> #include<map> #include<uno…

整理数学数据结构

#include<bits/stdc++.h>using namespace std;const int N = 1e5 + 5;//树 struct tree{int to[N << 1], nxt[N << 1], hd[N], idx, w[N << 1];void add(int u, int v, int val) { to[++ idx]…

viewerjs+vue3 using typescript

安装包npm install v-viewer viewerjs npm i fontawesome-4.7 npm install @fortawesome/fontawesome-svg-core npm install @fortawesome/free-solid-svg-icons npm install @fortawesome/vue-fontawesome@prerelease…

题解:B4207 [常州市赛 2021] 战士

题解:B4207 [常州市赛 2021] 战士 前言 题目传送门 思路讲解 思路其实很好想,因为怪物的攻击是固定的,所以战士的死亡时间也是固定的,我们就需要通过计算战士每次死亡前能造成的最大伤害如果可以击败怪物,那就直接…

最小二乘问题详解7:正则化最小二乘

本文系统阐述了正则化最小二乘(岭估计)的动机、理论推导、求解方法与数值实例,揭示其通过L2惩罚项改善病态问题和过拟合的机制。1. 引言 在之前的文章《最小二乘问题详解4:非线性最小二乘》、《最小二乘问题详解5:…

什么是重组蛋白?

重组蛋白的定义与基本概念 重组蛋白是指通过基因工程技术,将外源基因导入宿主细胞,利用细胞的生物合成系统表达产生的蛋白质分子。这项技术的核心在于基因重组,即通过人工手段将编码目标蛋白的DNA序列插入表达载体,…