基于线性规划的“无线网络中基于能效最大化的多用户功率分配”建模与求解示例
字数 7957 2025-12-23 17:10:19

基于线性规划的“无线网络中基于能效最大化的多用户功率分配”建模与求解示例

我将为你讲解一个在无线通信网络中, 以提高能效(Energy Efficiency)为目标的多用户下行链路功率分配问题的线性规划建模与求解过程。我们将聚焦于一个典型场景:一个基站同时为多个用户提供服务, 目标是在满足每个用户最低数据速率要求的前提下, 最大化整个系统的“比特/焦耳”能效。由于目标函数通常是分式形式, 我们需要巧妙地将其转化为线性规划可处理的形式。


第一步:问题场景与定义

假设我们有一个蜂窝网络下行链路场景:

  • 一个基站 (Base Station, BS): 位于小区中心, 总发射功率上限为 \(P_{max}\)
  • K 个用户设备 (User Equipment, UE): 分布在小区内, 每个用户 \(k\) 有一个最低可接受的数据速率要求 \(R_k^{min}\) (bps)。
  • 信道: 基站到每个用户 \(k\) 的信道功率增益为 \(h_k\)。我们假设信道状态信息(CSI)是已知的。基站处的加性高斯白噪声功率为 \(N_0\)
  • 传输模型: 基站采用正交多址接入(如OFDMA), 为每个用户分配独立的、无干扰的频带或时隙。因此, 用户间无同频干扰。
  • 目标: 为每个用户分配发射功率 \(p_k\), 在满足各用户最低速率和总功率约束的条件下, 最大化系统的能效(EE)。能效定义为总数据速率与总发射功率之比。

第二步:建立数学模型(初始非线性形式)

首先, 我们建立目标函数和约束条件的初始数学模型。

  1. 数据速率: 根据香农公式, 用户 \(k\) 的数据速率为:

\[ R_k(p_k) = B \cdot \log_2(1 + \frac{p_k h_k}{N_0 B}) \]

其中 $B$ 是分配给每个用户的带宽(为简化,假设均分且固定, 其影响可并入常数, 后续为简化符号, 我们常省略 $B$ 或将其归一化处理, 用信噪比 $SNR = p_k h_k / N_0$ 表示)。
  1. 能效目标函数

\[ \text{EE}(\mathbf{p}) = \frac{\sum_{k=1}^{K} R_k(p_k)}{\sum_{k=1}^{K} p_k + P_c} \]

其中:
*   $\mathbf{p} = [p_1, p_2, ..., p_K]^T$ 是功率分配向量。
*   $P_c > 0$ 是基站电路的固定功耗(与发射功率无关的部分, 如射频电路、基带处理等)。这使得目标函数始终有定义(分母不为零), 且更符合实际。
  1. 约束条件

    • 非负功率\(p_k \ge 0, \quad \forall k\)
    • 总功率约束\(\sum_{k=1}^{K} p_k \le P_{max}\)
    • 用户服务质量 (QoS) 约束\(R_k(p_k) \ge R_k^{min}, \quad \forall k\)
  2. 原问题 (非线性分式规划问题)

\[ \begin{aligned} \max_{\mathbf{p}} \quad & \frac{\sum_{k=1}^{K} B \log_2(1 + \frac{p_k h_k}{N_0 B})}{\sum_{k=1}^{K} p_k + P_c} \\ \text{s.t.} \quad & \sum_{k=1}^{K} p_k \le P_{max}, \\ & B \log_2(1 + \frac{p_k h_k}{N_0 B}) \ge R_k^{min}, \quad \forall k, \\ & p_k \ge 0, \quad \forall k. \end{aligned} \]

这是一个**分式规划**(目标函数为两个函数之比)和**非线性规划**(约束中包含对数函数)问题, 无法直接用线性规划求解。

第三步:关键线性化变换(问题转化的核心)

为了将其转化为线性规划, 我们需要两个关键的数学变换:

变换A: 从功率变量 \(p_k\) 到速率变量 \(r_k\) 的转换
由于QoS约束和数据速率函数 \(R_k(p_k)\) 是严格单调递增的, 我们可以进行变量替换。定义新的决策变量为用户的数据速率 \(r_k = R_k(p_k)\)。 其反函数为:

\[p_k(r_k) = \frac{N_0 B}{h_k} (2^{r_k/B} - 1) \]

这个关系将功率 \(p_k\) 表示为速率 \(r_k\) 的函数。注意\(p_k(r_k)\)\(r_k\) 的凸函数(指数形式)。虽然这还不是线性的, 但为我们下一步的线性化提供了基础。

变换B: 对目标函数进行分式规划的经典处理——Dinkelbach变换
对于形如 \(\max_{\mathbf{x}} \frac{N(\mathbf{x})}{D(\mathbf{x})}\) 的分式规划问题(其中 \(D(\mathbf{x}) > 0\)), Dinkelbach提出了一种迭代算法。其核心思想是: 最优能效值 \(\eta^*\) 和最优功率分配 \(\mathbf{p}^*\) 满足如下非线性方程特征

\[\max_{\mathbf{p} \in \mathcal{S}} \{ N(\mathbf{p}) - \eta^* D(\mathbf{p}) \} = 0 \]

其中 \(\mathcal{S}\) 是可行域。

基于此, 我们可以构造一个参数化的辅助问题: 对于一个给定的能效参数 \(\eta\), 求解:

\[F(\eta) = \max_{\mathbf{p} \in \mathcal{S}} \{ \sum_{k} R_k(p_k) - \eta (\sum_{k} p_k + P_c) \} \]

如果对于某个 \(\eta\), 我们能求得 \(F(\eta) = 0\), 那么这个 \(\eta\) 就是原分式规划问题的最优能效值 \(\eta^*\)。Dinkelbach算法通过迭代更新 \(\eta\) 来逼近这个点。

将变换A和B结合
\(p_k(r_k)\) 的表达式代入辅助问题 \(F(\eta)\) 的目标函数和约束中:

  1. 新目标函数\(F(\eta) = \max_{\mathbf{r}} \{ \sum_{k=1}^{K} r_k - \eta (\sum_{k=1}^{K} \underbrace{\frac{N_0 B}{h_k} (2^{r_k/B} - 1)}_{p_k(r_k)} + P_c) \}\)
  2. 新约束条件(用 \(r_k\) 表示):
    • \(r_k \ge R_k^{min}, \quad \forall k\)
    • \(\sum_{k=1}^{K} \frac{N_0 B}{h_k} (2^{r_k/B} - 1) \le P_{max}\)
    • \(r_k \ge 0, \quad \forall k\) (已被 \(r_k \ge R_k^{min} > 0\) 包含)

关键线性化步骤
虽然目标函数和约束中仍有 \(2^{r_k/B}\) 项(非线性), 但我们可以利用其凸性。在Dinkelbach算法的每一次迭代中, \(\eta\) 是固定的。此时, 辅助问题的目标函数是凹函数(线性项 \(r_k\) 减去凸函数 \(\eta \cdot p_k(r_k)\) 仍为凹函数? 我们需要小心验证。实际上, \(p_k(r_k)\) 是凸的, 所以 \(-\eta p_k(r_k)\) 是凹的, 加上线性的 \(r_k\), 整个目标是凹函数)。最大化一个凹函数在线性约束下是凸优化问题, 但还不是线性规划

为了得到线性规划, 我们需要一个更强的简化假设, 或者对信噪比(SNR)做近似。

实用的线性化技巧: 高信噪比近似(或对数变换的线性近似)
在实际系统中, 为了满足最低速率要求, 信噪比通常不会极低。我们可以使用一个近似公式:
在高信噪比下, \(\log_2(1+SNR) \approx \log_2(SNR)\)。但这仍是非线性的。
一个更有效的线性化是采用“分贝(dB)域”的线性关系。定义发射功率为线性值, 但注意到 \(p_k = \frac{N_0}{h_k}(2^{r_k} - 1)\)。当信噪比 \(2^{r_k} \gg 1\) 时, 有 \(p_k \approx \frac{N_0}{h_k} 2^{r_k}\)。两边取以2为底的对数:

\[\log_2 p_k \approx \log_2(\frac{N_0}{h_k}) + r_k \]

\(r_k \approx \log_2 p_k - \log_2(\frac{N_0}{h_k})\)。这个关系在双对数坐标下是线性的, 但在我们的原始变量中依然不是。

为了严格得到线性规划, 我们采用“分段线性近似”
我们将每个用户的速率-功率函数 \(R_k(p_k)\) 用一组线性线段来近似。即, 在功率区间 \([0, P_{max}]\) 上选择 \(M\) 个点 \(p_k^{(1)}, p_k^{(2)}, ..., p_k^{(M)}\), 计算出对应的速率点 \(r_k^{(m)} = B\log_2(1+p_k^{(m)}h_k/(N_0B))\)。那么, 对于任意功率 \(p_k\), 其速率 \(r_k\) 可以近似表示为这些点的凸组合(即线性插值)。

引入新变量: 设 \(w_{k,m} \ge 0\) 为权重, 满足 \(\sum_{m=1}^{M} w_{k,m} = 1\)。 则近似有:

\[p_k \approx \sum_{m=1}^{M} w_{k,m} \cdot p_k^{(m)}, \quad r_k \approx \sum_{m=1}^{M} w_{k,m} \cdot r_k^{(m)} \]

通过这种方式, 我们成功地将非线性的 \(R_k(p_k)\) 关系, 转换为了关于新权重变量 \(w_{k,m}\)线性关系。此时, 原问题中的所有表达式(总功率、总速率、单个用户速率)都变成了 \(w_{k,m}\) 的线性函数。


第四步:构建最终的线性规划模型

假设我们已经为每个用户 \(k\) 准备好了一组分段线性化的点 \(\{ (p_k^{(m)}, r_k^{(m)}) \}_{m=1}^{M}\)。定义决策变量为权重 \(w_{k,m} \ge 0\)

对于Dinkelbach算法中的某一次迭代(固定 \(\eta\), 其辅助问题可以写为如下线性规划

\[\begin{aligned} \max_{w_{k,m}} \quad & \sum_{k=1}^{K} \left( \sum_{m=1}^{M} w_{k,m} r_k^{(m)} \right) - \eta \left[ \sum_{k=1}^{K} \left( \sum_{m=1}^{M} w_{k,m} p_k^{(m)} \right) + P_c \right] \\ \text{s.t.} \quad & \sum_{k=1}^{K} \left( \sum_{m=1}^{M} w_{k,m} p_k^{(m)} \right) \le P_{max} \quad &\text{(总功率约束线性化)} \\ & \sum_{m=1}^{M} w_{k,m} r_k^{(m)} \ge R_k^{min}, \quad \forall k \quad &\text{(QoS约束线性化)} \\ & \sum_{m=1}^{M} w_{k,m} = 1, \quad \forall k \quad &\text{(凸组合约束, 保证每个用户的功率/速率落在分段点构成的凸包内)} \\ & w_{k,m} \ge 0, \quad \forall k, m \end{aligned} \]

目标函数简化: 注意到目标函数是线性的, 可以重写为:

\[\max_{w_{k,m}} \quad \sum_{k=1}^{K} \sum_{m=1}^{M} w_{k,m} \left( r_k^{(m)} - \eta p_k^{(m)} \right) - \eta P_c \]

由于 \(-\eta P_c\) 是常数, 优化时可以忽略。因此, 每次迭代求解的线性规划核心是:

\[\max_{w_{k,m}} \quad \sum_{k=1}^{K} \sum_{m=1}^{M} w_{k,m} \left( r_k^{(m)} - \eta p_k^{(m)} \right) \]

服从上述的线性约束。


第五步:求解算法流程

综合以上步骤, 完整的求解算法如下:

  1. 初始化

    • 为每个用户 \(k\), 在其可能的功率范围 \([0, P_{max}]\) 内选择足够密的点 \(p_k^{(m)}\), 计算对应的 \(r_k^{(m)} = B\log_2(1+p_k^{(m)}h_k/(N_0B))\)
    • 初始化能效参数 \(\eta^{(0)} = 0\)。 设置收敛容差 \(\epsilon > 0\) 和一个最大迭代次数。
  2. Dinkelbach 迭代 (对于 \(t = 0, 1, 2, ...\)):
    a. 求解线性规划: 对于当前的 \(\eta^{(t)}\), 求解第四步中建立的线性规划模型, 得到最优权重解 \(w_{k,m}^*\) 以及对应的最优总速率 \(R^{(t)} = \sum_{k,m} w_{k,m}^* r_k^{(m)}\) 和总功率 \(P_{total}^{(t)} = \sum_{k,m} w_{k,m}^* p_k^{(m)}\)
    b. 计算辅助函数值\(F(\eta^{(t)}) = R^{(t)} - \eta^{(t)}(P_{total}^{(t)} + P_c)\)
    c. 判断收敛: 如果 \(|F(\eta^{(t)})| < \epsilon\), 则算法收敛。令最优能效 \(\eta^* = \eta^{(t)}\), 最优功率分配 \(p_k^* = \sum_m w_{k,m}^* p_k^{(m)}\)。 算法结束。
    d. 更新能效参数: 否则, 更新 \(\eta^{(t+1)} = \frac{R^{(t)}}{P_{total}^{(t)} + P_c}\)。 这是用当前解计算出的“实际能效”, 它将比 \(\eta^{(t)}\) 更接近最优值 \(\eta^*\)
    e. 返回步骤 a, 进行下一次迭代。

  3. 输出: 算法收敛后, 输出最大能效值 \(\eta^*\) 和对应的最优功率分配方案 \(\{p_k^*\}\)


第六步:实例演算与结果解读

假设一个简单场景: \(K=2\) 个用户, \(P_{max}=10W\), \(P_c=1W\), \(B=1Hz\) (归一化), \(N_0=1\)
用户1: \(h_1 = 1\), \(R_1^{min} = 1.5\) bps。
用户2: \(h_2 = 0.5\), \(R_2^{min} = 1.0\) bps。

我们为每个用户在功率区间 [0, 10] 上均匀取5个点: \(p_k^{(m)} \in \{0, 2.5, 5, 7.5, 10\}\), 计算出对应的 \(r_k^{(m)}\)

执行Dinkelbach迭代

  1. \(\eta^{(0)} = 0\)。 此时线性规划目标为最大化总速率 \(\sum r_k\)。 求解线性规划得到: 将所有功率分给信道条件更好的用户1, 在满足用户2最低速率后, 剩余功率给用户1。 假设得到 \(R^{(0)} = 3.2\) bps, \(P_{total}^{(0)} = 8.0\) W。 计算 \(F(0)=3.2\), 未收敛。
  2. 更新 \(\eta^{(1)} = 3.2 / (8.0+1) \approx 0.3556\)
  3. \(\eta^{(1)} = 0.3556\) 求解线性规划。 目标函数变为最大化 \(\sum (r_k - 0.3556 p_k)\)。 这会在速率收益和功率成本之间进行权衡。 可能解是: 用户1功率降低一些, 用户2功率刚好满足最低速率。 得到新解 \(R^{(1)} = 2.8\), \(P_{total}^{(1)} = 6.5\)。 计算 \(F(0.3556) = 2.8 - 0.3556*(6.5+1) = 2.8 - 2.6667 = 0.1333 > \epsilon\)
  4. 更新 \(\eta^{(2)} = 2.8 / (6.5+1) = 0.3733\)
  5. 继续迭代, 直至 \(|F(\eta^{(t)})| < 0.001\)

最终结果解读
假设收敛后 \(\eta^* \approx 0.38\) bps/W (或 bits/Joule)。 对应的功率分配可能是: 用户1获得较多功率以产生高数据速率(因为其信道好, 能效高), 用户2仅获得刚好满足最低速率的功率。 总功率可能未用满 \(P_{max}\), 因为继续增加功率带来的速率收益(分子增量)可能抵不过能效分母的惩罚(\(\eta^*\) 乘以功率增量), 使得目标函数 \(F(\eta)\) 不再增加。 这体现了能效最大化和单纯速率最大化的本质区别: 能效优化倾向于“精打细算”地用功率, 而不是挥霍所有功率去追逐微弱的速率提升


总结

这个示例展示了如何将一个通信领域复杂的、非线性的能效最大化问题, 通过分段线性近似Dinkelbach变换, 转化为一系列可以高效求解的线性规划问题。核心思路是:

  1. 处理分式目标: 用Dinkelbach算法将分式规划转化为一系列参数化的子问题。
  2. 处理非线性函数: 用分段线性化将用户的速率-功率函数近似为线性关系, 从而将子问题的目标函数和所有约束都转化为决策变量(分段权重)的线性表达式。
  3. 迭代求解: 外层循环更新能效参数 \(\eta\), 内层循环求解一个线性规划。最终收敛到原问题的最优能效解。

这种方法在计算复杂度和求解精度之间取得了很好的平衡, 是通信资源分配中处理能效优化问题的经典且实用的方法。

基于线性规划的“无线网络中基于能效最大化的多用户功率分配”建模与求解示例 我将为你讲解一个在无线通信网络中, 以提高能效(Energy Efficiency)为目标的多用户下行链路功率分配问题的线性规划建模与求解过程。我们将聚焦于一个典型场景:一个基站同时为多个用户提供服务, 目标是 在满足每个用户最低数据速率要求的前提下, 最大化整个系统的“比特/焦耳”能效 。由于目标函数通常是分式形式, 我们需要巧妙地将其转化为线性规划可处理的形式。 第一步:问题场景与定义 假设我们有一个蜂窝网络下行链路场景: 一个基站 (Base Station, BS) : 位于小区中心, 总发射功率上限为 \(P_ {max}\)。 K 个用户设备 (User Equipment, UE) : 分布在小区内, 每个用户 \(k\) 有一个最低可接受的数据速率要求 \(R_ k^{min}\) (bps)。 信道 : 基站到每个用户 \(k\) 的信道功率增益为 \(h_ k\)。我们假设信道状态信息(CSI)是已知的。基站处的加性高斯白噪声功率为 \(N_ 0\)。 传输模型 : 基站采用正交多址接入(如OFDMA), 为每个用户分配独立的、无干扰的频带或时隙。因此, 用户间无同频干扰。 目标 : 为每个用户分配发射功率 \(p_ k\), 在满足各用户最低速率和总功率约束的条件下, 最大化系统的能效(EE)。能效定义为总数据速率与总发射功率之比。 第二步:建立数学模型(初始非线性形式) 首先, 我们建立目标函数和约束条件的初始数学模型。 数据速率 : 根据香农公式, 用户 \(k\) 的数据速率为: \[ R_ k(p_ k) = B \cdot \log_ 2(1 + \frac{p_ k h_ k}{N_ 0 B}) \] 其中 \(B\) 是分配给每个用户的带宽(为简化,假设均分且固定, 其影响可并入常数, 后续为简化符号, 我们常省略 \(B\) 或将其归一化处理, 用信噪比 \(SNR = p_ k h_ k / N_ 0\) 表示)。 能效目标函数 : \[ \text{EE}(\mathbf{p}) = \frac{\sum_ {k=1}^{K} R_ k(p_ k)}{\sum_ {k=1}^{K} p_ k + P_ c} \] 其中: \(\mathbf{p} = [ p_ 1, p_ 2, ..., p_ K ]^T\) 是功率分配向量。 \(P_ c > 0\) 是基站电路的固定功耗(与发射功率无关的部分, 如射频电路、基带处理等)。这使得目标函数始终有定义(分母不为零), 且更符合实际。 约束条件 : 非负功率 : \(p_ k \ge 0, \quad \forall k\)。 总功率约束 : \(\sum_ {k=1}^{K} p_ k \le P_ {max}\)。 用户服务质量 (QoS) 约束 : \(R_ k(p_ k) \ge R_ k^{min}, \quad \forall k\)。 原问题 (非线性分式规划问题) : \[ \begin{aligned} \max_ {\mathbf{p}} \quad & \frac{\sum_ {k=1}^{K} B \log_ 2(1 + \frac{p_ k h_ k}{N_ 0 B})}{\sum_ {k=1}^{K} p_ k + P_ c} \\ \text{s.t.} \quad & \sum_ {k=1}^{K} p_ k \le P_ {max}, \\ & B \log_ 2(1 + \frac{p_ k h_ k}{N_ 0 B}) \ge R_ k^{min}, \quad \forall k, \\ & p_ k \ge 0, \quad \forall k. \end{aligned} \] 这是一个 分式规划 (目标函数为两个函数之比)和 非线性规划 (约束中包含对数函数)问题, 无法直接用线性规划求解。 第三步:关键线性化变换(问题转化的核心) 为了将其转化为线性规划, 我们需要两个关键的数学变换: 变换A: 从功率变量 \(p_ k\) 到速率变量 \(r_ k\) 的转换 由于QoS约束和数据速率函数 \(R_ k(p_ k)\) 是严格单调递增的, 我们可以进行变量替换。定义新的决策变量为用户的数据速率 \(r_ k = R_ k(p_ k)\)。 其反函数为: \[ p_ k(r_ k) = \frac{N_ 0 B}{h_ k} (2^{r_ k/B} - 1) \] 这个关系将功率 \(p_ k\) 表示为速率 \(r_ k\) 的函数。 注意 : \(p_ k(r_ k)\) 是 \(r_ k\) 的凸函数(指数形式)。虽然这还不是线性的, 但为我们下一步的线性化提供了基础。 变换B: 对目标函数进行分式规划的经典处理——Dinkelbach变换 对于形如 \(\max_ {\mathbf{x}} \frac{N(\mathbf{x})}{D(\mathbf{x})}\) 的分式规划问题(其中 \(D(\mathbf{x}) > 0\)), Dinkelbach提出了一种迭代算法。其核心思想是: 最优能效值 \(\eta^ \) 和最优功率分配 \(\mathbf{p}^ \) 满足如下 非线性方程特征 : \[ \max_ {\mathbf{p} \in \mathcal{S}} \{ N(\mathbf{p}) - \eta^* D(\mathbf{p}) \} = 0 \] 其中 \(\mathcal{S}\) 是可行域。 基于此, 我们可以构造一个 参数化的辅助问题 : 对于一个给定的能效参数 \(\eta\), 求解: \[ F(\eta) = \max_ {\mathbf{p} \in \mathcal{S}} \{ \sum_ {k} R_ k(p_ k) - \eta (\sum_ {k} p_ k + P_ c) \} \] 如果对于某个 \(\eta\), 我们能求得 \(F(\eta) = 0\), 那么这个 \(\eta\) 就是原分式规划问题的最优能效值 \(\eta^* \)。Dinkelbach算法通过迭代更新 \(\eta\) 来逼近这个点。 将变换A和B结合 : 将 \(p_ k(r_ k)\) 的表达式代入辅助问题 \(F(\eta)\) 的目标函数和约束中: 新目标函数 : \(F(\eta) = \max_ {\mathbf{r}} \{ \sum_ {k=1}^{K} r_ k - \eta (\sum_ {k=1}^{K} \underbrace{\frac{N_ 0 B}{h_ k} (2^{r_ k/B} - 1)}_ {p_ k(r_ k)} + P_ c) \}\) 新约束条件 (用 \(r_ k\) 表示): \(r_ k \ge R_ k^{min}, \quad \forall k\) \(\sum_ {k=1}^{K} \frac{N_ 0 B}{h_ k} (2^{r_ k/B} - 1) \le P_ {max}\) \(r_ k \ge 0, \quad \forall k\) (已被 \(r_ k \ge R_ k^{min} > 0\) 包含) 关键线性化步骤 : 虽然目标函数和约束中仍有 \(2^{r_ k/B}\) 项(非线性), 但我们可以利用其凸性。在Dinkelbach算法的每一次迭代中, \(\eta\) 是固定的。此时, 辅助问题的目标函数是凹函数(线性项 \(r_ k\) 减去凸函数 \(\eta \cdot p_ k(r_ k)\) 仍为凹函数? 我们需要小心验证。实际上, \(p_ k(r_ k)\) 是凸的, 所以 \(-\eta p_ k(r_ k)\) 是凹的, 加上线性的 \(r_ k\), 整个目标是凹函数)。 最大化一个凹函数在线性约束下是凸优化问题, 但还不是线性规划 。 为了得到 线性规划 , 我们需要一个更强的简化假设, 或者对信噪比(SNR)做近似。 实用的线性化技巧: 高信噪比近似(或对数变换的线性近似) 在实际系统中, 为了满足最低速率要求, 信噪比通常不会极低。我们可以使用一个近似公式: 在高信噪比下, \(\log_ 2(1+SNR) \approx \log_ 2(SNR)\)。但这仍是非线性的。 一个更有效的线性化是 采用“分贝(dB)域”的线性关系 。定义发射功率为线性值, 但注意到 \(p_ k = \frac{N_ 0}{h_ k}(2^{r_ k} - 1)\)。当信噪比 \(2^{r_ k} \gg 1\) 时, 有 \(p_ k \approx \frac{N_ 0}{h_ k} 2^{r_ k}\)。两边取以2为底的对数: \[ \log_ 2 p_ k \approx \log_ 2(\frac{N_ 0}{h_ k}) + r_ k \] 即 \(r_ k \approx \log_ 2 p_ k - \log_ 2(\frac{N_ 0}{h_ k})\)。这个关系在双对数坐标下是线性的, 但在我们的原始变量中依然不是。 为了严格得到线性规划, 我们采用“分段线性近似” : 我们将每个用户的速率-功率函数 \(R_ k(p_ k)\) 用一组线性线段来近似。即, 在功率区间 \([ 0, P_ {max}]\) 上选择 \(M\) 个点 \(p_ k^{(1)}, p_ k^{(2)}, ..., p_ k^{(M)}\), 计算出对应的速率点 \(r_ k^{(m)} = B\log_ 2(1+p_ k^{(m)}h_ k/(N_ 0B))\)。那么, 对于任意功率 \(p_ k\), 其速率 \(r_ k\) 可以近似表示为这些点的凸组合(即线性插值)。 引入新变量 : 设 \(w_ {k,m} \ge 0\) 为权重, 满足 \(\sum_ {m=1}^{M} w_ {k,m} = 1\)。 则近似有: \[ p_ k \approx \sum_ {m=1}^{M} w_ {k,m} \cdot p_ k^{(m)}, \quad r_ k \approx \sum_ {m=1}^{M} w_ {k,m} \cdot r_ k^{(m)} \] 通过这种方式, 我们成功地将非线性的 \(R_ k(p_ k)\) 关系, 转换为了关于新权重变量 \(w_ {k,m}\) 的 线性关系 。此时, 原问题中的所有表达式(总功率、总速率、单个用户速率)都变成了 \(w_ {k,m}\) 的线性函数。 第四步:构建最终的线性规划模型 假设我们已经为每个用户 \(k\) 准备好了一组分段线性化的点 \(\{ (p_ k^{(m)}, r_ k^{(m)}) \} {m=1}^{M}\)。定义决策变量为权重 \(w {k,m} \ge 0\)。 对于Dinkelbach算法中的某一次迭代(固定 \(\eta\)) , 其辅助问题可以写为如下 线性规划 : \[ \begin{aligned} \max_ {w_ {k,m}} \quad & \sum_ {k=1}^{K} \left( \sum_ {m=1}^{M} w_ {k,m} r_ k^{(m)} \right) - \eta \left[ \sum_ {k=1}^{K} \left( \sum_ {m=1}^{M} w_ {k,m} p_ k^{(m)} \right) + P_ c \right ] \\ \text{s.t.} \quad & \sum_ {k=1}^{K} \left( \sum_ {m=1}^{M} w_ {k,m} p_ k^{(m)} \right) \le P_ {max} \quad &\text{(总功率约束线性化)} \\ & \sum_ {m=1}^{M} w_ {k,m} r_ k^{(m)} \ge R_ k^{min}, \quad \forall k \quad &\text{(QoS约束线性化)} \\ & \sum_ {m=1}^{M} w_ {k,m} = 1, \quad \forall k \quad &\text{(凸组合约束, 保证每个用户的功率/速率落在分段点构成的凸包内)} \\ & w_ {k,m} \ge 0, \quad \forall k, m \end{aligned} \] 目标函数简化 : 注意到目标函数是线性的, 可以重写为: \[ \max_ {w_ {k,m}} \quad \sum_ {k=1}^{K} \sum_ {m=1}^{M} w_ {k,m} \left( r_ k^{(m)} - \eta p_ k^{(m)} \right) - \eta P_ c \] 由于 \(-\eta P_ c\) 是常数, 优化时可以忽略。因此, 每次迭代求解的线性规划核心是: \[ \max_ {w_ {k,m}} \quad \sum_ {k=1}^{K} \sum_ {m=1}^{M} w_ {k,m} \left( r_ k^{(m)} - \eta p_ k^{(m)} \right) \] 服从上述的线性约束。 第五步:求解算法流程 综合以上步骤, 完整的求解算法如下: 初始化 : 为每个用户 \(k\), 在其可能的功率范围 \([ 0, P_ {max}]\) 内选择足够密的点 \(p_ k^{(m)}\), 计算对应的 \(r_ k^{(m)} = B\log_ 2(1+p_ k^{(m)}h_ k/(N_ 0B))\)。 初始化能效参数 \(\eta^{(0)} = 0\)。 设置收敛容差 \(\epsilon > 0\) 和一个最大迭代次数。 Dinkelbach 迭代 (对于 \(t = 0, 1, 2, ...\)): a. 求解线性规划 : 对于当前的 \(\eta^{(t)}\), 求解第四步中建立的线性规划模型, 得到最优权重解 \(w_ {k,m}^ \) 以及对应的最优总速率 \(R^{(t)} = \sum_ {k,m} w_ {k,m}^ r_ k^{(m)}\) 和总功率 \(P_ {total}^{(t)} = \sum_ {k,m} w_ {k,m}^* p_ k^{(m)}\)。 b. 计算辅助函数值 : \(F(\eta^{(t)}) = R^{(t)} - \eta^{(t)}(P_ {total}^{(t)} + P_ c)\)。 c. 判断收敛 : 如果 \(|F(\eta^{(t)})| < \epsilon\), 则算法收敛。令最优能效 \(\eta^* = \eta^{(t)}\), 最优功率分配 \(p_ k^* = \sum_ m w_ {k,m}^* p_ k^{(m)}\)。 算法结束。 d. 更新能效参数 : 否则, 更新 \(\eta^{(t+1)} = \frac{R^{(t)}}{P_ {total}^{(t)} + P_ c}\)。 这是用当前解计算出的“实际能效”, 它将比 \(\eta^{(t)}\) 更接近最优值 \(\eta^* \)。 e. 返回步骤 a, 进行下一次迭代。 输出 : 算法收敛后, 输出最大能效值 \(\eta^ \) 和对应的最优功率分配方案 \(\{p_ k^ \}\)。 第六步:实例演算与结果解读 假设一个简单场景: \(K=2\) 个用户, \(P_ {max}=10W\), \(P_ c=1W\), \(B=1Hz\) (归一化), \(N_ 0=1\)。 用户1: \(h_ 1 = 1\), \(R_ 1^{min} = 1.5\) bps。 用户2: \(h_ 2 = 0.5\), \(R_ 2^{min} = 1.0\) bps。 我们为每个用户在功率区间 [ 0, 10] 上均匀取5个点: \(p_ k^{(m)} \in \{0, 2.5, 5, 7.5, 10\}\), 计算出对应的 \(r_ k^{(m)}\)。 执行Dinkelbach迭代 : \(\eta^{(0)} = 0\)。 此时线性规划目标为最大化总速率 \(\sum r_ k\)。 求解线性规划得到: 将所有功率分给信道条件更好的用户1, 在满足用户2最低速率后, 剩余功率给用户1。 假设得到 \(R^{(0)} = 3.2\) bps, \(P_ {total}^{(0)} = 8.0\) W。 计算 \(F(0)=3.2\), 未收敛。 更新 \(\eta^{(1)} = 3.2 / (8.0+1) \approx 0.3556\)。 以 \(\eta^{(1)} = 0.3556\) 求解线性规划。 目标函数变为最大化 \(\sum (r_ k - 0.3556 p_ k)\)。 这会在速率收益和功率成本之间进行权衡。 可能解是: 用户1功率降低一些, 用户2功率刚好满足最低速率。 得到新解 \(R^{(1)} = 2.8\), \(P_ {total}^{(1)} = 6.5\)。 计算 \(F(0.3556) = 2.8 - 0.3556* (6.5+1) = 2.8 - 2.6667 = 0.1333 > \epsilon\)。 更新 \(\eta^{(2)} = 2.8 / (6.5+1) = 0.3733\)。 继续迭代, 直至 \(|F(\eta^{(t)})| < 0.001\)。 最终结果解读 : 假设收敛后 \(\eta^* \approx 0.38\) bps/W (或 bits/Joule)。 对应的功率分配可能是: 用户1获得较多功率以产生高数据速率(因为其信道好, 能效高), 用户2仅获得刚好满足最低速率的功率。 总功率可能未用满 \(P_ {max}\), 因为继续增加功率带来的速率收益(分子增量)可能抵不过能效分母的惩罚(\(\eta^* \) 乘以功率增量), 使得目标函数 \(F(\eta)\) 不再增加。 这体现了能效最大化和单纯速率最大化的本质区别: 能效优化倾向于“精打细算”地用功率, 而不是挥霍所有功率去追逐微弱的速率提升 。 总结 这个示例展示了如何将一个通信领域复杂的、非线性的能效最大化问题, 通过 分段线性近似 和 Dinkelbach变换 , 转化为一系列可以高效求解的线性规划问题。核心思路是: 处理分式目标 : 用Dinkelbach算法将分式规划转化为一系列参数化的子问题。 处理非线性函数 : 用分段线性化将用户的速率-功率函数近似为线性关系, 从而将子问题的目标函数和所有约束都转化为决策变量(分段权重)的线性表达式。 迭代求解 : 外层循环更新能效参数 \(\eta\), 内层循环求解一个线性规划。最终收敛到原问题的最优能效解。 这种方法在计算复杂度和求解精度之间取得了很好的平衡, 是通信资源分配中处理能效优化问题的经典且实用的方法。