▲一种基于双经验池优先采样技术和Dueling-DQN强化学习模型的路线规划matlab仿真

目录

✅1.问题描述

✨2. 强化学习的马尔可夫决策过程

🚀3. Dueling DQN网络架构

💼4.双经验池分类存储机制

✨5.损失函数与参数更新

💼6.MATLAB程序

💡7.仿真结果分析

👇8.完整程序下载


✅1.问题描述

在深度强化学习(Deep Reinforcement Learning, DRL)的实际应用中,样本利用效率低、训练收敛不稳定、价值估计偏差大是制约智能体决策性能的三大核心瓶颈。为突破这些限制,本文提出并实现一种基于双经验池优先采样(Double Experience Pool Prioritized Sampling)与Dueling DQN相结合的策略方法。该方法的核心思想在于:一方面,利用Dueling DQN(决斗深度Q网络)将状态价值与动作优势解耦,从而在众多相似动作场景中更精确地评估状态本身的价值;另一方面,通过构建双经验池结构,将高价值经验(高TD误差、高回报样本)与普通经验分离存储,再结合优先采样与均匀随机采样按概率混合抽取训练样本,兼顾关键经验的高效复用与样本分布的多样性,避免过拟合与灾难性遗忘。

该策略方法遵循七个标准化步骤:构建Dueling DQN网络进行环境特征提取并由智能体依策略选择动作、收集画面数据、数据筛选与规范化处理、依评判标准分类存储至双经验池、优先采样与均匀随机采样混合抽样、计算损失并反向传播更新参数、最后统计分析智能体运行效果。这一完整闭环为游戏智能体、机器人控制、自动驾驶决策等场景提供了高效、稳定的深度强化学习解决方案。

✨2. 强化学习的马尔可夫决策过程

智能体与环境的交互建模为马尔可夫决策过程,表示为五元组(S,A,P,R,γ)。其中S为状态空间,A为动作空间,P为状态转移概率,R为奖励函数,γ∈(0,1)为折扣因子。智能体的目标是学习最优策略π∗,使累计折扣回报最大化:

🚀3. Dueling DQN网络架构

Dueling DQN的核心创新在于将Q网络分为两个独立流:状态价值流V(s)衡量当前状态的整体好坏,动作优势流A(s,a)衡量各动作相对于平均水平的优劣。二者通过聚合层重构Q值:

其中θ为共享特征提取层参数,β与α分别为价值流与优势流的独立参数。减去优势均值项是为了解决V与A分解的不可辨识性问题,保证网络输出的唯一性和训练稳定性。这种架构在动作对价值影响不显著时,仍能有效学习状态价值,显著提升学习效率。

💼4.双经验池分类存储机制

不同于传统单一经验回放池,本方法构建双经验池:高优先级池DH​存储关键经验,普通池DL​存储常规经验。经验样本(s,a,r,s′)依据评判标准分类,评判指标基于TD误差幅值:

当∣δ∣>τ(阈值)或该样本对应高回报时,存入高优先级池DH​;否则存入普通池DL​。这种分类存储确保了关键转移经验不被普通样本淹没。

样本i的优先级定义为:

κ控制优先化程度(κ=0退化为均匀采样)。训练批次由两部分融合构成:从高优先级池按概率P(i)采样比例ρ,从普通池均匀随机采样比例1−ρ。为消除优先采样引入的分布偏差,采用重要性采样(Importance Sampling)权重:

并归一化为wi​/maxj​wj​,其中η由0逐步退火至1。

✨5.损失函数与参数更新

采用Double DQN思想解耦动作选择与评估,目标值为:

💼6.MATLAB程序

综上所述,完整的实现步骤如下

步骤一:构建Dueling DQN网络(共享层+价值流+优势流),智能体依 ε-greedy 策略选择动作与环境交互。

步骤二:收集环境反馈的画面数据与状态转移信息。

步骤三:对数据进行筛选(剔除异常帧)与规范化(归一化至 [0,1])处理。

步骤四:依TD误差评判标准将经验分类存入双经验池 DH​ 与 DL​。

步骤五:融合优先采样与均匀随机采样,按概率抽取混合训练批次。

步骤六:计算加权损失,反向传播更新网络参数,周期同步目标网络。

步骤七:统计智能体累计奖励、成功率等指标,分析运行效果。

核心程序如下:

%环境构建(GridWorld导航任务) 
gridN=8;                          % 8x8网格环境
nState=gridN*gridN;               % 状态数
nAction=4;                        % 上下左右
goal=nState;                      % 目标格
obstacles=[11 12 20 28 35 43 44]; % 障碍物
startS=1;
% 动作对应位移: 上/下/左/右
dRow=[-1 1 0 0]; 
dCol=[0 0 -1 1];

%超参数
hidden=64; 
gamma=0.95; 
lr=0.01;
epsilon=1.0; 
epsMin=0.05; 
epsDecay=0.99;
batch=32; 
episodes=1000; 
maxStep=100;
tau=0.5; 
rho=0.6; 
%rho:高优先池采样比例
tauSync=0.05;   
memH=1500; 
%双池容量
memL=1500;      

%Dueling网络参数初始化
W1=randn(hidden,nState)*0.1; 
b1=zeros(hidden,1);
Wv=randn(1,hidden)*0.1; 
bv=0;              % 价值流
Wa=randn(nAction,hidden)*0.1; 
ba=zeros(nAction,1); % 优势流
tW1=W1;
tb1=b1;
tWv=Wv;
tbv=bv;
tWa=Wa;
tba=ba; % 目标网络

%双经验池: [s,a,r,s',done,priority]
poolH=zeros(memH,nState*2+4); 
cntH=0; 
ptrH=1;
poolL=zeros(memL,nState*2+4); 
cntL=0; 
ptrL=1;

rewardCurve=zeros(episodes,1);
lossCurve=zeros(episodes,1);
stepCurve=zeros(episodes,1);
successCurve=zeros(episodes,1);
poolHsize=zeros(episodes,1);

......................................................
%提取最优策略路径
cur=startS; path=startS; g=0;
while cur~=goal && g<nState
    s=zeros(nState,1); s(cur)=1;
    [Q,~]=dueling_fwd(s,W1,b1,Wv,bv,Wa,ba);
    [~,a]=max(Q);
    [r,c]=ind2sub([gridN gridN],cur);
    nr=r+dRow(a); 
    nc=c+dCol(a);
    if nr<1||nr>gridN||nc<1||nc>gridN 
        break; 
    end
    ns=sub2ind([gridN gridN],nr,nc);
    if any(ns==obstacles)||any(ns==path)
        break; 
    end
    path=[path ns]; 
    cur=ns; 
    g=g+1;
end


%累计奖励曲线
figure; 
plot(smooth(rewardCurve,4),'b','LineWidth',1.5); 
grid on;
xlabel('训练回合'); 
ylabel('累计奖励'); 
title('强化学习训练奖励曲线');

%损失收敛曲线
figure; 
plot(smooth(lossCurve,4),'r','LineWidth',1.5); 
grid on;
xlabel('训练回合'); 
ylabel('加权TD损失'); 
title('损失函数收敛曲线');

%每回合步数(策略效率)
figure; 
plot(smooth(stepCurve,4),'m','LineWidth',1.5); 
grid on;
xlabel('训练回合'); 
ylabel('完成步数'); 
title('策略效率收敛曲线');

%成功率曲线(滑动窗口)
figure; 
plot(smooth(successCurve,4)*100,'g','LineWidth',1.5); 
grid on;
xlabel('训练回合'); 
ylabel('成功率(%)'); 
title('任务成功率曲线');

%探索率衰减
figure; 
plot(epsMin+(1-epsMin)*epsDecay.^(0:episodes-1),'c','LineWidth',1.5);
grid on; 
xlabel('训练回合'); 
ylabel('\epsilon'); 
title('探索率衰减曲线');

%高优先经验池样本数
figure; 
plot(poolHsize,'Color',[0.85 0.33 0.1],'LineWidth',1.5); 
grid on;
xlabel('训练回合'); 
ylabel('高优先池样本数'); 
title('双经验池-高优先池增长曲线');

%环境与最优策略路径
figure; 
hold on; 
axis equal; 
axis([0 gridN+1 0 gridN+1]);
for i=1:nState
    [r,c]=ind2sub([gridN gridN],i);
    if any(i==obstacles)
        rectangle('Position',[c-0.5 gridN-r+0.5 1 1],'FaceColor',[.3 .3 .3]);
    end
end
[sr,sc]=ind2sub([gridN gridN],startS);
[gr,gc]=ind2sub([gridN gridN],goal);
plot(sc,gridN-sr+1,'gs','MarkerFaceColor','g','MarkerSize',15);
plot(gc,gridN-gr+1,'rp','MarkerFaceColor','r','MarkerSize',18);
pr=zeros(numel(path),1); 
pc=zeros(numel(path),1);
for k=1:numel(path)
    [rr,cc]=ind2sub([gridN gridN],path(k)); 
    pr(k)=gridN-rr+1; 
    pc(k)=cc;
end
plot(pc,pr,'-o','Color','b','LineWidth',2,'MarkerFaceColor','y');
title('Dueling DQN学习到的最优策略路径'); 
grid on;

💡7.仿真结果分析

仿真结果如下图所示:

👇8.完整程序下载

完整可运行代码,博主已上传至CSDN,使用版本为MATLAB2024b:

(本程序包含程序操作步骤视频)

https://download.csdn.net/download/ccsss22/93409848

posted @ 2026-09-08 17:18  hlayumi  阅读(9)  评论(0)    收藏  举报