gurobipy.tupledict#
- class tupledict#
Gurobi 元组字典。这是 Python
dict类的一个子类,旨在高效支持在构建优化模型时非常常见的使用模式。特别是,tupledict是一个 Pythondict,其中键表示变量索引,值通常是 GurobiVar对象。此类的对象使得使用tuplelist.select()语法和语义在 Gurobi 变量集上构建线性表达式变得更加容易。通常,您通过调用
Model.addVars来构建一个tupledict。 一旦您创建了一个tupledictd,您可以使用d.sum()来 创建一个linear expression,该表达式捕获tupledict中变量的总和。您还可以使用类似d.sum(1, '*', 5)的命令来创建对d中变量子集的总和。 假设tupledict的键是包含三个字段的元组,此语句将创建一个线性表达式, 该表达式捕获d中所有变量的总和,这些变量的键在元组的第一个字段中包含1, 在第三个字段中包含5('*'字符是一个通配符,表示该字段中的任何值都是可接受的)。 您还可以使用d.prod(coeff)来创建一个线性表达式,其中系数从字典coeff中提取。例如,如果d(1,2,5)包含变量x且coeff(1,2,5)为2.0,则生成的表达式将包括项\(2.0*x\)。要访问
tupledict的成员,您可以使用标准的字典索引。例如,d[1,2]返回与元组(1,2)关联的值。请注意,
tupledict的键必须是标量值的元组(int、float、string,…)。因此,您可以使用(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)#
返回一个线性表达式,该表达式包含在
tupledict和coeff参数中都存在的每个元组的一个项;coeff应该是一个将元组映射到系数值的Pythondict对象。例如,如果x[1,2] = var且coeff[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]