基于线性规划的二次规划问题求解示例
字数 2797 2025-10-27 08:13:39

基于线性规划的二次规划问题求解示例

问题描述
某工厂生产两种产品,其单位利润分别为 \(c_1 = 3\)\(c_2 = 5\),但利润随产量增加而边际递减,需考虑成本函数 \(\frac{1}{2}x_1^2 + x_2^2\)。生产需满足资源约束:

  • 原材料:\(2x_1 + 3x_2 \leq 10\)
  • 工时:\(x_1 + 2x_2 \leq 6\)
  • 非负性:\(x_1, x_2 \geq 0\)
    目标函数为总利润最大化:

\[\max \, z = 3x_1 + 5x_2 - \frac{1}{2}x_1^2 - x_2^2 \]

该问题为凸二次规划(目标函数为凹函数,Hessian矩阵负定),可用线性规划逼近或直接求解。


解题过程

步骤1:问题标准化
将最大化问题转化为最小化问题,并写成标准形式:

\[\min \, f(x) = -3x_1 - 5x_2 + \frac{1}{2}x_1^2 + x_2^2 \]

约束条件:

\[\begin{cases} 2x_1 + 3x_2 \leq 10 \\ x_1 + 2x_2 \leq 6 \\ x_1, x_2 \geq 0 \end{cases} \]

步骤2:构造拉格朗日函数
引入松弛变量 \(s_1, s_2 \geq 0\) 将不等式转为等式:

\[2x_1 + 3x_2 + s_1 = 10, \quad x_1 + 2x_2 + s_2 = 6 \]

拉格朗日函数为:

\[L(x, \lambda) = \frac{1}{2}x_1^2 + x_2^2 - 3x_1 - 5x_2 + \lambda_1(2x_1 + 3x_2 + s_1 - 10) + \lambda_2(x_1 + 2x_2 + s_2 - 6) \]

其中 \(\lambda_1, \lambda_2 \geq 0\) 为对偶变量。

步骤3:KKT条件
根据Karush-Kuhn-Tucker条件,最优解需满足:

  1. 梯度条件

\[\frac{\partial L}{\partial x_1} = x_1 - 3 + 2\lambda_1 + \lambda_2 = 0 \]

\[\frac{\partial L}{\partial x_2} = 2x_2 - 5 + 3\lambda_1 + 2\lambda_2 = 0 \]

  1. 互补松弛条件

\[\lambda_1(2x_1 + 3x_2 - 10) = 0, \quad \lambda_2(x_1 + 2x_2 - 6) = 0 \]

  1. 可行性条件:原约束和非负性成立。

步骤4:分情况讨论约束活跃性

  • 情况1:两个约束均不活跃(\(\lambda_1 = \lambda_2 = 0\)
    梯度条件化为 \(x_1 = 3, x_2 = 2.5\),但代入约束1得 \(2 \times 3 + 3 \times 2.5 = 13.5 > 10\),不可行。

  • 情况2:仅约束1活跃(\(\lambda_1 > 0, \lambda_2 = 0\)
    由约束1等式和梯度条件:

\[2x_1 + 3x_2 = 10, \quad x_1 - 3 + 2\lambda_1 = 0, \quad 2x_2 - 5 + 3\lambda_1 = 0 \]

解得 \(x_1 = 1, x_2 = 8/3 \approx 2.67, \lambda_1 = 1\)。检查约束2:\(1 + 2 \times 2.67 = 6.34 > 6\),不可行。

  • 情况3:仅约束2活跃(\(\lambda_1 = 0, \lambda_2 > 0\)
    类似解得 \(x_1 = 2, x_2 = 2, \lambda_2 = 1\)。检查约束1:\(2 \times 2 + 3 \times 2 = 10 \leq 10\)(恰好满足),但此时约束1也活跃,需转入情况4。

  • 情况4:两个约束均活跃(\(\lambda_1 > 0, \lambda_2 > 0\)
    解方程组:

\[2x_1 + 3x_2 = 10, \quad x_1 + 2x_2 = 6 \]

\(x_1 = 2, x_2 = 2\)。代入梯度条件:

\[2 - 3 + 2\lambda_1 + \lambda_2 = 0 \implies 2\lambda_1 + \lambda_2 = 1 \]

\[4 - 5 + 3\lambda_1 + 2\lambda_2 = 0 \implies 3\lambda_1 + 2\lambda_2 = 1 \]

解得 \(\lambda_1 = 1, \lambda_2 = -1\)(不满足非负性),无效。

步骤5:重新检验情况3的可行性
在情况3中,约束2活跃(\(x_1 + 2x_2 = 6\)),但约束1未活跃(\(2x_1 + 3x_2 < 10\)),需强制 \(\lambda_1 = 0\)。梯度条件:

\[x_1 - 3 + \lambda_2 = 0, \quad 2x_2 - 5 + 2\lambda_2 = 0 \]

结合 \(x_1 + 2x_2 = 6\),解得 \(x_1 = 2.5, x_2 = 1.75, \lambda_2 = 0.5\)。检查约束1:\(2 \times 2.5 + 3 \times 1.75 = 10.25 > 10\),不可行。

步骤6:最终有效解
尝试边界点:

  • 交点 \((2, 2)\):目标值 \(3 \times 2 + 5 \times 2 - 0.5 \times 4 - 4 = 6 + 10 - 2 - 4 = 10\)
  • \((0, 3)\)(约束2活跃):目标值 \(0 + 15 - 0 - 9 = 6\)
  • \((5, 0)\)(不可行,约束2违反)
  • \((0, 0)\):目标值 \(0\)

比较得最优解为 \(x_1 = 2, x_2 = 2\),最大利润为 \(10\)


总结
本例通过KKT条件系统分析约束活跃性,逐步排除无效情况,最终找到满足所有条件的最优解。二次规划问题在凸性保证下,局部最优即全局最优。

基于线性规划的二次规划问题求解示例 问题描述 某工厂生产两种产品,其单位利润分别为 \( c_ 1 = 3 \) 和 \( c_ 2 = 5 \),但利润随产量增加而边际递减,需考虑成本函数 \( \frac{1}{2}x_ 1^2 + x_ 2^2 \)。生产需满足资源约束: 原材料:\( 2x_ 1 + 3x_ 2 \leq 10 \) 工时:\( x_ 1 + 2x_ 2 \leq 6 \) 非负性:\( x_ 1, x_ 2 \geq 0 \) 目标函数为总利润最大化: \[ \max \, z = 3x_ 1 + 5x_ 2 - \frac{1}{2}x_ 1^2 - x_ 2^2 \] 该问题为 凸二次规划 (目标函数为凹函数,Hessian矩阵负定),可用线性规划逼近或直接求解。 解题过程 步骤1:问题标准化 将最大化问题转化为最小化问题,并写成标准形式: \[ \min \, f(x) = -3x_ 1 - 5x_ 2 + \frac{1}{2}x_ 1^2 + x_ 2^2 \] 约束条件: \[ \begin{cases} 2x_ 1 + 3x_ 2 \leq 10 \\ x_ 1 + 2x_ 2 \leq 6 \\ x_ 1, x_ 2 \geq 0 \end{cases} \] 步骤2:构造拉格朗日函数 引入松弛变量 \( s_ 1, s_ 2 \geq 0 \) 将不等式转为等式: \[ 2x_ 1 + 3x_ 2 + s_ 1 = 10, \quad x_ 1 + 2x_ 2 + s_ 2 = 6 \] 拉格朗日函数为: \[ L(x, \lambda) = \frac{1}{2}x_ 1^2 + x_ 2^2 - 3x_ 1 - 5x_ 2 + \lambda_ 1(2x_ 1 + 3x_ 2 + s_ 1 - 10) + \lambda_ 2(x_ 1 + 2x_ 2 + s_ 2 - 6) \] 其中 \( \lambda_ 1, \lambda_ 2 \geq 0 \) 为对偶变量。 步骤3:KKT条件 根据Karush-Kuhn-Tucker条件,最优解需满足: 梯度条件 : \[ \frac{\partial L}{\partial x_ 1} = x_ 1 - 3 + 2\lambda_ 1 + \lambda_ 2 = 0 \] \[ \frac{\partial L}{\partial x_ 2} = 2x_ 2 - 5 + 3\lambda_ 1 + 2\lambda_ 2 = 0 \] 互补松弛条件 : \[ \lambda_ 1(2x_ 1 + 3x_ 2 - 10) = 0, \quad \lambda_ 2(x_ 1 + 2x_ 2 - 6) = 0 \] 可行性条件 :原约束和非负性成立。 步骤4:分情况讨论约束活跃性 情况1 :两个约束均不活跃(\( \lambda_ 1 = \lambda_ 2 = 0 \)) 梯度条件化为 \( x_ 1 = 3, x_ 2 = 2.5 \),但代入约束1得 \( 2 \times 3 + 3 \times 2.5 = 13.5 > 10 \),不可行。 情况2 :仅约束1活跃(\( \lambda_ 1 > 0, \lambda_ 2 = 0 \)) 由约束1等式和梯度条件: \[ 2x_ 1 + 3x_ 2 = 10, \quad x_ 1 - 3 + 2\lambda_ 1 = 0, \quad 2x_ 2 - 5 + 3\lambda_ 1 = 0 \] 解得 \( x_ 1 = 1, x_ 2 = 8/3 \approx 2.67, \lambda_ 1 = 1 \)。检查约束2:\( 1 + 2 \times 2.67 = 6.34 > 6 \),不可行。 情况3 :仅约束2活跃(\( \lambda_ 1 = 0, \lambda_ 2 > 0 \)) 类似解得 \( x_ 1 = 2, x_ 2 = 2, \lambda_ 2 = 1 \)。检查约束1:\( 2 \times 2 + 3 \times 2 = 10 \leq 10 \)(恰好满足),但此时约束1也活跃,需转入情况4。 情况4 :两个约束均活跃(\( \lambda_ 1 > 0, \lambda_ 2 > 0 \)) 解方程组: \[ 2x_ 1 + 3x_ 2 = 10, \quad x_ 1 + 2x_ 2 = 6 \] 得 \( x_ 1 = 2, x_ 2 = 2 \)。代入梯度条件: \[ 2 - 3 + 2\lambda_ 1 + \lambda_ 2 = 0 \implies 2\lambda_ 1 + \lambda_ 2 = 1 \] \[ 4 - 5 + 3\lambda_ 1 + 2\lambda_ 2 = 0 \implies 3\lambda_ 1 + 2\lambda_ 2 = 1 \] 解得 \( \lambda_ 1 = 1, \lambda_ 2 = -1 \)(不满足非负性),无效。 步骤5:重新检验情况3的可行性 在情况3中,约束2活跃(\( x_ 1 + 2x_ 2 = 6 \)),但约束1未活跃(\( 2x_ 1 + 3x_ 2 < 10 \)),需强制 \( \lambda_ 1 = 0 \)。梯度条件: \[ x_ 1 - 3 + \lambda_ 2 = 0, \quad 2x_ 2 - 5 + 2\lambda_ 2 = 0 \] 结合 \( x_ 1 + 2x_ 2 = 6 \),解得 \( x_ 1 = 2.5, x_ 2 = 1.75, \lambda_ 2 = 0.5 \)。检查约束1:\( 2 \times 2.5 + 3 \times 1.75 = 10.25 > 10 \),不可行。 步骤6:最终有效解 尝试边界点: 交点 \( (2, 2) \):目标值 \( 3 \times 2 + 5 \times 2 - 0.5 \times 4 - 4 = 6 + 10 - 2 - 4 = 10 \) 点 \( (0, 3) \)(约束2活跃):目标值 \( 0 + 15 - 0 - 9 = 6 \) 点 \( (5, 0) \)(不可行,约束2违反) 点 \( (0, 0) \):目标值 \( 0 \) 比较得最优解为 \( x_ 1 = 2, x_ 2 = 2 \),最大利润为 \( 10 \)。 总结 本例通过KKT条件系统分析约束活跃性,逐步排除无效情况,最终找到满足所有条件的最优解。二次规划问题在凸性保证下,局部最优即全局最优。