罚函数法:
求解约束条件下的最优化问题
罚函数法的思路就是改变函数f(x),将f(x) 变为F(x)
使得F(x)在无约束条件下取得的最优解,正好符合我们的约束条件,且正好为f(x)在约束条件下的最优解
先有最优化问题f(x), 可行区域是c(x) <= 0
外罚函数法:
对于F(x)在可行区域内仍是f(x),在可行区域外,对函数加上惩罚即可
F(x) = f(x) c(x) <=0
F(x) = f(x) + α/2 (c(x))2
可以改写为F(x) = f(x) + α/2 (max(c(x), 0)2)
对于一般的约束条件c1(x) <=0 ,,,,,,,cn(x) <= 0
F(x) = f(x) + α/2 (max(c1(x)2, ,,,,,,,cn(x)2,,0)
记(max(c1(x)2, ,,,,,,,cn(x)2,,0)为S(x)
可以看到,当α -> +∞时,F(x)在无约束条件下的最优解符合条件
算法流程:
选择递增序列 αk 此序列趋近于 +∞
选定初始点x0
对于第i次迭代,求解无约束最优化问题F(x) = f(x) + αi/2 (max(c1(x)2, ,,,,,,,cn(x)2,,0)标志
终止条件: αi* S(xi) < e
此时将xi记为最优化问题的解
一般可用 αi= 2i作为序列
缺点:
当迭代次数较多时,αi会特别大,导致Hesse矩阵的条件数特别大,这就给求解无约束