我正在使用
tupledict
中的 gurobipy
,我真的很喜欢 select
功能。但是它仅限于值而不是条件表达式。
我的变量元组字典包含一个元组
(r,t)
作为键,其中r
是一个代表路线的对象,有2个主要属性节点和边(为简单起见,我只提到这两个),t
是一个整数代表时间段。我正在做一个分支和价格算法,我必须对节点的访问次数进行分支,这意味着我必须迭代我的变量tupledict
以查看路线r
是否包含节点。其他时候我必须检查路线是否包含边缘。这些迭代非常昂贵,我想知道是否有可能知道 select
方法是如何构建的,因为例如在选择 t
时它非常快。
我愿意使用 cython 编写自己的 tupledict
类,并为我拥有的每个分支规则编写类似 select
的函数,但是我似乎没有找到 tupledict
的实现。我希望这不是一个“秘密”。
gurobipy.tuplelist 和 gurobipy.tupledict 是为常见的优化模型结构创建的,您需要在一个元组上匹配的子集元素。典型的用例是网络流模型的流守恒约束:您希望所有弧都关联到一个节点。具体来说,您希望所有(有向)弧 (i,j) 和 (j,k) 都为固定 j。
您所描述的有点不同:您想要找到 (r,t),其中路由 r 包含节点 j。这与匹配特定值无关:这需要了解路由对象的结构。
tl;dr:gurobipy.tuplelist 不支持此功能,但您可以使用列表字典之类的东西构建自己的从 j 到 r 的索引。