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