8.6.21. PsdExpr¶
- class PsdExpr¶
代表一个半定表达式。通常与半定约束或目标函数有关。 一个半定表达式可以包含半正定变量的线性运算,也可以包含普通变量的线性运算。半定表达式可以参与算术运算。 例如:
# 一个term的半定表达式 psdx * mat # 多个terms的半定表达式 psdx0 * mat0 + psdx1 * mat1 # 包含线性部分的半定表达式 psdx * mat + x * 2 + 1
方法
构造一个半定表达式
添加另一个半定表达式的所有terms到当前半定表达式
为半定表达式的常数项增加一个值
添加一个或多个term(s)
清空所有包含的terms,并将常数项置为0
获取半定表达式某个半定项的系数
获取半定表达式的常数项
获取包含在半定表达式中的线性表达式
在问题求解以后,获取半定表达式的值
获取半定表达式某个term的半定变量
删除表达式包含的部分terms
获取半定项的个数,不包括线性项和常数项
- __init__(arg1=0, arg2=None)¶
构造一个半定表达式
- Parameters
arg1=0 – 半定表达式的初始值,可以是常数,变量,线性表达式或另一个半定表达式。
arg2=None – 不为None时,通常时变量或半定变量,或者它们组成列表。
example:
PsdExpr([mat], [psdx]) PsdExpr(mat, psdx) PsdExpr(coeff, x) PsdExpr(x) PsdExpr(mat * psdx) PsdExpr(2 * x + 1) PsdExpr([(mat1, px1), (mat2, px2), (mat3, px3)]) PsdExpr([(1, x), (2, y), (1, z)]) PsdExpr(1)
- add(expr, mult=1.0)¶
添加另一个半定表达式的所有terms到当前半定表达式
- Parameters
expr – 另一个半定表达式
mult=1.0 – 乘数,默认值为1.0
example:
psdExpr.add(psdExpr1, -1)
- addConstant(c)¶
为半定表达式的常数项增加一个值。
- Parameters
c – 需要增加的值,负数表示减去一个值
example:
psdExpr.addConstant(-psdExpr.getConstant())
- addTerms(coeffs, vars)¶
添加一个或多个term(s)。当传入变量和系数时,添加线性的term,当传入矩阵和半定变量时,添加半定term。
- Parameters
coeffs – 要添加的term(s)的系数,可能为单个数字,单个矩阵或数组
vars – 要添加的term(s)的变量,可以为单个变量,半定变量或数组
example:
psdExpr.addTerms([1, 2], [x, y]) psdExpr.addTerms([mat1, mat2], [px1, px2]) psdExpr.addTerms(1, x) psdExpr.addTerms(mat, px)
- clear()¶
清空所有包含的terms,并将常数项置为0
example:
psdExpr = mat1 * px1 + 3 * x + 1 psdExpr.clear() print(psdExpr.size() == 0) print(psdExpr.getLinExpr().size() == 0) print(psdExpr.getConstant() == 0)
- getCoeff(index)¶
获取半定表达式某个半定项的系数
- Parameters
index – 要获取系数的半定项的index
example:
psdExpr = mat1 * px1 + mat2 * px2 print(psdExpr.getCoeff(0) == mat1)
- getConstant()¶
获取半定表达式的常数项。
example:
psdExpr.addConstant(-psdExpr.getConstant())
- getLinExpr()¶
获取包含在半定表达式中的线性表达式
example:
psdExpr = mat * px + 1 * x + 3 * y + 1 print(psdExpr.getLinExpr().size() == 2) print(psdExpr.getLinExpr().getConstant() == 1)
- getValue()¶
在问题求解以后,获取半定表达式的值。
example:
m.optimize() psdExpr = mat1 * px1 + mat2 * px2 + 1 * x + 2 print(psdExpr.getValue())
- getVar(index)¶
获取半定表达式某个term的半定变量
- Parameters
index – 要获取半定变量的term的index
example:
psdExpr = mat1 * px1 + mat2 * px2 print(psdExpr.getVar(1).sameAs(px2))
- remove(item)¶
删除表达式包含的部分terms
- Parameters
item – 如果item为数字,则删除index为item的半定项。如果item为变量,则删除线性项所有包含这个变量的terms,如果item为半定变量,则删除所有包含该半定变量的半定项。
example:
psdExpr = mat1 * px1 + mat2 * px2 + 3 * y + 4 * x psdExpr.remove(0) psdExpr.remove(px2) print(psdExpr.size() == 0) psdExpr.remove(x) psdExpr.remove(y) print(psdExpr.getLinExpr().size() == 0)
- size()¶
获取半定项的个数,不包括线性项和常数项
example:
psdExpr = mat1 * px1 + 3 * x + 1 print(psdExpr.size() == 1)