但是我需要所有点被服务
时间: 2024-02-28 17:54:00 浏览: 41
如果你需要确保所有点都被服务,可以在while循环后再添加一段代码,将剩余的节点分配给车辆。例如,可以在循环结束后添加以下代码:
```
while len(own_pickup_node) > 0:
route = [depot.depot_id]
for i in range(min(len(own_pickup_node), 2)):
minIndex = np.argmin([model.distance_matrix[depot.depot_id, own_pickup_node[j]] for j in range(0, len(own_pickup_node))])
minnode = own_pickup_node[minIndex]
route.append(minnode)
arrival = model.time_matrix[depot.depot_id, minnode]
departure = arrival + service_time
route.append(own_delivery_node[minIndex])
arrival = departure + model.time_matrix[minnode, own_delivery_node[minIndex]]
departure += arrival + service_time
last_node = own_delivery_node[minIndex]
own_pickup_node.remove(minnode)
own_delivery_node.remove(own_delivery_node[minIndex])
for j in own_pickup_node:
next_minIndex = np.argmin([model.distance_matrix[last_node, j]])
next_minnode = own_pickup_node[next_minIndex]
arrival = departure + model.time_matrix[last_node, next_minnode]
if arrival <= model.demand_dict[next_minnode].end_time and arrival <= depot.dend_time:
route.append(next_minnode)
departure = arrival + service_time
route.append(own_delivery_node[next_minIndex])
arrival = departure + model.time_matrix[next_minnode, own_delivery_node[next_minIndex]]
departure += arrival + service_time
last_node = own_delivery_node[next_minIndex]
own_pickup_node.remove(next_minnode)
own_delivery_node.remove(own_delivery_node[next_minIndex])
else:
continue
route.append(depot.depot_id)
sol.route_list.append(route)
vehicle_number = vehicle_number - 1
if vehicle_number == 0:
break
```
这段代码的作用是将剩余的节点分配给车辆。它会循环遍历剩余的pickup_node,每次找到距离最近的节点,并将其和对应的delivery节点加入到一辆车的路径中。如果当前路径已经包含了两个节点,就将其加入到路线列表中,并为下一辆车重新生成一个路径。如果所有车辆都被分配任务后仍有剩余节点,它会退出循环。这样就可以确保所有节点都被服务。
阅读全文