用Octave计算非线性规划问题(序列二次规划法)(1)
 
广告
{{v.name}}
非线性规划(NLP)就是目标函数或约束里出现了非线性项(平方、乘积、根号、指数、三角函数等),不能再用单纯形、内点法直接解,必须用迭代型数值算法。
核心解法
1. 无约束非线性规划
最速下降法(简单但慢)
牛顿法 / 拟牛顿法(BFGS 最常用)
共轭梯度法
2. 带约束非线性规划
罚函数法(外罚函数法 / 内罚函数法)
序列二次规划 SQP(目前最强)
内点法(大规模 NLP)
序列二次规划(SQP)例子:
\( \min \quad x^2_1 × \sqrt{x_2} + e^{x_3} + \sin(x_4) \)
\( s.t. \quad \begin{cases} x_1 + 2x_2 = 0 \\ 3x_3 + 4x_4 = 0 \\ \end{cases} \)
设\(x_0=\begin{bmatrix}0 & 0 & 0 & 0\end{bmatrix}\),代码如下:
>> x0 = [0 0 0 0];
定义非线性函数 phi(x),代码如下:
>> function ret = phi (x)
  ret = x(1)^2 * sqrt(x(2)) + exp(x(3)) + sin(x(4));
endfunction
定义约束函数 g(x),代码如下:
>> function ret = g (x)
  ret = [x(1) + 2*x(2); 3*x(3) + 4*x(4)];
endfunction
求解,代码如下:
>> [x, obj, info, iter, nf, lambda] = sqp (x0, @phi, @g)
x =

   1.6098e-15
  -5.6899e-16
  -3.1604e-01
   2.3703e-01

obj =  9.6385e-01 + 6.1817e-38i
info = 104
iter = 7
nf = 71
lambda =

   9.8472e-17
   2.4301e-01
友链