非线性规划中的SQP方法
我将为您详细讲解非线性规划中的序列二次规划方法,这是一种重要的优化算法。
-
基本概念
SQP方法是求解具有约束的非线性优化问题的一类迭代算法。考虑标准形式的非线性规划问题:
min f(x)
s.t. c_i(x) = 0, i ∈ E
c_i(x) ≥ 0, i ∈ I
其中f(x)是目标函数,c_i(x)是约束函数,E和I分别表示等式约束和不等式约束的指标集。 -
方法思想
SQP方法的核心思想是:在每次迭代中,通过构造一个二次规划子问题来近似原问题,通过求解这个二次规划子问题得到搜索方向,然后沿该方向进行线搜索确定步长。具体来说,在当前迭代点x_k处,我们构造如下二次规划子问题:
min ∇f(x_k)^T d + 1/2 d^T B_k d
s.t. c_i(x_k) + ∇c_i(x_k)^T d = 0, i ∈ E
c_i(x_k) + ∇c_i(x_k)^T d ≥ 0, i ∈ I
其中B_k是拉格朗日函数的Hessian矩阵或其近似。 -
算法框架
基本SQP算法的迭代步骤如下:- 步骤1:初始化。选择初始点x_0,初始Hessian近似矩阵B_0,设置收敛容差ε
- 步骤2:判断收敛性。如果满足KKT条件,则停止迭代
- 步骤3:构造二次规划子问题。计算目标函数和约束函数的梯度,构建QP子问题
- 步骤4:求解QP子问题。得到搜索方向d_k和拉格朗日乘子估计λ_{k+1}
- 步骤5:更新迭代点。x_{k+1} = x_k + α_k d_k,其中α_k通过线搜索确定
- 步骤6:更新Hessian近似。使用拟牛顿法更新B_k
- 步骤7:返回步骤2
-
Hessian矩阵近似
由于精确计算拉格朗日函数的Hessian矩阵计算量较大,实践中常使用拟牛顿法进行近似,最常用的是BFGS公式:
B_{k+1} = B_k - (B_k s_k s_k^T B_k)/(s_k^T B_k s_k) + (y_k y_k^T)/(s_k^T y_k)
其中s_k = x_{k+1} - x_k,y_k = ∇L(x_{k+1}, λ_{k+1}) - ∇L(x_k, λ_{k+1}) -
全局收敛性
为了保证算法的全局收敛性,SQP方法通常结合线搜索或信赖域技术。线搜索中使用的价值函数(merit function)通常采用精确罚函数:
φ(x; μ) = f(x) + μ∑|c_i(x)| + μ∑[min(0, c_i(x))]
其中μ是罚参数,需要足够大以保证价值函数的下降性。 -
算法变体
根据具体实现方式的不同,SQP方法有多种变体:- 等式约束SQP:先处理等式约束,再处理不等式约束
- 可行SQP:保证每次迭代点都可行
- 滤子SQP:使用滤子方法代替价值函数处理约束
SQP方法因其超线性收敛速度和良好的数值表现,成为求解中小规模非线性规划问题最有效的方法之一。