Python:从圆弧创建管线

2024-10-03 19:33:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在研究一个有容量限制的车辆路径问题,并找到了一个最佳解决方案,在我的图上有以下一组弧处于活动状态:

[(0, 1),
 (0, 4),
 (0, 5),
 (0, 6),
 (0, 7),
 (0, 10),
 (1, 0),
 (2, 13),
 (3, 9),
 (4, 12),
 (5, 0),
 (6, 14),
 (7, 8),
 (8, 0),
 (9, 0),
 (10, 11),
 (11, 0),
 (12, 3),
 (13, 0),
 (14, 2)]

这个列表称为arcsDelivery。你知道吗

我想重新构造这个列表来找到存储在列表routesdelivery中的路由:

[[0,1,0],[0,4,12,3,9,0],[0,5,0],[0,6,14,2,13,0],[0,7,8,0],[0,10,11,0]] 

不过,我一直在努力这么做,有谁有一些有用的提示?你知道吗


Tags: 路径路由列表解决方案容量车辆arcsdeliveryroutesdelivery
1条回答
网友
1楼 · 发布于 2024-10-03 19:33:16

下面是一种方法(考虑到arcsdelivery列表是基于每个元组的第一个元素按升序排序的):

def findTuple(elem):
  for t in arcsDelivery:
    if t[0]==elem:
      return t
  return None

arcsDelivery = [(0, 1),
 (0, 4),
 (0, 5),
 (0, 6),
 (0, 7),
 (0, 10),
 (1, 0),
 (2, 13),
 (3, 9),
 (4, 12),
 (5, 0),
 (6, 14),
 (7, 8),
 (8, 0),
 (9, 0),
 (10, 11),
 (11, 0),
 (12, 3),
 (13, 0),
 (14, 2)]

routesDelivery = []

startRoutes = len(list(filter(lambda elem: elem[0]==0, arcsDelivery)))

for i in range(startRoutes):
  tempList = []
  currentTuple = arcsDelivery[i]
  tempList.append(currentTuple[0])
  tempList.append(currentTuple[1])
  while True:
    if currentTuple[1]==0:
      break
    else:
      nextTuple = findTuple(currentTuple[1])
      currentTuple = nextTuple
      tempList.append(currentTuple[1])
  routesDelivery.append(tempList)

print(routesDelivery)

输出:

[[0, 1, 0], [0, 4, 12, 3, 9, 0], [0, 5, 0], [0, 6, 14, 2, 13, 0], [0, 7, 8, 0], [0, 10, 11, 0]]

相关问题 更多 >