25.3非线性规划

Octave还可以使用成功的二次规划解算器执行一般的非线性最优化。

 
: [x, obj, info, iter, nf, lambda] = sqp (x0, phi)
: […] = sqp (x0, phi, g)
: […] = sqp (x0, phi, g, h)
: […] = sqp (x0, phi, g, h, lb, ub)
: […] = sqp (x0, phi, g, h, lb, ub, maxiter)
: […] = sqp (x0, phi, g, h, lb, ub, maxiter, tolerance)

使用序列二次规划(SQP)最优化目标函数。

求解非线性程序

min phi (x)
 x

约束条件为

g(x)  = 0
h(x) >= 0
lb <= x <= ub

使用序列二次规划方法。

第一个参数是向量的初始猜测x0.

第二个自变量是指向目标函数的函数句柄phi。目标函数必须接受一个向量参数,然后返回一个标量。

第二个自变量也可以是函数句柄的2元素或3元素元胞数组。第一个元素应该指向目标函数,第二个应该指向计算目标函数梯度的函数,第三个应该指向一个计算目标函数Hessian的函数。如果没有提供梯度函数,则通过有限差来计算梯度。如果未提供Hessian函数,则使用BFGS更新公式来近似Hessian函数。

提供时,梯度函数phi{2}必须接受一个向量参数并返回一个向量。提供后,Hessian函数phi{3}必须接受一个向量参数并返回一个矩阵。

第三和第四个参数gh是函数句柄,分别指向计算相等约束和相等约束的函数。如果问题没有等式(或不等式)约束,则使用空矩阵([])gh). 当提供时,这些等式和不等式约束函数必须接受一个向量参数并返回一个向量。

第三个和第四个自变量也可以是函数句柄的2元素元胞数组。第一个元素应指向约束函数,第二个元素应指计算约束函数基数的函数:

            [ d f(x)   d f(x)        d f(x) ]
transpose ( [ ------   -----   ...   ------ ] )
            [  dx_1     dx_2          dx_N  ]

第五和第六参数,lbub,包含 x的下限和上限,如果给定则必须是和x0尺寸相同的向量. 边界必须满足相等和不相等约束 gh.

第七个参数maxiter指定重复的最大次数。默认值为100。

第八个参数tolerance指定停止标准的误差范围。默认值为sqrt (eps).

info的返回值可以是以下其中之一:

101

算法正常终止。所有约束都符合指定的误差范围。

102

BFGS更新失败。

广告
103

已达到最大迭代次数。

广告
104

步长变得太小,即Δx小于tol * norm (x).

广告

调用sqp的示例如下:

function r = g (x)
  r = [ sumsq(x)-10;
        x(2)*x(3)-5*x(4)*x(5);
        x(1)^3+x(2)^3+1 ];
endfunction

function obj = phi (x)
  obj = exp (prod (x)) - 0.5*(x(1)^3+x(2)^3+1)^2;
endfunction

x0 = [-1.8; 1.7; 1.9; -0.8; -0.8];

[x, obj, info, iter, nf, lambda] = sqp (x0, @phi, @g, [])

x =

  -1.71714
   1.59571
   1.82725
  -0.76364
  -0.76364

obj = 0.053950
info = 101
iter = 8
nf = 10
lambda =

  -0.0401627
   0.0379578
  -0.0052227

详见: qp.

广告

版权所有 © 2024-2025 Octave中文网

ICP备案/许可证号:黑ICP备2024030411号-2