8.6.18. QuadExpr

class QuadExpr

代表一个二次表达式。 二次表达式由0个或多个二次项,以及一个线性表达式组成。 一个二次表达式可以通过算数运算得到。 例如:

# 创建一个优化模型和相关变量
m = Model()
x = m.addVar()
y = m.addVar()
# 变量的平方
x ** 2
# 变量相乘
x * y
# 线性表达式乘以变量
linExpr * x

方法

__init__()

构造一个二次表达式

add()

添加另一个表达式的所有terms到当前二次表达式

addConstant()

为二次表达式的常数项增加一个值

addTerms()

添加一个或多个term(s)

clear()

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

copy()

返回一个二次表达式的拷贝

getCoeff()

获取二次表达式某个二次项的系数

getConstant()

获取二次表达式的常数项

getLinExpr()

获取包含在二次表达式中的线性表达式

getValue()

在问题求解以后,获取二次表达式的值

getVar1()

获取二次表达式中,某个二次项的第一个变量

getVar2()

获取二次表达式中,某个二次项的第二个变量

remove()

删除表达式包含的部分terms

size()

获取二次项的个数,不包括线性项和常数项

__init__(expr=None)

构造一个二次表达式

Parameters

expr=None – 二次表达式的初始值,可以是常数,变量,线性表达式或另一个二次表达式。

example:

QuadExpr()
QuadExpr(1)
QuadExpr(x)
QuadExpr(2 * x + y)
QuadExpr(2 * x * x)
add(expr, mult=1.0)

添加另一个表达式的所有terms到当前二次表达式

Parameters
  • expr – 另一个表达式

  • mult=1.0 – 乘数,默认值为1.0

example:

quadExpr.add(linExpr, -1)
quadExpr.add(quadExpr1, -1)
addConstant(c)

为二次表达式的常数项增加一个值

Parameters

c – 需要增加的值,负数表示减去一个值

example:

quadExpr.addConstant(-quadExpr.getConstant())
addTerms(coeffs, vars, vars2=None)

添加一个或多个term(s)

Parameters
  • coeffs – 要添加的term(s)的系数,可能为数字或数组

  • vars – 要添加的term(s)的变量,可以为单个变量或数组

  • vars2=None – 当不为None时表示二次项的第二个变量,可以为单个变量或数组

example:

quadExpr.addTerms([1, 2], [x, y])
quadExpr.addTerms(1, x)
quadExpr.addTerms(1, x, y)
clear()

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

example:

quadExpr = 2 * x * x + 3 * y + 1
quadExpr.clear()
print(quadExpr.size() == 0)
print(quadExpr.getLinExpr().size() == 0)
print(quadExpr.getConstant() == 0)
copy()

返回一个二次表达式的拷贝

example:

another = quadExpr.copy()
getCoeff(index)

获取二次表达式某个二次项的系数

Parameters

index – 要获取系数的二次项的index

example:

quadExpr = 2 * x + 1 * y + 3 * z * z
print(quadExpr.getCoeff(0) == 2)
getConstant()

获取二次表达式的常数项

example:

quadExpr.addConstant(-quadExpr.getConstant())
getLinExpr()

获取包含在二次表达式中的线性表达式

example:

quadExpr = 2 * x * x + 3 * y + 1
print(quadExpr.getLinExpr().size() == 1)
print(quadExpr.getLinExpr().getConstant() == 1)
getValue()

在问题求解以后,获取二次表达式的值

example:

m.optimize()
quadExpr = 2 * x * x + y
print(quadExpr.getValue())
getVar1(index)

获取二次表达式中,某个二次项的第一个变量

Parameters

index – 二次项在表达式中的index

example:

quadExpr = 2 * x + 1 * y + 3 * x * y
print(quadExpr.getVar1(0).sameAs(x))
getVar2(index)

获取二次表达式中,某个二次项的第二个变量

Parameters

index – 二次项在表达式中的index

example:

quadExpr = 2 * x + 1 * y + 3 * x * y
print(quadExpr.getVar2(0).sameAs(y))
remove(item)

删除表达式包含的部分terms

Parameters

item – 如果item为数字,则删除index为item的二次项。如果item为变量,则删除所有包含这个变量的terms,包含二次项和线性项。

example:

quadExpr = 2 * x * x + 3 * y + 4 * x
quadExpr.remove(1)
quadExpr.remove(x)
print(quadExpr.size() == 0)
print(quadExpr.getLinExpr().size() == 0)
size()

获取二次项的个数,不包括线性项和常数项

example:

quadExpr = 2 * x * x + 3 * y + 1
print(quadExpr.size() == 1)