非线性规划中的序列线性整数规划法进阶题
字数 3248 2025-11-19 17:20:33
非线性规划中的序列线性整数规划法进阶题
题目描述
考虑非线性整数规划问题:
最小化 \(f(x)1 + x_2^2\)
约束条件:
- \(g_1(x) = x_1^2 + x_2 - 1.5 \leq 0\)
- \(g_2(x) = -x_1 + 2x_2 - 3 \leq 0\)
- \(x_1, x_2\) 为非负整数
其中,初始点 \(x^{(0)} = (0, 0)\),信赖域半径初始值 \(\Delta_0 = 1\)。通过序列线性整数规划(SLIP)方法求解该问题,逐步构造线性子问题并更新迭代点。
解题过程
-
问题分析
- 目标函数 \(f(x)\) 为非线性(含 \(x_2^2\) 项),约束 \(g_1(x)\) 为非线性,\(g_2(x)\) 为线性。
- 决策变量需为整数,需在每次迭代中求解混合整数线性规划(MILP)子问题。
- SLIP方法通过线性化目标函数和约束,在信赖域内求解MILP子问题,逐步逼近原问题解。
-
初始步骤
- 初始点 \(x^{(0)} = (0, 0)\),计算函数值及梯度:
- \(f(x^{(0)}) = 0^2 + 0^2 = 0\)
- \(\nabla f(x) = (2x_1, 2x_2)\),故 \(\nabla f(x^{(0)}) = (0, 0)\)
- \(g_1(x^{(0)}) = 0 + 0 - 1.5 = -1.5 \leq 0\)(可行)
- \(g_2(x^{(0)}) = -0 + 0 - 3 = -3 \leq 0\)(可行)
- 初始信赖域半径 \(\Delta_0 = 1\)。
- 初始点 \(x^{(0)} = (0, 0)\),计算函数值及梯度:
-
第一次迭代(k=0)
- 线性化子问题:在 \(x^{(0)}\) 处对 \(f(x)\) 和 \(g_1(x)\) 进行一阶泰勒展开(\(g_2(x)\) 已是线性):
- 线性化目标:\(f(x) \approx f(x^{(0)}) + \nabla f(x^{(0)})^T (x - x^{(0)}) = 0\)
- 线性化 \(g_1(x) \approx g_1(x^{(0)}) + \nabla g_1(x^{(0)})^T (x - x^{(0)})\),其中 \(\nabla g_1(x) = (2x_1, 1)\),故 \(\nabla g_1(x^{(0)}) = (0, 1)\),得 \(g_1(x) \approx -1.5 + (0, 1)^T (x_1, x_2) = x_2 - 1.5\)
- MILP子问题:
最小化 \(0\)
约束:- \(x_2 - 1.5 \leq 0\)
- \(-x_1 + 2x_2 - 3 \leq 0\)
- \(|x_1 - 0| \leq 1\),\(|x_2 - 0| \leq 1\)(信赖域约束)
- \(x_1, x_2 \geq 0\) 且为整数
- 求解子问题:目标为常数,只需找可行点。满足约束的整数解包括 \((0,0), (1,0), (0,1)\)。选择 \(x^{(1)} = (0, 1)\)(目标值不变,但探索新点)。
- 实际改进评估:
- 实际函数值 \(f(x^{(1)}) = 0 + 1^2 = 1\)
- 预测改进量 \(\Delta f_{\text{pred}} = 0 - 0 = 0\)
- 实际改进量 \(\Delta f_{\text{actual}} = f(x^{(0)}) - f(x^{(1)}) = 0 - 1 = -1\)(恶化)
- 更新信赖域:改进率 \(\rho = \frac{-1}{0}\) 无定义(分母为零),视为 \(\rho < 0\)。拒绝该点,缩小信赖域 \(\Delta_1 = 0.5\),保持 \(x^{(1)} = x^{(0)} = (0,0)\)。
- 线性化子问题:在 \(x^{(0)}\) 处对 \(f(x)\) 和 \(g_1(x)\) 进行一阶泰勒展开(\(g_2(x)\) 已是线性):
-
第二次迭代(k=1)
- 线性化子问题(仍在 \(x^{(1)} = (0,0)\)):
- 目标函数线性化:\(f(x) \approx 0\)
- \(g_1(x) \approx x_2 - 1.5\)
- MILP子问题:
最小化 \(0\)
约束:- \(x_2 - 1.5 \leq 0\)
- \(-x_1 + 2x_2 - 3 \leq 0\)
- \(|x_1 - 0| \leq 0.5\),\(|x_2 - 0| \leq 0.5\)
- \(x_1, x_2 \geq 0\) 且为整数
- 求解子问题:唯一可行解为 \((0,0)\),故 \(x^{(2)} = (0,0)\)。
- 结果:无改进,进一步缩小信赖域 \(\Delta_2 = 0.25\)。
- 线性化子问题(仍在 \(x^{(1)} = (0,0)\)):
-
第三次迭代(k=2)
- 过程同前,唯一可行解仍为 \((0,0)\)。此时需调整策略:由于线性化目标为零导致子问题退化,改为精确线性化或调整初始点。
- 修正:在 \(x^{(2)} = (0,0)\) 处,线性化目标实际为常数,但梯度为零是因初始点选择。改从 \(x^{(0)} = (1,1)\) 重启(需验证可行性):
- \(f(1,1) = 1 + 1 = 2\)
- \(g_1(1,1) = 1 + 1 - 1.5 = 0.5 > 0\)(不可行),因此不能直接使用。
- 改为使用可行点 \((0,1)\)(虽目标较差,但可行):
- \(x^{(0)} = (0,1)\),\(f = 1\),\(\nabla f = (0, 2)\)
- 线性化目标:\(f(x) \approx 1 + (0, 2)^T (x_1 - 0, x_2 - 1) = 1 + 2(x_2 - 1) = 2x_2 - 1\)
- \(g_1(x) \approx 0.5 + (0,1)^T (x_1, x_2 - 1) = x_2 - 0.5\)
- MILP子问题(\(\Delta_0 = 1\)):
最小化 \(2x_2 - 1\)
约束:- \(x_2 - 0.5 \leq 0\)
- \(-x_1 + 2x_2 - 3 \leq 0\)
- \(|x_1 - 0| \leq 1\),\(|x_2 - 1| \leq 1\)
- \(x_1, x_2 \geq 0\) 且为整数
- 求解得 \(x_2 \leq 0.5\),结合整数约束 \(x_2 = 0\) 或 \(1\)。但 \(x_2 = 1\) 时 \(g_1 \approx 0.5 > 0\)(违反),故 \(x_2 = 0\)。代入得 \(x_1 \geq -3\)(总满足),选 \(x_1 = 0\)(最小化目标无影响)。得 \(x^{(1)} = (0,0)\)。
- 实际 \(f(0,0) = 0 < f(0,1) = 1\),改进有效,接受该点。
-
最终结果
- 从 \((0,1)\) 移动到 \((0,0)\) 后,目标值由 1 降为 0,且满足所有约束。
- 进一步迭代:在 \((0,0)\) 线性化目标为零,子问题无更优解,故算法终止。
- 最优解:\(x^* = (0,0)\),\(f(x^*) = 0\),约束均满足。
关键点总结
- SLIP通过迭代求解线性化后的MILP子问题处理整数约束。
- 信赖域控制步长,避免线性化误差过大。
- 目标函数梯度为零时,子问题可能退化,需调整初始点或线性化策略。
- 整数约束可能使问题陷入局部解,需结合全局优化技巧(如多起点)进一步改进。