为了在GUROBI中能够更加高效地建模,Python API内置了三种特殊的数据结构,方便根据下标来查找数据。注意在使用这三种数据结构之前需要 import gurobipy as gp
multidict
一、普通字典dict()的用法
小结:普通字典dict()只有一个返回值,就是字典本身;使用.keys()和.values()可以分别以列表的形式返回键和值
二、GUROBI中的multidict()的用法
只设置一个返回值(一般不会只返回一个值,这里只是为了演示说明):
设置两个返回值:
小结:第一个返回值为键,类型为gurobi中的元组列表(每一个键是一个元组,所有的键一起以一个列表的形式返回);第二个返回值为该字典本身,类型为gurobi中的元组字典(待会解释什么是tupledict)
设置三个返回值:
小结:第一个返回值为键;第二个返回值为一个字典,其中值为原字典的值(列表)中的第一个元素;第二个返回值也为一个字典,其中值为原字典的值(列表)中的第二个元素。
总结:multidict()可以将一个字典拆分成多个子字典,这些子字典的键是共享的,但值是原字典的值列表中的各个值,并且各个子字典是以gurobi中的tupledict类型存放的。
tuplelist
一、简介
tuplelist是python的list类下的一个子类,支持普通list的打印长度、增、删等操作,同时也具有自己的一些特有操作。可以简单理解为里面元素都是元组的一个列表,但比普通列表多了一些特有的操作。为决策变量设置下标时常用。
注意:官网上说tuplelist只能存储标量值,如(int, float, string,...)等,支持(1, 2.0, 'abc'),但不支持((1, 2.0),'abc') ,但是好像是支持的:
总结:(1)tuplelist是gurobi的特有数据结构,因此调用之前需要import gurobipy,再调用tuplelist;
(2)list中的元组元素的长度可以不一样;tuplelist中的元组元素的长度必须一样;
二、特殊用法
tupledict
一、简介
是python的dict()类下的一个子类,其键为元组的形式,常用来表示决策变量的索引,其值为gurobi决策变量对象,常用来表示决策变量的取值。在为模型添加决策变量时常用。