Vehicle routing and its optimization

[1]:
%matplotlib inline
from pylab import *

DUO assignment

The default routing principle is based on Dynamic User Optimum (DUO), which means that each vehicle basically chooses the minimum travel time path based on the current instantaneous travel time. Therefore, they are a kind of selfish and this is usually not optimal for the society.

In the following example, we simulate simple 2 routes network. One of the routes is shorter but narrower than the other. Thus, under the DUO routing, many traveler chooses the shorter route and create huge congestion, resulting inefficient traffic system.

[6]:
from uxsim import *

# Define the main simulation
# Units are standardized to seconds (s) and meters (m)
W = World(
    name="",    # Scenario name
    deltan=5,   # Simulation aggregation unit delta n
    tmax=1000,  # Total simulation time (s)
    print_mode=1, save_mode=1, show_mode=1,    # Various options
    random_seed=0,    # Set the random seed
    duo_update_time=60
)

# Define the scenario
#network configuration
# O -- R1
# |     |
# R2 -- D
# route with R1 is faster but narrower than R2

W.addNode("orig", 0, 0)
W.addNode("R1", 1, 0)
W.addNode("R2", 0, 1)
W.addNode("dest", 1, 1)
W.addLink("R1a", "orig", "R1", length=1000, free_flow_speed=20, number_of_lanes=2)
W.addLink("R1b", "R1", "dest", length=1000, free_flow_speed=20, number_of_lanes=1)
W.addLink("R2a", "orig", "R2", length=1000, free_flow_speed=10, number_of_lanes=2)
W.addLink("R2b", "R2", "dest", length=1000, free_flow_speed=10, number_of_lanes=2)
route_R1 = ["R1a", "R1b"]
route_R2 = ["R2a", "R2b"]
W.adddemand("orig", "dest", 0, 500, 0.8*2)

# Run the simulation to the end
W.exec_simulation()

# Print summary of simulation result
W.analyzer.print_simple_stats()

df_link = W.analyzer.link_to_pandas()
r1_users = df_link["traffic_volume"][df_link["link"] == "R1a"].values[0]
r2_users = df_link["traffic_volume"][df_link["link"] == "R2a"].values[0]
print(f"Total travel time: {W.analyzer.total_travel_time} s")
print(f"Route 1 users: {r1_users}")
print(f"Route 2 users: {r2_users}")


# Visualize
W.analyzer.time_space_diagram_traj_links([route_R1, route_R2])
simulation setting:
 scenario name:
 simulation duration:    1000 s
 number of vehicles:     800 veh
 total road length:      4000 m
 time discret. width:    5 s
 platoon size:           5 veh
 number of timesteps:    200
 number of platoons:     160
 number of links:        4
 number of nodes:        4
 setup time:             0.00 s
simulating...
      time| # of vehicles| ave speed| computation time
       0 s|        0 vehs|   0.0 m/s|     0.00 s
     600 s|      200 vehs|  10.5 m/s|     0.06 s
     995 s|        0 vehs|   0.0 m/s|     0.06 s
 simulation finished
results:
 average speed:  11.3 m/s
 number of completed trips:      800 / 800
 average travel time of trips:   215.5 s
 average delay of trips:         115.5 s
 delay ratio:                    0.536
Total travel time: 172425.0 s
Route 1 users: 490
Route 2 users: 310
 drawing trajectories in consecutive links...
../_images/notebooks_demo_notebook_07en_optimal_routing_3_1.png
../_images/notebooks_demo_notebook_07en_optimal_routing_3_2.png

Specify route of each vehicles

Let’s consider how to improve the system’s efficiency by controlling the vehicle routing.

First, define the same world.

[7]:
import random
from uxsim import *

# Define the main simulation
# Units are standardized to seconds (s) and meters (m)
W = World(
    name="",    # Scenario name
    deltan=5,   # Simulation aggregation unit delta n
    tmax=1000,  # Total simulation time (s)
    print_mode=1, save_mode=1, show_mode=1,    # Various options
    random_seed=0,    # Set the random seed
    duo_update_time=60
)

# Define the scenario
#network configuration
# O -- R1
# |     |
# R2 -- D
# route with R1 is faster but narrower than R2

W.addNode("orig", 0, 0)
W.addNode("R1", 1, 0)
W.addNode("R2", 0, 1)
W.addNode("dest", 1, 1)
W.addLink("R1a", "orig", "R1", length=1000, free_flow_speed=20, number_of_lanes=2)
W.addLink("R1b", "R1", "dest", length=1000, free_flow_speed=20, number_of_lanes=1)
W.addLink("R2a", "orig", "R2", length=1000, free_flow_speed=10, number_of_lanes=2)
W.addLink("R2b", "R2", "dest", length=1000, free_flow_speed=10, number_of_lanes=2)
W.adddemand("orig", "dest", 0, 500, 0.8*2)

By specifying Vehicle.links_prefer parameter, we can specify the route of that vehicle. In the example below, we simply set the route randomly.

[8]:
# Random route specification
#vehicles will choose route1 with 50% probability
route1 = ["R1a", "R1b"]
route2 = ["R2a", "R2b"]
for veh in W.VEHICLES.values():
    if random.random() < 0.5:
        veh.links_prefer = route1
    else:
        veh.links_prefer = route2

This 50% random routing is actually more efficient than the DUO, because it assign the traffic volume evenly to the 2 routes. In the following result, you can see that the total travel time was reduced to about 130000 s from 170000 s of DUO.

[9]:

# Run the simulation to the end W.exec_simulation() # Print summary of simulation result W.analyzer.print_simple_stats() df_link = W.analyzer.link_to_pandas() r1_users = df_link["traffic_volume"][df_link["link"] == "R1a"].values[0] r2_users = df_link["traffic_volume"][df_link["link"] == "R2a"].values[0] print(f"Total travel time: {W.analyzer.total_travel_time} s") print(f"Route 1 users: {r1_users}") print(f"Route 2 users: {r2_users}") # Visualize W.analyzer.time_space_diagram_traj_links([route1, route2])
simulation setting:
 scenario name:
 simulation duration:    1000 s
 number of vehicles:     800 veh
 total road length:      4000 m
 time discret. width:    5 s
 platoon size:           5 veh
 number of timesteps:    200
 number of platoons:     160
 number of links:        4
 number of nodes:        4
 setup time:             1.40 s
simulating...
      time| # of vehicles| ave speed| computation time
       0 s|        0 vehs|   0.0 m/s|     0.00 s
     600 s|      135 vehs|  12.0 m/s|     0.05 s
     995 s|        0 vehs|   0.0 m/s|     0.06 s
 simulation finished
results:
 average speed:  11.9 m/s
 number of completed trips:      800 / 800
 average travel time of trips:   170.2 s
 average delay of trips:         70.2 s
 delay ratio:                    0.412
Total travel time: 136125.0 s
Route 1 users: 455
Route 2 users: 345
 drawing trajectories in consecutive links...
../_images/notebooks_demo_notebook_07en_optimal_routing_10_1.png
../_images/notebooks_demo_notebook_07en_optimal_routing_10_2.png

Optimal routing - Dynamic System Optimum

There exists the optimal routing of vehicles that minimizes the system total travel time. It is called Dynamic System Optimum (DSO).

Now, we systematically derive near-DSO solution by using the genetic algorithm (GA), a common meta-heuristics for discrete optimization. We use a Python-package DEAP for this purpose.

(Please note that deriving DSO is difficult task in general. GA is not efficient approach for it. But, in this notebook, we just use it for simplicity.)

First, define a world as always.

[2]:
import random
from deap import base, creator, tools, algorithms
from uxsim import *

W = World(
    name="",
    deltan=5,
    tmax=1000,
    print_mode=0, save_mode=1, show_mode=1, #print is off, otherwise it will be very verbose during the genetic algorithm
    random_seed=None,
    duo_update_time=60
)

# Define the scenario
#network configuration
# O -- R1
# |     |
# R2 -- D
#route with R1 is faster but narrower than R2

W.addNode("orig", 0, 0)
W.addNode("R1", 1, 0)
W.addNode("R2", 0, 1)
W.addNode("dest", 1, 1)
W.addLink("R1a", "orig", "R1", length=1000, free_flow_speed=20, number_of_lanes=2)
W.addLink("R1b", "R1", "dest", length=1000, free_flow_speed=20, number_of_lanes=1)
W.addLink("R2a", "orig", "R2", length=1000, free_flow_speed=10, number_of_lanes=2)
W.addLink("R2b", "R2", "dest", length=1000, free_flow_speed=10, number_of_lanes=2)
W.adddemand("orig", "dest", 0, 500, 0.8*2)

route1 = ["R1a", "R1b"]
route2 = ["R2a", "R2b"]

W_orig = W.copy()

Notice that we took a copy of this original world W_orig for later reuse.

Compute DUO as a reference. You can see congested traffic.

[3]:
W.exec_simulation()

df_link = W.analyzer.link_to_pandas()
r1_users = df_link["traffic_volume"][df_link["link"] == "R1a"].values[0]
r2_users = df_link["traffic_volume"][df_link["link"] == "R2a"].values[0]
print(f"Total travel time: {W.analyzer.total_travel_time} s")
print(f"Route 1 users: {r1_users}")
print(f"Route 2 users: {r2_users}")
W.analyzer.time_space_diagram_traj_links([route1, route2], figsize=(6,2))

W_duo = W.copy()
Total travel time: 173475.0 s
Route 1 users: 450
Route 2 users: 350
../_images/notebooks_demo_notebook_07en_optimal_routing_14_1.png
../_images/notebooks_demo_notebook_07en_optimal_routing_14_2.png

Now we prepare a GA using DEAP. The fitness in GA is defined as a total travel time, and the gene is defined as routing of each vehicles. The length of gene is equal to the number of platoon in UXsim.

[4]:
# evaluate fitness by total travel time
def evaluate_by_total_travel_time(W):
    W.exec_simulation()
    print(W.analyzer.total_travel_time, end=" ")
    return - W.analyzer.total_travel_time,

# specify routing based on genome
def specify_routes(W, genome):
    veh_list = list(W.VEHICLES.values())
    for i, value in enumerate(genome):
        veh = veh_list[i]
        if value == 1:
            veh.set_links_prefer(route1)
        elif value == 0:
            veh.set_links_prefer(route2)
        else:
            raise ValueError("Invalid genome value")

Then, we execute GA by using standard codes of DEAP as follows. The population is 20 and the generation is 20.

[7]:

creator.create("FitnessMax", base.Fitness, weights=(1.0,)) creator.create("Individual", list, fitness=creator.FitnessMax) toolbox = base.Toolbox() # Initialize the individual n_gene = len(W.VEHICLES) toolbox.register("attr_gene", random.randint, 0, 1) toolbox.register("individual", tools.initRepeat, creator.Individual, toolbox.attr_gene, n=n_gene) toolbox.register("population", tools.initRepeat, list, toolbox.individual) # Define the evaluation, crossover, and mutation functions toolbox.register("evaluate", evaluate_by_total_travel_time) toolbox.register("mate", tools.cxTwoPoint) toolbox.register("mutate", tools.mutFlipBit, indpb=0.1) toolbox.register("select", tools.selTournament, tournsize=3) # Execute genetic algorithm NPOP = 20 CXPB, MUTPB = 0.5, 0.2 NGEN = 20 # Initial population pop = toolbox.population(n=NPOP) for ind in pop: W = W_orig.copy() specify_routes(W, ind) ind.W = W fitnesses = list(map(toolbox.evaluate, [ind.W for ind in pop])) for ind, fit in zip(pop, fitnesses): ind.fitness.values = fit for g in range(NGEN): print(f"-- Generation {g} --") offspring = toolbox.select(pop, len(pop)) offspring = list(map(toolbox.clone, offspring)) # Crossover and mutation for child1, child2 in zip(offspring[::2], offspring[1::2]): if random.random() < CXPB: toolbox.mate(child1, child2) del child1.fitness.values del child2.fitness.values for mutant in offspring: if random.random() < MUTPB: toolbox.mutate(mutant) del mutant.fitness.values # Evaluate the individuals with an invalid fitness invalid_ind = [ind for ind in offspring if not ind.fitness.valid] for ind in invalid_ind: W = W_orig.copy() specify_routes(W, ind) ind.W = W fitnesses = map(toolbox.evaluate, [ind.W for ind in invalid_ind]) for ind, fit in zip(invalid_ind, fitnesses): ind.fitness.values = fit # Print the best individual best_ind = tools.selBest(pop, 1)[0] print("") print("Best individual: ", best_ind) print("Fitness: ", best_ind.fitness.values[0]) df_link = best_ind.W.analyzer.link_to_pandas() r1_users = df_link["traffic_volume"][df_link["link"] == "R1a"].values[0] r2_users = df_link["traffic_volume"][df_link["link"] == "R2a"].values[0] print(f" Total travel time: {best_ind.W.analyzer.total_travel_time} s") print(f" Route 1 users: {r1_users}") print(f" Route 2 users: {r2_users}") #best_ind.W.analyzer.time_space_diagram_traj_links([route1, route2], figsize=(6,2)) # Update the population pop[:] = offspring
127300.0 132500.0 133500.0 135375.0 131700.0 135200.0 135700.0 129925.0 131275.0 127075.0 135825.0 135175.0 129725.0 127725.0 137650.0 136600.0 129725.0 131825.0 125625.0 134725.0 -- Generation 0 --
130000.0 129725.0 127075.0 128550.0 129225.0 129900.0 130125.0 129125.0 127700.0
Best individual:  [0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 1, 1, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 1, 0, 0, 1, 1, 0]
Fitness:  -125625.0
 Total travel time: 125625.0 s
 Route 1 users: 410
 Route 2 users: 390
-- Generation 1 --
126400.0 126475.0 127400.0 127325.0 127975.0 130800.0 128925.0 128125.0 124550.0
Best individual:  [0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 1, 1, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 1, 0, 0, 1, 1, 0]
Fitness:  -125625.0
 Total travel time: 125625.0 s
 Route 1 users: 410
 Route 2 users: 390
-- Generation 2 --
127075.0 126400.0 131475.0 126725.0 126000.0 128275.0 126275.0 126975.0 127800.0 127600.0 126475.0 126850.0 126625.0
Best individual:  [1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 1]
Fitness:  -124550.0
 Total travel time: 124550.0 s
 Route 1 users: 445
 Route 2 users: 355
-- Generation 3 --
128150.0 132400.0 128475.0 126900.0 133775.0 126300.0 127200.0 125175.0 126300.0
Best individual:  [1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 1]
Fitness:  -124550.0
 Total travel time: 124550.0 s
 Route 1 users: 445
 Route 2 users: 355
-- Generation 4 --
124550.0 124550.0 131475.0 128225.0 125550.0 128750.0 126175.0 127400.0 124975.0 130725.0 126300.0 126300.0 130200.0 124550.0 124550.0 130375.0
Best individual:  [1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 1]
Fitness:  -124550.0
 Total travel time: 124550.0 s
 Route 1 users: 445
 Route 2 users: 355
-- Generation 5 --
124550.0 124550.0 124550.0 131725.0 124550.0 124550.0 124550.0 124550.0 124550.0 124550.0 126425.0 124525.0 125575.0 124550.0 124550.0 124550.0 124550.0
Best individual:  [1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 1]
Fitness:  -124550.0
 Total travel time: 124550.0 s
 Route 1 users: 445
 Route 2 users: 355
-- Generation 6 --
124525.0 124550.0 124550.0 129300.0 124550.0 124550.0 124550.0 124550.0 126400.0 125350.0 123575.0 125525.0 126125.0 124550.0 124550.0
Best individual:  [1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 1]
Fitness:  -124525.0
 Total travel time: 124525.0 s
 Route 1 users: 445
 Route 2 users: 355
-- Generation 7 --
124550.0 124550.0 125975.0 124550.0 125900.0 131025.0 124525.0 128100.0 127350.0 124525.0
Best individual:  [1, 1, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 1]
Fitness:  -123575.0
 Total travel time: 123575.0 s
 Route 1 users: 440
 Route 2 users: 360
-- Generation 8 --
125925.0 126625.0 123575.0 123575.0 124550.0 124550.0 126550.0 125125.0 124650.0
Best individual:  [1, 1, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 1]
Fitness:  -123575.0
 Total travel time: 123575.0 s
 Route 1 users: 440
 Route 2 users: 360
-- Generation 9 --
124550.0 128075.0 123575.0 123575.0 123575.0 123575.0 125675.0 124625.0 125150.0 125550.0 127325.0 123575.0 123575.0 127275.0 123575.0 123575.0
Best individual:  [1, 1, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 1]
Fitness:  -123575.0
 Total travel time: 123575.0 s
 Route 1 users: 440
 Route 2 users: 360
-- Generation 10 --
130050.0 123900.0 123575.0 123575.0 123575.0 126275.0 126100.0 123575.0 123575.0 123575.0
Best individual:  [1, 1, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 1]
Fitness:  -123575.0
 Total travel time: 123575.0 s
 Route 1 users: 440
 Route 2 users: 360
-- Generation 11 --
129425.0 123575.0 123575.0 123575.0 126375.0 123575.0 141525.0 123575.0 123575.0 123575.0 123575.0
Best individual:  [1, 1, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 1]
Fitness:  -123575.0
 Total travel time: 123575.0 s
 Route 1 users: 440
 Route 2 users: 360
-- Generation 12 --
125875.0 123575.0 123575.0 123575.0 123575.0 123575.0 132825.0 129500.0 123575.0 130100.0 123575.0 123575.0 123575.0
Best individual:  [1, 1, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 1]
Fitness:  -123575.0
 Total travel time: 123575.0 s
 Route 1 users: 440
 Route 2 users: 360
-- Generation 13 --
123575.0 123575.0 123575.0 123575.0 123575.0 123575.0 129350.0 123575.0 124875.0 123575.0 124550.0 124950.0
Best individual:  [1, 1, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 1]
Fitness:  -123575.0
 Total travel time: 123575.0 s
 Route 1 users: 440
 Route 2 users: 360
-- Generation 14 --
123575.0 123575.0 123575.0 123575.0 123575.0 123575.0 126950.0 127250.0 123575.0 128400.0 123575.0 123575.0
Best individual:  [1, 1, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 1]
Fitness:  -123575.0
 Total travel time: 123575.0 s
 Route 1 users: 440
 Route 2 users: 360
-- Generation 15 --
126800.0 126775.0 124975.0 127250.0 125250.0 123575.0 126175.0 125450.0 128050.0 123575.0 123575.0 123575.0 123575.0
Best individual:  [1, 1, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 1]
Fitness:  -123575.0
 Total travel time: 123575.0 s
 Route 1 users: 440
 Route 2 users: 360
-- Generation 16 --
123575.0 136850.0 126825.0 125425.0 123600.0 125175.0 123575.0 130000.0 123575.0 123575.0 123575.0 123575.0
Best individual:  [1, 1, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 1]
Fitness:  -123575.0
 Total travel time: 123575.0 s
 Route 1 users: 440
 Route 2 users: 360
-- Generation 17 --
125600.0 123575.0 123575.0 127725.0 123575.0 123575.0 123575.0 124775.0 124325.0
Best individual:  [1, 1, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 1]
Fitness:  -123575.0
 Total travel time: 123575.0 s
 Route 1 users: 440
 Route 2 users: 360
-- Generation 18 --
123575.0 123575.0 128175.0 123575.0 123575.0 124650.0 123575.0 123575.0 123575.0 123575.0 123575.0 123575.0
Best individual:  [1, 1, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 1]
Fitness:  -123575.0
 Total travel time: 123575.0 s
 Route 1 users: 440
 Route 2 users: 360
-- Generation 19 --
125550.0 124425.0 126050.0 131575.0 123575.0 123575.0 126125.0 126525.0 126300.0 123575.0 123575.0
Best individual:  [1, 1, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 1]
Fitness:  -123575.0
 Total travel time: 123575.0 s
 Route 1 users: 440
 Route 2 users: 360

The best solution is visualized as follows. You can see that traffic congestion observed in DUO was almost eliminated, and the total travel time was reduced to about 120000 s.

BTW, smart readers may have noticed that similar efficient states were already achieved even in the initial generations of GA. This is because the scale of this scenario is too small and random search done is sufficient to find near optimal solution. In the later section, we show a larger example.

[8]:

best_ind = tools.selBest(pop, 1)[0] print("") print("Best individual: ", best_ind) print("Fitness: ", best_ind.fitness.values[0]) best_ind.W.analyzer.time_space_diagram_traj_links([["R1a", "R1b"], ["R2a", "R2b"]], figsize=(6,2))

Best individual:  [1, 1, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 1]
Fitness:  -123575.0
../_images/notebooks_demo_notebook_07en_optimal_routing_20_1.png
../_images/notebooks_demo_notebook_07en_optimal_routing_20_2.png

Let’s see the experienced travel time of each vehicle. In the following figure, we compare travel time of each vehicle in DUO and near DSO assignment. You can see that many vehicles experienced shorter travel time in DSO. However, few vehicles (upper left of 45-degree line) were forced to make longer travel times than DUO. In this sense, DSO is unfair compared with DUO. Thus, in the real world, some special measures such as pricing and incentives are required to achieve DSO.

[9]:
vehs_duo = list(W_duo.VEHICLES.values())
vehs_dso = list(best_ind.W.VEHICLES.values())

figure()
subplot(111, aspect="equal")
hist2d([veh.travel_time for veh in vehs_duo], [veh.travel_time for veh in vehs_dso], bins=20, range=[[0,300],[0,300]], cmap="Blues", cmin=1)
plot([0, 300], [0, 300], "--k")
colorbar().set_label("Number of vehicles")
xlabel("travel time of each vehicle in DUO(s)")
ylabel("travel time of each vehicle in DSO (s)")
[9]:
Text(0, 0.5, 'travel time of each vehicle in DSO (s)')
../_images/notebooks_demo_notebook_07en_optimal_routing_22_1.png

Optimal routing in a larger network

The following code shows a DSO example in a larger network. We use a 3x3 grid network, and we systematically enumerate available routes between OD pairs optimize the vehicle routing. This took some time; if you want to reduce the computation time, consider to reduce NPOP or NGEN (or implement parallel computing of GA or more efficient algorithms).

[2]:
import random
from deap import base, creator, tools, algorithms
from uxsim import *
from uxsim import Utilities

##############################################################
# Define UXsim World
W = World(
    name="",
    deltan=5,
    tmax=1200,
    print_mode=0, save_mode=1, show_mode=1, #print is off, otherwise it will be very verbose during the genetic algorithm
    random_seed=None,
    duo_update_time=60
)

## generate grid network
Utilities.generate_grid_network(W, 3, 3, length=1000)
W.show_network()

## set demand
od_pairs = [
    ("n(0, 0)", "n(2, 2)"),
    ("n(2, 0)", "n(0, 2)"),
    ("n(0, 2)", "n(2, 0)"),
    ("n(2, 2)", "n(0, 0)"),
]
for od_pair in od_pairs:
    W.adddemand(od_pair[0], od_pair[1], 0, 500, 1)

W_orig = W.copy()

##############################################################
# Compute DUO as a reference
print("Deriving DUO")
W.exec_simulation()
display(W.analyzer.basic_to_pandas())

W_duo= W.copy()

##############################################################
# enumerate some routes between each OD pair
routes = {}
n_routes = 6
for od_pair in od_pairs:
    routes[od_pair] = Utilities.enumerate_k_shortest_routes(W, od_pair[0], od_pair[1], n_routes)

print("available routes for each OD pair")
for key in routes:
    for route in routes[key]:
        print(key, route)

##############################################################
# Prepare genetic algorithm using DEAP
# evaluate fitness by total travel time
def evaluate_by_total_travel_time(W):
    W.exec_simulation()
    print(W.analyzer.total_travel_time, end=" ")
    return - W.analyzer.total_travel_time,

# specify routing based on genome
def specify_routes(W, genome):
    veh_list = list(W.VEHICLES.values())
    for i, value in enumerate(genome):
        veh = veh_list[i]
        veh.set_links_prefer(routes[(veh.orig.name, veh.dest.name)][value])

creator.create("FitnessMax", base.Fitness, weights=(1.0,))
creator.create("Individual", list, fitness=creator.FitnessMax)

toolbox = base.Toolbox()

# Initialize the individual
n_gene = len(W.VEHICLES)
toolbox.register("attr_gene", random.randint, 0, 5)
toolbox.register("individual", tools.initRepeat, creator.Individual, toolbox.attr_gene, n=n_gene)
toolbox.register("population", tools.initRepeat, list, toolbox.individual)

# Define the evaluation, crossover, and mutation functions
toolbox.register("evaluate", evaluate_by_total_travel_time)
toolbox.register("mate", tools.cxTwoPoint)
toolbox.register("mutate", tools.mutFlipBit, indpb=0.1)
toolbox.register("select", tools.selTournament, tournsize=3)


##############################################################
# Execute genetic algorithm
print("Deriving DSO using genetic algorithm")
NPOP = 30
CXPB, MUTPB = 0.5, 0.2
NGEN = 30

# Initial population
pop = toolbox.population(n=NPOP)
for ind in pop:
    W = W_orig.copy()
    specify_routes(W, ind)
    ind.W = W
fitnesses = list(map(toolbox.evaluate, [ind.W for ind in pop]))
for ind, fit in zip(pop, fitnesses):
    ind.fitness.values = fit

for g in range(NGEN):
    print(f"-- Generation {g} --")
    offspring = toolbox.select(pop, len(pop))
    offspring = list(map(toolbox.clone, offspring))

    # Crossover and mutation
    for child1, child2 in zip(offspring[::2], offspring[1::2]):
        if random.random() < CXPB:
            toolbox.mate(child1, child2)
            del child1.fitness.values
            del child2.fitness.values

    for mutant in offspring:
        if random.random() < MUTPB:
            toolbox.mutate(mutant)
            del mutant.fitness.values

    # Evaluate the individuals with an invalid fitness
    invalid_ind = [ind for ind in offspring if not ind.fitness.valid]
    for ind in invalid_ind:
        W = W_orig.copy()
        specify_routes(W, ind)
        ind.W = W
    fitnesses = map(toolbox.evaluate, [ind.W for ind in invalid_ind])
    for ind, fit in zip(invalid_ind, fitnesses):
        ind.fitness.values = fit

    # Print the best individual
    best_ind = tools.selBest(pop, 1)[0]
    print("")
    print("Best individual: ", best_ind)
    print("Fitness: ", best_ind.fitness.values[0])
    display(best_ind.W.analyzer.basic_to_pandas())

    # Update the population
    pop[:] = offspring

W_dso = best_ind.W.copy()

##############################################################
# Compare DUO and near-DSO

print("DUO")
W_duo.analyzer.macroscopic_fundamental_diagram()
W_duo.analyzer.network_anim(file_name="out/grid_duo.gif", detailed=1, network_font_size=0, figsize=(6,6))
display_image_in_notebook("out/grid_duo.gif")

print("near-DSO")
W_dso.analyzer.macroscopic_fundamental_diagram()
W_dso.analyzer.network_anim(file_name="out/grid_dso.gif", detailed=1, network_font_size=0, figsize=(6,6))
display_image_in_notebook("out/grid_dso.gif")

print("Vehicle comparison")
figure()
subplot(111, aspect="equal")
hist2d(
    [veh.travel_time for veh in W_duo.VEHICLES.values()],
    [veh.travel_time for veh in W_dso.VEHICLES.values()],
    bins=20, range=[[0,1000],[0,1000]], cmap="Blues", cmin=1
)
colorbar().set_label("number of vehicles")
plot([0,1000], [0,1000], "k--")
xlabel("travel time of each vehicle in DUO (s)")
ylabel("travel time of each vehicle in DSO (s)")
show()
../_images/notebooks_demo_notebook_07en_optimal_routing_24_0.png
DUO
total_trips completed_trips total_travel_time average_travel_time total_delay average_delay
0 2000 2000 885275.0 442.6375 485275.0 242.6375
available routes for each OD pair
('n(0, 0)', 'n(2, 2)') ['l(0, 0, 1, 0)', 'l(1, 0, 1, 1)', 'l(1, 1, 1, 2)', 'l(1, 2, 2, 2)']
('n(0, 0)', 'n(2, 2)') ['l(0, 0, 0, 1)', 'l(0, 1, 0, 2)', 'l(0, 2, 1, 2)', 'l(1, 2, 2, 2)']
('n(0, 0)', 'n(2, 2)') ['l(0, 0, 1, 0)', 'l(1, 0, 2, 0)', 'l(2, 0, 2, 1)', 'l(2, 1, 2, 2)']
('n(0, 0)', 'n(2, 2)') ['l(0, 0, 1, 0)', 'l(1, 0, 1, 1)', 'l(1, 1, 2, 1)', 'l(2, 1, 2, 2)']
('n(0, 0)', 'n(2, 2)') ['l(0, 0, 0, 1)', 'l(0, 1, 1, 1)', 'l(1, 1, 2, 1)', 'l(2, 1, 2, 2)']
('n(0, 0)', 'n(2, 2)') ['l(0, 0, 0, 1)', 'l(0, 1, 1, 1)', 'l(1, 1, 1, 2)', 'l(1, 2, 2, 2)']
('n(2, 0)', 'n(0, 2)') ['l(2, 0, 1, 0)', 'l(1, 0, 0, 0)', 'l(0, 0, 0, 1)', 'l(0, 1, 0, 2)']
('n(2, 0)', 'n(0, 2)') ['l(2, 0, 2, 1)', 'l(2, 1, 1, 1)', 'l(1, 1, 0, 1)', 'l(0, 1, 0, 2)']
('n(2, 0)', 'n(0, 2)') ['l(2, 0, 1, 0)', 'l(1, 0, 1, 1)', 'l(1, 1, 0, 1)', 'l(0, 1, 0, 2)']
('n(2, 0)', 'n(0, 2)') ['l(2, 0, 2, 1)', 'l(2, 1, 2, 2)', 'l(2, 2, 1, 2)', 'l(1, 2, 0, 2)']
('n(2, 0)', 'n(0, 2)') ['l(2, 0, 2, 1)', 'l(2, 1, 1, 1)', 'l(1, 1, 1, 2)', 'l(1, 2, 0, 2)']
('n(2, 0)', 'n(0, 2)') ['l(2, 0, 1, 0)', 'l(1, 0, 1, 1)', 'l(1, 1, 1, 2)', 'l(1, 2, 0, 2)']
('n(0, 2)', 'n(2, 0)') ['l(0, 2, 1, 2)', 'l(1, 2, 1, 1)', 'l(1, 1, 1, 0)', 'l(1, 0, 2, 0)']
('n(0, 2)', 'n(2, 0)') ['l(0, 2, 0, 1)', 'l(0, 1, 0, 0)', 'l(0, 0, 1, 0)', 'l(1, 0, 2, 0)']
('n(0, 2)', 'n(2, 0)') ['l(0, 2, 1, 2)', 'l(1, 2, 2, 2)', 'l(2, 2, 2, 1)', 'l(2, 1, 2, 0)']
('n(0, 2)', 'n(2, 0)') ['l(0, 2, 1, 2)', 'l(1, 2, 1, 1)', 'l(1, 1, 2, 1)', 'l(2, 1, 2, 0)']
('n(0, 2)', 'n(2, 0)') ['l(0, 2, 0, 1)', 'l(0, 1, 1, 1)', 'l(1, 1, 2, 1)', 'l(2, 1, 2, 0)']
('n(0, 2)', 'n(2, 0)') ['l(0, 2, 0, 1)', 'l(0, 1, 1, 1)', 'l(1, 1, 1, 0)', 'l(1, 0, 2, 0)']
('n(2, 2)', 'n(0, 0)') ['l(2, 2, 1, 2)', 'l(1, 2, 0, 2)', 'l(0, 2, 0, 1)', 'l(0, 1, 0, 0)']
('n(2, 2)', 'n(0, 0)') ['l(2, 2, 2, 1)', 'l(2, 1, 1, 1)', 'l(1, 1, 0, 1)', 'l(0, 1, 0, 0)']
('n(2, 2)', 'n(0, 0)') ['l(2, 2, 1, 2)', 'l(1, 2, 1, 1)', 'l(1, 1, 0, 1)', 'l(0, 1, 0, 0)']
('n(2, 2)', 'n(0, 0)') ['l(2, 2, 2, 1)', 'l(2, 1, 2, 0)', 'l(2, 0, 1, 0)', 'l(1, 0, 0, 0)']
('n(2, 2)', 'n(0, 0)') ['l(2, 2, 2, 1)', 'l(2, 1, 1, 1)', 'l(1, 1, 1, 0)', 'l(1, 0, 0, 0)']
('n(2, 2)', 'n(0, 0)') ['l(2, 2, 1, 2)', 'l(1, 2, 1, 1)', 'l(1, 1, 1, 0)', 'l(1, 0, 0, 0)']
Deriving DSO using genetic algorithm
699350.0 706850.0 751675.0 702950.0 774950.0 687925.0 661425.0 700025.0 655725.0 678225.0 691050.0 721425.0 701750.0 717600.0 669800.0 695250.0 679850.0 696350.0 741850.0 647250.0 667325.0 777825.0 693900.0 712975.0 721775.0 733150.0 728125.0 686975.0 711600.0 706750.0 -- Generation 0 --
688725.0 680550.0 664225.0 700525.0 686275.0 667700.0 683525.0 652075.0 674950.0 710875.0 685625.0 685250.0 679350.0 676175.0 691775.0 671375.0 728125.0 665125.0 634775.0 707250.0
Best individual:  [5, 4, 4, 0, 2, 1, 1, 0, 5, 2, 4, 1, 0, 1, 1, 1, 2, 3, 1, 5, 1, 2, 2, 2, 2, 0, 1, 0, 3, 1, 1, 5, 4, 3, 5, 4, 3, 0, 1, 5, 2, 0, 1, 5, 5, 4, 3, 2, 2, 2, 0, 2, 1, 2, 1, 1, 3, 5, 0, 1, 5, 5, 5, 0, 1, 2, 1, 4, 3, 2, 2, 4, 0, 0, 5, 5, 3, 3, 4, 2, 4, 0, 5, 5, 4, 4, 3, 0, 1, 4, 2, 0, 5, 3, 4, 1, 3, 4, 2, 2, 2, 5, 1, 5, 3, 4, 0, 5, 2, 2, 3, 1, 0, 2, 1, 2, 3, 1, 1, 3, 1, 2, 0, 1, 0, 4, 5, 1, 4, 1, 1, 0, 3, 2, 5, 5, 4, 1, 2, 1, 4, 1, 5, 3, 2, 0, 4, 5, 5, 2, 3, 1, 5, 3, 5, 3, 4, 5, 2, 3, 0, 5, 2, 0, 5, 2, 4, 4, 2, 5, 3, 3, 2, 3, 5, 3, 1, 0, 1, 0, 1, 0, 3, 4, 5, 2, 2, 1, 1, 3, 1, 1, 4, 3, 1, 4, 4, 0, 1, 3, 3, 3, 0, 1, 5, 1, 0, 2, 5, 5, 5, 5, 5, 1, 1, 0, 3, 4, 2, 5, 5, 1, 5, 0, 2, 2, 1, 3, 3, 5, 0, 2, 3, 0, 2, 4, 4, 2, 5, 0, 1, 1, 1, 4, 1, 3, 5, 0, 0, 3, 5, 5, 4, 5, 5, 2, 0, 3, 1, 3, 0, 0, 2, 0, 5, 1, 2, 5, 4, 5, 1, 0, 2, 3, 1, 2, 1, 1, 5, 4, 0, 1, 1, 0, 2, 1, 4, 2, 0, 3, 2, 2, 5, 2, 2, 2, 4, 3, 1, 1, 5, 2, 1, 3, 5, 3, 1, 0, 0, 2, 3, 4, 5, 3, 1, 2, 0, 0, 0, 1, 4, 3, 3, 1, 3, 0, 2, 2, 0, 3, 3, 0, 3, 1, 0, 1, 2, 1, 3, 0, 3, 5, 0, 1, 2, 3, 1, 5, 2, 4, 1, 5, 0, 3, 1, 0, 5, 2, 4, 2, 2, 0, 0, 2, 2, 3, 3, 5, 4, 3, 3, 5, 5, 1, 5, 1, 3, 4, 1, 3, 0, 3, 4, 5, 3, 3, 4, 5, 3, 0, 4, 1, 3, 5, 5, 3, 5, 0, 4, 5]
Fitness:  -647250.0
total_trips completed_trips total_travel_time average_travel_time total_delay average_delay
0 2000 2000 647250.0 323.625 247250.0 123.625
-- Generation 1 --
660100.0 680250.0 656625.0 680800.0 660950.0 644300.0 683350.0 695550.0 699225.0 641575.0 663150.0 700475.0 678775.0 650450.0 679525.0 656775.0 663100.0 686875.0 693900.0 659625.0 684825.0
Best individual:  [5, 4, 4, 0, 2, 1, 1, 0, 5, 2, 4, 1, 0, 1, 1, 1, 2, 3, 1, 5, 1, 2, 2, 2, 2, 0, 1, 0, 3, 1, 1, 5, 4, 3, 5, 4, 3, 0, 1, 5, 2, 0, 1, 5, 5, 4, 3, 2, 2, 2, 0, 2, 1, 2, 1, 1, 3, 5, 2, 2, 2, 4, 4, 0, 2, 5, 0, 0, 4, 0, 4, 5, 1, 2, 0, 0, 2, 0, 5, 3, 0, 4, 2, 0, 3, 0, 3, 2, 2, 2, 2, 0, 4, 1, 2, 1, 1, 0, 5, 4, 5, 5, 4, 1, 5, 1, 5, 1, 0, 0, 3, 1, 4, 1, 2, 3, 3, 5, 4, 5, 2, 1, 3, 1, 3, 1, 5, 5, 3, 2, 4, 1, 3, 1, 3, 2, 3, 5, 2, 4, 0, 1, 2, 3, 0, 0, 0, 0, 5, 4, 5, 5, 4, 2, 0, 2, 5, 0, 4, 3, 2, 2, 3, 3, 5, 4, 4, 4, 4, 1, 0, 5, 5, 4, 1, 4, 4, 0, 4, 1, 0, 0, 2, 3, 5, 3, 2, 0, 2, 3, 3, 1, 3, 3, 0, 3, 4, 3, 0, 2, 0, 5, 5, 5, 1, 3, 4, 1, 1, 5, 0, 4, 3, 5, 4, 0, 1, 2, 1, 3, 3, 2, 2, 1, 0, 2, 1, 3, 3, 5, 0, 2, 3, 0, 2, 4, 4, 2, 5, 0, 1, 1, 1, 4, 1, 3, 5, 0, 0, 3, 5, 5, 4, 5, 5, 2, 0, 3, 1, 3, 0, 0, 2, 0, 5, 1, 2, 5, 4, 5, 1, 0, 2, 3, 1, 2, 1, 1, 5, 4, 0, 1, 1, 0, 2, 1, 4, 2, 0, 3, 2, 2, 5, 2, 2, 2, 4, 3, 1, 1, 5, 2, 1, 3, 5, 3, 1, 0, 0, 2, 3, 4, 5, 3, 1, 2, 0, 0, 0, 1, 4, 3, 3, 1, 3, 0, 2, 2, 0, 3, 3, 0, 3, 1, 0, 1, 2, 1, 3, 0, 3, 5, 0, 1, 2, 3, 1, 5, 2, 4, 1, 5, 0, 3, 1, 0, 5, 2, 4, 2, 2, 0, 0, 2, 2, 3, 3, 5, 4, 3, 3, 5, 5, 1, 5, 1, 3, 4, 1, 3, 0, 3, 4, 5, 3, 3, 4, 5, 3, 0, 4, 1, 3, 5, 5, 3, 5, 0, 4, 5]
Fitness:  -634775.0
total_trips completed_trips total_travel_time average_travel_time total_delay average_delay
0 2000 2000 634775.0 317.3875 234775.0 117.3875
-- Generation 2 --
673175.0 639325.0 664200.0 660200.0 657150.0 643925.0 625600.0 663525.0 669825.0 672025.0 686150.0 657600.0 660775.0 660000.0 638600.0 641375.0 662625.0 646300.0
Best individual:  [5, 4, 4, 0, 2, 1, 1, 0, 5, 2, 4, 1, 0, 1, 1, 1, 2, 3, 1, 5, 1, 2, 2, 2, 2, 0, 1, 0, 3, 1, 1, 5, 4, 3, 5, 4, 3, 0, 1, 5, 2, 0, 1, 5, 5, 4, 3, 2, 2, 2, 0, 2, 1, 2, 1, 1, 3, 5, 2, 2, 2, 4, 4, 0, 2, 5, 0, 0, 4, 0, 4, 5, 1, 2, 0, 0, 2, 0, 5, 3, 0, 4, 2, 0, 3, 0, 3, 2, 2, 2, 2, 0, 4, 1, 2, 1, 1, 0, 5, 4, 5, 5, 4, 1, 5, 1, 5, 1, 0, 0, 3, 1, 4, 1, 2, 3, 3, 5, 4, 5, 2, 1, 3, 1, 3, 1, 5, 5, 3, 2, 4, 1, 3, 1, 3, 2, 3, 5, 2, 4, 0, 1, 2, 3, 0, 0, 0, 0, 5, 4, 5, 5, 4, 2, 0, 2, 5, 0, 4, 3, 2, 2, 3, 3, 5, 4, 4, 4, 4, 1, 0, 5, 5, 4, 1, 4, 4, 0, 4, 1, 0, 0, 2, 3, 5, 3, 2, 0, 2, 3, 3, 1, 3, 3, 0, 3, 4, 3, 0, 2, 0, 5, 5, 5, 1, 3, 4, 1, 1, 5, 0, 4, 3, 5, 4, 0, 1, 2, 1, 3, 3, 2, 2, 1, 0, 2, 1, 3, 3, 5, 0, 2, 3, 0, 2, 4, 4, 2, 5, 0, 1, 1, 1, 4, 1, 3, 5, 0, 0, 3, 5, 5, 4, 5, 5, 2, 0, 3, 1, 3, 0, 0, 2, 0, 5, 1, 2, 5, 4, 5, 1, 0, 2, 3, 1, 2, 1, 1, 5, 4, 0, 1, 1, 0, 2, 1, 4, 2, 0, 3, 2, 2, 5, 2, 2, 2, 4, 3, 1, 1, 5, 2, 1, 3, 5, 3, 1, 0, 0, 2, 3, 4, 5, 3, 1, 2, 0, 0, 0, 1, 4, 3, 3, 1, 3, 0, 2, 2, 0, 3, 3, 0, 3, 1, 0, 1, 2, 1, 3, 0, 3, 5, 0, 1, 2, 3, 1, 5, 2, 4, 1, 5, 0, 3, 1, 0, 5, 2, 4, 2, 2, 0, 0, 2, 2, 3, 3, 5, 4, 3, 3, 5, 5, 1, 5, 1, 3, 4, 1, 3, 0, 3, 4, 5, 3, 3, 4, 5, 3, 0, 4, 1, 3, 5, 5, 3, 5, 0, 4, 5]
Fitness:  -634775.0
total_trips completed_trips total_travel_time average_travel_time total_delay average_delay
0 2000 2000 634775.0 317.3875 234775.0 117.3875
-- Generation 3 --
639750.0 641425.0 649675.0 674125.0 654025.0 650000.0 635125.0 640375.0 647625.0 642475.0 630525.0 652575.0 644450.0 642150.0
Best individual:  [2, 0, 1, 2, 5, 4, 0, 2, 0, 1, 2, 0, 3, 1, 1, 4, 5, 0, 1, 2, 2, 4, 2, 2, 2, 0, 1, 0, 3, 1, 1, 5, 0, 3, 5, 4, 3, 0, 1, 5, 2, 0, 1, 5, 5, 4, 3, 2, 2, 2, 0, 2, 1, 2, 1, 1, 3, 5, 0, 1, 5, 5, 5, 0, 1, 2, 1, 4, 3, 2, 2, 4, 0, 0, 5, 5, 3, 3, 4, 2, 4, 0, 5, 5, 4, 0, 3, 0, 1, 5, 0, 1, 5, 4, 3, 3, 4, 2, 1, 5, 0, 0, 0, 4, 2, 2, 5, 5, 0, 3, 4, 1, 5, 3, 2, 3, 2, 4, 0, 3, 2, 2, 2, 2, 0, 0, 3, 5, 3, 3, 2, 0, 5, 4, 5, 2, 1, 0, 0, 3, 2, 4, 1, 0, 3, 5, 2, 3, 0, 5, 0, 1, 3, 0, 2, 2, 2, 3, 3, 4, 4, 3, 0, 5, 4, 4, 5, 4, 0, 4, 1, 1, 1, 4, 0, 4, 4, 2, 5, 0, 5, 1, 2, 3, 5, 4, 0, 4, 4, 0, 1, 1, 4, 1, 2, 5, 1, 4, 4, 1, 4, 3, 1, 3, 1, 1, 2, 2, 1, 0, 5, 4, 3, 0, 1, 2, 4, 4, 2, 2, 3, 2, 2, 1, 0, 1, 1, 0, 5, 2, 2, 0, 4, 3, 1, 0, 2, 4, 1, 0, 0, 0, 0, 1, 5, 0, 0, 0, 0, 1, 5, 4, 5, 1, 4, 4, 3, 1, 5, 0, 3, 1, 2, 4, 3, 2, 1, 3, 1, 3, 3, 5, 4, 3, 1, 2, 1, 1, 0, 4, 0, 1, 1, 0, 2, 1, 4, 2, 1, 3, 2, 2, 5, 2, 2, 2, 4, 3, 1, 1, 5, 0, 1, 3, 5, 3, 1, 0, 0, 2, 3, 4, 5, 3, 1, 2, 0, 0, 0, 1, 4, 3, 3, 1, 3, 0, 2, 2, 1, 0, 3, 0, 3, 0, 0, 1, 2, 1, 3, 1, 3, 5, 0, 1, 2, 3, 1, 5, 2, 4, 1, 5, 0, 3, 1, 0, 5, 2, 4, 2, 2, 0, 0, 2, 2, 3, 3, 5, 4, 3, 3, 5, 0, 0, 3, 2, 0, 0, 0, 5, 0, 4, 0, 4, 2, 0, 3, 0, 1, 4, 3, 0, 0, 4, 1, 3, 4, 1, 3, 2]
Fitness:  -625600.0
total_trips completed_trips total_travel_time average_travel_time total_delay average_delay
0 2000 2000 625600.0 312.8 225600.0 112.8
-- Generation 4 --
645600.0 641725.0 653025.0 649725.0 672275.0 638250.0 635250.0 616175.0 641275.0 673275.0 643600.0 639400.0 642525.0 637325.0 655425.0 632425.0 637850.0 639525.0 645175.0 630975.0 694150.0 643850.0
Best individual:  [2, 0, 1, 2, 5, 4, 0, 2, 0, 1, 2, 0, 3, 1, 1, 4, 5, 0, 1, 2, 2, 4, 2, 2, 2, 0, 1, 0, 3, 1, 1, 5, 0, 3, 5, 4, 3, 0, 1, 5, 2, 0, 1, 5, 5, 4, 3, 2, 2, 2, 0, 2, 1, 2, 1, 1, 3, 5, 0, 1, 5, 5, 5, 0, 1, 2, 1, 4, 3, 2, 2, 4, 0, 0, 5, 5, 3, 3, 4, 2, 4, 0, 5, 5, 4, 0, 3, 0, 1, 5, 0, 1, 5, 4, 3, 3, 4, 2, 1, 5, 0, 0, 0, 4, 2, 2, 5, 5, 0, 3, 4, 1, 5, 3, 2, 3, 2, 4, 0, 3, 2, 2, 2, 2, 0, 0, 3, 5, 3, 3, 2, 0, 5, 4, 5, 2, 1, 0, 0, 3, 2, 4, 1, 0, 3, 5, 2, 3, 0, 5, 0, 1, 3, 0, 2, 2, 2, 3, 3, 4, 4, 3, 0, 5, 4, 4, 5, 4, 0, 4, 1, 1, 1, 4, 0, 4, 4, 2, 5, 0, 5, 1, 2, 3, 5, 4, 0, 4, 4, 0, 1, 1, 4, 1, 2, 5, 1, 4, 4, 1, 4, 3, 1, 3, 1, 1, 2, 2, 1, 0, 5, 4, 3, 0, 1, 2, 4, 4, 2, 2, 3, 2, 2, 1, 0, 1, 1, 0, 5, 2, 2, 0, 4, 3, 1, 0, 2, 4, 1, 0, 0, 0, 0, 1, 5, 0, 0, 0, 0, 1, 5, 4, 5, 1, 4, 4, 3, 1, 5, 0, 3, 1, 2, 4, 3, 2, 1, 3, 1, 3, 3, 5, 4, 3, 1, 2, 1, 1, 0, 4, 0, 1, 1, 0, 2, 1, 4, 2, 1, 3, 2, 2, 5, 2, 2, 2, 4, 3, 1, 1, 5, 0, 1, 3, 5, 3, 1, 0, 0, 2, 3, 4, 5, 3, 1, 2, 0, 0, 0, 1, 4, 3, 3, 1, 3, 0, 2, 2, 1, 0, 3, 0, 3, 0, 0, 1, 2, 1, 3, 1, 3, 5, 0, 1, 2, 3, 1, 5, 2, 4, 1, 5, 0, 3, 1, 0, 5, 2, 4, 2, 2, 0, 0, 2, 2, 3, 3, 5, 4, 3, 3, 5, 0, 0, 3, 2, 0, 0, 0, 5, 0, 4, 0, 4, 2, 0, 3, 0, 1, 4, 3, 0, 0, 4, 1, 3, 4, 1, 3, 2]
Fitness:  -625600.0
total_trips completed_trips total_travel_time average_travel_time total_delay average_delay
0 2000 2000 625600.0 312.8 225600.0 112.8
-- Generation 5 --
665775.0 634650.0 626225.0 628000.0 634200.0 645575.0 624925.0 654675.0 607525.0 627875.0 643100.0 641400.0 636550.0 658775.0 640750.0 621925.0 644450.0
Best individual:  [2, 0, 1, 2, 5, 4, 0, 2, 0, 1, 2, 0, 3, 1, 1, 4, 5, 0, 1, 2, 2, 4, 2, 2, 2, 0, 1, 0, 3, 1, 1, 5, 0, 3, 5, 4, 3, 0, 1, 5, 2, 0, 1, 5, 5, 4, 3, 2, 2, 2, 0, 2, 1, 2, 1, 1, 3, 5, 0, 1, 5, 5, 5, 0, 1, 2, 1, 4, 3, 2, 2, 4, 0, 0, 5, 5, 3, 3, 4, 2, 4, 0, 5, 5, 4, 0, 3, 0, 1, 5, 0, 1, 5, 4, 3, 3, 4, 2, 1, 5, 0, 0, 0, 4, 2, 2, 5, 5, 0, 3, 4, 1, 5, 3, 2, 3, 2, 4, 0, 3, 2, 2, 2, 2, 0, 0, 3, 5, 3, 3, 2, 0, 5, 4, 5, 2, 1, 0, 0, 3, 2, 4, 1, 4, 1, 5, 1, 3, 0, 5, 0, 1, 3, 0, 2, 2, 2, 3, 3, 4, 4, 3, 0, 5, 4, 4, 5, 4, 0, 4, 1, 1, 1, 4, 0, 4, 4, 2, 5, 0, 5, 1, 2, 3, 5, 4, 0, 4, 4, 0, 1, 1, 4, 1, 2, 5, 1, 4, 4, 1, 4, 3, 1, 3, 1, 1, 2, 2, 1, 0, 5, 4, 3, 0, 1, 2, 4, 4, 2, 2, 3, 2, 2, 1, 0, 1, 1, 0, 5, 2, 2, 0, 4, 3, 1, 0, 2, 4, 1, 0, 0, 0, 0, 1, 5, 0, 0, 0, 0, 1, 5, 4, 5, 1, 4, 4, 3, 1, 5, 0, 3, 1, 2, 4, 3, 2, 1, 3, 1, 3, 3, 5, 4, 3, 1, 2, 1, 1, 0, 4, 0, 1, 1, 0, 2, 1, 4, 2, 1, 3, 2, 2, 5, 2, 2, 2, 4, 3, 1, 1, 5, 0, 1, 3, 5, 3, 1, 0, 0, 2, 3, 4, 5, 3, 1, 2, 0, 0, 0, 1, 4, 3, 3, 1, 3, 0, 2, 2, 1, 0, 3, 0, 3, 0, 0, 1, 2, 1, 3, 1, 3, 5, 0, 1, 2, 3, 1, 5, 2, 4, 1, 5, 0, 3, 1, 0, 5, 2, 4, 2, 2, 0, 0, 2, 2, 3, 3, 5, 4, 3, 3, 5, 0, 0, 3, 2, 0, 0, 0, 5, 0, 4, 0, 4, 2, 0, 3, 0, 1, 4, 3, 0, 0, 4, 1, 3, 4, 1, 3, 2]
Fitness:  -616175.0
total_trips completed_trips total_travel_time average_travel_time total_delay average_delay
0 2000 2000 616175.0 308.0875 216175.0 108.0875
-- Generation 6 --
630700.0 624825.0 644225.0 628075.0 653400.0 669525.0 649400.0 649150.0 627300.0 631750.0 624350.0 615525.0 647275.0 621400.0 666975.0 631825.0 610050.0 645575.0 667675.0
Best individual:  [5, 4, 4, 0, 2, 1, 1, 0, 5, 2, 4, 1, 0, 0, 1, 0, 2, 3, 1, 5, 1, 2, 0, 2, 2, 0, 1, 0, 3, 1, 0, 5, 4, 3, 5, 4, 0, 0, 1, 5, 2, 0, 0, 5, 5, 4, 3, 2, 2, 2, 1, 2, 1, 2, 1, 1, 3, 5, 0, 1, 5, 5, 5, 0, 1, 2, 1, 4, 3, 2, 2, 4, 0, 0, 5, 5, 3, 3, 4, 2, 4, 1, 0, 5, 4, 4, 0, 0, 1, 4, 2, 0, 4, 1, 2, 0, 1, 2, 1, 5, 0, 0, 1, 4, 0, 2, 5, 5, 2, 3, 0, 1, 5, 0, 2, 3, 2, 4, 0, 3, 0, 0, 2, 2, 0, 0, 3, 5, 3, 3, 0, 1, 5, 4, 5, 2, 1, 4, 5, 3, 2, 0, 1, 3, 3, 5, 0, 3, 1, 5, 2, 0, 3, 0, 2, 2, 2, 3, 3, 4, 4, 3, 1, 5, 4, 1, 5, 4, 0, 0, 1, 1, 0, 4, 0, 4, 4, 2, 5, 2, 5, 1, 2, 3, 5, 4, 0, 4, 0, 0, 1, 0, 4, 0, 2, 5, 1, 4, 4, 1, 4, 3, 1, 0, 1, 1, 2, 2, 1, 0, 1, 4, 3, 4, 0, 0, 4, 4, 2, 2, 3, 2, 2, 1, 0, 1, 1, 1, 5, 2, 2, 0, 4, 3, 1, 4, 2, 4, 1, 0, 0, 3, 2, 1, 0, 1, 0, 0, 0, 0, 5, 4, 5, 0, 4, 4, 3, 1, 5, 0, 3, 1, 0, 4, 3, 2, 0, 3, 1, 0, 3, 5, 4, 0, 0, 0, 1, 1, 5, 4, 0, 1, 0, 0, 2, 1, 4, 2, 0, 3, 2, 0, 5, 2, 2, 2, 4, 3, 1, 1, 5, 2, 1, 0, 5, 3, 1, 0, 0, 2, 3, 4, 5, 0, 1, 2, 0, 0, 1, 1, 4, 3, 3, 1, 3, 0, 2, 2, 0, 3, 3, 0, 3, 1, 0, 1, 2, 1, 3, 0, 3, 5, 0, 1, 0, 3, 1, 5, 2, 4, 1, 5, 0, 3, 1, 1, 5, 2, 4, 2, 0, 1, 0, 2, 2, 3, 3, 5, 4, 3, 3, 5, 0, 1, 5, 1, 0, 4, 1, 3, 0, 3, 4, 0, 3, 3, 4, 5, 3, 1, 4, 0, 3, 5, 5, 3, 5, 1, 4, 5]
Fitness:  -607525.0
total_trips completed_trips total_travel_time average_travel_time total_delay average_delay
0 2000 2000 607525.0 303.7625 207525.0 103.7625
-- Generation 7 --
630950.0 627250.0 634500.0 635250.0 641275.0 604900.0 637000.0 638250.0 614750.0 635275.0 635400.0 630050.0 682025.0 636175.0 617600.0 634925.0 615600.0
Best individual:  [5, 4, 4, 0, 2, 1, 1, 0, 5, 2, 4, 1, 0, 0, 1, 0, 2, 3, 1, 5, 1, 2, 0, 2, 2, 0, 1, 0, 3, 1, 0, 5, 4, 3, 5, 4, 0, 0, 1, 5, 2, 0, 0, 5, 5, 4, 3, 2, 2, 2, 1, 2, 1, 2, 1, 1, 3, 5, 0, 1, 5, 5, 5, 0, 1, 2, 1, 4, 3, 2, 2, 4, 0, 0, 5, 5, 3, 3, 4, 2, 4, 1, 0, 5, 4, 4, 0, 0, 1, 4, 2, 0, 4, 1, 2, 0, 1, 2, 1, 5, 0, 0, 1, 4, 0, 2, 5, 5, 2, 3, 0, 1, 5, 0, 2, 3, 2, 4, 0, 3, 0, 0, 2, 2, 0, 0, 3, 5, 3, 3, 0, 1, 5, 4, 5, 2, 1, 4, 5, 3, 2, 0, 1, 3, 3, 5, 0, 3, 1, 5, 2, 0, 3, 0, 2, 2, 2, 3, 3, 4, 4, 3, 1, 5, 4, 1, 5, 4, 0, 0, 1, 1, 0, 4, 0, 4, 4, 2, 5, 2, 5, 1, 2, 3, 5, 4, 0, 4, 0, 0, 1, 0, 4, 0, 2, 5, 1, 4, 4, 1, 4, 3, 1, 0, 1, 1, 2, 2, 1, 0, 1, 4, 3, 4, 0, 0, 4, 4, 2, 2, 3, 2, 2, 1, 0, 1, 1, 1, 5, 2, 2, 0, 4, 3, 1, 4, 2, 4, 1, 0, 0, 3, 2, 1, 0, 1, 0, 0, 0, 0, 5, 4, 5, 0, 4, 4, 3, 1, 5, 0, 3, 1, 0, 4, 3, 2, 0, 3, 1, 0, 3, 5, 4, 0, 0, 0, 1, 1, 5, 4, 0, 1, 0, 0, 2, 1, 4, 2, 0, 3, 2, 0, 5, 2, 2, 2, 4, 3, 1, 1, 5, 2, 1, 0, 5, 3, 1, 0, 0, 2, 3, 4, 5, 0, 1, 2, 0, 0, 1, 1, 4, 3, 3, 1, 3, 0, 2, 2, 0, 3, 3, 0, 3, 1, 0, 1, 2, 1, 3, 0, 3, 5, 0, 1, 0, 3, 1, 5, 2, 4, 1, 5, 0, 3, 1, 1, 5, 2, 4, 2, 0, 1, 0, 2, 2, 3, 3, 5, 4, 3, 3, 5, 0, 1, 5, 1, 0, 4, 1, 3, 0, 3, 4, 0, 3, 3, 4, 5, 3, 1, 4, 0, 3, 5, 5, 3, 5, 1, 4, 5]
Fitness:  -607525.0
total_trips completed_trips total_travel_time average_travel_time total_delay average_delay
0 2000 2000 607525.0 303.7625 207525.0 103.7625
-- Generation 8 --
649450.0 644800.0 620550.0 655225.0 650725.0 609625.0 629025.0 646000.0 630000.0 641750.0 627850.0 635350.0 635275.0 621200.0 604750.0 642700.0
Best individual:  [2, 0, 1, 2, 5, 4, 0, 2, 0, 1, 2, 0, 3, 1, 1, 4, 5, 0, 1, 2, 2, 4, 2, 2, 2, 0, 1, 0, 3, 1, 1, 5, 0, 3, 5, 4, 3, 0, 1, 5, 2, 0, 1, 5, 5, 4, 3, 2, 2, 2, 0, 2, 1, 2, 1, 1, 3, 5, 0, 1, 5, 5, 5, 0, 1, 2, 1, 4, 3, 2, 2, 4, 0, 1, 5, 5, 3, 3, 4, 2, 4, 0, 5, 5, 4, 0, 3, 0, 1, 5, 0, 1, 5, 4, 3, 3, 4, 2, 1, 5, 0, 0, 0, 4, 2, 2, 5, 0, 0, 3, 4, 1, 0, 3, 2, 3, 2, 4, 0, 3, 2, 2, 2, 2, 0, 0, 3, 5, 3, 0, 0, 0, 1, 4, 5, 2, 1, 0, 5, 3, 4, 1, 0, 4, 1, 5, 1, 0, 4, 0, 1, 2, 5, 3, 1, 2, 2, 3, 0, 4, 4, 3, 0, 5, 4, 4, 5, 4, 0, 0, 1, 1, 1, 4, 0, 4, 4, 2, 5, 0, 5, 1, 2, 0, 5, 4, 0, 4, 4, 0, 1, 1, 4, 1, 0, 5, 1, 4, 4, 1, 4, 3, 1, 3, 0, 1, 2, 2, 0, 0, 5, 4, 3, 0, 1, 2, 4, 4, 2, 2, 3, 2, 2, 1, 0, 1, 1, 0, 0, 2, 2, 1, 4, 3, 1, 0, 2, 4, 1, 0, 0, 0, 0, 1, 5, 0, 1, 0, 0, 1, 5, 4, 5, 1, 4, 4, 0, 1, 5, 0, 3, 0, 2, 4, 0, 2, 1, 3, 1, 3, 3, 5, 4, 3, 1, 2, 1, 1, 0, 4, 0, 1, 1, 0, 2, 1, 4, 2, 1, 3, 2, 0, 5, 2, 2, 2, 4, 3, 1, 1, 5, 0, 1, 3, 5, 3, 1, 0, 0, 2, 3, 4, 5, 3, 1, 2, 0, 0, 0, 1, 4, 3, 0, 1, 3, 0, 2, 2, 0, 0, 3, 0, 3, 0, 0, 1, 2, 1, 3, 1, 3, 5, 0, 1, 0, 3, 1, 5, 0, 4, 0, 5, 0, 3, 1, 0, 5, 2, 4, 2, 2, 1, 0, 2, 2, 3, 3, 5, 4, 3, 3, 5, 0, 1, 3, 2, 0, 0, 1, 5, 0, 4, 0, 4, 2, 0, 3, 1, 1, 0, 3, 0, 0, 4, 0, 3, 4, 1, 3, 2]
Fitness:  -604900.0
total_trips completed_trips total_travel_time average_travel_time total_delay average_delay
0 2000 2000 604900.0 302.45 204900.0 102.45
-- Generation 9 --
612025.0 610450.0 614650.0 610450.0 658100.0 636775.0 611525.0 610975.0 645150.0 611000.0 616625.0 621325.0 628400.0 636925.0 610750.0 636500.0
Best individual:  [2, 0, 1, 2, 5, 4, 0, 2, 0, 1, 2, 0, 3, 1, 1, 4, 5, 0, 1, 2, 2, 4, 2, 2, 2, 0, 1, 0, 3, 1, 1, 5, 4, 3, 5, 4, 3, 0, 1, 5, 2, 1, 1, 5, 5, 4, 3, 0, 0, 2, 1, 2, 1, 2, 0, 1, 0, 5, 2, 1, 2, 4, 4, 0, 2, 5, 0, 0, 4, 1, 4, 5, 1, 2, 0, 0, 2, 1, 5, 3, 1, 4, 2, 0, 3, 0, 3, 0, 2, 2, 2, 0, 4, 1, 2, 0, 1, 2, 0, 5, 0, 0, 0, 4, 0, 2, 5, 0, 0, 3, 0, 1, 5, 0, 2, 3, 2, 4, 0, 3, 0, 1, 2, 2, 0, 0, 3, 5, 3, 3, 1, 1, 5, 0, 5, 2, 1, 4, 5, 3, 2, 0, 1, 4, 1, 5, 1, 1, 4, 3, 0, 2, 5, 3, 0, 0, 4, 0, 4, 4, 2, 5, 2, 1, 0, 3, 0, 3, 4, 5, 2, 3, 2, 0, 5, 4, 0, 0, 5, 0, 5, 1, 2, 3, 5, 4, 0, 4, 4, 0, 1, 1, 4, 1, 2, 5, 1, 4, 4, 1, 4, 3, 1, 3, 1, 1, 2, 2, 1, 0, 5, 4, 3, 0, 1, 2, 4, 4, 2, 2, 3, 2, 2, 1, 0, 1, 1, 0, 5, 2, 2, 0, 4, 3, 1, 0, 2, 4, 1, 0, 0, 0, 0, 1, 5, 0, 0, 0, 0, 1, 5, 4, 5, 1, 4, 4, 3, 1, 5, 0, 3, 1, 2, 4, 3, 2, 1, 3, 1, 3, 3, 5, 4, 3, 1, 2, 1, 1, 0, 4, 0, 1, 1, 0, 2, 1, 4, 2, 1, 3, 2, 2, 5, 2, 2, 2, 4, 3, 1, 1, 5, 0, 1, 3, 5, 3, 1, 0, 0, 2, 3, 4, 5, 3, 1, 2, 0, 0, 0, 1, 4, 3, 3, 1, 3, 0, 2, 2, 1, 0, 3, 0, 3, 0, 0, 1, 2, 1, 3, 1, 3, 5, 0, 1, 2, 3, 1, 5, 2, 4, 1, 5, 0, 3, 1, 0, 5, 2, 4, 2, 2, 0, 0, 2, 2, 3, 3, 5, 4, 3, 3, 5, 0, 0, 3, 2, 0, 0, 0, 5, 0, 4, 0, 4, 2, 0, 3, 0, 1, 4, 3, 0, 0, 4, 1, 3, 4, 1, 3, 2]
Fitness:  -604750.0
total_trips completed_trips total_travel_time average_travel_time total_delay average_delay
0 2000 2000 604750.0 302.375 204750.0 102.375
-- Generation 10 --
630125.0 603250.0 631075.0 650525.0 622275.0 613650.0 622175.0 618075.0 613675.0 626750.0 606000.0 651825.0 642500.0 620425.0 638850.0 657525.0
Best individual:  [2, 0, 1, 2, 5, 4, 0, 2, 0, 1, 2, 0, 3, 1, 1, 4, 5, 0, 1, 2, 2, 4, 2, 2, 2, 0, 1, 0, 3, 1, 1, 5, 4, 3, 5, 4, 3, 0, 1, 5, 2, 1, 1, 5, 5, 4, 3, 0, 0, 2, 1, 2, 1, 2, 0, 1, 0, 5, 2, 1, 2, 4, 4, 0, 2, 5, 0, 0, 4, 1, 4, 5, 1, 2, 0, 0, 2, 1, 5, 3, 1, 4, 2, 0, 3, 0, 3, 0, 2, 2, 2, 0, 4, 1, 2, 0, 1, 2, 0, 5, 0, 0, 0, 4, 0, 2, 5, 0, 0, 3, 0, 1, 5, 0, 2, 3, 2, 4, 0, 3, 0, 1, 2, 2, 0, 0, 3, 5, 3, 3, 1, 1, 5, 0, 5, 2, 1, 4, 5, 3, 2, 0, 1, 4, 1, 5, 1, 1, 4, 3, 0, 2, 5, 3, 0, 0, 4, 0, 4, 4, 2, 5, 2, 1, 0, 3, 0, 3, 4, 5, 2, 3, 2, 0, 5, 4, 0, 0, 5, 0, 5, 1, 2, 3, 5, 4, 0, 4, 4, 0, 1, 1, 4, 1, 2, 5, 1, 4, 4, 1, 4, 3, 1, 3, 1, 1, 2, 2, 1, 0, 5, 4, 3, 0, 1, 2, 4, 4, 2, 2, 3, 2, 2, 1, 0, 1, 1, 0, 5, 2, 2, 0, 4, 3, 1, 0, 2, 4, 1, 0, 0, 0, 0, 1, 5, 0, 0, 0, 0, 1, 5, 4, 5, 1, 4, 4, 3, 1, 5, 0, 3, 1, 2, 4, 3, 2, 1, 3, 1, 3, 3, 5, 4, 3, 1, 2, 1, 1, 0, 4, 0, 1, 1, 0, 2, 1, 4, 2, 1, 3, 2, 2, 5, 2, 2, 2, 4, 3, 1, 1, 5, 0, 1, 3, 5, 3, 1, 0, 0, 2, 3, 4, 5, 3, 1, 2, 0, 0, 0, 1, 4, 3, 3, 1, 3, 0, 2, 2, 1, 0, 3, 0, 3, 0, 0, 1, 2, 1, 3, 1, 3, 5, 0, 1, 2, 3, 1, 5, 2, 4, 1, 5, 0, 3, 1, 0, 5, 2, 4, 2, 2, 0, 0, 2, 2, 3, 3, 5, 4, 3, 3, 5, 0, 0, 3, 2, 0, 0, 0, 5, 0, 4, 0, 4, 2, 0, 3, 0, 1, 4, 3, 0, 0, 4, 1, 3, 4, 1, 3, 2]
Fitness:  -604750.0
total_trips completed_trips total_travel_time average_travel_time total_delay average_delay
0 2000 2000 604750.0 302.375 204750.0 102.375
-- Generation 11 --
594150.0 616350.0 669225.0 639075.0 608325.0 610300.0 609825.0 622125.0 600500.0 602075.0 613775.0 609250.0 640150.0
Best individual:  [2, 0, 1, 2, 5, 4, 0, 2, 0, 1, 2, 0, 3, 1, 1, 4, 5, 0, 1, 2, 2, 4, 2, 2, 2, 0, 1, 0, 3, 1, 1, 5, 0, 3, 5, 4, 3, 0, 1, 5, 2, 0, 1, 5, 5, 4, 3, 2, 2, 2, 1, 2, 1, 2, 1, 1, 3, 5, 0, 0, 5, 0, 5, 1, 1, 2, 1, 4, 0, 2, 2, 4, 0, 0, 5, 5, 3, 3, 4, 2, 4, 0, 5, 5, 4, 0, 0, 0, 1, 5, 0, 1, 5, 4, 3, 3, 0, 2, 1, 5, 0, 0, 0, 0, 2, 2, 5, 5, 0, 3, 4, 1, 5, 3, 0, 3, 2, 4, 0, 3, 2, 2, 2, 2, 0, 0, 0, 5, 3, 3, 0, 0, 5, 4, 5, 2, 1, 1, 0, 3, 2, 4, 1, 4, 1, 5, 1, 3, 0, 5, 0, 1, 3, 0, 2, 2, 2, 3, 3, 4, 4, 3, 0, 0, 4, 4, 5, 4, 2, 0, 3, 3, 2, 3, 5, 0, 1, 0, 1, 0, 1, 0, 3, 4, 5, 2, 2, 1, 0, 3, 1, 0, 0, 1, 0, 5, 1, 4, 4, 1, 4, 3, 1, 3, 0, 1, 2, 2, 0, 0, 5, 4, 3, 0, 1, 2, 4, 4, 2, 2, 3, 2, 2, 1, 0, 1, 1, 0, 0, 2, 2, 1, 4, 3, 1, 0, 2, 4, 1, 0, 0, 0, 0, 1, 5, 0, 1, 0, 0, 1, 5, 4, 5, 1, 4, 4, 0, 1, 5, 0, 3, 0, 2, 4, 0, 2, 1, 3, 1, 3, 3, 5, 4, 3, 1, 2, 1, 1, 0, 4, 0, 1, 1, 0, 2, 1, 4, 2, 1, 3, 2, 0, 5, 2, 2, 2, 4, 3, 1, 1, 5, 0, 1, 3, 5, 3, 1, 0, 0, 2, 3, 4, 5, 3, 1, 2, 0, 0, 0, 1, 4, 3, 0, 1, 3, 0, 2, 2, 0, 0, 3, 0, 3, 0, 0, 1, 2, 1, 3, 1, 3, 5, 0, 1, 0, 3, 1, 5, 0, 4, 0, 5, 0, 3, 1, 0, 5, 2, 4, 2, 2, 1, 0, 2, 2, 3, 3, 5, 4, 3, 3, 5, 0, 1, 3, 2, 0, 0, 1, 5, 0, 4, 0, 4, 2, 0, 3, 1, 1, 0, 3, 0, 0, 4, 0, 3, 4, 1, 3, 2]
Fitness:  -603250.0
total_trips completed_trips total_travel_time average_travel_time total_delay average_delay
0 2000 2000 603250.0 301.625 203250.0 101.625
-- Generation 12 --
611950.0 613850.0 612500.0 618475.0 597400.0 629975.0 616650.0 614925.0 615500.0 592975.0 605550.0 611150.0 628075.0 608250.0 622650.0
Best individual:  [2, 1, 0, 2, 0, 4, 4, 2, 0, 1, 2, 0, 3, 1, 1, 4, 5, 3, 1, 2, 0, 0, 2, 0, 1, 0, 2, 0, 3, 1, 1, 5, 0, 3, 5, 4, 3, 0, 1, 5, 2, 0, 1, 5, 5, 0, 3, 2, 2, 2, 1, 2, 1, 2, 1, 1, 3, 5, 0, 0, 5, 0, 5, 1, 1, 2, 1, 4, 0, 2, 2, 4, 0, 0, 5, 5, 3, 3, 4, 2, 4, 0, 5, 5, 4, 0, 0, 0, 1, 5, 0, 1, 5, 4, 3, 3, 0, 2, 1, 5, 0, 0, 0, 0, 2, 2, 5, 5, 0, 3, 4, 1, 5, 3, 0, 3, 2, 4, 0, 3, 0, 1, 2, 2, 0, 0, 3, 5, 3, 3, 1, 1, 5, 0, 5, 2, 1, 4, 5, 3, 2, 0, 1, 4, 1, 5, 1, 1, 4, 3, 0, 2, 5, 3, 0, 0, 4, 0, 4, 4, 2, 5, 2, 1, 0, 3, 0, 3, 4, 5, 2, 3, 2, 0, 5, 4, 0, 0, 5, 0, 5, 1, 2, 3, 5, 4, 0, 4, 4, 0, 1, 1, 4, 1, 2, 5, 1, 4, 4, 1, 4, 3, 1, 3, 1, 1, 2, 2, 1, 0, 5, 4, 3, 0, 1, 2, 4, 4, 2, 2, 3, 2, 2, 1, 0, 1, 1, 0, 5, 2, 2, 2, 3, 0, 2, 4, 4, 2, 5, 0, 1, 1, 1, 4, 1, 3, 5, 0, 0, 3, 5, 5, 4, 5, 5, 2, 0, 3, 1, 3, 0, 0, 2, 0, 5, 1, 2, 5, 4, 5, 1, 0, 2, 3, 1, 2, 1, 1, 5, 4, 0, 1, 1, 0, 2, 1, 4, 2, 0, 3, 2, 2, 5, 2, 2, 2, 4, 3, 1, 1, 5, 2, 1, 3, 0, 3, 1, 0, 0, 2, 3, 4, 0, 3, 1, 2, 0, 0, 0, 0, 4, 3, 3, 5, 2, 3, 3, 5, 0, 0, 3, 3, 4, 3, 5, 1, 0, 5, 4, 1, 2, 3, 5, 2, 0, 1, 2, 0, 4, 3, 2, 1, 4, 3, 0, 4, 0, 5, 3, 5, 5, 1, 0, 4, 3, 3, 4, 0, 0, 3, 5, 0, 0, 0, 0, 2, 0, 0, 5, 5, 1, 4, 1, 4, 0, 0, 3, 1, 1, 4, 0, 0, 0, 0, 0, 3, 4, 1, 3, 2]
Fitness:  -594150.0
total_trips completed_trips total_travel_time average_travel_time total_delay average_delay
0 2000 2000 594150.0 297.075 194150.0 97.075
-- Generation 13 --
649550.0 591750.0 613925.0 608025.0 597900.0 638350.0 619975.0 628675.0 620625.0 600125.0 614300.0 612050.0 599375.0 606475.0 595250.0 602550.0 620650.0 600275.0 621100.0 609300.0 597325.0
Best individual:  [2, 1, 0, 2, 0, 4, 4, 2, 0, 1, 2, 0, 3, 1, 1, 4, 5, 3, 1, 2, 0, 4, 2, 2, 2, 0, 1, 0, 3, 1, 1, 5, 0, 3, 5, 4, 3, 0, 1, 5, 2, 0, 1, 5, 5, 4, 3, 2, 2, 2, 1, 2, 1, 2, 1, 1, 3, 5, 0, 0, 5, 0, 5, 1, 1, 2, 1, 4, 0, 2, 2, 4, 0, 0, 5, 5, 3, 3, 4, 2, 4, 0, 5, 5, 4, 0, 0, 0, 1, 5, 0, 1, 5, 4, 3, 3, 0, 2, 1, 5, 0, 0, 0, 0, 2, 2, 5, 5, 0, 3, 4, 1, 5, 3, 0, 3, 2, 4, 0, 3, 0, 1, 2, 2, 0, 0, 3, 5, 3, 3, 1, 1, 5, 0, 5, 2, 1, 4, 5, 3, 2, 0, 1, 4, 1, 5, 1, 1, 4, 3, 0, 2, 5, 3, 0, 0, 4, 0, 4, 4, 2, 5, 2, 1, 0, 3, 0, 3, 4, 5, 2, 3, 2, 0, 5, 4, 0, 0, 5, 0, 5, 1, 2, 3, 5, 4, 0, 4, 4, 0, 1, 1, 4, 1, 2, 5, 1, 4, 4, 1, 4, 3, 1, 3, 1, 1, 2, 2, 1, 0, 5, 4, 3, 0, 1, 2, 4, 4, 2, 2, 3, 2, 2, 1, 0, 1, 1, 0, 5, 2, 2, 2, 3, 0, 2, 4, 4, 2, 5, 0, 1, 1, 1, 4, 1, 3, 5, 0, 0, 3, 5, 5, 4, 5, 5, 2, 0, 3, 1, 3, 0, 0, 2, 0, 5, 1, 2, 5, 4, 5, 1, 0, 2, 3, 1, 2, 1, 1, 5, 4, 0, 1, 1, 0, 2, 1, 4, 2, 0, 3, 2, 2, 5, 2, 2, 2, 4, 3, 1, 1, 5, 2, 1, 3, 0, 3, 1, 0, 0, 2, 3, 4, 0, 3, 1, 2, 0, 0, 0, 0, 4, 3, 3, 5, 2, 3, 3, 5, 0, 0, 3, 3, 4, 3, 5, 1, 0, 5, 4, 1, 2, 3, 5, 2, 0, 1, 2, 0, 4, 3, 2, 1, 4, 3, 0, 4, 0, 5, 3, 5, 5, 1, 0, 4, 3, 3, 4, 0, 0, 3, 5, 0, 0, 0, 0, 2, 0, 0, 5, 5, 1, 4, 1, 4, 0, 0, 3, 1, 1, 4, 0, 0, 0, 0, 0, 3, 4, 1, 3, 2]
Fitness:  -592975.0
total_trips completed_trips total_travel_time average_travel_time total_delay average_delay
0 2000 2000 592975.0 296.4875 192975.0 96.4875
-- Generation 14 --
620400.0 619025.0 610800.0 591850.0 593350.0 605325.0 625675.0 664850.0 616450.0 605625.0 593125.0 596450.0 600200.0 594050.0 608025.0 601125.0 617700.0 633675.0 631125.0 607700.0
Best individual:  [2, 0, 1, 2, 5, 4, 0, 2, 0, 1, 2, 0, 3, 1, 1, 4, 5, 0, 1, 2, 2, 4, 2, 2, 2, 0, 1, 0, 3, 1, 1, 5, 0, 3, 5, 4, 3, 0, 1, 5, 2, 0, 1, 5, 5, 4, 3, 2, 2, 2, 1, 2, 1, 2, 1, 1, 3, 5, 0, 0, 5, 0, 5, 1, 1, 2, 1, 4, 0, 2, 2, 4, 0, 0, 5, 5, 3, 3, 4, 2, 4, 0, 5, 5, 4, 0, 0, 0, 1, 5, 0, 1, 5, 4, 3, 3, 0, 2, 1, 5, 0, 0, 0, 0, 2, 2, 5, 5, 0, 3, 4, 1, 5, 3, 0, 3, 2, 4, 0, 3, 0, 1, 2, 2, 0, 0, 3, 5, 3, 3, 1, 1, 5, 0, 5, 2, 1, 4, 5, 3, 2, 0, 1, 4, 1, 5, 1, 1, 4, 3, 0, 2, 5, 3, 0, 0, 4, 0, 4, 4, 2, 5, 2, 1, 0, 3, 0, 3, 4, 5, 2, 3, 2, 0, 5, 4, 0, 0, 5, 0, 5, 1, 2, 3, 5, 4, 0, 4, 4, 0, 1, 1, 4, 1, 2, 5, 1, 4, 4, 1, 4, 3, 1, 3, 1, 1, 2, 2, 1, 0, 5, 4, 3, 0, 1, 2, 4, 4, 2, 2, 3, 2, 2, 1, 0, 1, 1, 0, 5, 2, 2, 2, 3, 0, 2, 4, 4, 2, 5, 0, 1, 1, 1, 4, 1, 3, 5, 0, 0, 3, 5, 5, 4, 5, 5, 2, 0, 3, 1, 3, 0, 0, 2, 0, 5, 1, 2, 5, 4, 5, 1, 0, 2, 3, 1, 2, 1, 1, 5, 4, 0, 1, 1, 0, 2, 1, 4, 2, 0, 3, 2, 2, 5, 2, 2, 2, 4, 3, 1, 1, 5, 2, 1, 3, 0, 3, 1, 0, 0, 2, 3, 4, 0, 3, 1, 2, 0, 0, 0, 0, 4, 3, 3, 5, 2, 3, 3, 5, 0, 0, 3, 3, 3, 0, 0, 1, 2, 1, 3, 1, 3, 5, 0, 1, 0, 3, 1, 5, 0, 4, 0, 5, 0, 3, 1, 0, 5, 2, 4, 2, 2, 1, 0, 2, 2, 3, 3, 5, 4, 3, 3, 5, 0, 1, 3, 2, 0, 0, 1, 5, 0, 4, 0, 4, 2, 0, 3, 1, 1, 0, 3, 0, 0, 4, 0, 3, 4, 1, 3, 2]
Fitness:  -591750.0
total_trips completed_trips total_travel_time average_travel_time total_delay average_delay
0 2000 2000 591750.0 295.875 191750.0 95.875
-- Generation 15 --
614600.0 595675.0 629725.0 623200.0 609600.0 623925.0 613150.0 618975.0 600800.0 611850.0 588925.0 595350.0 631100.0 628225.0 601025.0 595325.0 611600.0 598325.0 638275.0 596075.0
Best individual:  [5, 4, 4, 0, 2, 0, 1, 2, 0, 1, 2, 0, 3, 0, 1, 4, 5, 0, 1, 2, 2, 4, 2, 2, 2, 0, 1, 0, 3, 1, 1, 5, 0, 3, 5, 4, 3, 0, 0, 3, 0, 1, 2, 5, 0, 1, 2, 2, 2, 2, 1, 2, 1, 2, 1, 1, 3, 5, 0, 1, 5, 5, 5, 0, 1, 2, 1, 4, 3, 2, 2, 4, 0, 0, 5, 5, 3, 3, 4, 2, 4, 1, 0, 5, 4, 4, 0, 0, 1, 4, 2, 0, 4, 1, 2, 0, 1, 2, 1, 5, 0, 0, 0, 4, 2, 2, 5, 0, 0, 3, 4, 1, 0, 3, 2, 3, 2, 4, 0, 3, 0, 0, 2, 2, 0, 0, 3, 5, 3, 3, 0, 1, 5, 4, 5, 2, 1, 4, 5, 3, 2, 0, 1, 3, 3, 5, 0, 3, 0, 5, 0, 1, 3, 0, 2, 2, 2, 3, 3, 4, 4, 3, 0, 0, 4, 4, 5, 4, 2, 0, 3, 3, 2, 3, 5, 0, 1, 0, 1, 0, 1, 0, 3, 4, 5, 2, 2, 1, 0, 3, 1, 0, 0, 1, 0, 5, 1, 4, 4, 1, 4, 3, 1, 3, 0, 1, 2, 2, 0, 0, 5, 4, 3, 0, 1, 2, 4, 4, 2, 2, 3, 2, 2, 1, 0, 1, 1, 0, 0, 2, 2, 1, 4, 3, 1, 0, 2, 4, 1, 0, 0, 0, 0, 1, 5, 0, 1, 0, 0, 1, 5, 4, 5, 1, 4, 4, 0, 1, 5, 0, 3, 0, 2, 4, 0, 2, 1, 3, 1, 3, 0, 5, 4, 3, 1, 2, 1, 1, 1, 4, 0, 1, 1, 0, 2, 1, 0, 2, 1, 3, 2, 1, 5, 2, 2, 2, 4, 3, 1, 1, 5, 0, 1, 3, 5, 3, 1, 0, 0, 2, 3, 4, 5, 3, 1, 2, 0, 0, 0, 1, 4, 3, 3, 1, 3, 0, 2, 2, 0, 0, 3, 0, 3, 1, 0, 1, 2, 1, 3, 0, 3, 5, 0, 0, 0, 3, 1, 5, 2, 4, 0, 5, 0, 3, 1, 0, 5, 2, 4, 2, 0, 1, 1, 2, 2, 3, 3, 5, 4, 3, 3, 5, 0, 0, 5, 1, 0, 4, 1, 3, 0, 0, 4, 0, 3, 3, 4, 5, 3, 1, 4, 0, 3, 5, 5, 3, 5, 1, 4, 5]
Fitness:  -591850.0
total_trips completed_trips total_travel_time average_travel_time total_delay average_delay
0 2000 2000 591850.0 295.925 191850.0 95.925
-- Generation 16 --
621575.0 602925.0 593425.0 584050.0 607050.0 590350.0 593300.0 649975.0 588200.0 591725.0 599225.0 632325.0 627000.0 600075.0 648400.0 592750.0 649900.0 596725.0 593500.0
Best individual:  [2, 0, 1, 2, 5, 4, 0, 2, 0, 1, 2, 0, 3, 1, 1, 4, 5, 0, 1, 2, 2, 4, 2, 2, 2, 0, 1, 0, 3, 1, 1, 5, 0, 3, 5, 4, 3, 0, 1, 5, 2, 0, 1, 5, 5, 4, 3, 2, 2, 2, 1, 2, 1, 2, 1, 1, 3, 5, 0, 0, 5, 0, 5, 1, 1, 2, 1, 4, 0, 2, 2, 4, 0, 0, 5, 5, 3, 3, 4, 2, 4, 0, 5, 5, 4, 0, 0, 0, 1, 5, 0, 1, 5, 4, 3, 3, 0, 2, 1, 5, 0, 0, 0, 0, 2, 2, 5, 5, 0, 3, 4, 1, 5, 3, 0, 3, 2, 4, 0, 3, 0, 1, 2, 2, 0, 0, 3, 5, 3, 3, 1, 1, 5, 0, 5, 2, 1, 4, 5, 3, 2, 0, 1, 4, 1, 5, 1, 1, 4, 3, 0, 2, 5, 3, 0, 0, 4, 0, 4, 4, 2, 5, 2, 1, 0, 3, 0, 3, 4, 5, 2, 3, 2, 0, 5, 4, 0, 0, 5, 0, 5, 1, 2, 3, 5, 4, 0, 4, 4, 0, 1, 1, 4, 1, 2, 5, 1, 4, 4, 1, 4, 3, 1, 3, 1, 1, 2, 2, 1, 0, 5, 4, 3, 0, 1, 2, 4, 4, 2, 2, 3, 2, 2, 1, 0, 1, 1, 0, 5, 2, 2, 2, 3, 0, 2, 4, 4, 2, 5, 0, 1, 1, 1, 4, 1, 3, 5, 0, 0, 3, 5, 5, 4, 5, 5, 2, 0, 3, 1, 3, 0, 0, 2, 0, 5, 1, 2, 5, 4, 5, 1, 0, 2, 3, 1, 2, 1, 1, 5, 4, 0, 1, 1, 0, 2, 1, 4, 2, 0, 3, 2, 2, 5, 2, 2, 2, 4, 3, 1, 1, 5, 2, 1, 3, 0, 3, 1, 0, 0, 2, 3, 4, 0, 3, 1, 2, 0, 0, 0, 0, 4, 3, 3, 5, 2, 3, 3, 5, 0, 0, 3, 3, 4, 3, 5, 1, 0, 5, 4, 1, 2, 3, 5, 2, 0, 1, 2, 0, 4, 3, 2, 1, 4, 3, 0, 4, 0, 5, 3, 5, 5, 1, 0, 4, 3, 3, 3, 5, 4, 3, 3, 5, 0, 1, 3, 2, 0, 0, 1, 5, 0, 4, 0, 4, 2, 0, 3, 1, 1, 0, 3, 0, 0, 4, 0, 3, 4, 1, 3, 2]
Fitness:  -588925.0
total_trips completed_trips total_travel_time average_travel_time total_delay average_delay
0 2000 2000 588925.0 294.4625 188925.0 94.4625
-- Generation 17 --
614850.0 619350.0 624975.0 583300.0 593125.0 592800.0 591825.0 591100.0 602650.0 587400.0 597600.0 596950.0 599425.0 592050.0 591750.0 581700.0 605750.0 632650.0
Best individual:  [2, 1, 0, 2, 0, 4, 4, 2, 0, 1, 2, 0, 3, 1, 1, 4, 5, 3, 1, 2, 0, 4, 2, 2, 2, 0, 1, 0, 3, 1, 1, 5, 0, 3, 5, 4, 3, 0, 1, 3, 0, 1, 2, 5, 0, 1, 2, 2, 2, 2, 1, 2, 1, 2, 1, 1, 3, 5, 0, 1, 5, 5, 5, 0, 1, 2, 1, 4, 3, 2, 2, 4, 0, 0, 5, 5, 3, 3, 4, 2, 4, 1, 0, 5, 4, 4, 0, 0, 1, 4, 2, 0, 4, 1, 2, 0, 1, 2, 1, 5, 0, 0, 0, 4, 2, 2, 5, 0, 0, 3, 4, 1, 0, 3, 2, 3, 2, 4, 0, 3, 0, 0, 2, 2, 0, 0, 3, 5, 3, 3, 0, 1, 5, 4, 5, 2, 1, 4, 5, 3, 2, 0, 1, 3, 3, 5, 0, 3, 0, 5, 0, 1, 3, 0, 2, 2, 2, 3, 3, 4, 4, 3, 0, 0, 4, 4, 5, 4, 2, 0, 3, 3, 2, 3, 5, 0, 1, 0, 1, 0, 1, 0, 3, 4, 5, 2, 2, 1, 0, 3, 1, 0, 0, 1, 0, 5, 1, 4, 4, 1, 4, 3, 1, 3, 0, 1, 2, 2, 0, 0, 5, 4, 3, 0, 1, 2, 4, 4, 2, 2, 3, 2, 2, 1, 0, 1, 1, 0, 0, 2, 2, 1, 4, 3, 1, 0, 2, 4, 1, 0, 0, 0, 0, 1, 5, 0, 1, 0, 0, 3, 5, 4, 4, 5, 5, 2, 0, 3, 1, 3, 0, 0, 2, 0, 5, 1, 2, 5, 4, 5, 1, 0, 2, 3, 1, 2, 1, 1, 5, 4, 0, 1, 1, 0, 2, 1, 4, 2, 0, 3, 2, 2, 5, 2, 2, 2, 4, 3, 1, 1, 5, 2, 1, 3, 0, 3, 1, 0, 0, 2, 3, 4, 0, 3, 1, 2, 0, 0, 0, 0, 4, 3, 3, 5, 2, 3, 3, 5, 0, 0, 3, 3, 4, 3, 5, 1, 0, 5, 4, 1, 2, 3, 5, 2, 0, 1, 2, 0, 4, 3, 2, 1, 4, 3, 0, 4, 0, 5, 3, 5, 5, 1, 0, 4, 3, 3, 4, 0, 0, 3, 5, 0, 0, 0, 0, 2, 0, 0, 5, 5, 1, 4, 1, 4, 0, 0, 3, 1, 1, 4, 0, 0, 0, 0, 0, 3, 4, 1, 3, 2]
Fitness:  -584050.0
total_trips completed_trips total_travel_time average_travel_time total_delay average_delay
0 2000 2000 584050.0 292.025 184050.0 92.025
-- Generation 18 --
593475.0 597975.0 597000.0 596575.0 589075.0 590900.0 620850.0 620850.0 592700.0 586500.0 610600.0 590200.0 592725.0 598075.0 591325.0
Best individual:  [2, 1, 0, 2, 0, 4, 4, 2, 0, 1, 2, 0, 3, 1, 1, 4, 5, 3, 1, 2, 0, 4, 2, 2, 2, 0, 1, 0, 3, 1, 1, 5, 0, 3, 3, 4, 0, 5, 1, 3, 0, 1, 2, 5, 0, 1, 0, 2, 2, 2, 0, 2, 1, 2, 1, 1, 0, 5, 0, 1, 0, 4, 4, 1, 2, 5, 0, 0, 4, 1, 4, 4, 0, 0, 5, 5, 3, 3, 4, 2, 4, 1, 0, 5, 4, 4, 0, 0, 1, 4, 2, 0, 4, 1, 2, 0, 1, 2, 1, 5, 0, 0, 0, 4, 2, 2, 5, 0, 0, 3, 4, 1, 0, 3, 2, 3, 2, 4, 0, 3, 0, 0, 2, 2, 0, 0, 3, 5, 3, 3, 0, 1, 5, 4, 5, 2, 1, 4, 5, 3, 2, 0, 1, 3, 3, 5, 0, 3, 0, 5, 0, 1, 3, 0, 2, 2, 2, 3, 3, 4, 4, 3, 0, 0, 4, 4, 5, 4, 2, 0, 3, 3, 2, 3, 5, 0, 1, 0, 5, 0, 5, 1, 2, 3, 5, 4, 0, 4, 4, 0, 1, 1, 4, 0, 2, 5, 1, 4, 4, 1, 4, 3, 1, 3, 1, 1, 2, 2, 1, 0, 5, 4, 3, 0, 1, 2, 4, 4, 2, 2, 3, 2, 2, 1, 0, 1, 1, 0, 5, 2, 2, 2, 3, 0, 2, 4, 4, 2, 5, 0, 1, 1, 1, 4, 1, 3, 5, 0, 0, 3, 5, 5, 4, 5, 5, 2, 0, 3, 1, 3, 0, 0, 2, 0, 5, 1, 2, 5, 4, 5, 1, 0, 2, 3, 1, 2, 1, 1, 5, 4, 0, 1, 1, 0, 2, 1, 4, 2, 0, 3, 2, 2, 5, 2, 2, 2, 4, 3, 1, 1, 5, 2, 1, 3, 0, 3, 1, 0, 0, 2, 3, 4, 0, 3, 1, 2, 0, 0, 0, 0, 4, 3, 3, 5, 2, 3, 3, 5, 0, 0, 3, 3, 4, 3, 5, 1, 0, 5, 4, 1, 2, 3, 5, 2, 0, 1, 2, 0, 4, 3, 2, 1, 4, 3, 0, 4, 0, 5, 3, 5, 5, 1, 0, 4, 3, 3, 4, 0, 0, 3, 5, 0, 0, 0, 0, 2, 0, 0, 5, 5, 1, 4, 1, 4, 0, 0, 3, 1, 1, 4, 0, 0, 0, 0, 0, 3, 4, 1, 3, 2]
Fitness:  -581700.0
total_trips completed_trips total_travel_time average_travel_time total_delay average_delay
0 2000 2000 581700.0 290.85 181700.0 90.85
-- Generation 19 --
591200.0 587100.0 608850.0 586650.0 588525.0 611850.0 620600.0 584500.0 599550.0 595250.0 582550.0 622300.0 589150.0 594725.0 594225.0 591475.0 587125.0 620100.0 583425.0 606200.0 591900.0 591225.0 598775.0
Best individual:  [2, 1, 0, 2, 0, 4, 4, 2, 0, 1, 2, 0, 3, 1, 1, 4, 5, 3, 1, 2, 0, 4, 2, 2, 2, 0, 1, 0, 3, 1, 1, 5, 0, 3, 3, 4, 0, 5, 1, 3, 0, 1, 2, 5, 0, 1, 0, 2, 2, 2, 0, 2, 1, 2, 1, 1, 0, 5, 0, 1, 0, 4, 4, 1, 2, 5, 0, 0, 4, 1, 4, 4, 0, 0, 5, 5, 3, 3, 4, 2, 4, 1, 0, 5, 4, 4, 0, 0, 1, 4, 2, 0, 4, 1, 2, 0, 1, 2, 1, 5, 0, 0, 0, 4, 2, 2, 5, 0, 0, 3, 4, 1, 0, 3, 2, 3, 2, 4, 0, 3, 0, 0, 2, 2, 0, 0, 3, 5, 3, 3, 0, 1, 5, 4, 5, 2, 1, 4, 5, 3, 2, 0, 1, 3, 3, 5, 0, 3, 0, 5, 0, 1, 3, 0, 2, 2, 2, 3, 3, 4, 4, 3, 0, 0, 4, 4, 5, 4, 2, 0, 3, 3, 2, 3, 5, 0, 1, 0, 5, 0, 5, 1, 2, 3, 5, 4, 0, 4, 4, 0, 1, 1, 4, 0, 2, 5, 1, 4, 4, 1, 4, 3, 1, 3, 1, 1, 2, 2, 1, 0, 5, 4, 3, 0, 1, 2, 4, 4, 2, 2, 3, 2, 2, 1, 0, 1, 1, 0, 5, 2, 2, 2, 3, 0, 2, 4, 4, 2, 5, 0, 1, 1, 1, 4, 1, 3, 5, 0, 0, 3, 5, 5, 4, 5, 5, 2, 0, 3, 1, 3, 0, 0, 2, 0, 5, 1, 2, 5, 4, 5, 1, 0, 2, 3, 1, 2, 1, 1, 5, 4, 0, 1, 1, 0, 2, 1, 4, 2, 0, 3, 2, 2, 5, 2, 2, 2, 4, 3, 1, 1, 5, 2, 1, 3, 0, 3, 1, 0, 0, 2, 3, 4, 0, 3, 1, 2, 0, 0, 0, 0, 4, 3, 3, 5, 2, 3, 3, 5, 0, 0, 3, 3, 4, 3, 5, 1, 0, 5, 4, 1, 2, 3, 5, 2, 0, 1, 2, 0, 4, 3, 2, 1, 4, 3, 0, 4, 0, 5, 3, 5, 5, 1, 0, 4, 3, 3, 4, 0, 0, 3, 5, 0, 0, 0, 0, 2, 0, 0, 5, 5, 1, 4, 1, 4, 0, 0, 3, 1, 1, 4, 0, 0, 0, 0, 0, 3, 4, 1, 3, 2]
Fitness:  -581700.0
total_trips completed_trips total_travel_time average_travel_time total_delay average_delay
0 2000 2000 581700.0 290.85 181700.0 90.85
-- Generation 20 --
592850.0 592375.0 584575.0 588650.0 615100.0 590175.0 580350.0 622875.0 588075.0
Best individual:  [2, 1, 0, 2, 0, 4, 4, 2, 0, 1, 2, 0, 3, 1, 1, 4, 5, 3, 1, 2, 0, 4, 2, 2, 2, 0, 1, 0, 3, 1, 1, 5, 0, 3, 3, 4, 0, 5, 1, 3, 0, 1, 2, 5, 0, 1, 0, 2, 2, 2, 0, 2, 1, 2, 1, 1, 0, 5, 0, 1, 0, 4, 4, 1, 2, 5, 0, 0, 4, 1, 4, 4, 0, 0, 5, 5, 3, 3, 4, 2, 4, 1, 0, 5, 4, 4, 0, 0, 1, 4, 2, 0, 4, 1, 2, 0, 1, 2, 1, 5, 0, 0, 0, 4, 2, 2, 5, 0, 0, 3, 4, 1, 0, 3, 2, 3, 2, 4, 0, 3, 0, 0, 2, 2, 0, 0, 3, 5, 3, 3, 0, 1, 5, 4, 5, 2, 1, 4, 5, 3, 2, 0, 1, 3, 3, 5, 0, 3, 0, 5, 0, 1, 3, 0, 2, 2, 2, 3, 3, 4, 4, 3, 0, 0, 4, 4, 5, 4, 2, 0, 3, 3, 2, 3, 5, 0, 1, 0, 5, 0, 5, 1, 2, 3, 5, 4, 0, 4, 4, 0, 1, 1, 4, 0, 2, 5, 1, 4, 4, 1, 4, 3, 1, 3, 1, 1, 2, 2, 1, 0, 5, 4, 3, 0, 1, 2, 4, 4, 2, 2, 3, 2, 2, 1, 0, 1, 1, 0, 5, 2, 2, 2, 3, 0, 2, 4, 4, 2, 5, 0, 1, 1, 1, 4, 1, 3, 5, 0, 0, 3, 5, 5, 4, 5, 5, 2, 0, 3, 1, 3, 0, 0, 2, 0, 5, 1, 2, 5, 4, 5, 1, 0, 2, 3, 1, 2, 1, 1, 5, 4, 0, 1, 1, 0, 2, 1, 4, 2, 0, 3, 2, 2, 5, 2, 2, 2, 4, 3, 1, 1, 5, 2, 1, 3, 0, 3, 1, 0, 0, 2, 3, 4, 0, 3, 1, 2, 0, 0, 0, 0, 4, 3, 3, 5, 2, 3, 3, 5, 0, 0, 3, 3, 4, 3, 5, 1, 0, 5, 4, 1, 2, 3, 5, 2, 0, 1, 2, 0, 4, 3, 2, 1, 4, 3, 0, 4, 0, 5, 3, 5, 5, 1, 0, 4, 3, 3, 4, 0, 0, 3, 5, 0, 0, 0, 0, 2, 0, 0, 5, 5, 1, 4, 1, 4, 0, 0, 3, 1, 1, 4, 0, 0, 0, 0, 0, 3, 4, 1, 3, 2]
Fitness:  -581700.0
total_trips completed_trips total_travel_time average_travel_time total_delay average_delay
0 2000 2000 581700.0 290.85 181700.0 90.85
-- Generation 21 --
579300.0 580975.0 595350.0 626325.0 594050.0 584250.0 636850.0 582625.0 591525.0 639100.0 579850.0 588000.0 584500.0 589425.0 583350.0 591950.0 586950.0 591625.0 599875.0 582775.0 622325.0
Best individual:  [2, 1, 0, 2, 0, 4, 4, 2, 0, 1, 2, 0, 3, 1, 1, 4, 5, 3, 1, 2, 0, 4, 2, 2, 2, 0, 1, 0, 3, 1, 1, 5, 0, 3, 3, 4, 0, 5, 1, 3, 0, 1, 2, 5, 0, 1, 0, 2, 2, 2, 0, 2, 1, 2, 1, 1, 0, 5, 0, 1, 0, 4, 4, 1, 2, 5, 0, 0, 4, 1, 4, 4, 0, 0, 5, 5, 3, 3, 4, 2, 4, 1, 0, 5, 4, 4, 0, 0, 1, 4, 2, 0, 4, 1, 2, 0, 1, 2, 1, 5, 0, 0, 0, 4, 2, 2, 5, 0, 0, 3, 4, 1, 0, 3, 2, 3, 2, 4, 0, 3, 0, 0, 2, 2, 0, 0, 3, 5, 3, 3, 0, 1, 5, 4, 5, 2, 1, 4, 5, 3, 2, 0, 1, 3, 3, 5, 0, 3, 0, 5, 0, 1, 3, 0, 2, 2, 2, 3, 3, 4, 4, 3, 0, 0, 4, 4, 5, 4, 2, 0, 3, 3, 2, 3, 5, 0, 1, 0, 5, 0, 5, 1, 2, 3, 5, 4, 0, 4, 4, 0, 1, 1, 4, 0, 2, 5, 1, 4, 4, 1, 4, 3, 1, 3, 1, 1, 2, 2, 1, 0, 5, 4, 3, 0, 1, 2, 4, 4, 2, 2, 3, 2, 2, 1, 0, 1, 1, 0, 5, 2, 2, 2, 3, 0, 2, 4, 4, 2, 5, 0, 1, 1, 1, 4, 1, 3, 5, 0, 0, 3, 5, 5, 4, 5, 5, 2, 0, 3, 1, 3, 0, 0, 2, 0, 5, 1, 2, 5, 4, 5, 1, 0, 2, 3, 1, 2, 1, 1, 5, 4, 0, 1, 1, 0, 2, 1, 4, 2, 0, 3, 2, 2, 5, 2, 2, 2, 4, 3, 1, 1, 5, 2, 1, 3, 0, 3, 1, 0, 0, 2, 3, 4, 0, 3, 1, 2, 0, 0, 0, 0, 4, 3, 3, 5, 2, 3, 3, 5, 0, 0, 3, 3, 4, 3, 5, 1, 0, 5, 4, 1, 2, 3, 5, 2, 0, 1, 2, 0, 4, 3, 2, 1, 4, 3, 0, 4, 0, 5, 3, 5, 5, 1, 0, 4, 3, 3, 4, 0, 0, 3, 5, 0, 0, 0, 0, 2, 0, 0, 5, 5, 1, 4, 1, 4, 0, 0, 3, 1, 1, 4, 0, 0, 0, 0, 0, 3, 4, 1, 3, 2]
Fitness:  -580350.0
total_trips completed_trips total_travel_time average_travel_time total_delay average_delay
0 2000 2000 580350.0 290.175 180350.0 90.175
-- Generation 22 --
593250.0 630875.0 590975.0 593225.0 586450.0 590925.0 592900.0 580275.0 589275.0 615925.0 594650.0 598450.0 618900.0 591900.0 580650.0 583850.0 592500.0 589150.0 580200.0 590400.0 591775.0 581675.0 594275.0
Best individual:  [2, 0, 1, 2, 5, 4, 0, 2, 0, 1, 2, 0, 3, 1, 1, 4, 5, 0, 1, 2, 2, 4, 2, 2, 2, 0, 1, 0, 3, 1, 1, 5, 0, 3, 5, 4, 3, 0, 1, 5, 2, 0, 1, 5, 5, 4, 3, 2, 2, 2, 1, 2, 1, 2, 1, 1, 3, 5, 0, 0, 5, 0, 5, 1, 1, 2, 1, 4, 0, 2, 2, 4, 0, 0, 5, 5, 3, 3, 4, 2, 4, 0, 5, 5, 4, 0, 0, 0, 1, 5, 0, 1, 5, 4, 3, 3, 0, 2, 1, 5, 0, 0, 0, 0, 2, 2, 5, 5, 0, 3, 4, 1, 5, 3, 0, 3, 2, 4, 0, 3, 0, 1, 2, 2, 0, 0, 3, 5, 3, 3, 0, 1, 5, 4, 5, 2, 1, 4, 5, 3, 2, 0, 1, 3, 3, 5, 0, 3, 0, 5, 0, 1, 3, 0, 2, 2, 2, 3, 3, 4, 4, 3, 0, 0, 4, 4, 5, 4, 2, 0, 3, 3, 2, 3, 5, 0, 1, 0, 1, 0, 1, 0, 3, 4, 5, 2, 2, 1, 0, 3, 1, 0, 0, 1, 0, 5, 1, 4, 4, 1, 4, 3, 1, 3, 0, 1, 2, 2, 0, 0, 5, 4, 3, 0, 1, 2, 4, 4, 2, 2, 3, 2, 2, 1, 0, 1, 1, 0, 5, 2, 2, 2, 3, 0, 2, 4, 4, 2, 5, 0, 1, 1, 1, 4, 1, 3, 5, 0, 0, 3, 5, 5, 4, 5, 5, 2, 0, 3, 1, 3, 0, 0, 2, 0, 5, 1, 2, 5, 4, 5, 1, 0, 2, 3, 1, 2, 1, 1, 5, 4, 0, 1, 1, 0, 2, 1, 4, 2, 0, 3, 2, 2, 5, 2, 2, 2, 4, 3, 1, 1, 5, 2, 1, 3, 0, 3, 1, 0, 0, 2, 3, 4, 0, 3, 1, 2, 0, 0, 0, 0, 4, 3, 3, 5, 2, 3, 3, 5, 0, 0, 3, 3, 4, 3, 5, 1, 0, 5, 4, 1, 2, 3, 5, 2, 0, 1, 2, 0, 4, 3, 2, 1, 4, 3, 0, 4, 0, 5, 3, 5, 5, 1, 0, 4, 3, 3, 3, 5, 4, 3, 3, 5, 0, 1, 3, 2, 0, 0, 1, 5, 0, 4, 0, 4, 2, 0, 3, 1, 1, 0, 3, 0, 0, 4, 0, 3, 4, 1, 3, 2]
Fitness:  -579300.0
total_trips completed_trips total_travel_time average_travel_time total_delay average_delay
0 2000 2000 579300.0 289.65 179300.0 89.65
-- Generation 23 --
588700.0 586000.0 586250.0 629475.0 591225.0 598100.0 610825.0 605075.0 582300.0 606125.0 585650.0 617350.0 581300.0 591150.0 589325.0 583025.0 591925.0 593500.0
Best individual:  [2, 1, 0, 2, 0, 4, 4, 2, 0, 1, 2, 0, 3, 1, 1, 4, 5, 3, 1, 2, 0, 4, 2, 2, 2, 0, 1, 0, 3, 1, 1, 5, 0, 3, 3, 4, 0, 5, 1, 3, 0, 1, 2, 5, 0, 1, 0, 2, 2, 2, 0, 2, 1, 2, 1, 1, 0, 5, 0, 1, 0, 4, 4, 1, 2, 5, 0, 0, 4, 1, 4, 4, 0, 0, 5, 5, 3, 3, 4, 2, 4, 1, 0, 5, 4, 4, 0, 0, 1, 4, 2, 0, 4, 1, 2, 0, 1, 2, 1, 5, 0, 0, 0, 4, 2, 2, 5, 0, 0, 3, 4, 1, 0, 3, 2, 3, 2, 4, 0, 3, 0, 0, 2, 2, 0, 0, 3, 5, 3, 3, 0, 1, 5, 4, 5, 2, 1, 4, 5, 3, 2, 0, 1, 3, 3, 5, 0, 3, 0, 5, 0, 1, 3, 0, 2, 2, 2, 3, 3, 4, 4, 3, 0, 0, 4, 4, 5, 4, 2, 0, 3, 3, 2, 3, 5, 0, 1, 0, 5, 0, 5, 1, 2, 3, 5, 4, 0, 4, 4, 0, 1, 1, 4, 0, 2, 5, 1, 4, 4, 1, 4, 3, 1, 3, 1, 1, 2, 2, 1, 0, 5, 4, 3, 0, 1, 2, 4, 4, 2, 2, 3, 2, 2, 1, 0, 1, 1, 0, 5, 2, 2, 2, 3, 0, 2, 4, 4, 2, 5, 0, 1, 1, 1, 4, 1, 3, 5, 0, 0, 3, 5, 5, 4, 5, 5, 2, 0, 3, 1, 3, 0, 0, 2, 0, 5, 1, 2, 5, 4, 5, 1, 0, 2, 3, 1, 2, 1, 1, 5, 4, 0, 1, 1, 0, 2, 1, 4, 2, 0, 3, 2, 2, 5, 2, 2, 2, 4, 3, 1, 1, 5, 2, 1, 3, 0, 3, 1, 0, 0, 2, 3, 4, 0, 3, 1, 2, 0, 0, 0, 0, 4, 3, 3, 5, 2, 3, 3, 5, 0, 0, 3, 3, 4, 3, 5, 1, 0, 5, 4, 1, 2, 3, 5, 2, 0, 1, 2, 0, 4, 3, 2, 1, 4, 3, 0, 4, 0, 5, 3, 5, 5, 1, 0, 4, 3, 3, 4, 0, 0, 3, 5, 0, 0, 0, 0, 2, 0, 0, 5, 5, 1, 4, 1, 4, 0, 0, 3, 1, 1, 4, 0, 0, 0, 0, 0, 3, 4, 1, 3, 2]
Fitness:  -580200.0
total_trips completed_trips total_travel_time average_travel_time total_delay average_delay
0 2000 2000 580200.0 290.1 180200.0 90.1
-- Generation 24 --
609800.0 585825.0 594250.0 589275.0 591700.0 585850.0 618050.0 591575.0 586200.0 585900.0 617025.0 611250.0 587175.0 604425.0 588200.0 617300.0 605350.0 589925.0
Best individual:  [2, 1, 0, 2, 0, 4, 4, 2, 0, 1, 2, 0, 3, 1, 1, 4, 5, 3, 1, 2, 0, 4, 2, 2, 2, 0, 1, 0, 3, 1, 1, 5, 0, 3, 3, 4, 0, 5, 1, 3, 0, 1, 2, 5, 0, 1, 0, 2, 2, 2, 0, 2, 1, 2, 1, 1, 0, 5, 0, 1, 0, 4, 4, 1, 2, 5, 0, 0, 4, 1, 4, 4, 0, 0, 5, 5, 3, 3, 4, 2, 4, 1, 0, 5, 4, 4, 0, 0, 1, 4, 2, 0, 4, 1, 2, 0, 1, 2, 1, 5, 0, 0, 0, 4, 2, 2, 5, 0, 0, 3, 4, 1, 0, 3, 2, 3, 2, 4, 0, 3, 0, 0, 2, 2, 0, 0, 3, 5, 3, 3, 0, 1, 5, 4, 5, 2, 1, 4, 5, 3, 2, 0, 1, 3, 3, 5, 0, 3, 0, 5, 0, 1, 3, 0, 2, 2, 2, 3, 3, 4, 4, 3, 0, 0, 4, 4, 5, 4, 2, 0, 3, 3, 2, 3, 5, 0, 1, 0, 5, 0, 5, 1, 2, 3, 5, 4, 0, 4, 4, 0, 1, 1, 4, 0, 2, 5, 1, 4, 4, 1, 4, 3, 1, 3, 1, 1, 2, 2, 1, 0, 5, 4, 3, 0, 1, 2, 4, 4, 2, 2, 3, 2, 2, 1, 0, 1, 1, 0, 5, 2, 2, 2, 3, 0, 2, 4, 4, 2, 5, 0, 1, 1, 1, 4, 1, 3, 5, 0, 0, 3, 5, 5, 4, 5, 5, 2, 0, 3, 1, 3, 0, 0, 2, 0, 5, 1, 2, 5, 4, 5, 1, 0, 2, 3, 1, 2, 1, 1, 5, 4, 0, 1, 1, 0, 2, 1, 4, 2, 0, 3, 2, 2, 5, 2, 2, 2, 4, 3, 1, 1, 5, 2, 1, 3, 0, 3, 1, 0, 0, 2, 3, 4, 0, 3, 1, 2, 0, 0, 0, 0, 4, 3, 3, 5, 2, 3, 3, 5, 0, 0, 3, 3, 4, 3, 5, 1, 0, 5, 4, 1, 2, 3, 5, 2, 0, 1, 2, 0, 4, 3, 2, 1, 4, 3, 0, 4, 0, 5, 3, 5, 5, 1, 0, 4, 3, 3, 4, 0, 0, 3, 5, 0, 0, 0, 0, 2, 0, 0, 5, 5, 1, 4, 1, 4, 0, 0, 3, 1, 1, 4, 0, 0, 0, 0, 0, 3, 4, 1, 3, 2]
Fitness:  -580200.0
total_trips completed_trips total_travel_time average_travel_time total_delay average_delay
0 2000 2000 580200.0 290.1 180200.0 90.1
-- Generation 25 --
589650.0 589825.0 574275.0 585525.0 616275.0 614650.0 624425.0 588025.0 604675.0 605350.0 605850.0 581900.0 578475.0 584350.0 585725.0 585600.0 612425.0
Best individual:  [2, 1, 0, 2, 0, 4, 4, 2, 0, 1, 2, 0, 3, 1, 1, 4, 5, 3, 1, 2, 0, 4, 2, 2, 2, 0, 1, 0, 3, 1, 1, 5, 0, 3, 3, 4, 0, 5, 1, 3, 0, 1, 2, 5, 0, 1, 0, 2, 2, 2, 0, 2, 1, 2, 1, 1, 0, 5, 0, 1, 0, 4, 4, 1, 2, 5, 0, 0, 4, 1, 4, 4, 0, 0, 5, 5, 3, 3, 4, 2, 4, 1, 0, 5, 4, 4, 0, 0, 1, 4, 2, 0, 4, 1, 2, 0, 1, 2, 1, 5, 0, 0, 0, 4, 2, 2, 5, 0, 0, 3, 4, 1, 0, 3, 2, 3, 2, 4, 0, 3, 0, 0, 2, 2, 0, 0, 3, 5, 3, 3, 0, 1, 5, 4, 5, 2, 1, 4, 5, 3, 2, 0, 1, 3, 3, 5, 0, 3, 0, 5, 0, 1, 3, 0, 2, 2, 2, 3, 3, 4, 4, 3, 0, 0, 4, 4, 5, 4, 2, 0, 3, 3, 2, 3, 5, 0, 1, 0, 5, 0, 5, 1, 2, 3, 5, 4, 0, 4, 4, 0, 1, 1, 4, 0, 2, 5, 1, 4, 4, 1, 4, 3, 1, 3, 1, 1, 2, 2, 1, 0, 5, 4, 3, 0, 1, 2, 4, 4, 2, 2, 3, 2, 2, 1, 0, 1, 1, 0, 5, 2, 2, 2, 3, 0, 2, 4, 4, 2, 5, 0, 1, 1, 1, 4, 1, 3, 5, 0, 0, 3, 5, 5, 4, 5, 5, 2, 0, 3, 1, 3, 0, 0, 2, 0, 5, 1, 2, 5, 4, 5, 1, 0, 2, 3, 1, 2, 1, 1, 5, 4, 0, 1, 1, 0, 2, 1, 4, 2, 0, 3, 2, 2, 5, 2, 2, 2, 4, 3, 1, 1, 5, 2, 1, 3, 0, 3, 1, 0, 0, 2, 3, 4, 0, 3, 1, 2, 0, 0, 0, 0, 4, 3, 3, 5, 2, 3, 3, 5, 0, 0, 3, 3, 4, 3, 5, 1, 0, 5, 4, 1, 2, 3, 5, 2, 0, 1, 2, 0, 4, 3, 2, 1, 4, 3, 0, 4, 0, 5, 3, 5, 5, 1, 0, 4, 3, 3, 4, 0, 0, 3, 5, 0, 0, 0, 0, 2, 0, 0, 5, 5, 1, 4, 1, 4, 0, 0, 3, 1, 1, 4, 0, 0, 0, 0, 0, 3, 4, 1, 3, 2]
Fitness:  -580200.0
total_trips completed_trips total_travel_time average_travel_time total_delay average_delay
0 2000 2000 580200.0 290.1 180200.0 90.1
-- Generation 26 --
590900.0 590400.0 581200.0 612600.0 578375.0 596150.0 605725.0 583325.0 616225.0 593325.0 588050.0 586675.0 623725.0 591575.0 615425.0 590225.0 585600.0 606200.0 584700.0 592075.0 600600.0 587700.0 582775.0 601125.0 611225.0
Best individual:  [2, 0, 1, 2, 5, 4, 0, 2, 0, 1, 2, 0, 3, 1, 1, 4, 5, 0, 1, 2, 2, 4, 2, 2, 2, 0, 1, 0, 3, 1, 1, 5, 0, 3, 5, 4, 3, 0, 1, 5, 2, 0, 1, 5, 5, 4, 3, 2, 2, 2, 1, 2, 1, 2, 1, 1, 3, 5, 0, 0, 5, 0, 5, 1, 1, 2, 1, 4, 0, 2, 2, 4, 0, 0, 5, 5, 3, 3, 4, 2, 4, 1, 0, 5, 4, 4, 0, 0, 1, 4, 2, 0, 4, 1, 2, 0, 1, 2, 1, 5, 0, 0, 0, 4, 2, 2, 5, 0, 0, 3, 4, 1, 0, 3, 2, 3, 2, 4, 0, 3, 0, 0, 2, 2, 0, 0, 3, 5, 3, 3, 0, 1, 5, 4, 5, 2, 1, 4, 5, 3, 2, 0, 1, 3, 3, 5, 0, 3, 0, 5, 0, 1, 3, 0, 2, 2, 2, 3, 3, 4, 4, 3, 0, 0, 4, 4, 5, 4, 2, 0, 3, 3, 2, 3, 5, 0, 1, 0, 1, 0, 1, 0, 3, 4, 5, 2, 2, 1, 0, 3, 1, 0, 0, 1, 0, 5, 1, 4, 4, 1, 4, 3, 1, 3, 1, 1, 2, 2, 1, 0, 5, 4, 3, 0, 1, 2, 4, 4, 2, 2, 3, 2, 2, 1, 0, 1, 1, 0, 5, 2, 2, 2, 3, 0, 2, 4, 4, 2, 5, 0, 1, 1, 1, 4, 1, 3, 5, 0, 0, 3, 5, 5, 4, 5, 5, 2, 0, 3, 1, 3, 0, 0, 2, 0, 5, 1, 2, 5, 4, 5, 1, 0, 2, 3, 1, 2, 1, 1, 5, 4, 0, 1, 1, 0, 2, 1, 4, 2, 0, 3, 2, 2, 5, 2, 2, 2, 4, 3, 1, 1, 5, 2, 1, 3, 0, 3, 1, 0, 0, 2, 3, 4, 0, 3, 1, 2, 0, 0, 0, 0, 4, 3, 3, 5, 2, 3, 3, 5, 0, 0, 3, 3, 4, 3, 5, 1, 0, 5, 4, 1, 2, 3, 5, 2, 0, 1, 2, 0, 4, 3, 2, 1, 4, 3, 0, 4, 0, 5, 3, 5, 5, 1, 0, 4, 3, 3, 3, 5, 4, 3, 3, 5, 0, 1, 3, 2, 0, 0, 1, 5, 0, 4, 0, 4, 2, 0, 3, 1, 1, 0, 3, 0, 0, 4, 0, 3, 4, 1, 3, 2]
Fitness:  -574275.0
total_trips completed_trips total_travel_time average_travel_time total_delay average_delay
0 2000 2000 574275.0 287.1375 174275.0 87.1375
-- Generation 27 --
583075.0 582225.0 577225.0 587800.0 582575.0 583400.0 589700.0 582800.0 609125.0 594325.0 586175.0 611850.0 601125.0 584500.0 591125.0 618550.0 592600.0 632600.0
Best individual:  [2, 0, 1, 2, 5, 4, 0, 2, 0, 1, 2, 0, 3, 1, 1, 4, 5, 0, 1, 2, 2, 4, 2, 2, 2, 0, 1, 0, 3, 1, 1, 5, 0, 3, 5, 4, 3, 0, 1, 5, 2, 0, 1, 5, 5, 4, 3, 2, 2, 2, 1, 2, 1, 2, 1, 1, 3, 5, 0, 0, 5, 0, 5, 1, 1, 2, 1, 4, 0, 2, 2, 4, 0, 0, 5, 5, 3, 3, 4, 2, 4, 1, 0, 5, 4, 4, 0, 0, 1, 4, 2, 0, 4, 1, 2, 0, 1, 2, 1, 5, 0, 0, 0, 4, 2, 2, 5, 0, 0, 3, 4, 1, 0, 3, 2, 3, 2, 4, 0, 3, 0, 0, 2, 2, 0, 0, 3, 5, 3, 3, 0, 1, 5, 4, 5, 2, 1, 4, 5, 3, 2, 0, 1, 3, 3, 5, 0, 3, 0, 5, 0, 1, 3, 0, 2, 2, 2, 3, 3, 4, 4, 3, 0, 0, 4, 4, 5, 4, 2, 0, 3, 3, 2, 3, 5, 0, 1, 0, 1, 0, 1, 0, 3, 4, 5, 2, 2, 1, 0, 3, 1, 0, 0, 1, 0, 5, 1, 4, 4, 1, 4, 3, 1, 3, 0, 1, 2, 2, 0, 0, 5, 4, 3, 0, 1, 2, 4, 4, 2, 2, 3, 2, 2, 1, 0, 1, 1, 0, 5, 2, 2, 2, 3, 0, 2, 4, 4, 2, 5, 0, 1, 1, 1, 4, 1, 3, 5, 0, 0, 3, 5, 5, 4, 5, 5, 2, 0, 3, 1, 3, 0, 0, 2, 0, 5, 1, 2, 5, 4, 5, 1, 0, 2, 3, 1, 2, 1, 1, 5, 4, 0, 1, 1, 0, 2, 1, 4, 2, 0, 3, 2, 2, 5, 2, 2, 2, 4, 0, 1, 1, 5, 2, 0, 3, 0, 3, 1, 0, 0, 2, 3, 4, 0, 0, 1, 0, 0, 1, 0, 0, 4, 3, 3, 5, 2, 3, 3, 0, 0, 0, 3, 3, 4, 3, 0, 1, 0, 5, 4, 1, 2, 3, 5, 2, 0, 1, 2, 0, 4, 3, 2, 1, 4, 3, 0, 4, 0, 5, 3, 5, 5, 1, 0, 4, 3, 3, 3, 5, 4, 3, 3, 5, 0, 1, 3, 2, 0, 0, 1, 5, 0, 4, 0, 4, 2, 0, 3, 1, 1, 0, 3, 0, 0, 4, 0, 3, 4, 1, 3, 2]
Fitness:  -578375.0
total_trips completed_trips total_travel_time average_travel_time total_delay average_delay
0 2000 2000 578375.0 289.1875 178375.0 89.1875
-- Generation 28 --
586100.0 585925.0 626450.0 580350.0 585150.0 586575.0 585425.0 626200.0 592075.0 615550.0 608900.0 581700.0 590350.0 598850.0 584825.0
Best individual:  [2, 0, 1, 2, 5, 4, 0, 2, 0, 1, 2, 0, 3, 1, 1, 4, 5, 0, 1, 2, 2, 4, 2, 2, 2, 0, 1, 0, 3, 1, 1, 5, 0, 3, 5, 4, 3, 0, 1, 5, 2, 0, 1, 5, 5, 4, 3, 2, 2, 2, 1, 2, 1, 2, 1, 1, 3, 5, 0, 0, 5, 0, 5, 1, 1, 2, 1, 4, 0, 2, 2, 4, 0, 0, 5, 5, 3, 3, 4, 2, 4, 1, 0, 5, 4, 4, 0, 0, 1, 4, 2, 0, 4, 1, 2, 0, 1, 2, 1, 5, 0, 0, 0, 4, 2, 2, 5, 0, 0, 3, 4, 1, 0, 3, 2, 3, 2, 4, 0, 3, 0, 0, 2, 2, 0, 0, 3, 5, 3, 3, 0, 1, 5, 4, 5, 2, 1, 4, 5, 3, 2, 0, 1, 3, 3, 5, 0, 3, 0, 5, 0, 1, 3, 0, 2, 2, 2, 3, 3, 4, 4, 3, 0, 0, 4, 4, 5, 4, 2, 0, 3, 3, 2, 3, 5, 0, 1, 0, 1, 0, 1, 0, 3, 4, 5, 2, 2, 1, 0, 3, 1, 0, 0, 1, 0, 5, 1, 4, 4, 1, 4, 3, 1, 3, 0, 1, 2, 2, 0, 0, 5, 4, 3, 0, 1, 2, 4, 4, 2, 2, 3, 2, 2, 1, 0, 1, 1, 0, 5, 2, 2, 2, 3, 0, 2, 4, 4, 2, 5, 0, 1, 1, 1, 4, 1, 3, 5, 0, 0, 3, 5, 5, 4, 5, 5, 2, 0, 3, 1, 3, 0, 0, 2, 0, 5, 1, 2, 5, 4, 5, 1, 0, 2, 3, 1, 2, 1, 1, 5, 4, 0, 1, 1, 0, 2, 1, 4, 2, 0, 3, 2, 2, 5, 2, 2, 2, 4, 3, 1, 1, 5, 2, 1, 3, 0, 3, 1, 0, 0, 2, 3, 4, 0, 3, 1, 2, 0, 0, 0, 0, 4, 3, 3, 5, 2, 3, 3, 5, 0, 0, 3, 3, 4, 3, 5, 1, 0, 5, 4, 1, 2, 3, 5, 2, 0, 1, 2, 0, 4, 3, 2, 1, 4, 3, 0, 4, 0, 5, 3, 5, 5, 1, 0, 4, 3, 3, 3, 5, 4, 3, 3, 5, 0, 1, 3, 2, 0, 0, 1, 5, 0, 4, 0, 4, 2, 0, 3, 1, 1, 0, 3, 0, 0, 4, 0, 3, 4, 1, 3, 2]
Fitness:  -577225.0
total_trips completed_trips total_travel_time average_travel_time total_delay average_delay
0 2000 2000 577225.0 288.6125 177225.0 88.6125
-- Generation 29 --
588975.0 592450.0 585250.0 574675.0 575025.0 587750.0 593525.0 578550.0 610200.0 587225.0 619250.0 582175.0 582100.0 587800.0 599400.0 589075.0 593375.0
Best individual:  [2, 0, 1, 2, 5, 4, 0, 2, 0, 1, 2, 0, 3, 1, 1, 4, 5, 0, 1, 2, 2, 4, 2, 2, 2, 0, 1, 0, 3, 1, 1, 5, 0, 3, 5, 4, 3, 0, 1, 5, 2, 0, 1, 5, 5, 4, 3, 2, 2, 2, 1, 2, 1, 2, 1, 1, 3, 5, 0, 0, 5, 0, 5, 1, 1, 2, 1, 4, 0, 2, 2, 4, 0, 0, 5, 5, 3, 3, 4, 2, 4, 1, 0, 5, 4, 4, 0, 0, 1, 4, 2, 0, 4, 1, 2, 0, 1, 2, 1, 5, 0, 0, 0, 4, 2, 2, 5, 0, 0, 3, 4, 1, 0, 3, 2, 3, 2, 4, 0, 3, 0, 0, 2, 2, 0, 0, 3, 5, 3, 3, 0, 1, 5, 4, 5, 2, 1, 4, 5, 3, 2, 0, 1, 3, 3, 5, 0, 3, 0, 5, 0, 1, 3, 0, 2, 2, 2, 3, 3, 4, 4, 3, 0, 0, 4, 4, 5, 4, 2, 0, 3, 3, 2, 3, 5, 0, 1, 0, 1, 0, 1, 0, 3, 4, 5, 2, 2, 1, 0, 3, 1, 0, 0, 1, 0, 5, 1, 4, 4, 1, 4, 3, 1, 3, 0, 1, 2, 2, 0, 0, 5, 4, 3, 0, 1, 2, 4, 4, 2, 2, 3, 2, 2, 1, 0, 1, 1, 0, 5, 2, 2, 2, 3, 0, 2, 4, 4, 2, 5, 0, 1, 1, 1, 4, 1, 3, 5, 0, 0, 3, 5, 5, 4, 5, 5, 2, 0, 3, 1, 3, 0, 0, 2, 0, 5, 1, 2, 5, 4, 5, 1, 0, 2, 3, 1, 2, 1, 1, 5, 4, 0, 1, 1, 0, 2, 1, 4, 2, 0, 3, 2, 2, 5, 2, 2, 2, 4, 3, 1, 1, 5, 2, 1, 3, 0, 3, 1, 0, 0, 2, 3, 4, 0, 3, 1, 2, 0, 0, 0, 0, 4, 3, 3, 5, 2, 3, 3, 5, 0, 0, 3, 3, 4, 3, 5, 1, 0, 5, 4, 1, 2, 3, 5, 2, 0, 1, 2, 0, 4, 3, 2, 1, 4, 3, 0, 4, 0, 5, 3, 5, 5, 1, 0, 4, 3, 3, 3, 5, 4, 3, 3, 5, 0, 1, 3, 2, 0, 0, 1, 5, 0, 4, 0, 4, 2, 0, 3, 1, 1, 0, 3, 0, 0, 4, 0, 3, 4, 1, 3, 2]
Fitness:  -577225.0
total_trips completed_trips total_travel_time average_travel_time total_delay average_delay
0 2000 2000 577225.0 288.6125 177225.0 88.6125
DUO
../_images/notebooks_demo_notebook_07en_optimal_routing_24_64.png
../_images/notebooks_demo_notebook_07en_optimal_routing_24_65.png
near-DSO
../_images/notebooks_demo_notebook_07en_optimal_routing_24_67.png
../_images/notebooks_demo_notebook_07en_optimal_routing_24_68.png
Vehicle comparison
../_images/notebooks_demo_notebook_07en_optimal_routing_24_70.png

You can see that the final solution (with total travel time 580000 s) is much more efficient than the DUO (890000 s) or the initial solution (650000 s).