8.7.15. LinExpr¶
- class LinExpr¶
代表一个线性的表达式。通常与约束或目标函数有关。 一个线性表达式包含很多个linear terms,以及一个constant term。线性表达式可以参与算术运算。 例如:
# 创建一个优化模型和相关变量 m = Model() x = m.addVar() y = m.addVar() # 创建一个线性表达式 linExpr = 2 * x + 3 * y + 1 # constant term加1 linExpr += 1 linExpr = linExpr + 1 # 添加一个linear term linExpr + x -linExpr # 得到一个MLinExpr linExpr + numpy.ones((2, 2)) # 得到一个QuadExpr linExpr * x # 得到一个MQuadExpr linExpr * mLinExpr # 得到的表达式可以用于设置优化目标或者约束 m.setObjective(linExpr)
方法
构造一个线性表达式
添加另一个线性表达式的所有terms到当前线性表达式
为线性表达式的常数项增加一个值
添加一个或多个term(s)
清空所有包含的terms,并将常数项置为0
获取线性表达式某个term的系数
获取线性表达式的常数项
在问题求解以后,获取线性表达式的值
获取线性表达式某个term的变量
删除表达式包含的部分terms
获取terms的个数,不包括常数项
- __init__(arg1=0, arg2=None)¶
构造一个线性表达式
- Parameters:
arg1=0 – 当调用时提供两个参数时,arg1通常为系数或系数列表
arg2=None – 当调用时提供两个参数时,arg2通常为变量或变量列表
example:
LinExpr((1, 2, 3), (x, y, z)) LinExpr(2, y) LinExpr(x) LinExpr(2 * x + 1) LinExpr(1)
- add(expr, mult=1.0)¶
添加另一个线性表达式的所有terms到当前线性表达式
- Parameters:
expr – 另一个线性表达式
mult=1.0 – 乘数,默认值为1.0
example:
linExpr.add(expr, -1)
- addConstant(c)¶
为线性表达式的常数项增加一个值
- Parameters:
c – 需要增加的值,负数表示减去一个值
example:
linExpr.addConstant(-linExpr.getConstant())
- addTerms(coeffs, vars)¶
添加一个或多个term(s)
- Parameters:
coeffs – 要添加的term(s)的系数,可能为数字或数组
vars – 要添加的term(s)的变量,可以为单个变量或数组
example:
linExpr.addTerms([1, 2], [x, y]) linExpr.addTerms(1, x)
- clear()¶
清空所有包含的terms,并将常数项置为0
example:
linExpr = 2 * x + 3 * y + 1 linExpr.clear() print(linExpr.size() == 0) print(linExpr.getConstant() == 0)
- getCoeff(index)¶
获取线性表达式某个term的系数
- Parameters:
index – 要获取系数的term的index
example:
linExpr = 2 * x + 1 * y print(linExpr.getCoeff(1) == 1.0)
- getConstant()¶
获取线性表达式的常数项
example:
linExpr.addConstant(-linExpr.getConstant())
- getValue()¶
在问题求解以后,获取线性表达式的值
example:
m.optimize() linExpr = 2 * x + y * 1 print(linExpr.getValue())
- getVar(index)¶
获取线性表达式某个term的变量
- Parameters:
index – 要获取变量的term的index
example:
linExpr = 2 * x + 1 * y print(linExpr.getVar(1).sameAs(y))
- remove(item)¶
删除表达式包含的部分terms
- Parameters:
item – 如果item为数字,则删除index为item的term。如果item为变量,则删除所有包含这个变量的terms
example:
linExpr = 2 * x + 3 * y + 4 * x linExpr.remove(1) linExpr.remove(x) print(linExpr.size() == 0)
- size()¶
获取terms的个数,不包括常数项
example:
linExpr = 2 * x + 3 * y + 1 print(linExpr.size() == 2)