目录
[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)原理)
✅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