25.2二次规划

Octave还可以解决二次规划问题,这是

min 0.5 x'*H*x + x'*q

约束条件为

     A*x = b
     lb <= x <= ub
     A_lb <= A_in*x <= A_ub
 
: [x, obj, info, lambda] = qp (x0, H)
: [x, obj, info, lambda] = qp (x0, H, q)
: [x, obj, info, lambda] = qp (x0, H, q, A, b)
: [x, obj, info, lambda] = qp (x0, H, q, A, b, lb, ub)
: [x, obj, info, lambda] = qp (x0, H, q, A, b, lb, ub, A_lb, A_in, A_ub)
: [x, obj, info, lambda] = qp (…, options)

求解二次规划(QP)。

求解从定义的二次规划

min 0.5 x'*H*x + x'*q
 x

约束条件为

A*x = b
lb <= x <= ub
A_lb <= A_in*x <= A_ub

使用空空间活动集方法。

任意约束(A, b, lb, ub, A_in, A_lb,A_ub)可以设置为空矩阵([])如果不存在。约束条件AA_in是矩阵,每行表示单个约束。根据约束的数量,其他边界是标量或向量。如果最初的猜测是可行的,那么算法会更快。

options是指定控制算法的附加参数的结构体。目前,qp识别这些参数:"MaxIter", "TolX".

"MaxIter"禁止在停止优化之前的最大算法迭代次数。默认值为200。该值必须是正整数。

"TolX"指定未知变量的终止误差范围x。默认为sqrt (eps)或者大约1e-8。

在返回时,x是最小值的位置,并且fval包含目标函数的值x.

info

结构体,包含有关算法的运行时信息。定义了以下字段:

solveiter

查找解决方案所需的迭代次数。

info

一个整数,表示解决方案的状态。

0

这个问题是可行的和凸的。找到全局解决方案。

广告
1

这个问题不是凸的。找到本地解决方案。

广告
2

这个问题不是凸的,也不是无界的。

广告
3

已达到最大迭代次数。

广告
6

这个问题是不可行的。

广告
广告
广告

详见: sqp.

广告
 
: x = pqpnonneg (c, d)
: x = pqpnonneg (c, d, x0)
: x = pqpnonneg (c, d, x0, options)
: [x, minval] = pqpnonneg (…)
: [x, minval, exitflag] = pqpnonneg (…)
: [x, minval, exitflag, output] = pqpnonneg (…)
: [x, minval, exitflag, output, lambda] = pqpnonneg (…)

减少 (1/2 * x' * c * x + d' * x) 约束条件为x >= 0.

cd必须是实矩阵,并且c必须对称且正定。

x0是解决方案的可选初始猜测x.

options是一个参数结构体,用于更改算法的行为(详见optimset). pqpnonneg识别一个参数:"MaxIter".

输出:

x

解决方案矩阵

广告
minval

所获得的最小模型值,1/2*xmin'*c*xmin + d'*xmin

广告
exitflag

收敛的指标。0表示超过了迭代次数,因此未达到收敛;>0表示算法收敛。(该算法是稳定的,并且会在多次迭代后收敛。)

广告
output

具有两个字段的结构体:

  • "algorithm":使用的算法("nnls")
  • "iterations":执行的迭代次数。
广告
lambda

拉格朗日乘子。如果这些值为非零,则对应的x值应为零,表示解决方案被压向一个坐标平面。幅度表示如果x >= 0朝着那个方向放宽了限制。

广告

详见: lsqnonneg, qp, optimset.

广告

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

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