8.6.19. PsdExpr

class PsdExpr

代表一个半定表达式。通常与半定约束或目标函数有关。 一个半定表达式可以包含半正定变量的线性运算,也可以包含普通变量的线性运算。半定表达式可以参与算术运算。 例如:

# 一个term的半定表达式
psdx * mat
# 多个terms的半定表达式
psdx0 * mat0 + psdx1 * mat1
# 包含线性部分的半定表达式
psdx * mat + x * 2 + 1

方法

__init__()

构造一个半定表达式

add()

添加另一个半定表达式的所有terms到当前半定表达式

addConstant()

为半定表达式的常数项增加一个值

addTerms()

添加一个或多个term(s)

clear()

清空所有包含的terms,并将常数项置为0

getCoeff()

获取半定表达式某个半定项的系数

getConstant()

获取半定表达式的常数项

getLinExpr()

获取包含在半定表达式中的线性表达式

getValue()

在问题求解以后,获取半定表达式的值

getVar()

获取半定表达式某个term的半定变量

remove()

删除表达式包含的部分terms

size()

获取半定项的个数,不包括线性项和常数项

__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)