определить кратчайший путь от сети X до Pyomo - PullRequest
0 голосов
/ 12 февраля 2019

Я имею дело с проблемой кратчайшего пути, в которой ранее я решил ее с помощью NetworkX, используя встроенный алгоритм Дейкстры.Теперь мне нужен результат кратчайших путей в виде набора для дальнейшей оптимизации обработки с использованием 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 (в качестве идентификатора каждого кратчайшего пути) и сам кратчайший путь, поскольку оптимизация будет заключаться в минимизации количества определенных зданий, построенных вдоль пути.У кого-нибудь есть идеи, как это сделать?

...