建模中经常会对不同下标的数据进行组合,为了提高模型求解效率,gurobi封装了更高级的数据结构,即multidict、tuplelist、tupledict。还有一种办法是循环,但显然会降低效率。
1.tuplelist
是list的扩展,添加/删除元素与list一致。
除此以外,还有select快速筛选功能,这样我们可以筛选下标一致的。select类似于SQL中的select-where。
使用 tuplelist() 不能忘记 from gurobipy import *
import gurobipy as grb
Cities= [('A','B'), ('A','C'), ('B','C'),('B','D'),('C','D')]
Routes = grb.tuplelist(Cities)
print(Routes.select('A','*'))
#('A','B'), ('A','C')
Result=[]
for i,j in Cities:
if i=='A':
Result.append((i,j))
print(Result)
2.tupledict
Gurobi tupledict – Python Dictionary 扩展
键值为 tuple (元组),可以使用 select, sum, prod 函数,用于变量和约束。
如:当系数矩阵的键和变量的一致时,可以快速匹配,直接采用prod方法建立线性表达式。
import gurobipy as grb
# 创建一个系数矩阵,用tuplelist格式存储
c1 = [(1, 1), (1, 2), (1, 3)]
coeff = grb.tupledict(c1)
coeff[(1, 1)] = 1
coeff[(1, 2)] = 0.3
coeff[(1, 3)] = 0.4
print(vars.prod(coeff, 1, '*'))
# 输出
#
3.multidict
Multidict() 创建 tuplelist 和 tupledict 的便捷方法
cities, supply, demand = multidict({
'A': [100, 20],
'B': [150, 50],
'C': [20, 300],
'D': [10, 200]})
返回cities (tuplelist)、 supply (tupledic) 和 demand (tupledict)