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} 必须接受一个向量参数并返回一个矩阵。
第三和第四个参数 g 和 h 是函数句柄,分别指向计算等式约束和不等式约束的函数。如果问题没有等式(或不等式)约束,则对 g(或 h)使用空矩阵 ([])。如果提供了这些函数,则等式和不等式约束函数必须接受一个向量参数并返回一个向量。
第三和第四个参数也可以是包含 2 个函数句柄的元胞数组。第一个元素应指向约束函数,第二个元素应指向计算约束函数梯度的函数:
[ d f(x) d f(x) d f(x) ]
transpose ( [ ------ ----- ... ------ ] )
[ dx_1 dx_2 dx_N ]
第五和第六个参数 lb 和 ub 分别包含 x 的下界和上界,如果提供了这两个参数,则它们必须是和 x0 大小相同的向量。边界必须与等式和不等式约束 g 和 h 一致。
第七个参数 maxiter 指定最大迭代次数。默认值为 100。
第八个参数 tolerance 指定终止条件的容差。默认值为 sqrt (eps)。
info 的返回值可以是以下值之一:
算法正常终止。所有约束均满足指定的容差。
BFGS 更新失败。
已达到最大迭代次数。
步长变得过小,即 Δ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-2026 Octave中文网
ICP备案/许可证号:黑ICP备2024030411号-2