8.6.17. 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)

方法

__init__()

构造一个线性表达式

add()

添加另一个线性表达式的所有terms到当前线性表达式

addConstant()

为线性表达式的常数项增加一个值

addTerms()

添加一个或多个term(s)

clear()

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

getCoeff()

获取线性表达式某个term的系数

getConstant()

获取线性表达式的常数项

getValue()

在问题求解以后,获取线性表达式的值

getVar()

获取线性表达式某个term的变量

remove()

删除表达式包含的部分terms

size()

获取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)