☰
深度强化学习在蜂窝网资源分配中的多目标优化:DQN仿真与应用
2026/9/30 5:33:23 网站建设 项目流程

简介:这份PDF文献聚焦蜂窝网资源分配中的多目标优化难题,提出基于深度强化学习的求解思路,适合通信工程、人工智能交叉领域的科研人员与研究生阅读参考。内容完整呈现算法设计流程:先构建深度神经网络(DNN)优化传输速率,完成前向传输;再将能量效率作为奖惩值,借助Q-learning机制构造误差函数,并用梯度下降法训练网络权值,实现反向更新。文中还详细介绍了深度强化学习、DNN、Q-learning与梯度下降法的核心原理,并给出仿真结果,证明该算法收敛快,且能在传输速率与系统能耗优化上优于传统方法。资源为单一PDF文档,约1.09MB,来自《通信学报》2019年第2期,属于可引用的期刊论文材料。当前已有315人浏览学习,适合需要了解深度强化学习在无线资源管理中应用思路的读者下载研读。

1. 深度强化学习的蜂窝网资源分配算法:一篇能直接指导仿真的论文

做无线资源调度的同学都有过类似的经历:频谱分配问题建起模型很容易,一求解就头大;你优化传输速率,能量效率就往下掉。这篇 2019 年《通信学报》上的论文,核心就一句话——用深度强化学习解决蜂窝网资源分配的多目标优化问题。它的做法值得拆:前向过程用一个 DNN 求解速率优化,反向过程把能量效率当作奖惩值,用 Q-learning 构造误差函数、用梯度下降训练网络权值。最实用的地方在于,论文里的折扣因子可以直接控制资源分配方案偏重速率还是偏重能耗,收敛快,和随机分配、贪婪算法相比都有优势。适合正在做 DRL 资源分配仿真、想复现 DQN 算法的人。

2. 蜂窝网资源分配为什么难:系统模型与多目标优化

在看算法之前,先把这个场景还原清楚。原文假设的是一个下行蜂窝网:M 个微基站,N 个授权移动用户,K 个可用频率,基站和用户都是单天线。每个小区内用 OFDM,一个频率只分给一个用户;不同小区可以复用同一个频率,所以干扰来自所有小区,不是只算相邻小区。系统是集中式控制,中心控制节点不掌握精确的信道状态信息,只知道用户上报的位置、干扰和传输速率这些信息。这个假设很关键,后面对比算法时很多人会栽在这里。

2.1 干扰、速率与能量效率怎么定义

把集合写清楚:m∈{1,…,M}表示基站,n∈{1,…,N}表示用户,k∈{1,…,K}表示频率。L_{m,n}表示用户 n 是否接入基站 m,接入为 1,否则为 0;D_{m,n}^k 表示基站 m 是否把频率 k 分给用户 n;p_{m,n}^k 是基站 m 用频率 k 与用户 n 通信时的发射功率;h_{m,n}^k 是信道增益。

用户 n 在基站 m 上用频率 k 通信时,受到的干扰 I_{m,n}^k 来自其他所有基站和用户的组合:

I_{m,n}^k = ∑_{i=1}^{M} ∑_{j=1}^{N} L_{i,j} D_{i,j}^k p_{i,j}^k h_{i,n}^k

注意要把 i=m 且 j=n 的自身信号项排除掉。这个干扰模型有两个特点:一是完全频率重用,所以干扰源覆盖整个网络;二是干扰强度同时取决于频率分配和功率分配,D 和 p 一旦变化,干扰矩阵也要跟着变。很多复现代码把干扰简化成“相邻基站干扰”,得到的结果趋势会和论文对不上。

传输速率的定义也走标准香农形式:

R_{m,n}^k = log2( 1 + (L_{m,n} D_{m,n}^k p_{m,n}^k h_{m,n}^k) / (σ_{m,n}^2 + I_{m,n}^k) )

系统总速率 R 就是所有基站、所有用户、所有频率上的速率累加。能量效率则采用文献[8]的定义:每焦耳能量最多能传送多少比特,单位是 bit/J,也就是把总速率除以对应的总消耗功率,用来衡量“绿色网络”里的能耗水平。这两个指标一个看“快不快”,一个看“省不省”,天然冲突。

2.2 多目标优化问题与 NP-hard 根源

论文要解决的优化问题可以写成:在基站发射功率总和不超过最大发射功率 P_max,m 的约束下,同时最大化系统总速率 R 和总能量效率 H。约束条件是每个基站 m 都要满足:

∑_{k=1}^{K} ∑_{n=1}^{N} L_{m,n} D_{m,n}^k p_{m,n}^k ≤ P_max,m

这里的变量 D_{m,n}^k 是 0/1 整数变量,p_{m,n}^k 是连续功率变量,所以这是一个混合整数规划。再加上所有小区的干扰互相耦合,问题规模一大就变成 NP-hard。原文明确说,把速率和能耗同时放进目标后,问题已经是 NP-hard,常规方法只能去求次优解,而且求解复杂度高,会拖慢系统运行效率。这就是为什么要引入深度强化学习:用数据驱动的方式去逼近最优解,而不是直接解组合优化问题。

2.3 传统方法为什么在这里不够用

论文引言里梳理了几类传统方法。博弈论方法需要基站预先获得且共享信道状态信息,再用静态古诺博弈求纳什均衡,适合场景固定、信息完整的场合;拍卖机制能把频谱属性和拍卖协议结合,安全性和利用率都不错,但建模复杂;图论着色法适用于全双工 D2D 场景的干扰感知图,吞吐量表现好,但对动态环境还是静态建模;遗传算法有全局搜索能力,可收敛速度慢,而且搜索参数多。

这些方法的一个共同问题是:它们主要面向静态或半静态环境,网络一变就要重新建模求解。另一个问题是当多目标问题本身是 NP-hard 时,传统算法往往只能针对单一目标做启发式搜索,难以同时兼顾速率和能耗。深度强化学习则不一样:它把资源分配看成智能体和环境的交互过程,智能体不需要精确的全局 CSI,只需要通过一次次尝试获取奖惩值,就能调整策略。这个“试错学习”的范式,和传统优化方法比起来,更适合动态、高密度、大数据场景。

3. 前向传输:把约束优化问题映射成 DNN

这篇论文最巧妙的地方,是把一个带约束的优化问题“翻译”成了深度神经网络的逐层计算。前向传输过程的目标是优化系统传输速率。直接对式(10)和功率约束求最优点很困难,所以原文先用增广拉格朗日乘子法把约束优化变成无约束优化,再通过求偏导得到一组迭代更新式,最后把这些迭代式嵌进 DNN 的每一层。

3.1 增广拉格朗日乘子法:从约束优化到无约束优化

原问题里“每个基站发射功率总和不能超过 P_max,m”是一个不等式约束。增广拉格朗日乘子法的套路是:把约束放到目标函数后面,加一个拉格朗日乘子项,再加一个二次惩罚项。这样得到的增广拉格朗日函数 φ(D,p,μ,η),其中 μ 是拉格朗日乘子,η 是惩罚因子。

构造出 φ 之后,对 D_{m,n}^k 和 p_{m,n}^k 分别求偏导并令偏导为零,就能写出 D 和 p 的迭代更新方程。墙内只有一点:迭代方程里同时出现了干扰 I、信道增益 h 和噪声 σ²,所以每一步迭代其实都在更新频率分配和功率分配。拉格朗日乘子 μ 也用类似的迭代式更新,公式(15)和(16)就是把这三组变量串起来的核心。

到这里你可能会问:这和神经网络有什么关系?关系在于,每一次迭代就相当于神经网络的一层前向计算:输入上一层的 D、p、μ,经过“非线性转换函数”后输出下一层的 D、p、μ。这些非线性转换函数就是由迭代更新方程决定的,不是随便选的激活函数。论文里的 DNN 深度,本质上就是迭代更新次数。

3.2 DNN 的网络结构与层间映射

原文构造的 DNN 包含输入层、频率分配层、功率分配层、乘子层和输出层。频率分配层和功率分配层的权值参数是信道增益 h 和噪声 σ²;层的输出分别是 D、p 和 μ 的更新值。网络输入不是原始图像或文本,而是蜂窝网用户接入信息 L 和干扰信息 I。意思是每来一组用户接入关系,DNN 从输入层开始逐层计算,最终在输出层给出一组数值,每个数值对应一种频谱分配方案和功率分配方案。

用表格表示会更直观:

DNN 层输入输出非线性转换
输入层L、I初始 D、p、μ无
频率分配层上一轮 D、p、μ更新后的 DD 的迭代更新式
功率分配层上一轮 D、p、μ更新后的 pp 的迭代更新式
乘子层上一轮 D、p、μ更新后的 μμ 的迭代更新式
输出层最终 D、p、μ各种资源分配方案的评价值取最大值对应策略

初始化这一步也比较具体:信道增益 h 按瑞利分布初始化,噪声 σ² 按高斯白噪声初始化。这意味着复现的时候不能随便用全零或均匀分布初始化,否则迭代更新的数值轨迹会偏。

3.3 前向迭代流程与终止条件

前向传输的执行顺序是:先把当前时刻观测到的 L 和 I 输入 DNN,DNN 从第一层开始,依次执行频率分配、功率分配、乘子更新,得到新一组 D、p、μ。然后判断相邻两次迭代的差值:

θ_D 表示频率分配变化的容忍阈值,θ_p 表示功率分配变化的容忍阈值。当 |D^{(l+1)} - D^{(l)}| < θ_D 且 |p^{(l+1)} - p^{(l)}| < θ_p 时,认为 DNN 前向传播已经收敛,可以停止迭代。另一种情况是迭代次数达到最大更新次数 Q1,也强制停止。输出层会给出当前状态下每种资源分配方案的数值,选择最大数值对应的 D 和 p 作为 t 时刻的资源分配策略。

原文仿真中设定 θ_D = θ_p = 0.01,结果发现 DNN 深度到 6 层时,相邻两次 D 和 p 的差值已经小于 0.01。所以论文图 5 里 DNN 深度是 6,不是随便拍出来的,而是根据前向迭代收敛条件自然得到的。这个细节在复现时很值得注意:你的网络深度应该由相邻层差值决定,而不是拍脑袋定一个固定层数。

4. 反向训练:用 Q-learning 构造误差,用梯度下降更新权值

前向传输解决的是“给定 L 和 I,怎么找到一个好方案”;反向训练解决的是“怎么让 DNN 的权值不断调整,让前面找方案的能力越来越强”。这两者合在一起才构成完整的深度强化学习算法。

4.1 DQN 框架里的状态、动作与奖惩

原文用的是深度 Q 网络(DQN)。DQN 的核心是用一个深度神经网络来近似动作状态值函数 Q(s,a),也就是“在状态 s 下执行动作 a,能得到的长期累积回报期望”。论文里的状态 s 可以理解为当前观测到的 L、I 以及已有的 D、p 信息;动作 a 就是一组频谱分配方案和功率分配方案;执行完动作后会得到一个奖惩值 r_t,这里 r_t 定义为系统的能量效率,也就是执行完该资源分配方案后测到的 bit/J 值。

整个学习过程是:智能体在当前状态 s_t 下,根据 DNN 输出的 Q 值选择动作 a_t,与环境交互后得到奖惩 r_t,并进入下一状态 s_{t+1}。这些“状态、动作、奖惩、下一状态”被存进记忆单元,供 Q-learning 机制反复训练。这里有一个容易被忽略的点:用户接入信息 L 被认为是固定不变的,也就是说同一轮学习里用户和基站的接入关系不会因为资源分配而改变。复现时如果让 L 也参与更新,误差函数的输入就和论文不一致了。

4.2 误差函数与折扣因子 γ 的语义

Q-learning 里最核心的更新公式是:

Q(s,a) ← Q(s,a) + α( r + γ max_{a'} Q(s',a') - Q(s,a) )

论文把右边括号里的部分抽出来,直接作为反向训练的误差函数:

E = r_t + γ max_{a'} Q(s',a') - Q(s,a)

这里 γ 是折扣因子,取值在 [0,1] 之间。它的含义是当前奖惩和未来累积回报之间的权重。γ 越接近 0,模型越“短视”,当前奖惩 r_t 占主导,几乎不看未来价值;γ 越接近 1,模型越“远视”,未来状态的价值和当前奖惩占有同样比重。这也是全文最值得做实验的参数。

误差函数构造好之后,如果 E 大于设定阈值 θ_E,就说明当前 DNN 对 Q 值的估计还不够准,需要反向传播更新权值。原文设定 θ_E = 0.001,当反向训练次数达到 5 次时,误差降到 0.001 以下,反向训练结束,输出最优频率分配和功率分配方案。

4.3 梯度计算与权值更新顺序

更新 DNN 权值用的是梯度下降法。权值在这里就是信道增益 h 和噪声 σ²,误差函数 E 对 h 和 σ² 分别求偏导,再沿着负梯度方向调整。由于 h 和 σ² 不直接出现在误差公式里,需要通过链式法则一层层倒推:先算误差对 p 的偏导,再算 p 对 h 的偏导,乘起来得到误差对 h 的梯度;σ² 同理。

原文给出的权值更新形式是:

h ← h - λ(∂E/∂h)

σ² ← σ² - λ(∂E/∂σ²)

λ 是学习速率。更新完权值后,重新执行 DNN 的前向传输,再算新的误差,再判断是否小于 θ_E,如此循环。如果反向训练次数达到最大次数 Q2,即使误差没降到阈值以下,也会停止训练,把当前 D、p 作为最优资源分配策略。

这里有个反直觉的点:信道增益 h 在这里是当作“网络权值”来训练的,不是当作环境参数来输入的。所以不要把它当成固定已知量。论文的意思是:DNN 的输出层给出资源分配方案,环境反馈的能量效率作为奖惩值,梯度下降去调整 h 和 σ²,让 Q 值逼近真实回报。也就是说,网络在“学习”信道环境规律,而不是依赖外部给出的精确 CSI。

5. 复现避坑:从公式到仿真代码的五个问题

把论文公式翻译成代码不难,难的是复现结果和论文趋势一致。以下五个问题我基本每次都会碰到,这里按“现象→原因→解决”写出来。

5.1 折扣因子设成 0.5,曲线不上不下

现象:把 γ 设成 0.5,以为能“同时优化”速率和能耗,结果传输速率比随机分配高一点,能量效率比贪婪算法低一点,两个指标都不是最优,很难向别人解释这个中间点有什么价值。

原因:γ 控制的是误差函数里当前奖惩和未来动作状态值函数的占比,不是两个目标之间的线性加权。γ=0 时策略偏重当前奖惩,也就是偏重能量效率;γ=1 时未来 Q 值占同样比重,系统更看重长期累积回报,间接偏重传输速率。γ=0.5 只是让两者达到一种折中,并不会同时取得两个极值。

解决:先跑 γ=0 和 γ=1 两个极端,确定速率和能量效率的边界;再根据实际业务偏好,比如“我就要省电”或“我就要高吞吐”去选 γ,不要在第一次仿真就指望一个中间值能给出漂亮的双指标提升。

5.2 前向阈值设太小,DNN 深度越跑越深

现象:把 θ_D 和 θ_p 从 0.01 改成 0.001,发现 D 和 p 的相邻迭代差值一直达不到阈值,DNN 深度从 6 层一路涨到十几层,计算耗时大幅增加,输出结果却没变好多少。

原因:迭代更新式在接近最优点时,变化幅度本来就越来越小,这是数值迭代的正常特性。阈值设得太小,会把数值噪声也当成“还没收敛”,于是网络被迫继续加深,实际上已经过拟合了这轮输入。

解决:按原文先取 0.01,打印每一层相邻 D、p 的差值,观察差值下降曲线。如果差值在 6 层左右已经降到 0.01 以下,就没必要追求更小阈值。想提高精度,可以用更精细的功率控制或更多蒙特卡洛样本,而不是单纯压阈值。

5.3 反向训练误差不降,或者降了但结果变差

现象:E 一直大于 θ_E,训练次数打到上限 Q2 也不收敛;有时误差明明降下来了,可每次输出的资源分配结果却忽高忽低。

原因:常见原因是学习速率 λ 太大,梯度下降在误差曲面两边震荡;另一个原因是奖惩值尺度没处理。能量效率单位是 bit/J,数值可能比速率小几个数量级,误差函数里 r_t 和 Q 值不在一个量级,梯度被奖惩值主导,权值更新就偏了。

解决:先对 r_t 做归一化或缩放,让它和 Q 值大致同尺度;把 λ 从 0.01 级别开始试,跑几步看 E 的变化。如果 E 震荡,就调小 λ;如果 E 单调不降,检查奖惩值是不是写成了总速率,而不是能量效率。论文里反向训练 5 次就能收敛,并不意味着你也能 5 次收敛,这取决于初始化和λ。

5.4 用精确 CSI 代替论文假设,结果偏乐观

现象:复现时直接用全局信道矩阵做前向输入,测出来的传输速率比论文高不少,收敛也很快,但换个场景就失效了。

原因:论文明确说了,中心控制节点不知道精确信道状态信息,只有用户通过导频信号上报的位置、干扰和传输速率。精确 CSI 意味着干扰计算里包含了所有理想信息,资源分配器等于“开了上帝视角”,问题难度被人为降低,算法趋势自然和论文对不上。

解决:生成仿真数据时,按论文流程先得到接入关系 L、干扰 I 和速率信息,再把这些“上报量”作为 DNN 输入;基站侧不要直接读取全局信道矩阵。这样跑出来的结果才更接近论文里“基于不完全信息做分配”的设定。

5.5 对比算法没有共用同一批随机样本,方差盖过真实差距

现象:和贪婪算法对比时,有时自己算法好很多,有时又差不多;多跑几轮,结论就翻盘了。

原因:蜂窝用户是随机分布在小区里的,每次运行样本不同,算法性能方差很大。如果对比算法在不同随机样本上跑,相当于用两套不同难度的题目做对比,结果当然不稳定。

解决:采用论文里的蒙特卡洛方法,重复执行 1000 次取平均值,而且在每一轮都固定随机种子。让所有对比算法跑同一批用户分布,再统计传输速率和能量效率的平均值。这个习惯能帮你省掉大量“为什么结果不稳定”的排查时间。

6. 验证实验怎么做:从参数表到“手熟”的复现习惯

验证一篇算法论文,最直接的方法是复现它的仿真设置。原文表 1 的参数可以照抄:3 个微基站,小区半径 200 m,微基站最大发射功率 38 dBm,载波频率 2.0 GHz,子信道带宽 180 kHz,可用信道数 0~8,移动用户数 10。

我的做法是先跑两个极端:γ=0 看能量效率上限,γ=1 看传输速率上限。这两条边界线画出来,再扫描中间值,就能把“偏重程度”和两个指标的关系画成一张图。如果 γ=0 时能量效率不是最高、γ=1 时速率不是最高,说明代码里奖惩值或误差函数符号可能写反了。

接着看收敛指标。论文里前向 DNN 深度 6 层,反向训练 5 次收敛,这是在你复现正确的迭代更新式、阈值设成 0.01 和 0.001 的前提下才会出现的结果。如果你的深度和训练次数差得太远,优先检查增广拉格朗日函数里的惩罚因子 η 和学习速率 λ,而不是怀疑算法本身。

最后做对比实验时,把子信道数从 4 扩展到其他值,用同一批随机用户分布比较随机分配算法、贪婪算法和深度强化学习算法。三个要看的指标是:平均传输速率、平均能量效率、误差函数随反向训练次数的下降曲线。前两个看优化效果,后一个看算法是否真的在收敛。

我现在每次复现这类论文,都会先把 γ=0 和 γ=1 两个极端跑通,再固定随机种子做对比。这个习惯帮我避开了不少“看起来收敛但结果不靠谱”的坑。希望帮到你。

本文还有配套的精品资源,点击获取

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询