SQP算法论文阅读1:NLPQL: A FORTRAN subroutine solving constrained nonlinear programming problems

Schittkowski K. NLPQL: A FORTRAN subroutine solving constrained nonlinear programming problems[J]. Annals of operations research, 1986, 5: 485-500.

SQP序列二次规划的思想是将约束非线性优化问题等效为求解一系列二次规划子问题求解,对于约束问题,一般的描述是:
SQP算法论文阅读1:NLPQL: A FORTRAN subroutine solving constrained nonlinear programming problems_第1张图片

这个问题必须是光滑的:

在这里插入图片描述

定义拉格朗日函数

在这里插入图片描述

对于这里的范围的约束我们也可以重新定义
在这里插入图片描述
SQP算法论文阅读1:NLPQL: A FORTRAN subroutine solving constrained nonlinear programming problems_第2张图片

所以一个新的二次规划子问题可以这样定义
SQP算法论文阅读1:NLPQL: A FORTRAN subroutine solving constrained nonlinear programming problems_第3张图片

可以引入价值函数,保证线搜索的时候取的线搜索参数让目标函数是下降的,价值函数的含义

SQP算法论文阅读1:NLPQL: A FORTRAN subroutine solving constrained nonlinear programming problems_第4张图片

可能使用的价值函数:①L1的惩罚函数:

SQP算法论文阅读1:NLPQL: A FORTRAN subroutine solving constrained nonlinear programming problems_第5张图片

②增广拉格朗日函数
SQP算法论文阅读1:NLPQL: A FORTRAN subroutine solving constrained nonlinear programming problems_第6张图片

我们可能接不了二次规划的子问题:①二次规划的可行域是空集尽管原问题是可解的,②每一次都要计算所有约束的梯度(一些约束可能是不活跃的,局部冗余的),为了解决这个问题,可以使用这个子问题:

SQP算法论文阅读1:NLPQL: A FORTRAN subroutine solving constrained nonlinear programming problems_第7张图片
SQP算法论文阅读1:NLPQL: A FORTRAN subroutine solving constrained nonlinear programming problems_第8张图片

如果求解上面这个子问题, d 0 = 0 d_0=0 d0=0 δ 0 = 1 δ_0=1 δ0=1满足约束,则可以作为二次规划子问题的一个起始点,对于上面这个问题可以用LDL分解对Hesse阵处理,:

在这里插入图片描述

也可以使用了BFGS方法拟牛顿方法进行更新,保证了正定性,在这些假设下,SQP算法可以达到全局收敛,也即从任意一个初始点至少依次迭代就可以满足KT最优条件,这个结果在拉格朗日的价值函数已经得到了验证,但是对于L1价值函数,类似的结果要在更多的严格条件下才能达到(罚参数是恒定的且充分大)。如果在最优解的邻域内步长为一,则该算法与 Han [12] 和 Powell [21] 所研究的方法相同。在不同的假设条件下,他们证明了 SQP 方法的局部超线性收敛性,这为我们在实践中观察到的快速最终收敛速度提供了理论依据。

一个简单的代码框架:

SQP算法论文阅读1:NLPQL: A FORTRAN subroutine solving constrained nonlinear programming problems_第9张图片

可以查看的其他文献

在这里插入图片描述
在这里插入图片描述

你可能感兴趣的:(科研,算法,SQP,论文)