基于线性规划的交替方向乘子法求解示例
字数 2469 2025-11-06 12:40:04

基于线性规划的交替方向乘子法求解示例

问题描述

考虑一个分布式优化问题:有两个智能体需要协同最小化一个总成本函数,但各自有私有约束。目标函数可分解为两个局部函数之和,且决策变量通过线性等式耦合。数学模型如下:

minimize \(f_1(x_1) + f_2(x_2)\)
subject to:
\(A_1 x_1 + A_2 x_2 = b\)
\(x_1 \in \mathcal{X}_1, x_2 \in \mathcal{X}_2\)

其中,\(f_1\)\(f_2\) 是凸函数(本例中为线性函数),\(\mathcal{X}_1\)\(\mathcal{X}_2\) 是凸集(如多面体)。耦合约束 \(A_1 x_1 + A_2 x_2 = b\) 要求两个智能体的决策在全局层面保持一致。

解题过程

  1. 问题重构
    • 引入拉格朗日乘子 \(\lambda\) 对耦合约束进行松弛,得到增广拉格朗日函数:

\[ L_\rho(x_1, x_2, \lambda) = f_1(x_1) + f_2(x_2) + \lambda^\top (A_1 x_1 + A_2 x_2 - b) + \frac{\rho}{2} \|A_1 x_1 + A_2 x_2 - b\|^2 \]

  其中 $ \rho > 0 $ 为惩罚参数,用于增强收敛性。
  1. ADMM迭代步骤
    • 初始化:选择初始乘子 \(\lambda^0\)、参数 \(\rho > 0\),设定容忍误差 \(\epsilon\)
    • 迭代更新(第 \(k\) 步):
      1. 更新 \(x_1\)

\[ x_1^{k+1} = \arg\min_{x_1 \in \mathcal{X}_1} \left[ f_1(x_1) + \lambda^k^\top A_1 x_1 + \frac{\rho}{2} \|A_1 x_1 + A_2 x_2^k - b\|^2 \right] \]

     此步骤仅依赖 $ x_2^k $ 和 $ \lambda^k $,可并行或顺序求解。
  2. **更新 $ x_2 $**:

\[ x_2^{k+1} = \arg\min_{x_2 \in \mathcal{X}_2} \left[ f_2(x_2) + \lambda^k^\top A_2 x_2 + \frac{\rho}{2} \|A_1 x_1^{k+1} + A_2 x_2 - b\|^2 \right] \]

     利用最新 $ x_1^{k+1} $ 更新 $ x_2 $。
  3. **更新乘子 $ \lambda $**:

\[ \lambda^{k+1} = \lambda^k + \rho (A_1 x_1^{k+1} + A_2 x_2^{k+1} - b) \]

     通过残差调整乘子,推动解趋向可行域。
  1. 收敛判断
    • 检查原始残差 \(r^k = A_1 x_1^k + A_2 x_2^k - b\) 和对偶残差 \(s^k = \rho A_1^\top A_2 (x_2^k - x_2^{k-1})\) 的范数:

\[ \|r^k\| \leq \epsilon \quad \text{且} \quad \|s^k\| \leq \epsilon \]

  若满足,则终止迭代;否则返回步骤2。

示例演示

设具体问题:

  • \(f_1(x_1) = x_1, f_2(x_2) = 2x_2\)
  • \(\mathcal{X}_1 = \{x_1 \geq 0\}, \mathcal{X}_2 = \{x_2 \geq 0\}\)
  • 耦合约束:\(x_1 + x_2 = 5\)

ADMM求解

  1. 增广拉格朗日函数:

\[ L_\rho = x_1 + 2x_2 + \lambda(x_1 + x_2 - 5) + \frac{\rho}{2}(x_1 + x_2 - 5)^2 \]

  1. 迭代(取 \(\rho=1, \lambda^0=0, \epsilon=10^{-3}\)):
    • 第1步:更新 \(x_1\)

\[ x_1^1 = \arg\min_{x_1 \geq 0} \left[ x_1 + 0 \cdot x_1 + \frac{1}{2}(x_1 + 0 - 5)^2 \right] \]

 求导得 $ 1 + (x_1 - 5) = 0 \Rightarrow x_1^1 = 4 $
  • 第2步:更新 \(x_2\)

\[ x_2^1 = \arg\min_{x_2 \geq 0} \left[ 2x_2 + 0 \cdot x_2 + \frac{1}{2}(4 + x_2 - 5)^2 \right] \]

 求导得 $ 2 + (x_2 - 1) = 0 \Rightarrow x_2^1 = -1 $,投影到非负域得 $ x_2^1 = 0 $
  • 第3步:更新 \(\lambda\)

\[ \lambda^1 = 0 + 1 \cdot (4 + 0 - 5) = -1 \]

  • 残差 \(|r^1| = |4+0-5| = 1 > \epsilon\),继续迭代。

经多轮迭代后,解收敛至 \(x_1^*=3, x_2^*=2\),满足约束且成本最小(总成本=7)。

关键点

  • ADMM通过分解协调实现分布式优化,适合大规模问题。
  • 乘子更新步长由 \(\rho\) 控制,影响收敛速度。
  • 实际应用中需调节 \(\rho\) 并可能使用自适应策略。
基于线性规划的交替方向乘子法求解示例 问题描述 考虑一个分布式优化问题:有两个智能体需要协同最小化一个总成本函数,但各自有私有约束。目标函数可分解为两个局部函数之和,且决策变量通过线性等式耦合。数学模型如下: minimize \( f_ 1(x_ 1) + f_ 2(x_ 2) \) subject to: \( A_ 1 x_ 1 + A_ 2 x_ 2 = b \) \( x_ 1 \in \mathcal{X}_ 1, x_ 2 \in \mathcal{X}_ 2 \) 其中,\( f_ 1 \) 和 \( f_ 2 \) 是凸函数(本例中为线性函数),\( \mathcal{X}_ 1 \) 和 \( \mathcal{X}_ 2 \) 是凸集(如多面体)。耦合约束 \( A_ 1 x_ 1 + A_ 2 x_ 2 = b \) 要求两个智能体的决策在全局层面保持一致。 解题过程 问题重构 引入拉格朗日乘子 \( \lambda \) 对耦合约束进行松弛,得到增广拉格朗日函数: \[ L_ \rho(x_ 1, x_ 2, \lambda) = f_ 1(x_ 1) + f_ 2(x_ 2) + \lambda^\top (A_ 1 x_ 1 + A_ 2 x_ 2 - b) + \frac{\rho}{2} \|A_ 1 x_ 1 + A_ 2 x_ 2 - b\|^2 \] 其中 \( \rho > 0 \) 为惩罚参数,用于增强收敛性。 ADMM迭代步骤 初始化 :选择初始乘子 \( \lambda^0 \)、参数 \( \rho > 0 \),设定容忍误差 \( \epsilon \)。 迭代更新 (第 \( k \) 步): 更新 \( x_ 1 \) : \[ x_ 1^{k+1} = \arg\min_ {x_ 1 \in \mathcal{X}_ 1} \left[ f_ 1(x_ 1) + \lambda^k^\top A_ 1 x_ 1 + \frac{\rho}{2} \|A_ 1 x_ 1 + A_ 2 x_ 2^k - b\|^2 \right ] \] 此步骤仅依赖 \( x_ 2^k \) 和 \( \lambda^k \),可并行或顺序求解。 更新 \( x_ 2 \) : \[ x_ 2^{k+1} = \arg\min_ {x_ 2 \in \mathcal{X}_ 2} \left[ f_ 2(x_ 2) + \lambda^k^\top A_ 2 x_ 2 + \frac{\rho}{2} \|A_ 1 x_ 1^{k+1} + A_ 2 x_ 2 - b\|^2 \right ] \] 利用最新 \( x_ 1^{k+1} \) 更新 \( x_ 2 \)。 更新乘子 \( \lambda \) : \[ \lambda^{k+1} = \lambda^k + \rho (A_ 1 x_ 1^{k+1} + A_ 2 x_ 2^{k+1} - b) \] 通过残差调整乘子,推动解趋向可行域。 收敛判断 检查原始残差 \( r^k = A_ 1 x_ 1^k + A_ 2 x_ 2^k - b \) 和对偶残差 \( s^k = \rho A_ 1^\top A_ 2 (x_ 2^k - x_ 2^{k-1}) \) 的范数: \[ \|r^k\| \leq \epsilon \quad \text{且} \quad \|s^k\| \leq \epsilon \] 若满足,则终止迭代;否则返回步骤2。 示例演示 设具体问题: \( f_ 1(x_ 1) = x_ 1, f_ 2(x_ 2) = 2x_ 2 \) \( \mathcal{X}_ 1 = \{x_ 1 \geq 0\}, \mathcal{X}_ 2 = \{x_ 2 \geq 0\} \) 耦合约束:\( x_ 1 + x_ 2 = 5 \) ADMM求解 : 增广拉格朗日函数: \[ L_ \rho = x_ 1 + 2x_ 2 + \lambda(x_ 1 + x_ 2 - 5) + \frac{\rho}{2}(x_ 1 + x_ 2 - 5)^2 \] 迭代(取 \( \rho=1, \lambda^0=0, \epsilon=10^{-3} \)): 第1步 :更新 \( x_ 1 \) \[ x_ 1^1 = \arg\min_ {x_ 1 \geq 0} \left[ x_ 1 + 0 \cdot x_ 1 + \frac{1}{2}(x_ 1 + 0 - 5)^2 \right ] \] 求导得 \( 1 + (x_ 1 - 5) = 0 \Rightarrow x_ 1^1 = 4 \) 第2步 :更新 \( x_ 2 \) \[ x_ 2^1 = \arg\min_ {x_ 2 \geq 0} \left[ 2x_ 2 + 0 \cdot x_ 2 + \frac{1}{2}(4 + x_ 2 - 5)^2 \right ] \] 求导得 \( 2 + (x_ 2 - 1) = 0 \Rightarrow x_ 2^1 = -1 \),投影到非负域得 \( x_ 2^1 = 0 \) 第3步 :更新 \( \lambda \) \[ \lambda^1 = 0 + 1 \cdot (4 + 0 - 5) = -1 \] 残差 \( |r^1| = |4+0-5| = 1 > \epsilon \),继续迭代。 经多轮迭代后,解收敛至 \( x_ 1^ =3, x_ 2^ =2 \),满足约束且成本最小(总成本=7)。 关键点 ADMM通过分解协调实现分布式优化,适合大规模问题。 乘子更新步长由 \( \rho \) 控制,影响收敛速度。 实际应用中需调节 \( \rho \) 并可能使用自适应策略。