scs

New in version 1.30.22.

语法

scs(f, [P], [A], [b], [Aeq], [beq], [lb], [ub], [x0], [c], [eps], [alpha])

详情

求解目标函数在约束条件下的最优解。具体模型如下:

\(\min\limits_{x} x^TPx+f^Tx\text{ such that}\begin{cases}A\cdot x\le b\\Aeq\cdot x=beq\\norm(x-x_0) \le c\\lb\le x\le ub\end{cases}\)

返回结果是具有两个元素的元组。第一个元素是目标函数的最小值,第二个元素是目标函数取最小值时,x 的取值。

参数

注意:以下参数中,除 lb, ub 可以为空外,其它参数都不可包含空值。

f 二次规划中的一次项系数向量。必须和 x0 长度相同。

P 一个矩阵,通过将二次项系数矩阵的对角线元素乘以2得到。例如:所有二次项组成上三角矩阵

../../../_images/scs02.png

将对角线上的系数乘以2,其它系数不变,得到的矩阵就是 P。

A 线性不等式约束的系数矩阵。列数必须和 x 的长度相同。

b 线性不等式约束的右端向量。

Aeq 线性等式约束的系数矩阵。列数必须和 x 的长度相同。

beq 线性等式约束的右端向量。

lb 变量的下界。可以是标量或与 x 等长的向量。注意:当 lb 为空时,表示 x 无下界约束。

ub 变量的上界。可以是标量或与 x 等长的向量。注意:当 lb 为空时,表示 x 无上界约束。

若 lb 或 ub 是标量,则所有变量都受同一个下界或上界约束。若 lb 或 ub 为NULL,表示x无相应的下界或上界约束。

若 lb 或 ub 是向量,则x中的元素受 lb 或 ub 中相应位置的元素约束。若向量 lb 或 ub 中某元素为NULL,表示此位置的x元素无相应的下界或上界约束

x0 向量绝对值不等式约束的系数向量。必须和 f 长度相同。

c 一个非负数字,表示绝对值不等式约束的右侧常量系数。

eps 正浮点数,表示求解的精度。默认值为1e-6,范围为 [1e-4, 1e-9]。通过减小该参数值以获得更高精度的解。如果该参数设置值超过规定范围,则会自动调整为默认值。

alpha 正浮点数,表示松弛参数。默认值为1.5,范围为 (0, 2)。通过增加 alpha 的值来加快求解速度。如果该参数设置值超过规定范围,则会自动调整为默认值。

例子

求 x, y 满足以下约束条件时,目标函数 x^2+y^2 的最小值

../../../_images/scs03.png
//目标函数中没有一次项,所以系数都为0,f取值如下
$ f = [0, 0];
//仅存在二次项x^2 和 y^2,系数为均为1,则 P 的取值为
$ P = [2, 0, 0, 2]$2:2;
//绝对值不等式的约束系数和右端向量
$ x0 = [0.4, 0.6];
$ c = 0.5;
//线性等式为 x+y=1,因此 Aeq 和 beq 的取值为
$ Aeq = [1, 1]$1:2;
$ beq = [1];
//由 x,y>0 得到变量的下界
$ lb = [0, 0];
$ re = scs(f=f,P=P,Aeq=Aeq,beq=beq,lb=lb,x0=x0,c=c);
$ re[1]
[0.500000043984074,0.499999955746447]

相关函数:linprog, quadprog