尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

MATLAB实现QLearning AGV调度:快递场景单机智能决策验证框架

MATLAB实现QLearning AGV调度:快递场景单机智能决策验证框架 简介本资源是一套面向高校自动化、人工智能及物流工程方向学习者的MATLAB强化学习实践项目聚焦Q-Learning算法在AGV智能搬运场景中的落地应用解决仓储环境中快递包裹自主路径规划与决策优化问题。压缩包共5个文件4个.m主程序1个.txt说明总大小仅5KB轻量紧凑其中main.m为主控入口draw3DScene.m等可视化函数实现三维仓库场景渲染代码全程嵌入中文注释逻辑清晰、模块分明涵盖环境建模、Q值表迭代更新与路径执行三大核心环节。已有51人学习下载配套提供详细的操作演示与算法讲解视频覆盖从MATLAB路径配置、仿真运行到结果分析的完整流程特别适合强化学习初学者理解状态-动作映射机制与离散环境建模方法。1. 项目概述这不是一个“玩具仿真”而是一套可落地的AGV调度逻辑验证框架你搜“QLearning AGV MATLAB”时看到的大多是零散代码片段、缺注释的.m文件或者干脆是直接调用MATLAB Reinforcement Learning Toolbox里现成模板改个地图就交差的“作业式项目”。但这个标题里的关键词——QLearning、AGV、智能搬运、快递场景、中文注释、操作视频——合在一起指向一个被严重低估的真实需求在没有真实AGV车队、没有WMS系统对接、甚至没有ROS环境的前提下用最轻量级工具MATLAB把“让机器人自己学会怎么搬快递”这件事从数学原理到行为表现完整跑通一遍。我带过三届自动化专业毕设每年都有学生卡在“强化学习到底学了个啥”上——不是代码不会写而是根本不知道Q表更新后那个数字变化对应着机器人在仓库里哪一次转弯、哪一次避障、哪一次选错了货架。这个项目就是专治这种“黑箱焦虑”的。它解决的核心问题非常具体快递分拣中心里单台AGV面对动态订单、固定路径约束、多任务排队、电池续航限制时如何不靠预编程路径而靠试错奖励反馈自主优化搬运顺序与路径选择注意这里强调的是“单台”而非“多台协同”——多AGV调度是另一个量级的问题涉及冲突消解、通信协议、时间窗分配本项目刻意避开这些复杂性聚焦在“智能体决策内核”的可解释性验证上。所以它不适合直接部署到产线但非常适合物流算法工程师验证新奖励函数设计自动化专业学生理解状态空间建模的取舍AGV厂商售前团队向客户演示“自适应调度”的底层逻辑。我去年帮一家深圳AGV集成商做技术方案他们拿这套MATLAB仿真当PPT里的动态演示页客户当场问“这Q值热力图能导出到我们自己的调度引擎里吗”——说明它已超出教学范畴具备工程接口价值。关键词“三条AGV基本A算法”在热搜里反复出现恰恰暴露了行业痛点太多人把AGV调度等同于路径规划而忽略了任务分配与执行策略的耦合性。A只解决“怎么走”QLearning解决的是“先搬哪个、为什么现在不走那条路、电量低时该放弃哪个订单”。本项目用MATLAB实现不是因为MATLAB比Python强而是因为它的矩阵运算可视化、状态转移矩阵直观呈现、Q表热力图一键生成能力在教学和快速验证阶段无可替代。你不需要装ROS、不用配Gazebo、不碰C打开MATLAB R2020b以上版本加载main.m点运行5秒后就能看到小车在网格地图上左冲右突同时右侧实时刷新Q值变化——这种即时反馈是PyTorchGym组合短期内难以提供的体验。至于“matlab潮汐分潮”“matlab/simulink simscape battery”这些热搜词提醒我们真实AGV必须考虑动力学约束但本项目将电池模型简化为“每步消耗1单位能量归零则终止episode”这是合理的抽象——就像学游泳先练憋气再学换气强化学习入门必须先剥离次要变量聚焦决策本质。2. 整体架构设计为什么用QLearning而不是DQN或PPO一张表格说清技术选型逻辑很多人看到“强化学习”第一反应是上深度网络但本项目坚持用经典QLearning绝非技术保守而是基于快递搬运场景的硬性约束做出的精准取舍。下面这张表是我用三年时间在五个实际AGV项目中验证过的选型依据维度QLearning本项目DQN常见替代方案PPO高端方案本项目选择QLearning的理由状态空间规模离散化网格地图如20×20400格 电池电量5档 当前任务类型3类→ 总状态数≈6000需CNN处理原始图像/激光雷达数据 → 状态维度10^4同DQN且需连续动作空间映射快递分拣中心布局相对固定人工划分网格足够表征关键信息6000状态Q表内存占用10MBMATLAB轻松承载动作空间设计4方向移动上/下/左/右 1待机 1抓取/放置 → 共6个离散动作输出连续速度/转向角需额外离散化或复杂解码直接输出连续控制量但需大量采样稳定训练AGV物理控制器本质是离散指令“前进1米”“左转90°”6动作完全覆盖基础操作避免DQN/PPO因动作空间失配导致的震荡奖励函数可解释性每步-0.1耗时惩罚到达目标10碰撞-5电量耗尽-20成功交付50奖励常需加权组合梯度回传后难以追溯某次失败源于哪个子项奖励塑形更复杂策略网络黑箱导致调试困难快递场景要求“为什么失败”必须可追溯若Q表显示某状态对“右移”动作值极低直接对应“右侧是墙”工程师能立刻定位地图建模错误训练收敛速度单episode平均200步1000 episode可在MATLAB中2分钟内完成需GPU加速单episode训练时间10秒收敛需10^5步以上同DQN且需精细调参clip epsilon, KL penalty项目交付周期短客户需要“今天改参数明天看效果”QLearning的确定性收敛保障迭代效率部署可行性Q表可导出为.csv嵌入PLC或单片机查表运行模型需TensorRT优化边缘设备部署门槛高同DQN且策略网络推理延迟不稳定某些小型AGV控制器仅有128KB Flash存不下神经网络权重但足以存储6000×6的Q值数组提示看到“mjlab机器人强化学习仿真平台”这类热搜词要警惕过度工程化陷阱。MJLab虽功能强大但其默认配置面向ROS生态学习曲线陡峭。本项目用纯MATLAB脚本所有依赖仅需Statistics and Machine Learning ToolboxR2017a起内置连Parallel Computing Toolbox都不需要——这意味着你用MATLAB Online网页版就能跑通全流程这对高校实验室或初创公司是决定性优势。核心架构采用三层解耦设计环境层Environment→ 智能体层Agent→ 评估层Evaluator。环境层负责维护地图栅格、AGV位置、任务队列、电池状态所有物理规则如碰撞检测、抓取条件在此实现智能体层仅包含Q表存储、ε-greedy策略、Q值更新公式Q(s,a) ← Q(s,a) α[r γ·maxQ(s,a) - Q(s,a)]绝不触碰环境细节评估层独立计算成功率、平均步数、Q值收敛曲线。这种分离让代码可读性极强updateQTable.m里只有12行核心公式checkCollision.m里用ismember()判断坐标是否在障碍物列表中——没有魔法全是确定性逻辑。我曾让实习生用三天时间读懂全部代码第四天就成功修改了奖励函数把“提前交付”权重从1.0提升到1.5结果AGV开始主动绕远路抢接高优先级订单这正是强化学习“目标驱动”的魅力所在。3. 核心细节解析从地图建模到Q表热力图每个环节都藏着实战经验3.1 地图建模为什么用20×20栅格而非像素级图像MATLAB中构建AGV环境最直观想法是导入PNG地图用imread()读取灰度值。但本项目坚持用logical型二维矩阵如map false(20,20)将障碍物、货架、充电站、起点、终点显式标记为true。原因有三其一计算效率——map(x,y)true的布尔索引比rgb2gray(img)(x,y)200快3个数量级QLearning每步需多次状态查询其二状态定义清晰——每个(x,y)坐标即一个状态IDQ表索引直接为state_id (y-1)*20 x避免图像坐标系与矩阵索引的转换混淆其三可扩展性强——当需添加“动态障碍物”如临时堆放的纸箱只需在map矩阵对应位置map(new_x,new_y)true无需重绘图像。我曾见过某团队用imshow()显示地图结果训练时因drawnow()刷新拖慢10倍最后删掉所有图形句柄才提速。地图初始化代码中generateWarehouseMap.m函数预设了三种典型布局U型分拣区入口/出口分离中间主通道、I型流水线单向长廊两侧货架、环形缓冲区闭环路径适合多AGV接力。每种布局的障碍物坐标均以[x1,y1; x2,y2; ...]矩阵存储而非硬编码map(5,3)true。这样做的好处是当客户要求“把充电站移到右下角”只需修改坐标矩阵无需逐行检查map赋值语句。更关键的是货架位置与快递订单绑定——taskList结构体中每个任务的targetPos字段直接引用地图中预定义的货架坐标如warehouses{1}.position [15,8]确保AGV导航目标与物理世界严格对应。这种“坐标-语义”双绑定是避免仿真与现实脱节的第一道防线。3.2 状态空间压缩如何把10维信息压进1个整数IDQLearning要求状态可枚举但真实AGV状态远不止位置还需电池电量0~100%、当前载货状态空/满、任务队列长度0~5、距离最近货架距离、是否处于充电区……若全组合状态数将爆炸。本项目采用分层抽象法主状态Primary State仅用(x,y)坐标共400种构成Q表主体400×6辅助状态Auxiliary State电池电量量化为5档100%, 75%, 50%, 25%, 0%用batteryLevel变量单独存储状态增强State Augmentation在Q值更新时将batteryLevel作为权重因子影响奖励——电量25%时所有负向奖励如耗时乘以1.5正向奖励如充电乘以2.0。这种设计规避了状态空间膨胀又保留了关键约束。实测发现当batteryLevel从5档减为3档100%, 50%, 0%时AGV在低电量下更激进地寻找充电站但成功率下降12%证明5档是精度与复杂度的最佳平衡点。代码中getStateID.m函数仅返回(x,y)对应的ID而getReward.m函数内部根据batteryLevel动态调整r值——这种“状态与奖励解耦”让Q表保持简洁逻辑却更贴近真实。3.3 动作空间设计为什么禁止“原地旋转”动作AGV物理特性决定了移动与转向是耦合操作。在差速轮底盘上“左转90°”本质是左轮停转、右轮正转耗时约1.2秒而“前进1米”需两轮同速耗时0.8秒。若在动作空间中加入“旋转”动作会导致Q表学习到无效策略——比如在狭窄通道反复旋转却无法移动。因此本项目动作集严格限定为moveUp(x,y1)若y20且map(x,y1)falsemoveDown(x,y-1)若y1且map(x,y-1)falsemoveLeft(x-1,y)若x1且map(x-1,y)falsemoveRight(x1,y)若x20且map(x1,y)falseidle位置不变消耗0.1单位电量actuate若AGV.postask.targetPos task.statuspending则抓取/放置任务状态切换注意actuate动作的成功条件在checkActionValid.m中强制校验避免Q表学习到“在错误位置按抓取键”的幻觉策略。我曾调试时发现AGV总在充电站旁乱按actuate追查发现是task.targetPos未正确关联到充电站坐标修正后问题消失——这印证了“动作有效性检查”比Q值更新本身更重要。3.4 奖励函数精调快递场景特有的5个奖励项设计逻辑通用强化学习教程常给“到达目标1其他-0.1”但这在快递场景会失效。本项目奖励函数getReward.m包含5个可配置项每项均有物理意义奖励项数值触发条件设计意图调参心得r_step-0.1每执行1步动作惩罚耗时驱动高效路径若设为-0.01AGV会为省1步绕远路需结合r_collision平衡r_goal10到达任务目标点基础正向激励低于8时AGV不愿离开舒适区起点附近高于12易忽略电量风险r_collision-5移动导致碰撞惩罚危险行为必须为负且绝对值r_step×预期路径长否则AGV愿撞墙抄近路r_battery-20电量耗尽终止episode强制续航意识实测发现-15时AGV仍冒险接单-20后立即规划返充临界点在此r_delivery50成功交付快递终极目标达成此值需显著高于r_goal否则AGV满足于“到达”却不“交付”关键技巧在于动态权重当batteryLevel25%时r_battery权重升至1.8倍r_delivery权重降至0.7倍——模拟低电量时“保命优先于业绩”的运营策略。代码中通过reward r_step r_goal*goalFlag r_collision*collisionFlag ...线性叠加而非复杂函数确保每次奖励变化可追溯。我在某次演示中将r_delivery临时改为100AGV立刻放弃所有中途任务直扑最近交付点客户当场拍板“这就是我们要的紧急订单响应逻辑”3.5 Q表可视化热力图不只是炫技而是调试核心工具MATLAB最大优势在于imagesc(Q_table)一行代码生成Q值热力图。本项目visualizeQTable.m函数将Q表重塑为20×20×6三维数组按动作维度切片显示第1页moveUp动作在各位置的Q值蓝色越深表示“向上走收益越低”第2页moveDown动作Q值红色越亮表示“向下走是当前最优”……第6页actuate动作Q值仅在货架坐标处有高值这种可视化直接暴露策略缺陷。例如若第1页中某走廊区域全为浅色Q值接近0说明AGV在此处对“向上”无偏好可能因上方是死路若第6页中充电站坐标Q值为负说明奖励函数未正向激励充电行为。我指导学生时必让他们先看热力图再看轨迹——有次发现AGV总在(10,10)处徘徊热力图显示此处moveRightQ值异常高追查发现是地图文件中map(10,11)被误标为可通行修正后AGV立刻走出循环。Q表热力图是强化学习的“X光片”比任何日志打印都更能直击病灶。4. 实操过程详解从零开始跑通仿真的7个关键步骤与参数配置4.1 环境准备MATLAB版本与工具箱确认避坑第一步不要跳过这一步MATLAB R2018a以下版本缺少stateflow状态机支持R2021a以下版本reinforcement learning toolbox中rlQAgent对象不兼容本项目Q表结构。推荐版本R2020b 或 R2021a兼顾新特性与稳定性。安装时务必勾选Statistics and Machine Learning Toolbox必需提供fitctree等分类工具用于后续扩展Signal Processing Toolbox可选但visualizeQTable.m中滤波平滑热力图需用medfilt2Image Processing Toolbox可选generateWarehouseMap.m中生成纹理地图用提示若用MATLAB Online登录后进入“Add-Ons”搜索“Reinforcement Learning”一键安装。本地安装者需确认许可证包含上述工具箱否则main.m运行时会报错Undefined function rlQAgent。我曾见工程师花2小时排查此问题只因公司许可证未激活Statistics Toolbox。4.2 项目文件结构解读每个.m文件的不可替代性解压后目录结构如下严禁删除或重命名任何文件/AGV_QLearning_Simulation/ ├── main.m # 主程序调用所有模块设置超参数启动训练 ├── Environment/ # 环境层 │ ├── generateWarehouseMap.m # 生成三种地图布局 │ ├── checkCollision.m # 碰撞检测核心函数 │ └── updateTaskQueue.m # 任务队列动态管理 ├── Agent/ # 智能体层 │ ├── initializeQTable.m # 初始化Q表全零或随机 │ ├── selectAction.m # ε-greedy策略实现 │ └── updateQTable.m # Q值更新公式核心 ├── Evaluator/ # 评估层 │ ├── calculateMetrics.m # 计算成功率、平均步数等指标 │ └── visualizeQTable.m # Q表热力图生成 ├── Data/ # 数据存储 │ └── trainedQTable.mat # 训练后Q表保存路径 └── Videos/ # 操作讲解视频存放目录含字幕关键文件updateQTable.m仅23行但包含QLearning灵魂function Q updateQTable(Q, state, action, reward, nextState, alpha, gamma) % Q: 当前Q表 (nStates x nActions) % state, action: 当前状态ID与动作ID % reward: 当前步奖励 % nextState: 下一状态ID % alpha: 学习率 (0.1~0.3) % gamma: 折扣因子 (0.9~0.99) Q(state, action) Q(state, action) alpha * ... (reward gamma * max(Q(nextState, :)) - Q(state, action)); end注意max(Q(nextState, :))的写法——它确保Q值更新基于最优下一动作而非随机动作。若误写为Q(nextState, randAction)训练将永不收敛。4.3 主程序参数配置7个超参数的实测推荐值打开main.m找到%% Training Parameters段以下是经127次实验验证的推荐配置参数名推荐值物理意义调参建议alpha0.2学习率新旧Q值融合比例0.3易震荡0.1收敛慢快递场景推荐0.2平衡稳定性与速度gamma0.95折扣因子未来奖励衰减率0.9时AGV短视只顾眼前任务0.99易陷入无限试探0.95适配快递2小时班次epsilon0.9ε-greedy初始探索率训练初期需高探索每episode衰减epsilon epsilon * 0.999maxEpisodes2000最大训练回合数少于1000时Q表未收敛多于3000无明显提升2000为性价比拐点maxStepsPerEpisode300单回合最大步数防止AGV无限循环2000×200网格下300步足够覆盖全地图batteryCapacity100电池总容量单位对应真实AGV 24V/20Ah电池按每步耗电1单位折算rewardDelivery50成功交付奖励需显著高于rewardGoal10否则AGV止步于“到达”修改参数后务必运行testParameterSensitivity.m项目附带进行敏感性分析该脚本自动遍历alpha在[0.1,0.5]间取值绘制收敛曲线帮你确认当前值是否最优。4.4 运行流程实录从启动到产出的完整时间线以R2020b为例完整流程耗时约8分30秒第0秒运行main.m控制台输出Initializing warehouse map...generateWarehouseMap.m加载U型布局耗时0.8秒第1秒initializeQTable.m创建400×6零矩阵内存占用≈19KB第2秒进入训练循环第1 episode开始——AGV从(1,1)出发因epsilon0.9随机选择动作大概率撞墙reward-5第30秒第100 episodeAGV已学会避开主通道障碍物平均步数从280降至190第2分钟第500 episodeQ表热力图初具形态货架坐标处actuate动作Q值明显升高第5分钟第1200 episode成功率突破75%控制台显示Episode 1200: Success Rate 75.2%第8分钟第2000 episode结束calculateMetrics.m输出最终报告Success Rate 92.7%, Avg Steps 142.3, Battery Utilization 68.4%第8分30秒visualizeQTable.m生成6页热力图trainedQTable.mat保存至/Data/目录。实操心得首次运行建议将maxEpisodes设为200观察前200回合的收敛趋势。若第100回合成功率30%立即检查rewardCollision是否设为正数常见笔误或map中起点坐标是否被误标为障碍物。4.5 中文注释深度解析读懂每一行代码背后的工程意图项目所有.m文件均含中文注释但重点不在语法解释而在设计意图披露。例如selectAction.m中% ε-greedy策略以epsilon概率随机探索1-epsilon概率选择当前最优动作 % 【工程意图】快递场景需平衡探索与利用高epsilon0.9确保发现新路径 % 但若epsilon衰减过慢如每100回合降0.1AGV会长期低效本项目采用 % 指数衰减 epsilon epsilon * 0.999确保2000回合后epsilon≈0.13 % 既保留一定探索性又保证策略稳定性。 if rand epsilon action randi([1, nActions]); % 随机选择动作 else [~, action] max(Q(state, :)); % 选择Q值最大动作 end再如checkCollision.m中% 碰撞检测不仅检查目标坐标是否为障碍物还需验证AGV尺寸 % 【工程意图】真实AGV有物理尺寸如长1.2m不能仅以中心点判断。 % 本项目简化为“AGV占据3×3栅格”故需检查以(x,y)为中心的9个坐标。 % 若地图分辨率不足如1格0.5m此简化合理若需更高精度 % 应扩展为多点检测或引入轮廓矩阵。 for dx -1:1 for dy -1:1 nx x dx; ny y dy; if nx1 || nx20 || ny1 || ny20 || map(nx,ny) collision true; return; end end end这些注释不是教MATLAB语法而是在告诉你“为什么这样写换成别的写法会怎样什么情况下需要改”——这才是工程师真正需要的文档。4.6 操作讲解视频要点3个必须暂停细看的关键帧随项目附赠的12分钟讲解视频不是代码朗读而是故障排除导向。以下3个时间点务必暂停03:22演示rewardDelivery从50改为100后的AGV行为突变。此时AGV放弃所有途中任务直扑最近交付点。讲师强调“这证明奖励函数直接定义智能体价值观调参即调教。”07:45展示热力图第4页moveLeft动作中某走廊区域Q值全为负。暂停后讲师打开map矩阵指出map(8,15)被误设为true应为false修正后热力图立刻变为正向。这是Q表调试的黄金范式热力图异常→定位坐标→检查地图→修正验证。10:18对比alpha0.1与alpha0.5的收敛曲线。alpha0.5曲线剧烈震荡alpha0.1缓慢爬升。讲师画出“学习率-收敛速度-稳定性”三角关系图结论“快递调度不容许策略震荡0.2是唯一安全值。”视频末尾提供二维码扫码可下载配套debugChecklist.pdf列出21个常见错误及修复命令如which checkCollision确认函数路径whos Q检查Q表尺寸。4.7 程序导出与二次开发如何把Q表嵌入真实AGV控制器训练完成的trainedQTable.mat是核心资产。导出为嵌入式可用格式只需3步在MATLAB中运行exportQTableForPLC.m项目附带该脚本将Q表转换为C语言数组// Q_table.h const float Q_TABLE[400][6] { {0.00, -0.12, 0.85, -0.03, -0.44, 10.21}, // state 1 {-0.21, 0.00, 0.77, -0.15, -0.33, 9.88}, // state 2 // ... 398行 };将Q_table.h复制到PLC工程目录C代码中通过state_id (y-1)*20 x索引查表在PLC逻辑中将查得的6个Q值输入比较指令输出最大值对应的动作ID1~6。实操心得某客户AGV用STM32F4Flash空间仅512KB。Q_TABLE[400][6]占9.6KB完全可存。但若状态数升至10000需改用哈希表或Q值量化如int8_t存储精度损失3%。本项目预留quantizeQTable.m函数一键完成量化。5. 常见问题与排查技巧实录27个真实踩坑记录与解决方案5.1 训练不收敛Q值持续震荡或全为负值这是最高频问题占调试时间的65%。根本原因90%出自奖励函数设计缺陷而非算法本身。排查按此顺序现象可能原因快速验证法解决方案Q值在正负间剧烈跳变如5.2→-3.8→4.1r_collision绝对值 r_step×预期路径长运行testRewardBalance.m输入r_collision-3看是否仍震荡将r_collision设为-5或更低确保碰撞代价高于绕路成本所有Q值稳定在-0.1左右r_goal或r_delivery未触发AGV从未到达目标在main.m中临时添加disp([Goal reached at step , num2str(step)])检查checkGoalReached.m中目标坐标是否与task.targetPos一致用plot(map)确认地图无遮挡Q值缓慢上升但永不突破0gamma过低0.85或alpha过小0.05修改gamma0.99观察收敛速度是否加快gamma设为0.95alpha设为0.2此为快递场景黄金组合Q值在某区域恒为0该区域被map标记为障碍物但AGV实际可达如斜向移动未实现手动设置AGV位置到该区域执行moveUp看是否报错检查checkCollision.m是否遗漏对角线检测或降低AGV尺寸假设从3×3改为1×1独家技巧在updateQTable.m中插入if mod(episode,100)0, fprintf(Q(%d,%d)%.2f\n, state, action, Q(state,action)); end打印关键Q值变化比看热力图更快定位问题节点。5.2 AGV行为异常卡死、绕圈、无视任务行为问题是奖励函数与环境交互的外在表现需结合轨迹日志分析行为日志特征根本原因修复动作在(10,10)处无限循环轨迹日志显示step:150, pos:[10,10], action:moveRight→step:151, pos:[10,10], action:moveDown→step:152, pos:[10,10], action:moveLeftmap(10,11)、map(11,10)、map(10,9)均为true形成包围圈但checkCollision.m未检测到用imagesc(map)可视化地图确认坐标(10,11)是否真为障碍物若是需在generateWarehouseMap.m中修正AGV始终不抓取快递日志中actuate动作从未触发task.status保持pendingactuate动作的前置条件AGV.postask.targetPos不满足因坐标四舍五入误差在checkActionValid.m中将改为abs(AGV.x-task.x)0.5 abs(AGV.y-task.y)0.5AGV电量耗尽前不返充r_battery权重未随电量动态提升运行testBatteryReward.m输入batteryLevel20看r_battery是否放大确认getReward.m中if batteryLevel25, r_battery r_battery * 1.8; end逻辑已启用5.3 性能瓶颈训练速度慢于预期MATLAB默认单线程但QLearning天然可并行。提速方案向量化状态更新将for episode1:maxEpisodes循环改为parfor需Parallel Computing Toolbox提速约3.2倍预分配Q表Q zeros(nStates, nActions)比Q []快15倍已在initializeQTable.m中实现**禁用图形本文还有配套的精品资源点击获取
返回列表