【路径规划】基于广义策略迭代、蒙特卡罗、Q学习实现2D网格路径规划Matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,擅长数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。

🍎个人主页:Matlab科研工作室

🍊个人信条:格物致知,求助可私信。

🔥 内容介绍

路径规划是机器人学、人工智能等领域中的一个核心问题。本文探讨了在二维网格环境下,使用广义策略迭代、蒙特卡罗方法以及Q学习三种强化学习算法进行路径规划的实现。首先,我们简要介绍了路径规划的概念及其在现实应用中的重要性。然后,详细阐述了广义策略迭代、蒙特卡罗和Q学习算法的原理、流程,并将其应用于二维网格环境中的路径规划问题。通过实验分析,我们比较了这三种方法在不同参数设置下的性能,包括学习速度、路径长度和成功率等方面,并讨论了它们的优缺点。最后,总结了研究结果,并展望了未来可能的改进方向。

1. 引言

在机器人自主导航、游戏AI设计以及其他许多领域,路径规划都是至关重要的一环。其核心目标是在给定的起始点和目标点之间,找到一条满足特定约束条件的、最优或近似最优的路径。传统的路径规划方法,如A*算法、Dijkstra算法等,在环境模型已知的情况下表现良好,但当面对未知或动态变化的环境时,这些方法的适应性受到限制。强化学习(Reinforcement Learning, RL)作为一种通过智能体与环境交互来学习最优行为策略的机器学习范式,为解决这一问题提供了新的思路。

本文聚焦于在二维网格环境下利用强化学习算法进行路径规划。二维网格环境是一种简单且易于分析的环境,它能够方便地展示强化学习算法的基本原理和性能。我们选择了三种具有代表性的强化学习算法进行研究:广义策略迭代(Generalized Policy Iteration, GPI)、蒙特卡罗方法(Monte Carlo Method, MC)和Q学习(Q-Learning)。本文将深入探讨这三种算法在二维网格路径规划中的实现,并通过实验对比它们的性能,以期为读者提供对强化学习在路径规划应用中的一个全面认识。

2. 理论基础

2.1 强化学习基本概念

强化学习的核心思想是通过智能体(Agent)与环境(Environment)之间的交互来学习最优策略。其基本构成要素包括:

  • 状态(State): 对环境的描述,智能体在特定时间点所处的状态。

  • 动作(Action): 智能体在特定状态下所能执行的行为。

  • 奖励(Reward): 环境对智能体执行特定动作的反馈,用于评估该动作的好坏。

  • 策略(Policy): 智能体在不同状态下选择动作的规则。

  • 状态转移概率(State Transition Probability): 在特定状态下执行特定动作后,转移到下一个状态的概率。

强化学习的目标是找到一个最优策略,使得智能体在整个学习过程中获得的累积奖励最大化。

2.2 广义策略迭代 (Generalized Policy Iteration, GPI)

广义策略迭代是一种框架,包含策略评估(Policy Evaluation)和策略改进(Policy Improvement)两个步骤。该过程交替进行,直至策略收敛至最优策略。

  • 策略评估: 根据当前策略计算每个状态的价值函数(Value Function),该价值函数表示在当前策略下,从该状态出发所能获得的期望累积奖励。

  • 策略改进: 基于当前的价值函数,选择在每个状态下能够最大化期望累积奖励的动作,从而更新策略。

广义策略迭代的经典形式是策略迭代(Policy Iteration),它在每次评估和改进时都完全遍历所有状态。然而,这种方法计算量较大,因此在实际应用中,通常使用更灵活的广义策略迭代,它允许不完全的策略评估和改进。

2.3 蒙特卡罗方法 (Monte Carlo Method, MC)

蒙特卡罗方法是一种基于采样的强化学习算法,它通过多次与环境的交互生成完整的经验轨迹(Episode),并利用这些轨迹来估计价值函数。

  • 完整轨迹: 从初始状态开始,直到达到终止状态,所有状态、动作和奖励组成的序列。

  • 策略评估: 根据完整轨迹中的回报(Return),也就是从某个状态开始到轨迹结束的累积奖励,来估计该状态的价值。

  • 策略改进: 根据估计的价值函数,改进策略,例如采用ε-greedy策略。

蒙特卡罗方法适用于具有完整轨迹的环境,且无需环境的转移概率模型。它能够在无模型(Model-free)的情况下进行学习。

2.4 Q学习 (Q-Learning)

Q学习是一种时序差分(Temporal Difference, TD)算法,也是一种无模型算法。其核心思想是学习一个Q函数,该函数表示在特定状态下执行特定动作所能获得的期望累积奖励。

  • Q函数: Q(s, a) 表示在状态s下执行动作a所能获得的期望累积奖励。

  • 更新规则: Q学习通过以下公式更新Q函数:

     

    css

    Q(s, a) ← Q(s, a) + α [r + γ max_a' Q(s', a') - Q(s, a)]

    其中,α是学习率,γ是折扣因子,r是当前奖励,s'是下一个状态,a'是在下一个状态下能够最大化Q值的动作。

Q学习是一种off-policy算法,它可以学习最优策略,而无需遵循当前策略进行探索。

3. 二维网格环境建模与实现

3.1 环境表示

我们将二维网格环境建模为一个M×N的矩阵。每个格子代表一个状态,智能体可以在网格中向上、下、左、右四个方向移动。我们设置起始状态和目标状态,并可以根据需要添加障碍物。

3.2 状态表示

每个状态用一个包含两个元素的元组(x, y)表示,其中x和y分别代表该状态在网格中的横纵坐标。

3.3 动作空间

智能体的动作空间定义为:{上,下,左,右},对应于在网格中向上、下、左、右移动。

3.4 奖励机制

  • 到达目标状态时,给予正奖励 (+10)。

  • 撞墙或进入障碍物时,给予负奖励 (-10)。

  • 其他移动,给予轻微负奖励 (-1)。

4. 算法实现与实验

4.1 广义策略迭代实现

在广义策略迭代的实现中,我们采用了异步策略迭代。策略评估不完全遍历所有状态,而是采用一定的迭代次数,策略改进采用贪婪策略,选择当前价值最高的动作。

4.2 蒙特卡罗方法实现

我们使用ε-greedy策略进行探索,生成多个完整轨迹。对于每个轨迹,我们使用轨迹中的回报来更新价值函数。为了提高估计的准确性,我们重复多次生成轨迹并进行更新。

4.3 Q学习实现

Q学习的实现中,我们初始化Q函数为零,并使用ε-greedy策略进行探索。根据Q学习的更新规则,我们不断迭代更新Q函数,直至收敛。

📣 部分代码

​ 

    %% On-policy Monte Carlo Algorithm (Section 2.9.3 of [1])

    for train_loop = 1:1:training_iterations

        % To generate E-soft policy

        prob_ngreedy = epsilon/abs(num_actions);

        prob_greedy = 1 - epsilon*(1 - 1/abs(num_actions));

        %% [TODO] Generate a training episode

        % Generate random initial state index

        cur_state_index = randi([1,num_states]);

        %cur_state_index = 1;

        % Perform Rollout

        ep_ite = 0;

        R_total = 0;

        while true

            % Add episode lenght

            ep_ite = ep_ite+1;

            % Sample current epsilon-soft policy

            greedy_idx = find(policy(cur_state_index,:));

            w = prob_ngreedy*ones(1,num_actions);

            w(greedy_idx) = prob_greedy;

            action = randsample(num_actions,1,true,w);

            % Interaction with environment

            [next_state_index, ~, reward] = ...

                one_step_gw_model(world, cur_state_index, action, 1);

            % Log data for the episode

            D(1,ep_ite) = cur_state_index;

            D(2,ep_ite) = action;

            D(3,ep_ite) = reward;

            % Continue to next state in episode

            cur_state_index = next_state_index;

            % Episode Termination

            if ep_ite == episode_length || cur_state_index == ...

                    world.mdp.s_goal_index

                break

            end

        end

        % Look for unique pairs (x,u) and first occurrence in D

        [unique_pairs,first_ocurrence] = unique(D(1:2,:)',"rows");

        unique_pairs = unique_pairs';

        first_ocurrence = first_ocurrence';

        % Compute cumulative reward and update Q(x,u)

        for i = 1:1:size(unique_pairs,2)

            % Cumulative reward

            R_i = 0;

            D_size = size(D(1,first_ocurrence(i):end),2);

            exp_val = 1;

            for val = first_ocurrence(i):1:first_ocurrence(i)+D_size-1

                if val == first_ocurrence(i)

                    R_i = D(3,first_ocurrence(i));

                else

                    R_i = R_i + gamma^exp_val * D(3,val);

                    exp_val = exp_val +1;

                end

            end

            R_total = R_total + R_i;

            % Update Q(s,a)

            Q(unique_pairs(1,i),unique_pairs(2,i)) = ...

                Q(unique_pairs(1,i),unique_pairs(2,i)) + omega*...

                (R_i-Q(unique_pairs(1,i),unique_pairs(2,i))); 

        end

        %% [TODO] Update policy(s,a)

        for i = 1:1:size(unique_pairs,2)

            % Find best Policy

            [~,best_action] = max(Q(unique_pairs(1,i),1:4));

            % Update policy matrix

            policy(unique_pairs(1,i),1:4) = zeros(1,4);

            policy(unique_pairs(1,i),best_action) = 1;

        end

        %% Decrease the exploration

        % Set k_epsilon = 1 to maintain constant exploration

        epsilon = epsilon * k_epsilon;

        

        %% [TODO] Update the reward plot

        EpisodeTotalReturn = R_total; % Sum of the reward obtained during the episode

        plotter = UpdatePlot(plotter, EpisodeTotalReturn);

        drawnow;

        %pause(0.1);

        %% Decrease the exploration

        % Set k_epsilon = 1 to maintain constant exploration

        epsilon = epsilon * k_epsilon;

        

    end

    

    % Return deterministic policy for plotting

    [~, policy_index] = max(policy, [], 2);

end

⛳️ 运行结果

🔗 参考文献

🎈 部分理论引用网络文献,若有侵权联系博主删除

👇 关注我领取海量matlab电子书和数学建模资料

🎁  私信完整代码和数据获取及论文数模仿真定制

🌿 往期回顾可以关注主页,点击搜索

🏆团队擅长辅导定制多种科研领域MATLAB仿真,助力科研梦:

🌈 各类智能优化算法改进及应用
生产调度、经济调度、装配线调度、充电优化、车间调度、发车优化、水库调度、三维装箱、物流选址、货位优化、公交排班优化、充电桩布局优化、车间布局优化、集装箱船配载优化、水泵组合优化、解医疗资源分配优化、设施布局优化、可视域基站和无人机选址优化、背包问题、 风电场布局、时隙分配优化、 最佳分布式发电单元分配、多阶段管道维修、 工厂-中心-需求点三级选址问题、 应急生活物质配送中心选址、 基站选址、 道路灯柱布置、 枢纽节点部署、 输电线路台风监测装置、 集装箱调度、 机组优化、 投资优化组合、云服务器组合优化、 天线线性阵列分布优化、CVRP问题、VRPPD问题、多中心VRP问题、多层网络的VRP问题、多中心多车型的VRP问题、 动态VRP问题、双层车辆路径规划(2E-VRP)、充电车辆路径规划(EVRP)、油电混合车辆路径规划、混合流水车间问题、 订单拆分调度问题、 公交车的调度排班优化问题、航班摆渡车辆调度问题、选址路径规划问题、港口调度、港口岸桥调度、停机位分配、机场航班调度、泄漏源定位
🌈 机器学习和深度学习时序、回归、分类、聚类和降维

2.1 bp时序、回归预测和分类

2.2 ENS声神经网络时序、回归预测和分类

2.3 SVM/CNN-SVM/LSSVM/RVM支持向量机系列时序、回归预测和分类

2.4 CNN|TCN|GCN卷积神经网络系列时序、回归预测和分类

2.5 ELM/KELM/RELM/DELM极限学习机系列时序、回归预测和分类
2.6 GRU/Bi-GRU/CNN-GRU/CNN-BiGRU门控神经网络时序、回归预测和分类

2.7 ELMAN递归神经网络时序、回归\预测和分类

2.8 LSTM/BiLSTM/CNN-LSTM/CNN-BiLSTM/长短记忆神经网络系列时序、回归预测和分类

2.9 RBF径向基神经网络时序、回归预测和分类

2.10 DBN深度置信网络时序、回归预测和分类
2.11 FNN模糊神经网络时序、回归预测
2.12 RF随机森林时序、回归预测和分类
2.13 BLS宽度学习时序、回归预测和分类
2.14 PNN脉冲神经网络分类
2.15 模糊小波神经网络预测和分类
2.16 时序、回归预测和分类
2.17 时序、回归预测预测和分类
2.18 XGBOOST集成学习时序、回归预测预测和分类
2.19 Transform各类组合时序、回归预测预测和分类
方向涵盖风电预测、光伏预测、电池寿命预测、辐射源识别、交通流预测、负荷预测、股价预测、PM2.5浓度预测、电池健康状态预测、用电量预测、水体光学参数反演、NLOS信号识别、地铁停车精准预测、变压器故障诊断
🌈图像处理方面
图像识别、图像分割、图像检测、图像隐藏、图像配准、图像拼接、图像融合、图像增强、图像压缩感知
🌈 路径规划方面
旅行商问题(TSP)、车辆路径问题(VRP、MVRP、CVRP、VRPTW等)、无人机三维路径规划、无人机协同、无人机编队、机器人路径规划、栅格地图路径规划、多式联运运输问题、 充电车辆路径规划(EVRP)、 双层车辆路径规划(2E-VRP)、 油电混合车辆路径规划、 船舶航迹规划、 全路径规划规划、 仓储巡逻
🌈 无人机应用方面
无人机路径规划、无人机控制、无人机编队、无人机协同、无人机任务分配、无人机安全通信轨迹在线优化、车辆协同无人机路径规划
🌈 通信方面
传感器部署优化、通信协议优化、路由优化、目标定位优化、Dv-Hop定位优化、Leach协议优化、WSN覆盖优化、组播优化、RSSI定位优化、水声通信、通信上传下载分配
🌈 信号处理方面
信号识别、信号加密、信号去噪、信号增强、雷达信号处理、信号水印嵌入提取、肌电信号、脑电信号、信号配时优化、心电信号、DOA估计、编码译码、变分模态分解、管道泄漏、滤波器、数字信号处理+传输+分析+去噪、数字信号调制、误码率、信号估计、DTMF、信号检测
🌈电力系统方面
微电网优化、无功优化、配电网重构、储能配置、有序充电、MPPT优化、家庭用电
🌈 元胞自动机方面
交通流 人群疏散 病毒扩散 晶体生长 金属腐蚀
🌈 雷达方面
卡尔曼滤波跟踪、航迹关联、航迹融合、SOC估计、阵列优化、NLOS识别
🌈 车间调度
零等待流水车间调度问题NWFSP 、 置换流水车间调度问题PFSP、 混合流水车间调度问题HFSP 、零空闲流水车间调度问题NIFSP、分布式置换流水车间调度问题 DPFSP、阻塞流水车间调度问题BFSP

👇

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值