定义从网络X到Pyomo的最短路径

时间:2019-02-12 03:54:12

标签: shortest-path pyomo

我正在处理最短路径问题,以前我已经在NetworkX的帮助下使用内置的Dijkstra算法解决了该问题。现在,我需要将最短路径的结果作为Set进行使用PyOmo的进一步优化处理。尽管如此,我仍然找不到解决方法。

通常,我有1000多个起点-目的地(OD)行程,因此每个起点-目的地行程也有1000+最短路径。最短的路径建立在2400多个节点上。我试图用这种方式来表达它,但是花了我很长时间,加上Idk,无论这是否正确。

model = AbstractModel()

#Set nodes
model.Nodes = RangeSet(1, len(source))

#Define the arc
model.Arcs = Set(initialize = [x for x,y in arc.items()], within = model.Nodes*model.Nodes)

#Define the NUTS3 area
model.Nuts3 = Set(initialize = [x for x,y in nuts3.items()])

#Define the OD paths
ODlist = []
splist = {}
for ix in range(len(paths)):
    OD = paths["NUTS3_O"][ix],paths["NUTS3_D"][ix]
    ODlist.append((OD))
    splist[OD] = [x for x in paths["Path"][ix]]

model.OD = Set(initialize = ODlist, within= model.Nuts3 * model.Nuts3, ordered = True)

#Define the shortest path nodes
def sppaths_init(model,O,D,Nodes):
    for x,y in splist.items():
        if model.OD == x:
            yield y

model.sp = Set(model.OD, initialize = sppaths_init)

#Create instance
instance = model.create_instance()
instance.pprint()

来自networkX的最短路径的结果是这样的:

 Nuts3_O   NUTS3_D  Shortest Path

  D1         E5          [1,2,3,4,5]

我想将OD行程(作为每个最短路径的标识符)和最短路径本身合并,因为优化将是最大程度地减少沿着该路径建造的某些建筑物的数量。有谁知道如何做到这一点?

0 个答案:

没有答案