Skip to content

Instantly share code, notes, and snippets.

@Mizux
Last active September 30, 2021 17:44
Show Gist options
  • Save Mizux/3a890dd32855deb037165e6dc5dfd1e7 to your computer and use it in GitHub Desktop.
Save Mizux/3a890dd32855deb037165e6dc5dfd1e7 to your computer and use it in GitHub Desktop.
Sample for Westlife1002
#!/usr/bin/env python3
"""Capacitated Vehicle Routing Problem"""
from six.moves import xrange
from ortools.constraint_solver import pywrapcp
from ortools.constraint_solver import routing_enums_pb2
import networkx as nx
import matplotlib.pyplot as plt
import random
import math
import pandas as pd
from csv import reader
# Problem Data Definition #
class Vehicle():
def __init__(self):
self._capacity = 9000
# self.id = id
self.routes = []
self.time_min = []
self.time_max = []
self.load = []
self.cm3 = []
self._speed = 0.31 #mile/min
@property
def capacity(self):
"""Gets vehicle capacity"""
return self._capacity
def routes(self):
return self.routes
def speed(self):
return self._speed
class DataProblem():
"""Stores the data for the problem"""
def __init__(self):
"""Initializes the data for the problem"""
print("Data Model:")
self._vehicle = Vehicle()
self._num_vehicles = num_vehicles()
self._locations = []
self._demands = []
self._time_windows = []
self._cm3 = []
self._locationID = []
self._pickups_deliveries = []
df = pd.read_csv("order_info_7.23.csv", encoding="utf-8")
last_id = df.shape[0] + 1
# df = df[df['提货日期'] == 1]
# df = df[df['ID'] != 65] # 广西异常地址
global start_node
global end_node
total_length = len(df["装货地址维度"].tolist())
start_node = 0
# end_node = total_length + 1
end_node = start_node
# print(df)
# set lat/lon incl. first and last node
p_lat = df["装货地址维度"].tolist()
p_lon = df["装货地址经度"].tolist()
d_lat = df["卸货地址维度"].tolist()
d_lon = df["卸货地址经度"].tolist()
lat = p_lat + d_lat
lon = p_lon + d_lon
dummy_lat = df["卸货地址维度"].tolist()[0]
dummy_lon = df["卸货地址经度"].tolist()[0]
lat.insert(0, dummy_lat)
lon.insert(0, dummy_lon)
# lat.append(dummy_lat)
# lon.append(dummy_lon)
self._locations = list(zip(lat, lon))
# print("locations: ", self._locations)
# print("length locations: ", len(self._locations))
#set first and last node for each vehicle
self._starts = [0] * num_vehicles()
self._ends = [0] * num_vehicles()
#self._ends = [len(lat) - 1] * num_vehicles()
# print("start node: ", self._starts)
# print("end node: ", self._ends)
# set time window incl. first and last node
p_earliest = df['最早装货时间'].tolist()
p_latest = df['最晚装货时间'].tolist()
d_earliest = [480] * len(p_earliest)
d_latest = [1320] * len(p_latest)
earliest = p_earliest + d_earliest
latest = p_latest + d_latest
earliest.insert(0, 0)
latest.insert(0, 1320)
# earliest.append(480)
# latest.append(1320)
self._time_windows = list(zip(earliest, latest))
print("time windows: ", self._time_windows)
#set weight and cm3 incl. first and last node
self.p_demands = df["毛重(KGS)"].tolist()
self.p_cm3 = df["体积(CBM)"].tolist()
self.d_demands = [0 - x for x in self.p_demands]
self.d_cm3 = [0 - x for x in self.p_cm3]
self._demands = self.p_demands + self.d_demands
self._cm3 = self.p_cm3 + self.d_cm3
self._demands.insert(0, start_node)
self._cm3.insert(0, start_node)
# self._demands.append(0)
# self._cm3.append(0)
print("weight: ", self._demands)
# print("cm3: ", self._cm3)
print("cm3 length: ", len(self._cm3))
print("pickup demand: ", self._demands[26])
print("delivery demand: ", self._demands[64])
# get index of a certain day
self._locationID = df["ID"].tolist()
self._locationID.insert(0, 0)
# self._locationID.append(last_id)
# print("ID list: ", self._locationID)
merge = self._locationID + self._locationID[1:]
self._locationID = merge
print("ID list: ", self._locationID)
self.map = pd.DataFrame(merge).reset_index()
self.map.columns = ['模型地址编号', '订单地址编号']
self.map["实际地址编号"] = self.map["模型地址编号"]
self.map["地址类型"] = 0
last_loadid = self._locationID[-1]
self.map.loc[self.map['模型地址编号'] <= last_loadid, '地址类型'] = "装货"
self.map.loc[self.map['模型地址编号'] > last_loadid, '地址类型'] = "卸货"
self.map.loc[self.map['模型地址编号'] == 0, '地址类型'] = "起点"
print("\nmodel_node_index vs actual_node_index vs ordersheet_index\n",
self.map.to_string(index=False))
#set pickup & delivery pairs
pickups = self.map[self.map['地址类型'] == "装货"]["模型地址编号"].tolist()
deliveries = self.map[self.map['地址类型'] == "卸货"]["模型地址编号"].tolist()
for i, n in enumerate(pickups):
temp = [n, deliveries[i]]
self._pickups_deliveries.append(temp)
print("pickups_deliveries: ", self._pickups_deliveries)
@property
def getvehicle(self):
"""Gets a vehicle"""
return self._vehicle
@property
def num_vehicles(self):
"""Gets number of vehicles"""
return self._num_vehicles
@property
def locations(self):
"""Gets locations"""
return self._locations
@property
def num_locations(self):
"""Gets number of locations"""
return len(self.locations)
@property
def depot(self):
"""Gets depot location index"""
return self._depot
@property
def demands(self):
"""Gets demands at each location"""
return self._demands
@property
def cm3(self):
"""Gets cm3 at each location"""
return self._cm3
@property
def time_per_demand_unit(self):
"""Gets the time (in min) to load a demand"""
return 120
@property
def time_windows(self):
"""Gets (start time, end time) for each locations"""
return self._time_windows
@property
def starts(self):
"""Gets start location for each truck"""
return self._starts
@property
def ends(self):
"""Gets end location for each truck"""
return self._ends
## Problem Constraints
class CreateDistanceEvaluator(object): # pylint: disable=too-few-public-methods
"""Creates callback to return distance between points."""
def __init__(self, data, manager):
"""Initializes the distance matrix."""
self._distances = {}
self.manager = manager
self.dist_matrix = []
# precompute distance between location to have distance callback in O(1)
total_matrix = []
with open("dist_matrix_7.23.csv", 'r') as read_obj:
csv_reader = reader(read_obj)
list_of_rows = list(csv_reader)
for n in list_of_rows:
n = [int(i) for i in n]
total_matrix.append(n)
# print("total matrix: ", len(total_matrix))
print("location num: ", data.num_locations)
for from_node in xrange(data.num_locations):
convert_from = data._locationID[from_node]
temp = []
for to_node in xrange(data.num_locations):
convert_to = data._locationID[to_node]
if from_node == to_node:
temp.append(0)
else:
if from_node in data.starts or to_node in data.starts:
temp.append(0)
else:
dist = int(total_matrix[convert_from - 1][convert_to - 1] / 1000)
temp.append(dist)
self.dist_matrix.append(temp)
#print("dist matrix: ", self.dist_matrix)
#print("dist matrix: ", len(self.dist_matrix))
def distance_evaluator(self, from_index, to_index):
"""Returns the Harversine Distance between the two nodes"""
from_node = self.manager.IndexToNode(from_index)
to_node = self.manager.IndexToNode(to_index)
value = self.dist_matrix[from_node][to_node]
#print(f"dist({from_node},{to_node}): {value}")
return value
def define_total_cost(self, data, routing, manager):
for vehicle_idx in range(data.num_vehicles):
def vehicle_cost_callback(from_index, to_index, i=vehicle_idx):
from_node = manager.IndexToNode(from_index)
to_node = manager.IndexToNode(to_index)
value = int(cost_vector()[i] * self.dist_matrix[from_node][to_node])
#print(f"v: {i}, cost({from_node},{to_node}): {value}")
return 10 #value
cost_callback_index = routing.RegisterTransitCallback(vehicle_cost_callback)
routing.SetArcCostEvaluatorOfVehicle(cost_callback_index, vehicle_idx)
class CreateDemandEvaluator(object):
"""Creates callback to get demands at each location."""
def __init__(self, data, manager):
"""Initializes the demand array."""
self._demands = data.demands
self._manager = manager
def demand_evaluator(self, from_index):
"""Returns the demand of the current node"""
from_node = self._manager.IndexToNode(from_index)
value = int(self._demands[from_node])
#print(f"demand({from_node}): {value}")
return value
class CreateCM3Evaluator(object):
"""Creates callback to get cm3 at each location."""
def __init__(self, data, manager):
"""Initializes the demand array."""
self._cm3 = data.cm3
self._manager = manager
def cm3_evaluator(self, from_index):
"""Returns the cm3 of the current node"""
from_node = self._manager.IndexToNode(from_index)
value = int(self._cm3[from_node])
#print(f"cm3({from_node}): {value}")
return value
class CreateTimeEvaluator(object):
"""Creates callback to get total times between locations."""
def __init__(self, data, manager):
"""Initializes the total time matrix."""
self._total_time = {}
self._manager = manager
self.time_matrix = []
total_matrix = []
with open("time_matrix_7.23.csv", 'r') as read_obj:
csv_reader = reader(read_obj)
list_of_rows = list(csv_reader)
for n in list_of_rows:
n = [int(i) for i in n]
total_matrix.append(n)
# print("total matrix: ", len(total_matrix))
for from_node in xrange(data.num_locations):
self._total_time[from_node] = {}
convert_from = data._locationID[from_node]
temp = []
for to_node in xrange(data.num_locations):
self._total_time[from_node][to_node] = 0
convert_to = data._locationID[to_node]
if from_node == to_node:
temp.append(0)
else:
if from_node in data.starts or to_node in data.starts:
self._total_time[from_node][to_node] = 0
temp.append(0)
else:
travel_time = total_matrix[convert_from - 1][convert_to - 1] / 60
service_time = self.service_time(data, from_node)
total_time = int(travel_time + service_time)
temp.append(total_time)
self._total_time[from_node][to_node] = total_time
self.time_matrix.append(temp)
#print("time matrix: ", self.time_matrix)
#print("time matrix: ", len(self.time_matrix))
@staticmethod
def service_time(data, node):
"""Gets the service time for the specified location."""
# return data.demands[node] * data.time_per_demand_unit #function of volume at this node
return data.time_per_demand_unit #constant service time for all nodes
def time_evaluator(self, from_index, to_index):
"""Returns the total time between the two nodes"""
from_node = self._manager.IndexToNode(from_index)
to_node = self._manager.IndexToNode(to_index)
value = self._total_time[from_node][to_node]
#print(f"time({from_node},{to_node}): {value}")
return value
def add_distance_dimension(routing, transit_callback_index, data, manager):
"""Add Global Span constraint"""
distance = "Distance"
maximum_distance = 800
routing.AddDimension(
transit_callback_index,
0, # null slack
maximum_distance, # maximum distance per vehicle
True, # start cumul to zero
distance)
# distance_dimension = routing.GetDimensionOrDie(distance)
# Try to minimize the max distance among vehicles.
# /!\ It doesn't mean the standard deviation is minimized
# distance_dimension.SetGlobalSpanCostCoefficient(100)
def add_capacity_constraints(routing, data, demand_callback_index, manager):
"""Adds capacity constraint"""
capacity = "Capacity"
routing.AddDimensionWithVehicleCapacity(
demand_callback_index,
0, # null capacity slack
capacity_vector(), # vector vehicle_capacity
True, # start cumul to zero
capacity)
def allow_dropping(routing, data, manager):
# Allow to drop nodes.
global penalty
penalty = 1_000_000
for node in range(0, manager.GetNumberOfNodes()):
if node in data.starts or node in data.ends: # starts node can't be dropped
continue
print(f"allow drop: {node}")
routing.AddDisjunction([manager.NodeToIndex(node)], penalty)
def setup_PDP(routing, data, manager):
# Define Transportation Requests.
distance_dimension = routing.GetDimensionOrDie("Distance")
for pickup, delivery in data._pickups_deliveries:
#print(f"Add PDP [{pickup},{delivery}]")
pickup_index = manager.NodeToIndex(pickup)
delivery_index = manager.NodeToIndex(delivery)
routing.AddPickupAndDelivery(pickup_index, delivery_index)
routing.solver().Add(
routing.VehicleVar(pickup_index) == routing.VehicleVar(delivery_index))
routing.solver().Add(
distance_dimension.CumulVar(pickup_index) <=
distance_dimension.CumulVar(delivery_index))
def add_cm3_constraints(routing, data, demand_callback_index):
"""Adds capacity constraint"""
cm3 = "cm3"
routing.AddDimensionWithVehicleCapacity(
demand_callback_index,
0, # null capacity slack
cm3_vector(), # vector vehicle_capacity
True, # start cumul to zero
cm3)
def add_time_window_constraints(routing, data, time_callback_index, manager):
"""Add Global Span constraint"""
time = "Time"
# horizon = 2000
horizon = 1320
routing.AddDimension(
time_callback_index,
480, # allow waiting time
horizon, # maximum time per vehicle
False, # don't force start cumul to zero since we are giving TW to start nodes
time)
time_dimension = routing.GetDimensionOrDie(time)
# print("len time_window: ", data.time_windows)
# set time window for each customer location's visiting time
for location_idx, time_window in enumerate(data.time_windows):
if location_idx in data.starts or location_idx in data.ends:
continue
index = manager.NodeToIndex(location_idx)
time_dimension.CumulVar(index).SetRange(time_window[0], time_window[1])
routing.AddToAssignment(time_dimension.SlackVar(index))
# set time window for each vehicle's start and end location
for vehicle_id in xrange(data.num_vehicles):
index = routing.Start(vehicle_id)
index_end = routing.End(vehicle_id)
# Instantiate route start and end times to produce feasible times.
routing.AddVariableMinimizedByFinalizer(time_dimension.CumulVar(index))
routing.AddVariableMinimizedByFinalizer(time_dimension.CumulVar(index_end))
# set a constraint on the start or the end node for each vehicle, which is not included in above
time_dimension.CumulVar(index).SetRange(
data.time_windows[start_node][0], data.time_windows[start_node][1])
time_dimension.CumulVar(index_end).SetRange(
data.time_windows[end_node][0], data.time_windows[end_node][1])
routing.AddToAssignment(time_dimension.SlackVar(index))
###########
# Printer #
###########
vlist = []
load_list = []
time_list_min = []
time_list_max = []
class ConsolePrinter():
"""Print solution to console"""
def __init__(self, data, manager, routing, assignment):
"""Initializes the printer"""
self._data = data
self._manager = manager
self._routing = routing
self._assignment = assignment
@property
def data(self):
"""Gets problem data"""
return self._data
@property
def routing(self):
"""Gets routing model"""
return self._routing
@property
def assignment(self):
"""Gets routing model"""
return self._assignment
@property
def manager(self):
"""Gets routing model"""
return self._manager
def print(self):
"""Prints assignment on console"""
dropped_nodes = []
global drop_count
drop_count = 0
for node in range(self.routing.Size()):
if self.routing.IsStart(node) or self.routing.IsEnd(node):
continue
if self.assignment.Value(self.routing.NextVar(node)) == node:
dropped_nodes.append(
mapID(self._data.map, self.manager.IndexToNode(node)))
drop_count += 1
if len(dropped_nodes) > 0:
print("dropped nodes: ", dropped_nodes)
print(f'Objective: {self.assignment.ObjectiveValue()}')
print(
f'Objective excl. penalties: {self.assignment.ObjectiveValue() - drop_count*penalty}\n'
)
else:
print(f'Objective: {self.assignment.ObjectiveValue()}\n')
# Inspect solution.
dist_dimension = self.routing.GetDimensionOrDie('Distance')
capacity_dimension = self.routing.GetDimensionOrDie('Capacity')
cm3_dimension = self.routing.GetDimensionOrDie('cm3')
time_dimension = self.routing.GetDimensionOrDie('Time')
total_dist = 0
total_time = 0
global vlist
global new_vlist
global load_list
global time_list_min
global time_list_max
for vehicle_id in xrange(self._data.num_vehicles):
index = self.routing.Start(vehicle_id)
plan_output = f'Route for vehicle {vehicle_id}:\n'
#plan_output = f'车辆ID {vehicle_id}, 线路规划明细:\n'
route_dist = 0
route_time = 0
this_vehicle = Vehicle()
while not self.routing.IsEnd(index):
node_index = self.manager.IndexToNode(index)
# print(node_index)
this_vehicle.routes.append(
mapID(self._data.map, self.manager.IndexToNode(index)))
# print(this_vehicle.routes)
# print(self._data.vehicle.routes)
# print(self._data.vehicle.routes.append(temp_id))
next_node_index = self.manager.IndexToNode(
self.assignment.Value(self.routing.NextVar(index)))
# route_dist += distance(
# self._data.locations[node_index][0],
# self._data.locations[node_index][1],
# self._data.locations[next_node_index][0],
# self._data.locations[next_node_index][1])
load_var = capacity_dimension.CumulVar(index)
cm3_var = cm3_dimension.CumulVar(index)
# print("load_var: ", load_var)
route_load = self.assignment.Value(load_var)
# route_load += self._data.demands[node_index]
cm3_load = self.assignment.Value(cm3_var)
dist_var = dist_dimension.CumulVar(index)
route_dist = self.assignment.Value(dist_var)
time_var = time_dimension.CumulVar(index)
time_min = self.assignment.Min(time_var)
time_max = self.assignment.Max(time_var)
this_vehicle.load.append(route_load)
this_vehicle.cm3.append(cm3_load)
this_vehicle.time_min.append(time_min)
this_vehicle.time_max.append(time_max)
slack_var = time_dimension.SlackVar(index)
slack_min = self.assignment.Min(slack_var)
slack_max = self.assignment.Max(slack_var)
plan_output += ' {0} Load({1}) Time({2},{3}) Slack({4},{5}) ->'.format(
#plan_output += ' 地址:{0} 装载量({1}) 最早与最晚到达时间({2},{3}) 呆滞停留时间({4},{5}) ->'.format(
# node_index,
mapID(self._data.map, node_index),
route_load,
time_min,
time_max,
slack_min,
slack_max)
index = self.assignment.Value(self.routing.NextVar(index))
# print("start printing", plan_output)
node_index = self.manager.IndexToNode(index)
load_var = capacity_dimension.CumulVar(index)
cm3_var = cm3_dimension.CumulVar(index)
# print("truck type: ", str(load_var).split("..")[1][:-1])
route_load = self.assignment.Value(load_var)
cm3_load = self.assignment.Value(cm3_var)
dist_var = dist_dimension.CumulVar(index)
time_var = time_dimension.CumulVar(index)
route_dist = self.assignment.Value(dist_var)
route_time = self.assignment.Value(time_var)
time_min = self.assignment.Min(time_var)
time_max = self.assignment.Max(time_var)
# total_dist += route_dist
# total_time += route_time
# plan_output += '汇总:\n'
plan_output += ' {0} Load({1}) Time({2},{3})\n'.format(
#plan_output += ' 地址:{0} 装载量({1}) 最早与最晚到达时间({2},{3})\n'.format(
mapID(self._data.map, node_index), route_load, time_min, time_max)
plan_output += '车型: {0} \n'.format(
GetTruckType(int(str(load_var).split("..")[1][:-1])))
plan_output += '总里程: {0} km\n'.format(int(route_dist))
plan_output += '总装载公斤: {0}\n'.format(route_load)
plan_output += '总装载立方: {0}\n'.format(cm3_load)
plan_output += '总耗时: {0} min\n'.format(route_time - 480)
vlist.append(this_vehicle.routes)
total_dist += route_dist
total_time += route_time
print(plan_output)
this_vehicle.routes.append(mapID(self._data.map, end_node))
this_vehicle.load.append(route_load)
this_vehicle.cm3.append(cm3_load)
this_vehicle.time_min.append(time_min)
this_vehicle.time_max.append(time_max)
# vlist.append(this_vehicle.routes)
load_list.append(this_vehicle.load)
time_list_min.append(this_vehicle.time_min)
time_list_max.append(this_vehicle.time_max)
# print(vlist)
print('总里程(所有线路): {0} km'.format(int(total_dist)))
print('总时长(所有线路): {0} min'.format(int(total_time)))
temp = vlist.copy()
new_vlist = RemoveStartDepot(temp)
# print('vlist: ', vlist)
# print('new vlist: ', new_vlist)
def mapID(df, id):
actual_id = df.loc[df['模型地址编号'] == id, '实际地址编号'].iloc[0]
# print("model id: ", id, " -> actual id: ",actual_id)
return actual_id
def mapID_reverse(df, id):
model_id = df.loc[df['实际地址编号'] == id, '模型地址编号'].iloc[0]
# print("model id: ", id, " -> actual id: ",actual_id)
return model_id
def RemoveStartDepot(temp):
new = []
for i in temp:
x = i[1:]
new.append(x)
return new
def PickupColor(count):
default_cl = [
"red", "blue", "yellowgreen", "orange", "hotpink", "orchid", "black",
"purple", "slateblue", "olive", "steelblue", "magenta", "cadetblue",
"teal", "lightseagreen", "deepskyblue", "olivedrab", "darkkhaki",
"sandybrown", "tomato"
]
if count <= len(default_cl) - 1:
color = default_cl[count]
else:
# temp=random.choice(list(matplotlib.colors.cnames.items()))[0]
# while "white" in temp or "gray" in temp and temp in default_cl:
# temp = random.choice(list(matplotlib.colors.cnames.items()))[0]
# continue
# cl=temp
rand = lambda: random.randint(70, 170)
color = '#%02X%02X%02X' % (rand(), rand(), rand())
return color
def DrawNetwork(data):
G = nx.DiGraph()
locations = DataProblem()._locations
# print(locations)
x = 0
# for vehicle_id in vlist:
for vehicle_id in new_vlist:
n = 0
e = []
node = []
cl = PickupColor(x)
for i in vehicle_id:
k = mapID_reverse(data.map, i)
# G.add_node(i, pos=(locations[i][1], locations[i][0]))
G.add_node(i, pos=(locations[k][1], locations[k][0]))
node.append(i)
if n > 0:
u = (vehicle_id[n - 1], vehicle_id[n])
# u = (new[n - 1], new[n])
e.append(u)
node.append(i)
G.add_edge(vehicle_id[n - 1], vehicle_id[n])
n += 1
nx.draw(G,
nx.get_node_attributes(G, 'pos'),
nodelist=node,
edgelist=e,
with_labels=True,
node_color=cl,
width=2,
edge_color=cl,
style='dashed',
font_color='w',
font_size=12,
font_family='sans-serif')
x += 1
# let's color the node 0 in black
# nx.draw_networkx_nodes(G, locations, nodelist=[0], node_color='k')
plt.axis('on')
# plt.show()
########
# Main #
########
def test():
data = DataProblem()
def main():
"""Entry point of the program"""
# Instantiate the data problem.
data = DataProblem()
# Create Routing Model Manager
# manager = pywrapcp.RoutingIndexManager(data.num_locations, data.num_vehicles, data.starts, data.ends)
manager = pywrapcp.RoutingIndexManager(data.num_locations, data.num_vehicles, data.starts, data.ends)
# manager = pywrapcp.RoutingIndexManager(data.num_locations, data.num_vehicles, data.depot)
print(f"DEBUG: {dir(manager)}")
print(f"number of locations: {manager.GetNumberOfNodes()}")
print(f"number of vehicles: {manager.GetNumberOfVehicles()}")
print(f"starts: {data.starts}")
assert manager.GetNumberOfVehicles() == len(data.starts)
print(f"ends: {data.ends}")
assert manager.GetNumberOfVehicles() == len(data.ends)
#exit(42)
# Create Routing Model
routing = pywrapcp.RoutingModel(manager)
# Add Distance constraint
dist_evaluator = CreateDistanceEvaluator(data, manager)
dist_evaluator.define_total_cost(data, routing, manager)
distance_callback_index = routing.RegisterTransitCallback(dist_evaluator.distance_evaluator)
add_distance_dimension(routing, distance_callback_index, data, manager)
# Add Capacity constraint
demand_evaluator = CreateDemandEvaluator(data, manager).demand_evaluator
demand_callback_index = routing.RegisterUnaryTransitCallback(demand_evaluator)
add_capacity_constraints(routing, data, demand_callback_index, manager)
# Add Cubic Meters constraint
cm3_evaluator = CreateCM3Evaluator(data, manager).cm3_evaluator
cm3_callback_index = routing.RegisterUnaryTransitCallback(cm3_evaluator)
add_cm3_constraints(routing, data, cm3_callback_index)
# Add Time Window constraint
time_evaluator = CreateTimeEvaluator(data, manager).time_evaluator
time_callback_index = routing.RegisterTransitCallback(time_evaluator)
add_time_window_constraints(routing, data, time_callback_index, manager)
# Allow dropping nodes if solution infeasible
#allow_dropping(routing, data, manager)
# Allow setup pickups and deliveries pairs
setup_PDP(routing, data, manager)
# Setting first solution heuristic (cheapest addition).
search_parameters = pywrapcp.DefaultRoutingSearchParameters()
# 1).First Solution Heuristic
#search_parameters.first_solution_strategy = (
# routing_enums_pb2.FirstSolutionStrategy.PATH_CHEAPEST_ARC)
search_parameters.first_solution_strategy = (
routing_enums_pb2.FirstSolutionStrategy.PARALLEL_CHEAPEST_INSERTION)
#search_parameters.log_search = True
#search_parameters.time_limit.seconds = 20
#search_parameters.time_limit.seconds = 120
# 2).Guided Local Search Heuristics
search_parameters.local_search_metaheuristic = (
routing_enums_pb2.LocalSearchMetaheuristic.GUIDED_LOCAL_SEARCH)
search_parameters.log_search = True
search_parameters.time_limit.seconds = 20
# 3).Simulated Annealing Heuristics
# search_parameters.local_search_metaheuristic = (
# routing_enums_pb2.LocalSearchMetaheuristic.SIMULATED_ANNEALING)
# search_parameters.time_limit_ms = 1800000
# 4).TABU_SEARCH Heuristics
# search_parameters.local_search_metaheuristic = (
# routing_enums_pb2.LocalSearchMetaheuristic.TABU_SEARCH)
# search_parameters.log_search = True
# search_parameters.time_limit.seconds = 60
# Solve the problem.
# assignment = routing.SolveWithParameters(search_parameters)
solution = routing.SolveWithParameters(search_parameters)
if solution:
print("Solution found !\n")
#print("该方案有最优解!\n")
printer = ConsolePrinter(data, manager, routing, solution)
printer.print()
DrawNetwork(data)
# Reporting(data)
plt.show()
else:
print("No Solution found !\n")
#print("该方案无解!请修改车辆数!\n")
def num_vehicles():
global t1
global t2
global t3
global t4
global t5
global t6
global t7
global t8
#which_button_is_selected = "自动"
which_button_is_selected = "test"
if which_button_is_selected == "test":
t1 = 36
t2 = 36
t3 = 36
t4 = 36
t5 = 36
t6 = 36
t7 = 36
t8 = 36
if which_button_is_selected == "手动":
t1 = 3
t2 = 3
t3 = 3
t4 = 3
t5 = 3
t6 = 3
t7 = 3
t8 = 3
if which_button_is_selected == "自动":
t1 = 50
t2 = 50
t3 = 50
t4 = 50
t5 = 50
t6 = 50
t7 = 50
t8 = 50
# print("total trucks: ", t1+t2+t3+t4+t5)
return t1 + t2 + t3 + t4 + t5 + t6 + t7 + t8
def capacity_vector():
return [1500] * t1 + [1800] * t2 + [4000] * t3 + [6500] * t4 + [
7000
] * t5 + [8500] * t6 + [9500] * t7 + [12000] * t8
def cm3_vector():
return [10] * t1 + [16] * t2 + [28] * t3 + [34] * t4 + [40] * t5 + [
45
] * t6 + [50] * t7 + [55] * t8
def cost_vector():
return [7] * t1 + [8] * t2 + [9.38] * t3 + [10.42] * t4 + [10.67] * t5 + [
12
] * t6 + [13] * t7 + [14.55] * t8
def GetTruckType(item):
if item == 1500:
return "3T车型"
if item == 1800:
return "5T车型"
if item == 4000:
return "8T车型"
if item == 6500:
return "10T车型"
if item == 7000:
return "12T车型"
if item == 8500:
return "15T车型"
if item == 9500:
return "18T车型"
if item == 12000:
return "20T车型"
if __name__ == '__main__':
main()
# test()

diff:

diff --git a/code_VRP__addPickup_Delivery.py b/code_VRP__addPickup_Delivery.py
index a5b2fe2..8295ef6 100755
--- a/code_VRP__addPickup_Delivery.py
+++ b/code_VRP__addPickup_Delivery.py
@@ -40,6 +40,7 @@ class DataProblem():
     """Stores the data for the problem"""
     def __init__(self):
         """Initializes the data for the problem"""
+        print("Data Model:")
         self._vehicle = Vehicle()
         self._num_vehicles = num_vehicles()
         self._locations = []
@@ -99,7 +100,7 @@ class DataProblem():
         # earliest.append(480)
         # latest.append(1320)
         self._time_windows = list(zip(earliest, latest))
-        print(self._time_windows)
+        print("time windows: ", self._time_windows)
 
         #set weight and cm3 incl. first and last node
         self.p_demands = df["毛重(KGS)"].tolist()
@@ -236,15 +237,15 @@ class CreateDistanceEvaluator(object):  # pylint: disable=too-few-public-methods
                         temp.append(dist)
 
             self.dist_matrix.append(temp)
-        # print("dist matrix: ", self.dist_matrix)
-        # print("dist matrix: ", len(self.dist_matrix))
+        #print("dist matrix: ", self.dist_matrix)
+        #print("dist matrix: ", len(self.dist_matrix))
 
     def distance_evaluator(self, from_index, to_index):
         """Returns the Harversine Distance between the two nodes"""
         from_node = self.manager.IndexToNode(from_index)
         to_node = self.manager.IndexToNode(to_index)
         value = self.dist_matrix[from_node][to_node]
-        print(f"dist({from_node},{to_node}): {value}")
+        #print(f"dist({from_node},{to_node}): {value}")
         return value
 
     def define_total_cost(self, data, routing, manager):
@@ -271,8 +272,8 @@ class CreateDemandEvaluator(object):
     def demand_evaluator(self, from_index):
         """Returns the demand of the current node"""
         from_node = self._manager.IndexToNode(from_index)
-        value = self._demands[from_node]
-        print(f"demand({from_node}): {value}")
+        value = int(self._demands[from_node])
+        #print(f"demand({from_node}): {value}")
         return value
 
 
@@ -286,8 +287,8 @@ class CreateCM3Evaluator(object):
     def cm3_evaluator(self, from_index):
         """Returns the cm3 of the current node"""
         from_node = self._manager.IndexToNode(from_index)
-        value = self._cm3[from_node]
-        print(f"cm3({from_node}): {value}")
+        value = int(self._cm3[from_node])
+        #print(f"cm3({from_node}): {value}")
         return value
 
 
@@ -324,12 +325,12 @@ class CreateTimeEvaluator(object):
                     else:
                         travel_time = total_matrix[convert_from - 1][convert_to - 1] / 60
                         service_time = self.service_time(data, from_node)
-                        total_time = travel_time + service_time
+                        total_time = int(travel_time + service_time)
                         temp.append(total_time)
                         self._total_time[from_node][to_node] = total_time
             self.time_matrix.append(temp)
-        print("time matrix: ", self.time_matrix)
-        # print("time matrix: ", len(self.time_matrix))
+        #print("time matrix: ", self.time_matrix)
+        #print("time matrix: ", len(self.time_matrix))
 
     @staticmethod
     def service_time(data, node):
@@ -342,7 +343,7 @@ class CreateTimeEvaluator(object):
         from_node = self._manager.IndexToNode(from_index)
         to_node = self._manager.IndexToNode(to_index)
         value = self._total_time[from_node][to_node]
-        print(f"time({from_node},{to_node}): {value}")
+        #print(f"time({from_node},{to_node}): {value}")
         return value
 
 
@@ -436,6 +437,9 @@ def add_time_window_constraints(routing, data, time_callback_index, manager):
     for vehicle_id in xrange(data.num_vehicles):
         index = routing.Start(vehicle_id)
         index_end = routing.End(vehicle_id)
+        # Instantiate route start and end times to produce feasible times.
+        routing.AddVariableMinimizedByFinalizer(time_dimension.CumulVar(index))
+        routing.AddVariableMinimizedByFinalizer(time_dimension.CumulVar(index_end))
         # set a constraint on the start or the end node for each vehicle, which is not included in above
         time_dimension.CumulVar(index).SetRange(
             data.time_windows[start_node][0], data.time_windows[start_node][1])
@@ -459,9 +463,9 @@ class ConsolePrinter():
     def __init__(self, data, manager, routing, assignment):
         """Initializes the printer"""
         self._data = data
+        self._manager = manager
         self._routing = routing
         self._assignment = assignment
-        self._manager = manager
 
     @property
     def data(self):
@@ -483,7 +487,7 @@ class ConsolePrinter():
         """Gets routing model"""
         return self._manager
 
-    def print(self, data):
+    def print(self):
         """Prints assignment on console"""
         dropped_nodes = []
         global drop_count
@@ -493,7 +497,7 @@ class ConsolePrinter():
                 continue
             if self.assignment.Value(self.routing.NextVar(node)) == node:
                 dropped_nodes.append(
-                    mapID(data.map, self.manager.IndexToNode(node)))
+                    mapID(self._data.map, self.manager.IndexToNode(node)))
                 drop_count += 1
 
         if len(dropped_nodes) > 0:
@@ -506,10 +510,10 @@ class ConsolePrinter():
             print(f'Objective: {self.assignment.ObjectiveValue()}\n')
 
         # Inspect solution.
+        dist_dimension = self.routing.GetDimensionOrDie('Distance')
         capacity_dimension = self.routing.GetDimensionOrDie('Capacity')
         cm3_dimension = self.routing.GetDimensionOrDie('cm3')
         time_dimension = self.routing.GetDimensionOrDie('Time')
-        dist_dimension = self.routing.GetDimensionOrDie('Distance')
         total_dist = 0
         total_time = 0
         global vlist
@@ -517,33 +521,33 @@ class ConsolePrinter():
         global load_list
         global time_list_min
         global time_list_max
-        for vehicle_id in xrange(self.data.num_vehicles):
+        for vehicle_id in xrange(self._data.num_vehicles):
             index = self.routing.Start(vehicle_id)
-            # print(index)
-            # plan_output = 'Route for vehicle {0}:\n'.format(vehicle_id)
-            plan_output = '车辆ID {0}, 线路规划明细:\n'.format(vehicle_id)
-            # route_dist = 0
+            plan_output = f'Route for vehicle {vehicle_id}:\n'
+            #plan_output = f'车辆ID {vehicle_id}, 线路规划明细:\n'
+            route_dist = 0
+            route_time = 0
             this_vehicle = Vehicle()
             while not self.routing.IsEnd(index):
                 node_index = self.manager.IndexToNode(index)
                 # print(node_index)
                 this_vehicle.routes.append(
-                    mapID(data.map, self.manager.IndexToNode(index)))
+                    mapID(self._data.map, self.manager.IndexToNode(index)))
                 # print(this_vehicle.routes)
-                # print(self.data.vehicle.routes)
-                # print(self.data.vehicle.routes.append(temp_id))
+                # print(self._data.vehicle.routes)
+                # print(self._data.vehicle.routes.append(temp_id))
                 next_node_index = self.manager.IndexToNode(
                     self.assignment.Value(self.routing.NextVar(index)))
                 # route_dist += distance(
-                #   self.data.locations[node_index][0],
-                #   self.data.locations[node_index][1],
-                #   self.data.locations[next_node_index][0],
-                #   self.data.locations[next_node_index][1])
+                #   self._data.locations[node_index][0],
+                #   self._data.locations[node_index][1],
+                #   self._data.locations[next_node_index][0],
+                #   self._data.locations[next_node_index][1])
                 load_var = capacity_dimension.CumulVar(index)
                 cm3_var = cm3_dimension.CumulVar(index)
                 # print("load_var: ", load_var)
                 route_load = self.assignment.Value(load_var)
-                # route_load += self.data.demands[node_index]
+                # route_load += self._data.demands[node_index]
                 cm3_load = self.assignment.Value(cm3_var)
                 dist_var = dist_dimension.CumulVar(index)
                 route_dist = self.assignment.Value(dist_var)
@@ -557,10 +561,10 @@ class ConsolePrinter():
                 slack_var = time_dimension.SlackVar(index)
                 slack_min = self.assignment.Min(slack_var)
                 slack_max = self.assignment.Max(slack_var)
-                # plan_output += ' {0} Load({1}) Time({2},{3}) Slack({4},{5}) ->'.format(
-                plan_output += ' 地址:{0} 装载量({1}) 最早与最晚到达时间({2},{3}) 呆滞停留时间({4},{5}) ->'.format(
+                plan_output += ' {0} Load({1}) Time({2},{3}) Slack({4},{5}) ->'.format(
+                #plan_output += ' 地址:{0} 装载量({1}) 最早与最晚到达时间({2},{3}) 呆滞停留时间({4},{5}) ->'.format(
                     # node_index,
-                    mapID(data.map, node_index),
+                    mapID(self._data.map, node_index),
                     route_load,
                     time_min,
                     time_max,
@@ -583,25 +587,22 @@ class ConsolePrinter():
             time_max = self.assignment.Max(time_var)
             # total_dist += route_dist
             # total_time += route_time
-            if route_load != 0:
-                # plan_output += '汇总:\n'
-                # plan_output += ' {0} Load({1}) Time({2},{3})\n'.format(node_index, route_load, time_min, time_max)
-                # plan_output += ' 地址:{0} 装载量({1}) 最早与最晚到达时间({2},{3})\n'.format(node_index, route_load, time_min, time_max)
-                plan_output += ' 地址:{0} 装载量({1}) 最早与最晚到达时间({2},{3})\n'.format(
-                    mapID(data.map, node_index), route_load, time_min,
-                    time_max)
-                plan_output += '车型: {0} \n'.format(
-                    GetTruckType(int(str(load_var).split("..")[1][:-1])))
-                plan_output += '总里程: {0} km\n'.format(int(route_dist))
-                plan_output += '总装载公斤: {0}\n'.format(route_load)
-                plan_output += '总装载立方: {0}\n'.format(cm3_load)
-                plan_output += '总耗时: {0} min\n'.format(route_time - 480)
-                vlist.append(this_vehicle.routes)
-                total_dist += route_dist
-                total_time += route_time
-                print(plan_output)
-
-            this_vehicle.routes.append(mapID(data.map, end_node))
+            # plan_output += '汇总:\n'
+            plan_output += ' {0} Load({1}) Time({2},{3})\n'.format(
+            #plan_output += ' 地址:{0} 装载量({1}) 最早与最晚到达时间({2},{3})\n'.format(
+                mapID(self._data.map, node_index), route_load, time_min, time_max)
+            plan_output += '车型: {0} \n'.format(
+                GetTruckType(int(str(load_var).split("..")[1][:-1])))
+            plan_output += '总里程: {0} km\n'.format(int(route_dist))
+            plan_output += '总装载公斤: {0}\n'.format(route_load)
+            plan_output += '总装载立方: {0}\n'.format(cm3_load)
+            plan_output += '总耗时: {0} min\n'.format(route_time - 480)
+            vlist.append(this_vehicle.routes)
+            total_dist += route_dist
+            total_time += route_time
+            print(plan_output)
+
+            this_vehicle.routes.append(mapID(self._data.map, end_node))
             this_vehicle.load.append(route_load)
             this_vehicle.cm3.append(cm3_load)
             this_vehicle.time_min.append(time_min)
@@ -755,7 +756,7 @@ def main():
     add_time_window_constraints(routing, data, time_callback_index, manager)
 
     # Allow dropping nodes if solution infeasible
-    allow_dropping(routing, data, manager)
+    #allow_dropping(routing, data, manager)
 
     # Allow setup pickups and deliveries pairs
     setup_PDP(routing, data, manager)
@@ -793,7 +794,7 @@ def main():
         print("Solution found !\n")
         #print("该方案有最优解!\n")
         printer = ConsolePrinter(data, manager, routing, solution)
-        printer.print(data)
+        printer.print()
         DrawNetwork(data)
         # Reporting(data)
         plt.show()

Possible output (don't have all chinese font installed -> sorry)

./cvrptw_pd.py
...
Solution found !

Objective: 940

Route for vehicle 0:
 0 Load(0) Time(0,0) Slack(480,480) -> 2 Load(0) Time(480,480) Slack(0,0) -> 1 Load(159) Time(683,683) Slack(0,0) -> 40 Load(591) Time(882,882) Slack(0,0) -> 39 Load(432) Time(1085,1085) Slack(0,0) -> 0 Load(0) Time(1085,1085)
车型: 3T车型 
总里程: 121 km
总装载公斤: 0
总装载立方: 0
总耗时: 605 min

Route for vehicle 1:
 0 Load(0) Time(0,0) Slack(480,480) -> 4 Load(0) Time(480,480) Slack(0,0) -> 27 Load(396) Time(679,679) Slack(0,0) -> 65 Load(726) Time(799,799) Slack(0,0) -> 5 Load(396) Time(967,967) Slack(0,0) -> 43 Load(936) Time(1087,1087) Slack(0,0) -> 42 Load(396) Time(1314,1314) Slack(0,0) -> 0 Load(0) Time(1314,1314)
车型: 3T车型 
总里程: 104 km
总装载公斤: 0
总装载立方: 0
总耗时: 834 min

Route for vehicle 2:
 0 Load(0) Time(0,0) Slack(480,480) -> 6 Load(0) Time(480,480) Slack(0,0) -> 7 Load(483) Time(826,826) Slack(0,0) -> 45 Load(751) Time(946,946) Slack(0,0) -> 44 Load(483) Time(1284,1284) Slack(0,0) -> 0 Load(0) Time(1284,1284)
车型: 3T车型 
总里程: 331 km
总装载公斤: 0
总装载立方: 0
总耗时: 804 min

Route for vehicle 3:
 0 Load(0) Time(0,0) Slack(480,480) -> 10 Load(0) Time(480,480) Slack(0,0) -> 14 Load(311) Time(648,648) Slack(0,0) -> 52 Load(567) Time(768,768) Slack(0,0) -> 11 Load(311) Time(930,930) Slack(0,0) -> 49 Load(1399) Time(1050,1050) Slack(0,0) -> 48 Load(311) Time(1170,1170) Slack(0,0) -> 0 Load(0) Time(1170,1170)
车型: 3T车型 
总里程: 26 km
总装载公斤: 0
总装载立方: 0
总耗时: 690 min

Route for vehicle 4:
 0 Load(0) Time(0,0) Slack(480,480) -> 13 Load(0) Time(480,480) Slack(0,0) -> 16 Load(156) Time(801,801) Slack(0,0) -> 54 Load(628) Time(921,921) Slack(0,0) -> 51 Load(156) Time(1237,1237) Slack(0,0) -> 0 Load(0) Time(1237,1237)
车型: 3T车型 
总里程: 242 km
总装载公斤: 0
总装载立方: 0
总耗时: 757 min

Route for vehicle 5:
 0 Load(0) Time(0,0) Slack(480,480) -> 15 Load(0) Time(480,480) Slack(0,0) -> 23 Load(438) Time(730,730) Slack(0,0) -> 61 Load(1388) Time(850,850) Slack(0,0) -> 53 Load(438) Time(1113,1113) Slack(0,0) -> 0 Load(0) Time(1113,1113)
车型: 3T车型 
总里程: 142 km
总装载公斤: 0
总装载立方: 0
总耗时: 633 min

Route for vehicle 6:
 0 Load(0) Time(0,0) Slack(480,480) -> 18 Load(0) Time(480,480) Slack(0,0) -> 25 Load(386) Time(624,624) Slack(0,0) -> 19 Load(632) Time(763,763) Slack(0,0) -> 63 Load(1018) Time(907,907) Slack(0,0) -> 57 Load(772) Time(1046,1046) Slack(0,0) -> 56 Load(386) Time(1166,1166) Slack(0,0) -> 0 Load(0) Time(1166,1166)
车型: 3T车型 
总里程: 28 km
总装载公斤: 0
总装载立方: 0
总耗时: 686 min

Route for vehicle 7:
 0 Load(0) Time(0,0) Slack(480,480) -> 20 Load(0) Time(480,480) Slack(0,0) -> 26 Load(1011) Time(741,741) Slack(0,0) -> 64 Load(1257) Time(861,861) Slack(0,0) -> 58 Load(1011) Time(1115,1115) Slack(0,0) -> 0 Load(0) Time(1115,1115)
车型: 3T车型 
总里程: 159 km
总装载公斤: 0
总装载立方: 0
总耗时: 635 min

Route for vehicle 8:
 0 Load(0) Time(0,0) Slack(480,480) -> 21 Load(0) Time(480,480) Slack(0,0) -> 32 Load(562) Time(676,676) Slack(0,0) -> 70 Load(693) Time(796,796) Slack(0,0) -> 59 Load(562) Time(988,988) Slack(0,0) -> 0 Load(0) Time(988,988)
车型: 3T车型 
总里程: 102 km
总装载公斤: 0
总装载立方: 0
总耗时: 508 min

Route for vehicle 9:
 0 Load(0) Time(0,0) Slack(480,480) -> 34 Load(0) Time(480,480) Slack(0,0) -> 72 Load(368) Time(600,600) Slack(0,0) -> 0 Load(0) Time(600,600)
车型: 3T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: 120 min

Route for vehicle 10:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 3T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 11:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 3T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 12:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 3T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 13:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 3T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 14:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 3T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 15:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 3T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 16:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 3T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 17:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 3T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 18:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 3T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 19:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 3T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 20:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 3T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 21:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 3T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 22:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 3T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 23:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 3T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 24:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 3T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 25:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 3T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 26:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 3T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 27:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 3T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 28:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 3T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 29:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 3T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 30:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 3T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 31:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 3T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 32:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 3T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 33:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 3T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 34:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 3T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 35:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 3T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 36:
 0 Load(0) Time(0,0) Slack(480,480) -> 9 Load(0) Time(480,480) Slack(0,0) -> 47 Load(1701) Time(600,600) Slack(0,0) -> 12 Load(0) Time(720,720) Slack(0,0) -> 50 Load(1473) Time(840,840) Slack(0,0) -> 0 Load(0) Time(840,840)
车型: 5T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: 360 min

Route for vehicle 37:
 0 Load(0) Time(0,0) Slack(480,480) -> 17 Load(0) Time(480,480) Slack(0,0) -> 55 Load(1149) Time(600,600) Slack(0,0) -> 35 Load(0) Time(827,827) Slack(0,0) -> 73 Load(1640) Time(947,947) Slack(0,0) -> 0 Load(0) Time(947,947)
车型: 5T车型 
总里程: 69 km
总装载公斤: 0
总装载立方: 0
总耗时: 467 min

Route for vehicle 38:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 5T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 39:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 5T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 40:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 5T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 41:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 5T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 42:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 5T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 43:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 5T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 44:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 5T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 45:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 5T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 46:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 5T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 47:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 5T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 48:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 5T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 49:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 5T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 50:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 5T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 51:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 5T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 52:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 5T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 53:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 5T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 54:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 5T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 55:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 5T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 56:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 5T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 57:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 5T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 58:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 5T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 59:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 5T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 60:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 5T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 61:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 5T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 62:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 5T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 63:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 5T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 64:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 5T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 65:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 5T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 66:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 5T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 67:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 5T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 68:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 5T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 69:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 5T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 70:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 5T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 71:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 5T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 72:
 0 Load(0) Time(0,0) Slack(480,480) -> 3 Load(0) Time(480,480) Slack(0,0) -> 41 Load(2481) Time(600,600) Slack(0,0) -> 8 Load(0) Time(960,960) Slack(0,0) -> 46 Load(1953) Time(1080,1080) Slack(0,0) -> 0 Load(0) Time(1080,1080)
车型: 8T车型 
总里程: 168 km
总装载公斤: 0
总装载立方: 0
总耗时: 600 min

Route for vehicle 73:
 0 Load(0) Time(0,0) Slack(480,480) -> 22 Load(0) Time(480,480) Slack(0,0) -> 60 Load(3116) Time(600,600) Slack(0,0) -> 24 Load(0) Time(809,809) Slack(0,0) -> 62 Load(2071) Time(929,929) Slack(0,0) -> 0 Load(0) Time(929,929)
车型: 8T车型 
总里程: 49 km
总装载公斤: 0
总装载立方: 0
总耗时: 449 min

Route for vehicle 74:
 0 Load(0) Time(0,0) Slack(480,480) -> 28 Load(0) Time(480,480) Slack(0,0) -> 66 Load(2684) Time(600,600) Slack(0,0) -> 33 Load(0) Time(743,743) Slack(0,0) -> 71 Load(3274) Time(863,863) Slack(0,0) -> 0 Load(0) Time(863,863)
车型: 8T车型 
总里程: 18 km
总装载公斤: 0
总装载立方: 0
总耗时: 383 min

Route for vehicle 75:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 8T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 76:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 8T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 77:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 8T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 78:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 8T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 79:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 8T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 80:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 8T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 81:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 8T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 82:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 8T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 83:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 8T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 84:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 8T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 85:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 8T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 86:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 8T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 87:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 8T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 88:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 8T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 89:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 8T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 90:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 8T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 91:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 8T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 92:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 8T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 93:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 8T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 94:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 8T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 95:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 8T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 96:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 8T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 97:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 8T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 98:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 8T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 99:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 8T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 100:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 8T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 101:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 8T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 102:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 8T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 103:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 8T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 104:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 8T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 105:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 8T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 106:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 8T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 107:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 8T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 108:
 0 Load(0) Time(0,0) Slack(480,480) -> 36 Load(0) Time(480,480) Slack(0,0) -> 74 Load(5233) Time(600,600) Slack(0,0) -> 37 Load(0) Time(720,720) Slack(0,0) -> 75 Load(5233) Time(840,840) Slack(0,0) -> 0 Load(0) Time(840,840)
车型: 10T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: 360 min

Route for vehicle 109:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 10T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 110:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 10T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 111:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 10T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 112:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 10T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 113:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 10T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 114:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 10T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 115:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 10T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 116:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 10T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 117:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 10T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 118:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 10T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 119:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 10T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 120:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 10T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 121:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 10T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 122:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 10T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 123:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 10T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 124:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 10T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 125:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 10T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 126:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 10T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 127:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 10T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 128:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 10T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 129:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 10T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 130:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 10T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 131:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 10T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 132:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 10T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 133:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 10T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 134:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 10T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 135:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 10T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 136:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 10T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 137:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 10T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 138:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 10T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 139:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 10T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 140:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 10T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 141:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 10T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 142:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 10T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 143:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 10T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 144:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 12T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 145:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 12T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 146:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 12T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 147:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 12T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 148:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 12T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 149:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 12T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 150:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 12T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 151:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 12T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 152:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 12T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 153:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 12T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 154:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 12T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 155:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 12T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 156:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 12T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 157:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 12T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 158:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 12T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 159:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 12T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 160:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 12T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 161:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 12T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 162:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 12T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 163:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 12T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 164:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 12T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 165:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 12T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 166:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 12T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 167:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 12T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 168:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 12T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 169:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 12T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 170:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 12T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 171:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 12T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 172:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 12T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 173:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 12T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 174:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 12T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 175:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 12T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 176:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 12T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 177:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 12T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 178:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 12T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 179:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 12T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 180:
 0 Load(0) Time(0,0) Slack(480,480) -> 38 Load(0) Time(480,480) Slack(0,0) -> 76 Load(4295) Time(600,600) Slack(0,0) -> 0 Load(0) Time(600,600)
车型: 15T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: 120 min

Route for vehicle 181:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 15T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 182:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 15T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 183:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 15T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 184:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 15T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 185:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 15T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 186:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 15T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 187:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 15T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 188:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 15T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 189:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 15T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 190:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 15T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 191:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 15T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 192:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 15T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 193:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 15T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 194:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 15T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 195:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 15T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 196:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 15T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 197:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 15T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 198:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 15T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 199:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 15T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 200:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 15T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 201:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 15T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 202:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 15T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 203:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 15T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 204:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 15T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 205:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 15T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 206:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 15T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 207:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 15T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 208:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 15T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 209:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 15T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 210:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 15T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 211:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 15T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 212:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 15T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 213:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 15T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 214:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 15T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 215:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 15T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 216:
 0 Load(0) Time(0,0) Slack(480,480) -> 29 Load(0) Time(480,480) Slack(0,0) -> 67 Load(8595) Time(600,600) Slack(0,0) -> 31 Load(0) Time(720,720) Slack(0,0) -> 69 Load(8595) Time(840,840) Slack(0,0) -> 30 Load(0) Time(960,960) Slack(0,0) -> 68 Load(8595) Time(1080,1080) Slack(0,0) -> 0 Load(0) Time(1080,1080)
车型: 18T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: 600 min

Route for vehicle 217:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 18T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 218:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 18T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 219:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 18T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 220:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 18T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 221:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 18T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 222:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 18T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 223:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 18T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 224:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 18T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 225:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 18T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 226:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 18T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 227:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 18T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 228:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 18T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 229:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 18T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 230:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 18T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 231:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 18T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 232:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 18T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 233:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 18T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 234:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 18T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 235:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 18T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 236:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 18T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 237:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 18T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 238:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 18T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 239:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 18T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 240:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 18T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 241:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 18T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 242:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 18T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 243:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 18T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 244:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 18T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 245:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 18T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 246:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 18T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 247:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 18T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 248:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 18T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 249:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 18T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 250:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 18T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 251:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 18T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 252:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 20T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 253:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 20T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 254:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 20T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 255:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 20T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 256:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 20T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 257:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 20T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 258:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 20T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 259:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 20T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 260:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 20T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 261:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 20T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 262:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 20T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 263:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 20T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 264:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 20T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 265:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 20T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 266:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 20T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 267:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 20T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 268:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 20T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 269:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 20T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 270:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 20T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 271:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 20T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 272:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 20T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 273:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 20T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 274:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 20T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 275:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 20T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 276:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 20T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 277:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 20T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 278:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 20T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 279:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 20T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 280:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 20T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 281:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 20T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 282:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 20T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 283:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 20T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 284:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 20T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 285:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 20T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 286:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 20T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

Route for vehicle 287:
 0 Load(0) Time(0,0) Slack(0,0) -> 0 Load(0) Time(0,0)
车型: 20T车型 
总里程: 0 km
总装载公斤: 0
总装载立方: 0
总耗时: -480 min

总里程(所有线路): 1559 km
总时长(所有线路): 18251 min
@Mizux
Copy link
Author

Mizux commented Jul 26, 2021

Figure_1

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment