gurobipy.tupledict#

class tupledict#

Gurobi 元组字典。这是 Python dict 类的一个子类,旨在高效支持在构建优化模型时非常常见的使用模式。特别是,tupledict 是一个 Python dict,其中键表示变量索引,值通常是 Gurobi Var 对象。此类的对象使得使用 tuplelist.select() 语法和语义在 Gurobi 变量集上构建线性表达式变得更加容易。

通常,您通过调用Model.addVars来构建一个tupledict。 一旦您创建了一个tupledict d,您可以使用d.sum()来 创建一个linear expression,该表达式捕获 tupledict中变量的总和。您还可以使用类似 d.sum(1, '*', 5)的命令来创建对d中变量子集的总和。 假设tupledict的键是包含三个字段的元组,此语句将创建一个线性表达式, 该表达式捕获d中所有变量的总和,这些变量的键在元组的第一个字段中包含1, 在第三个字段中包含5('*'字符是一个通配符,表示该字段中的任何值都是可接受的)。 您还可以使用d.prod(coeff)来创建一个线性表达式,其中系数从字典 coeff中提取。例如,如果d(1,2,5)包含变量xcoeff(1,2,5)为2.0,则生成的表达式将包括项\(2.0*x\)

要访问tupledict的成员,您可以使用标准的字典索引。例如,d[1,2]返回与元组(1,2)关联的值。

请注意,tupledict 的键必须是标量值的元组(intfloatstring,…)。因此,您可以使用 (1, 2.0, 'abc') 作为键,但不能使用 ((1, 2.0), 'abc')

请注意,tupledict 对象构建并维护一组内部数据结构,以支持高效的 select 操作。如果您希望回收与这些数据结构相关的存储空间,可以调用 clean 函数。

tupledict(args, kwargs)#

tupledict 构造函数。参数与 Python 的 dict 构造函数相同。

请注意,您通常会使用Model.addVars来构建一个tupledict

Parameters:
  • args – 位置参数。

  • kwargs – 命名参数。

Returns:

一个 tupledict 对象。

Example:
d = gp.tupledict([((1,2), 'onetwo'), ((1,3), 'onethree'), ((2,3), 'twothree')])
print(d[1,2]) # prints 'onetwo'
select(pattern)#

返回一个包含与指定元组模式匹配的键相关联的值的list。该模式应为键元组中的每个字段提供一个值。'*'值表示该字段接受任何值。

如果没有参数,此方法返回tupledict中所有值的列表。

Parameters:

pattern – 用于匹配键元组的模式。

Example:
d = gp.tupledict([((1,2), 'onetwo'), ((1,3), 'onethree'), ((2,3), 'twothree')])
print(d.select())       # prints ['onetwo', 'onethree', 'twothree']
print(d.select(1, '*')) # prints ['onetwo', 'onethree']
print(d.select('*', 3)) # prints ['onethree', 'twothree']
print(d.select(1, 3))   # prints ['onethree']
sum(pattern)#

返回与指定模式匹配的键相关联的值的总和。如果这些值是Gurobi Var对象,则结果是一个LinExpr。模式应为键元组中的每个字段提供一个值。'*'值表示该字段接受任何值。

如果没有参数,此方法返回tupledict中所有值的总和。

Parameters:

pattern – 用于匹配键元组的模式。

Example:
x = m.addVars([(1,2), (1,3), (2,3)])
expr = x.sum()       # LinExpr: x[1,2] + x[1,3] + x[2,3]
expr = x.sum(1, '*') # LinExpr: x[1,2] + x[1,3]
expr = x.sum('*', 3) # LinExpr: x[1,3] + x[2,3]
expr = x.sum(1, 3)   # LinExpr: x[1,3]
prod(coeff, pattern)#

返回一个线性表达式,该表达式包含在tupledictcoeff参数中都存在的每个元组的一个项;coeff应该是一个将元组映射到系数值的Python dict对象。例如,如果x[1,2] = varcoeff[1,2] = 2.0,则x.prod(coeff)将包含项2.0*var

Parameters:
  • coeff – Python dict 将元组映射到系数。

  • pattern – 用于匹配键元组的模式。

Example:
x = m.addVars([(1,2), (1,3), (2,3)])
coeff = dict([((1,2), 2.0), ((1,3), 2.1), ((2,3), 3.3)])
expr = x.prod(coeff) # LinExpr: 2.0 x[1,2] + 2.1 x[1,3] + 3.3 x[2,3]
expr = x.prod(coeff, '*', 3) # LinExpr: 2.1 x[1,3] + 3.3 x[2,3]
clean()#

丢弃与tupledict对象关联的内部数据结构。 请注意,调用此例程不会影响tupledict的内容。它只会影响内存使用和后续调用select的性能。

Example:
d.clean()