移动边缘网络中基于双深度QLearning强化学习(DDQL)的高能效资源分配方法

目录

✅1.引言

👉2.算法测试效果

💡3.算法涉及理论知识概要

[1️⃣3.1 网络架构](#1️⃣3.1 网络架构)

[2️⃣3.2 通信模型](#2️⃣3.2 通信模型)

[3️⃣3.3 计算模型](#3️⃣3.3 计算模型)

[4️⃣3.4 存储模型](#4️⃣3.4 存储模型)

[5️⃣3.5 双深度Q学习(DDQL)原理](#5️⃣3.5 双深度Q学习(DDQL)原理)

❤️4.MATLAB核心程序

✨5.完整算法代码文件获得


✅1.引言

随着5G和6G移动通信技术的快速发展,移动边缘计算(Mobile Edge Computing, MEC)已成为支撑物联网、自动驾驶、增强现实等低时延业务的关键技术范式。在移动边缘网络中,海量终端设备产生的多样化计算任务需要通过边缘网关转发至边缘服务器进行处理,这一过程涉及通信资源、计算资源和存储资源的联合调度与优化分配。传统的资源分配方法(如贪心算法、粒子群优化算法)往往面临维度灾难、实时性差等问题,难以适应动态变化的移动边缘网络环境。因此,基于深度强化学习的智能资源分配方法受到了广泛关注。

然而,经典的深度Q学习(Deep Q-Learning, DQL)方法存在Q值过估计问题,导致策略次优甚至训练不稳定。为此,本文系统介绍一种基于双深度Q学习(Double Deep Q-Learning, DDQL)的通信、计算、存储融合资源分配方法,面向多任务、多终端设备、多边缘网关、多边缘服务器共存的下行通信网络架构,以任务平均能耗最小化为优化目标,在满足时延约束和资源容量约束的前提下实现高能效资源分配。该方法相较于随机算法、贪心算法、粒子群优化算法及标准DQL方法,可降低至少5%的任务平均能耗,具有良好的收敛性和较低的时间复杂度。

👉2.算法测试效果

💡3.算法涉及理论知识概要

1️⃣3.1 网络架构

考虑一个典型的移动边缘网络下行通信场景,包含以下要素:N个终端用户设备(User Equipment, UE),M个边缘网关(Edge Gateway, EG),K个边缘服务器(Edge Server, ES)。系统需处理J个计算任务,每个任务jj可由三元组描述:

其中Dj表示任务jj的数据量大小(单位:bits),Cj表示任务j所需的计算量(单位:CPU cycles),τjmax⁡表示任务jj的最大容忍时延。

2️⃣3.2 通信模型

终端设备n通过边缘网关m接入网络时,下行链路的传输速率基于香农公式建模为:

其中Bn,m​为分配给用户nn经由网关m的通信带宽,pn,m为下行发射功率,hn,m​为信道增益,σ2为噪声功率,In,m为同频干扰功率。任务jj的传输时延为:

3️⃣3.3 计算模型

任务j被卸载至边缘服务器k后,分配的计算资源为fj,k(单位:CPU cycles/s),则计算时延为:

根据动态电压频率调节(DVFS)模型,计算能耗为:

其中κ为与芯片架构相关的有效电容系数,典型取值为10−28。

4️⃣3.4 存储模型

边缘服务器k的存储容量为Skmax,任务jj执行所需的存储资源为sj​。缓存命中时无需重复传输,可节省通信开销。存储资源的能耗建模为:

其中η为单位存储资源的能耗系数。

5️⃣3.5 双深度Q学习(DDQL)原理

将资源分配问题建模为马尔可夫决策过程(MDP),定义四元组(S,A,R,γ):

状态空间S:状态st包含当前时隙的信道状态信息、各任务队列长度、边缘服务器的计算和存储资源剩余量:

动作空间A:动作at包括带宽分配方案、功率分配方案、计算资源分配方案和任务卸载决策:

奖励函数𝑅:以能耗最小化为目标,同时引入时延违约惩罚:

其中λ为惩罚系数。γ∈[0,1)为折扣因子。

DDQL核心机制如下:

DDQL的关键创新在于解耦动作选择与价值评估,使用两个独立的网络:评估网络(参数θ)负责选择最优动作,目标网络(参数θ−)负责计算该动作的Q值:

该机制有效消除了Q值过估计问题,提高了训练的稳定性和最终策略质量。

❤️4.MATLAB核心程序

复制代码
for frame = 1:n_frames
    clf;
    ep_idx = frame_indices(frame);
    alloc = allocation_history{ep_idx};
    
    % 主图: 网络拓扑与资源分配
    subplot(2,2,[1,3]);
    hold on;
    
    % 绘制连接线(根据当前分配)
    for t = 1:min(J_tasks, max_steps)
        s_id = alloc(t, 1);
        if s_id >= 1 && s_id <= K_servers
            ue_id = mod(t-1, N_users) + 1;
            gw_id = mod(t-1, M_gateways) + 1;
            
            line_alpha = 0.3 + 0.7 * alloc(t,2)/n_bw_levels;
            line_width = 0.5 + 2.5 * alloc(t,3)/n_pwr_levels;
            
            plot([ue_pos(ue_id,1), gw_pos(gw_id,1)], [ue_pos(ue_id,2), gw_pos(gw_id,2)], ...
                '-', 'Color', [colors_server(s_id,:), line_alpha], 'LineWidth', line_width);
            plot([gw_pos(gw_id,1), es_pos(s_id,1)], [gw_pos(gw_id,2), es_pos(s_id,2)], ...
                '-', 'Color', [colors_server(s_id,:), line_alpha], 'LineWidth', line_width);
        end
    end
    
    % 绘制节点
    scatter(ue_pos(:,1), ue_pos(:,2), 150, 'k', 'filled', 's');
    scatter(gw_pos(:,1), gw_pos(:,2), 200, [1 0.8 0], 'filled', 'd');
    scatter(es_pos(:,1), es_pos(:,2), 300, colors_server, 'filled', 'p');
    
    % 标注
    for i = 1:N_users
        text(ue_pos(i,1), ue_pos(i,2)-0.05, sprintf('UE%d', i), ...
            'HorizontalAlignment', 'center', 'FontSize', 8);
    end
    for i = 1:M_gateways
        text(gw_pos(i,1), gw_pos(i,2)-0.05, sprintf('GW%d', i), ...
            'HorizontalAlignment', 'center', 'FontSize', 9);
    end
    for i = 1:K_servers
        text(es_pos(i,1), es_pos(i,2)+0.06, sprintf('ES%d', i), ...
            'HorizontalAlignment', 'center', 'FontSize', 10, 'FontWeight', 'bold');
    end
    
    xlim([0 1]); ylim([0 1]);
    title(sprintf('Episode %d/%d - 网络拓扑与资源分配', ep_idx, num_episodes), 'FontSize', 12);
    set(gca, 'XTick', [], 'YTick', []);
    
    % 资源分配柱状图
    subplot(2,2,2);
    sv_load = zeros(K_servers, 3);
    for t = 1:min(J_tasks, max_steps)
        s_id = alloc(t,1);
        if s_id >= 1 && s_id <= K_servers
            sv_load(s_id, 1) = sv_load(s_id,1) + alloc(t,2)/n_bw_levels;
            sv_load(s_id, 2) = sv_load(s_id,2) + alloc(t,3)/n_pwr_levels;
            sv_load(s_id, 3) = sv_load(s_id,3) + alloc(t,4)/n_comp_levels;
        end
    end
    sv_load = sv_load / max(sv_load(:)+0.01) * 100;
    bar(sv_load);
    xlabel('边缘服务器'); ylabel('资源利用率 (%)');
    legend('带宽', '功率', '计算', 'Location', 'best');
    title('各服务器资源分配状态', 'FontSize', 11);
    set(gca, 'XTickLabel', {'ES1', 'ES2', 'ES3'});
    grid on;
    
    % 能耗进度曲线
    subplot(2,2,4);
    plot_range = 1:ep_idx;
    plot(plot_range, smooth_ddql(plot_range)*1e3, 'b-', 'LineWidth', 2);
    hold on;
    plot(plot_range, smooth_random(plot_range)*1e3, 'r--', 'LineWidth', 1.5);
    scatter(ep_idx, smooth_ddql(ep_idx)*1e3, 100, 'b', 'filled');
    xlabel('训练回合'); ylabel('平均能耗 (mJ)');
    title('能耗优化进度', 'FontSize', 11);
    legend('DDQL', '随机基线', 'Location', 'northeast');
    xlim([1 num_episodes]);
    grid on;
    
    sgtitle('基于DDQL的高能效资源分配动态演示', 'FontSize', 14, 'FontWeight', 'bold');
    
    drawnow;
    pause(0.1);
end

✨5.完整算法代码文件获得

完整程序见博客首页左侧或者打开本文底部GZH名片

V关注后回复码 :X132)

V

相关推荐
2zcode6 小时前
基于MATLAB的5G物理层文本传输系统仿真与性能分析
开发语言·5g·matlab
feifeigo1236 小时前
基于布谷鸟算法的配电网分布式电源选址定容 MATLAB 实现
开发语言·算法·matlab
rit84324997 小时前
基于MATLAB平台的指纹识别系统实现
开发语言·matlab
橘白3169 小时前
rl笔记(一):策略梯度更新算法推导
人工智能·算法·机器人·强化学习
机器学习之心9 小时前
多工况车速数据集训练BiLSTM-Attention用于车速预测,输出未来多个时间步车速,MATLAB代码
matlab·attention·bilstm·车速预测
jghhh0111 小时前
燃料电池电源 Matlab 仿真方案
开发语言·matlab
wearegogog12311 小时前
用于脑电信号(EEG)分类的 SVM 分类器 Matlab 实现
支持向量机·matlab·分类
zhangfeng113313 小时前
openclaw skills 小龙虾技能 通讯仿真 matlab skill Simulink Agentic Toolkit,通过kimi找到,mcp通讯
开发语言·matlab·openclaw·通讯仿真
chao18984420 小时前
基于 SPEA2 的多目标优化算法 MATLAB 实现
开发语言·算法·matlab
yongui478341 天前
基于 GA 优化的 BP 神经网络算法分析与 MATLAB 实现
神经网络·算法·matlab