8.7.16. QuadExpr¶
- class QuadExpr¶
代表一个二次表达式。 二次表达式由0个或多个二次项,以及一个线性表达式组成。 一个二次表达式可以通过算数运算得到。 例如:
# 创建一个优化模型和相关变量 m = Model() x = m.addVar() y = m.addVar() # 变量的平方 x ** 2 # 变量相乘 x * y # 线性表达式乘以变量 linExpr * x
方法
构造一个二次表达式
添加另一个表达式的所有terms到当前二次表达式
为二次表达式的常数项增加一个值
添加一个或多个term(s)
清空所有包含的terms,并将常数项置为0
返回一个二次表达式的拷贝
获取二次表达式某个二次项的系数
获取二次表达式的常数项
获取包含在二次表达式中的线性表达式
在问题求解以后,获取二次表达式的值
获取二次表达式中,某个二次项的第一个变量
获取二次表达式中,某个二次项的第二个变量
删除表达式包含的部分terms
获取二次项的个数,不包括线性项和常数项
- __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)