Don't do math and drive¶

No description has been provided for this image No description has been provided for this image

CEGM1000 MUDE: Week 2.5. For: 13th December, 2024.

Problem description¶

Note: part of the background material for this project was already available in the textbook.

In this assignment, the goal is to minimize the total travel time on the network by selecting a predefined number of links for capacity expansion (subject to the available budget).

The road network design problem (NDP) is the problem of determining which links to build/refurbish/upgrade in order to improve the performance of a road network. One of the variations of the road NDP is the road NDP with capacity expansions, which involves deciding which links should have their capacity increased. This is a complex problem that must take into account a variety of factors, including:

  • The current state of the road network
  • The projected future traffic demand
  • The budget available for improvements
  • The impacts of the adjustments (could be environmental, social, etc).

There are a variety of approaches to dealing with the road network design problem with capacity expansion. One common approach is to use mathematical optimization models. In this assignment we use a simplified example to show how optimization can be used to tackle road NDPs.

The following (main) assumptions and simplifications are made to make the problem solvable using methods and algorithms that you have learned so far:

1. Link travel time function¶

Travel time on a stretch of road (i.e., a link) depends on the flow (vehicles/hour) on that link and the capacity of the link (maximum of vehicles/hour). The most common function to calculate travel time on a link is the so-called Bureau of Public Roads (BPR) function, which is a polynomial (degree 4) function:

$${t_{ij}} = t_{ij}^0\left( {1 + \alpha {{\left( {\cfrac{x_{ij}}{c_{ij}}} \right)}^\beta }} \right) \quad \left( {i,j} \right) \in A$$

Where $t_{ij}$ is the current travel time on the link, $t_{ij}^0$ is the travel time without congestion (free flow), $x_{ij}$ is the flow of cars, and $c_{ij}$ the capacity in maximum flow of cars. $\alpha$ and $\beta$ are calibration parameters. More details are provided within the formulation section.

Here, we assumme a simplified linear function where travel time grows linearly with the flow of vehicles on a road link, which will be described later in the notebook.

2. Route choice behavior¶

In order to assess the quality of the road capacity expansion problem, one must know what the effect of the added capacity is on travel time. The route choice behavior of drivers within congested networks often follows the so-called User Equilibrium (UE) principle where each traveller tries to minimize their own individual generalized travel time.

However, calculating the UE requires advanced methods which are not covered in the MUDE. Therefore, here we assume the route choice behaviour follows the so-called System Optimal (SO) principle, which implies that route choices are made in such a way that the total travel time is minimized (summed over all the drivers). That means that some cars will drive longer routes so that other cars can save time. But have in mind that in real life road networks you can hardly obtain a system optimal traffic distribution!

Using the simplifcations and assumptions referred to above we can formulate an NDP and solve it using the branch and bound method (that you have studied before).

Note: You will need to select mude-week-2-5 as your kernel as it includes the required packages.

Part 1: Data preprocessing¶

The demand of the network is given by an OD matrix (origin-destination), which will be constructed below. The OD matrix is a table that tells you how many cars go from node i to node j in an a given timeframe. The functions for this can be found in the helper function in utils/read.py. You do not need to edit anything in this codeblock.

Task 1:

Run the script below.

  • The first two blocks imports all the required functions and packages
  • The next blocks visualises the network.
  • The last block loads the OD matrix and visualises it in a heatmap.

In [28]:
import gurobipy as gp
import pandas as pd
import numpy as np
from matplotlib import pyplot as plt
In [29]:
# import required packages
import os
import time

# import required functions
from utils.read import read_cases
from utils.read import read_net
from utils.read import read_od
from utils.read import create_nd_matrix

Visualisation¶

In this section, we'll initially visualize the network using the coordinates of the sample road network, 'SiouxFalls'. Later, we'll employ the same network topology to visualize the upgraded links.

Thankfully, Python offers a highly useful package for visualizing networks called 'networkx'. We'll leverage some of its features, so:

The code block below will generate the road network that we are using in the assessment, Sioux Falls.

In [30]:
# For visualization
import networkx as nx
import json
from matplotlib.lines import Line2D 
from utils.network_visualization import network_visualization
from utils.network_visualization_highlight_link import network_visualization_highlight_links
from utils.network_visualization_upgraded import network_visualization_upgraded
In [31]:
# We are using the SiouxFalls network which is one of the most used networks in transportation reseach: https://github.com/bstabler/TransportationNetworks/blob/master/SiouxFalls/Sioux-Falls-Network.pdf
networks = ['SiouxFalls']
networks_dir = 'input/TransportationNetworks'

net_dict, ods_dict = read_cases(networks, networks_dir)
net_data, ods_data = net_dict[networks[0]], ods_dict[networks[0]]

## now let's prepare the data in a format readable by gurobi
links = list(net_data['capacity'].keys())
nodes = np.unique([list(edge) for edge in links])
fftts = net_data['free_flow']

# Visualise
coordinates_path = 'input/TransportationNetworks/SiouxFalls/SiouxFallsCoordinates.geojson'
G, pos = network_visualization(link_flow = fftts,coordinates_path= coordinates_path) 
No description has been provided for this image

Feel free to explore further functionalities of the networkx package in its documentation.

Interested in visualizing other networks? Fantastic! However, you'll need to check the format of your coordinates first. TAs will assist you if you wish to explore further.

OD Matrix¶

Here, the OD matrix is read.

The first code block gives you a printout of the first 5 rows of the matrix. The second creates a heatmap of the flow values inside the OD matrix.

In [32]:
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np

data = ods_data

max_origin = max(key[0] for key in data.keys())
max_destination = max(key[1] for key in data.keys())

od_matrix = pd.DataFrame(index=range(1, max_origin + 1), columns=range(1, max_destination + 1))

for key, value in data.items():
    od_matrix.loc[key[0], key[1]] = value

print("Origin-Destination Matrix:")
print(od_matrix.head(5))
Origin-Destination Matrix:
      1      2      3      4      5      6      7      8      9       10  ...  \
1      0  100.0  100.0  500.0  200.0  300.0  500.0  800.0  500.0  1300.0  ...   
2  100.0      0  100.0  200.0  100.0  400.0  200.0  400.0  200.0   600.0  ...   
3  100.0  100.0      0  200.0  100.0  300.0  100.0  200.0  100.0   300.0  ...   
4  500.0  200.0  200.0      0  500.0  400.0  400.0  700.0  700.0  1200.0  ...   
5  200.0  100.0  100.0  500.0      0  200.0  200.0  500.0  800.0  1000.0  ...   

      15     16     17     18     19     20     21     22     23     24  
1  500.0  500.0  400.0  100.0  300.0  300.0  100.0  400.0  300.0  100.0  
2  100.0  400.0  200.0      0  100.0  100.0      0  100.0      0      0  
3  100.0  200.0  100.0      0      0      0      0  100.0  100.0      0  
4  500.0  800.0  500.0  100.0  200.0  300.0  200.0  400.0  500.0  200.0  
5  200.0  500.0  200.0      0  100.0  100.0  100.0  200.0  100.0      0  

[5 rows x 24 columns]
In [33]:
# Convert to numeric and handle NaN
od_matrix = od_matrix.fillna(0).astype(float)

# Plotting the Heatmap
plt.figure(figsize=(8, 6))
plt.title("Origin-Destination Heatmap")
plt.xlabel("Destination")
plt.ylabel("Origin")
plt.imshow(od_matrix.values, cmap='RdYlGn_r', aspect="auto", interpolation="nearest")
plt.colorbar(label="Flow Values")
plt.xticks(ticks=np.arange(od_matrix.shape[1]), labels=od_matrix.columns)
plt.yticks(ticks=np.arange(od_matrix.shape[0]), labels=od_matrix.index)
plt.show()
C:\Users\jdding\AppData\Local\Temp\ipykernel_3776\285084469.py:2: FutureWarning: Downcasting object dtype arrays on .fillna, .ffill, .bfill is deprecated and will change in a future version. Call result.infer_objects(copy=False) instead. To opt-in to the future behavior, set `pd.set_option('future.no_silent_downcasting', True)`
  od_matrix = od_matrix.fillna(0).astype(float)
No description has been provided for this image

Part 2: Modeling in Gurobi¶

Defining Parameters¶

Now that we have the required functions for reading and processing the data, let's define some problem parameters and prepare the input.

Task 2.1:

Run the script below. Take some time to look at the defined parameters and try to relate them to what they represent. This will be useful for answering the questions later.

In [7]:
# define parameters
extension_factor = 2.5  # capacity after extension
extension_max_no = 40  # simplified budget limit
timelimit = 300  # seconds
beta = 2  # explained later

# auxiliary parameters 
cap_normal = {(i, j): cap for (i, j), cap in net_data['capacity'].items()}
cap_extend = {(i, j): cap * extension_factor for (i, j), cap in net_data['capacity'].items()}

# origins and destinations
origs = np.unique([orig for (orig, dest) in list(ods_data.keys())])
dests = np.unique([dest for (orig, dest) in list(ods_data.keys())])

# OD-matrix is built
demand = create_nd_matrix(ods_data, origs, dests, nodes)

Initiate the Gurobi model¶

First, let's build a gurobi model object and define some parameters based on the model type. We have a mixed integer quadratic program (MIQP), that's because the objective function has a quadratic term, which we want to transform to a mixed integer linear program (MILP) and solve using the branch and bound method. We discuss the transformations from quadratic to linear when we introduce quadratic terms.

Task 2.2:

Run the model setup below, which includes initiating the decision variables, objective function, and constraints.

In [8]:
## create a gurobi model object
model = gp.Model()

model.params.TimeLimit = timelimit  
model.params.NonConvex = 2 
model.params.PreQLinearize = 1
Set parameter Username
Set parameter LicenseID to value 2588551
Academic license - for non-commercial use only - expires 2025-11-21
Set parameter TimeLimit to value 300
Set parameter NonConvex to value 2
Set parameter PreQLinearize to value 1

Decision variables¶

We have a set of binary variables $y_{ij}$, these variables take the value 1 if link $(i,j)$ connecting node $i$ to node $j$ is selected for expansion, and 0 otherwise.

We also have two sets of decision variables representing link flows; $x_{ij}$, representing flow on link $(i,j)$ in cars per hour, and $x_{ijs}$, representing flow on link $(i,j)$ going to destination $s$.

The first is the number of total cars passing on that road, and the second is the number of cars that are passing on the road which are specifically going to destination $s$. Summing the latter over all $s$ results in the former for a link $(i,j)$.

Therefore, mathematically we define the domain of the variables as follows:

\begin{align} & y_{ij} \in \{0, 1\} \quad \forall (i,j) \in A \\ & x_{ij} \geq 0 \quad \forall (i,j) \in A \\ & x_{ijs} \geq 0 \quad \forall (i,j) \in A, \forall s \in D \\ \end{align}

As you will see below in the code block, we have one extra set of variables called x2 (x square). This is to help Gurobi isolate quadratic terms and perform required transformations based on MCE to keep the problem linear. This is not part of your learning goals.

In [9]:
# decision variables:

link_selected = model.addVars(links, vtype=gp.GRB.BINARY, name='y')
link_flow = model.addVars(links, vtype=gp.GRB.CONTINUOUS, name='x')
dest_flow = model.addVars(links, dests, vtype=gp.GRB.CONTINUOUS, name='xs')

link_flow_sqr = model.addVars(links, vtype=gp.GRB.CONTINUOUS, name='x2')

Objective function¶

The objective function of the problem (in its simplest form), is the minimization of the total travel time on the network, that means that you multiply the flow of vehicles in each link by the corresponding travel time and sum over all links ($A$ is the collection of all links to simplify the notation):

$Z = \sum_{(i,j)\in A}{ x_{ij} . t_{ij}} $

The travel time $t_{ij}$ is a function of the flow on a link and can be expressed as follows (where beta is a parameter):

$ t_{ij} = t^0_{ij} . ( 1 + \beta (x_{ij}/c_{ij})) \quad \forall (i,j) \in A $

Note that the commonly used travel time function based on the Bureau of Public Roads (BPR) is as follows:

$ t_{ij} = t^0_{ij} . ( 1 + \alpha (x_{ij}/c_{ij})^\beta) \quad \forall (i,j) \in A $

Where $\beta$ usually assumes the value of $4$ making this function (and the problem) non-linear. Therefore, we use the linear function mentioned before to make the problem manageable using what we have learned so far.

The following constraint yields the capacity of each link based on which ones are selected for expansion, when y is 1 there is added capacity as you can see:

$ c_{ij} = (1 - y_{ij}) . c^0_{ij} + y_{ij} . c^1_{ij} \quad \forall (i,j) \in A $

This allows us to represent $t_{ij}$ as:

$ t_{ij} = t^0_{ij} . ( 1 + \beta (x_{ij} * ((1 - y_{ij})/c^0_{ij} + y_{ij}/c^1_{ij} ))) \quad \forall (i,j) \in A $

Which leads to the following extended objective funtion:

$ Z = \sum_{(i,j) \in A}{ x_{ij} . (t^0_{ij} . ( 1 + \beta (x_{ij} * ((1 - y_{ij})/c^0_{ij} + y_{ij}/c^1_{ij} ))))} $

Now, for gurobi (and other solvers as well), we have to keep binary variables and quadratic terms clean and separate so that it can perform the required transformations to linearize the problem. Therefore, the equation below, despite being very big, would be the most solver-friendly formulation of our objective function:

\begin{align} Z = \sum_{(i,j) \in A}{t^0_{ij} . x_{ij}} + \sum_{(i,j) \in A}{(t^0_{ij}.\beta /c^0_{ij}) . x^2_{ij}} - \sum_{(i,j) \in A}{(t^0_{ij}.\beta /c^0_{ij}) . x^2_{ij} . y_{ij}} + \sum_{(i,j) \in A}{t^0_{ij}.(\beta /c^1_{ij}) . x^2_{ij} . y_{ij}} \\ \end{align}

Therefore, we use this equation to model our objective function in gurobi. You do not need to know fully understand this equation.

In [10]:
# objective function (total travel time)

model.setObjective(
    gp.quicksum(fftts[i, j] * link_flow[i, j] +
                fftts[i, j] * (beta/cap_normal[i, j]) * link_flow_sqr[i, j] -
                fftts[i, j] * (beta/cap_normal[i, j]) * link_flow_sqr[i, j] * link_selected[i, j] +
                fftts[i, j] * (beta/cap_extend[i, j]) * link_flow_sqr[i, j] * link_selected[i, j]
                for (i, j) in links))

Constraints¶

We have four sets of constraints for this problem. Let's go through them one by one and add them to the model.

1. Budget constraint¶

We can only extend the capacity of certain number of links based on the available budget. So first, we have to make sure to limit the number of extended links to the max number that can be expanded:

$$ \sum_{(i,j) \in A}{ y_{ij}} \leq B $$
In [11]:
# budget constraint
c_bgt = model.addConstr(gp.quicksum(link_selected[i, j] for (i, j) in links) <= extension_max_no)

2. Link flow conservation constraints¶

We have two sets of decision variables representing link flows; $x_{ij}$, representing flow on link $(i,j)$, and $x_{ijs}$, representing flow on link $(i,j)$ going to destination $s$. So we have to make sure that the sum of the flows over all destinations equals the flow on each link. $ \sum_{s \in D}{x_{ijs}} = x_{ij} \quad \forall (i,j) \in A $

In [12]:
# link flow conservation
c_lfc = model.addConstrs(gp.quicksum(dest_flow[i, j, s] for s in dests) == link_flow[i, j] for (i, j) in links)

3. Node flow conservation constraints¶

The basic idea of this constraint set is to make sure that the incoming and outgoing flow to and from each node is the same (hence flow conservation) with the exception for origin and destination nodes of the trips where there will be extra outgoing flow (origins) or incoming flow (destinations). Think about a traffic intersection, vehicles enter and leave the intersection when they are moving in the network. This assures the continuity of the vehicle paths. $d_{is}$ here is the number of travelers from node $i$ to node $s$ with the exception of $d_{ss}$, which is all the demand that arrives at node $s$.

$ \sum_{j \in N; (i,j) \in A}{ x_{ijs}} - \sum_{j \in N; (j,i) \in A}{ x_{jis}} = d_{is} \quad \forall i \in N, \forall s \in D $

The figure gives an example:

image

In [21]:
# node flow conservation
c_nfc = model.addConstrs(
    gp.quicksum(dest_flow[i, j, s] for j in nodes if (i, j) in links) -
    gp.quicksum(dest_flow[j, i, s] for j in nodes if (j, i) in links) == demand[i, s]
    for i in nodes for s in dests
)

4. Quadratic variable constraints (you do not need to fully understand this)¶

These are basically dummy equations to help gurobi model quadratic terms (that we defined as dummy variables earlier). So essentially instead of using $x^2_{ij}$ in the model, we define a new set of decision variables and define a set of constrains to set their value to $x^2_{ij}$. This let's Gurobi know these are quadratic terms and helps gurobi to replace it with variables and constraints required to keep the problem linear. This is not part of your learning goals!

In [14]:
# dummy constraints for handling quadratic terms
c_qrt = model.addConstrs(link_flow_sqr[i, j] == link_flow[i, j] * link_flow[i, j] for (i, j) in links)

Additional constraint for question 3¶

Task 2.3:

After running the whole model once for 300s, come back and set up a new constraint as instructed in the report. After doing this, reset your kernel and rerun the whole model, with this additional constraint.

Note:

The cell below only has to be used when adding the constraint.

In [15]:
# constrain the vehicles to the capacity of the road:
# c_new = YOUR_CODE_HERE

# SOLUTION
# c_new = model.addConstrs(link_flow[i, j] <= cap_normal[i,j] + ((cap_extend[i,j]-cap_normal[i,j] ) * link_selected[i,j])  for (i, j) in links)

Note: Maximum computation time (termination criteria) is set here as a keyword argument in the code cell above, which is beneath the 'Part 2' heading.

In [16]:
#Next we are ready to solve the model
model.optimize()
Gurobi Optimizer version 12.0.0 build v12.0.0rc1 (win64 - Windows 11.0 (22631.2))

CPU model: 13th Gen Intel(R) Core(TM) i7-1365U, instruction set [SSE2|AVX|AVX2]
Thread count: 10 physical cores, 12 logical processors, using up to 12 threads

Non-default parameters:
TimeLimit  300
NonConvex  2
PreQLinearize  1

Optimize a model with 653 rows, 2052 columns and 5624 nonzeros
Model fingerprint: 0x82e0001a
Model has 76 quadratic objective terms
Model has 76 quadratic constraints
Variable types: 1976 continuous, 76 integer (76 binary)
Coefficient statistics:
  Matrix range     [1e+00, 1e+00]
  QMatrix range    [1e+00, 1e+00]
  QLMatrix range   [1e+00, 1e+00]
  Objective range  [2e-04, 1e+01]
  QObjective range [2e-04, 5e-03]
  Bounds range     [1e+00, 1e+00]
  RHS range        [4e+01, 4e+04]
Presolve time: 0.01s
Presolved: 1033 rows, 2281 columns, 6384 nonzeros
Presolved model has 152 SOS constraint(s)
Presolved model has 76 bilinear constraint(s)
Warning: Model contains variables with very large bounds participating
         in product terms.
         Presolve was not able to compute smaller bounds for these variables.
         Consider bounding these variables or reformulating the model.


Solving non-convex MIQCP

Variable types: 2129 continuous, 152 integer (152 binary)
Found heuristic solution: objective 1.240670e+07

Root relaxation: unbounded, 0 iterations, 0.00 seconds (0.00 work units)

    Nodes    |    Current Node    |     Objective Bounds      |     Work
 Expl Unexpl |  Obj  Depth IntInf | Incumbent    BestBd   Gap | It/Node Time

     0     2  postponed    0      1.2407e+07          -      -     -    0s
H  997  2017                    1.154095e+07          -      -  12.2    1s
H 1817  2017                    1.137892e+07          -      -  12.9    1s
H 2632  3174                    1.136607e+07          -      -  17.2    2s
H 3173  3727                    1.125157e+07          -      -  20.1    2s
H 3471  3727                    1.113323e+07          -      -  20.5    2s
H 3518  3727                    1.051028e+07          -      -  20.6    2s
H 3678  3727                    1.033260e+07          -      -  20.9    2s
H 4384  4771                    8995296.9011          -      -  21.9    3s
H 4772  4911                    8894011.2551          -      -  22.1    3s
H 5074  4893                    8885625.5565          -      -  22.1    3s
H 5618  5250                    8884836.0357          -      -  21.3    3s
H 5779  5808                    8884609.9216          -      -  21.1    4s
  6868  6407 8469622.34  190    0 8884609.92 6910586.81  22.2%  20.6    5s
H 6879  6092                    8277213.5554 6911152.41  16.5%  20.6    5s
H 7896  6372                    8191426.4722 6911153.14  15.6%  24.3    6s
H 8402  6049                    8188693.3316 6911153.14  15.6%  31.1    7s
H 9434  5864                    8182423.2692 6916172.28  15.5%  39.7    8s
H10040  5738                    8179994.3440 6916172.28  15.5%  43.3    9s
 10393  5763     cutoff   66      8179994.34 6916172.28  15.5%  43.7   10s
H10616  5543                    8179951.3541 6916172.28  15.4%  44.1   10s
H11329  5311                    8179942.6197 6920195.34  15.4%  47.9   11s
H12470  5016                    8179935.5621 6924237.26  15.4%  56.1   12s
H13961  4592                    8179934.9660 6925798.15  15.3%  64.1   14s
 13994  4653 7817508.06   68   95 8179934.97 6926122.28  15.3%  64.4   15s
H15170  4251                    8179933.5953 6927728.04  15.3%  70.0   16s
 16467  4232 7537624.37   60  104 8179933.60 6928326.93  15.3%  75.7   20s
 19118  4585 7053946.09   56  101 8179933.60 6928870.41  15.3%  81.4   25s
H21586  5343                    8174337.1359 6930120.61  15.2%  82.9   28s
 22191  5735     cutoff   71      8174337.14 6930120.61  15.2%  83.8   30s
 24863  6392 7412733.32   63  100 8174337.14 6932437.71  15.2%  90.0   35s
 27348  7181 6985595.07   58  102 8174337.14 6934188.71  15.2%  92.5   40s
H28242  7302                    8174290.6145 6936138.24  15.1%  94.0   42s
 29329  8015 7144487.95   59  102 8174290.61 6936932.79  15.1%  95.5   46s
 31797  8450     cutoff   58      8174290.61 6937352.09  15.1%  97.5   51s
 33249  8881 7357598.73   62  101 8174290.61 6937540.73  15.1%  98.9   55s
 35937  9136 6942741.62   43    0 8174290.61 6938175.55  15.1%   102   61s
 35953  9156 6938175.55   25  116 8174290.61 6938175.55  15.1%   102   65s
 36679  9667 6957860.97   54   96 8174290.61 6938175.55  15.1%   103   70s
H36939  9261                    8118193.7284 6938175.55  14.5%   105   73s
 37052  9226 7445261.11   68   97 8118193.73 6938175.55  14.5%   106   75s
 37570  9310 7068095.55   66   92 8118193.73 6938175.55  14.5%   109   80s
 37923  9297 7972842.15   77   96 8118193.73 6938175.55  14.5%   113   85s
H38017  8863                    8115310.6892 6938175.55  14.5%   114   85s
 38559  8972     cutoff   68      8115310.69 6938175.55  14.5%   116   90s
H38700  8529                    8095909.5701 6938175.55  14.3%   117   91s
 39007  8490 7538515.71   70   96 8095909.57 6938175.55  14.3%   120   95s
 39525  8541 7483311.89   70   96 8095909.57 6938175.55  14.3%   124  100s
H39705  8153                    8092046.8673 6938175.55  14.3%   125  102s
H39713  7778                    8091894.6434 6938175.55  14.3%   125  102s
H39758  7407                    8080748.1797 6938175.55  14.1%   125  102s
 40032  7414     cutoff   69      8080748.18 6938175.55  14.1%   126  105s
 40770  7471 8047249.37   76   92 8080748.18 6938175.55  14.1%   130  111s
H40791  7128                    8079519.2582 6938175.55  14.1%   131  111s
H40820  6798                    8079506.5208 6938175.55  14.1%   131  111s
 41098  6753 7532293.81   71   99 8079506.52 6938175.55  14.1%   133  115s
 41604  6786 7575351.63   71   97 8079506.52 6938175.55  14.1%   136  120s
H41924  6406                    8079334.8000 6938175.55  14.1%   138  122s
 42011  6492 7298818.51   69   96 8079334.80 6938175.55  14.1%   139  125s
 42750  6529 7726176.20   74   98 8079334.80 6938175.55  14.1%   143  132s
 42969  6682 7057515.51   58   96 8079334.80 6938175.55  14.1%   145  135s
H43195  6319                    8079334.7564 6938175.55  14.1%   145  135s
H43312  6006                    8079328.0196 6938175.55  14.1%   145  135s
 43724  6050     cutoff   72      8079328.02 6938175.55  14.1%   147  140s
 44332  6048     cutoff   72      8079328.02 6938175.55  14.1%   151  146s
H44533  5721                    8079327.9760 6938175.55  14.1%   152  146s
 44945  5674 7902293.55   76   96 8079327.98 6938175.55  14.1%   155  152s
 45276  5654 7504035.79   71   95 8079327.98 6938175.55  14.1%   156  155s
 45955  5858 6976637.56   45  100 8079327.98 6938175.55  14.1%   161  163s
 46714  5674 7050747.72   65   99 8079327.98 6938175.55  14.1%   161  166s
 47011  5659 7737190.90   74   95 8079327.98 6938175.55  14.1%   163  170s
 47829  5580 7722226.85   73   97 8079327.98 6938175.55  14.1%   167  178s
 48247  5566     cutoff   71      8079327.98 6938175.55  14.1%   169  182s
 48726  5600 7375646.53   69   98 8079327.98 6938175.55  14.1%   171  186s
 49280  5498     cutoff   68      8079327.98 6938175.55  14.1%   173  191s
 49753  5490 7666839.00   70  101 8079327.98 6938175.55  14.1%   176  195s
 50286  5366     cutoff   74      8079327.98 6938175.55  14.1%   178  200s
 50698  5335 7566189.88   72   95 8079327.98 6938361.50  14.1%   181  205s
 51178  5460 7791305.96   74   93 8079327.98 6938361.72  14.1%   183  211s
 51770  5654     cutoff   78      8079327.98 6938387.72  14.1%   186  216s
 52428  6013 7594688.29   60   94 8079327.98 6939279.75  14.1%   188  223s
 53335  6184 7869003.68   73   97 8079327.98 6939279.75  14.1%   189  229s
 54012  6376 7117391.66   65   97 8079327.98 6939504.61  14.1%   192  482s

Explored 54466 nodes (10509980 simplex iterations) in 482.29 seconds (148.22 work units)
Thread count was 12 (of 12 available processors)

Solution count 10: 8.07933e+06 8.07933e+06 8.07933e+06 ... 8.09591e+06

Time limit reached
Best objective 8.079327975986e+06, best bound 6.939504614190e+06, gap 14.1079%

Note that if you didn't find a solution, you can rerun the previous cell to continue the optimization for another 300 seconds (defined by timelimit).

In [17]:
# fetch optimal decision variables and Objective Function values
link_flows = {(i, j): link_flow[i, j].X for (i, j) in links}
links_selected = {(i, j): link_selected[i, j].X for (i, j) in links}
total_travel_time = model.ObjVal

# Let's print right now the objective function
print("Optimal Objective function Value", model.objVal)

# Let's print right now the decision variables
for var in model.getVars():
    print(f"{var.varName}: {round(var.X, 3)}")  # print the optimal decision variable values.
Optimal Objective function Value 8079327.975986279
y[1,2]: 0.0
y[1,3]: 0.0
y[2,1]: 0.0
y[2,6]: 0.0
y[3,1]: 0.0
y[3,4]: 0.0
y[3,12]: 0.0
y[4,3]: 0.0
y[4,5]: 0.0
y[4,11]: 0.0
y[5,4]: 0.0
y[5,6]: 1.0
y[5,9]: 1.0
y[6,2]: 0.0
y[6,5]: 1.0
y[6,8]: 1.0
y[7,8]: 0.0
y[7,18]: 0.0
y[8,6]: 1.0
y[8,7]: 0.0
y[8,9]: 0.0
y[8,16]: 1.0
y[9,5]: 1.0
y[9,8]: 0.0
y[9,10]: 1.0
y[10,9]: 1.0
y[10,11]: 1.0
y[10,15]: 1.0
y[10,16]: 1.0
y[10,17]: 1.0
y[11,4]: 0.0
y[11,10]: 1.0
y[11,12]: 1.0
y[11,14]: 1.0
y[12,3]: 0.0
y[12,11]: 1.0
y[12,13]: 0.0
y[13,12]: 0.0
y[13,24]: 1.0
y[14,11]: 1.0
y[14,15]: 1.0
y[14,23]: 0.0
y[15,10]: 1.0
y[15,14]: 1.0
y[15,19]: 1.0
y[15,22]: 1.0
y[16,8]: 1.0
y[16,10]: 1.0
y[16,17]: 1.0
y[16,18]: 0.0
y[17,10]: 1.0
y[17,16]: 0.0
y[17,19]: 1.0
y[18,7]: 0.0
y[18,16]: 0.0
y[18,20]: 1.0
y[19,15]: 1.0
y[19,17]: 1.0
y[19,20]: 0.0
y[20,18]: 1.0
y[20,19]: 0.0
y[20,21]: 0.0
y[20,22]: 0.0
y[21,20]: 0.0
y[21,22]: 0.0
y[21,24]: 1.0
y[22,15]: 1.0
y[22,20]: 1.0
y[22,21]: 0.0
y[22,23]: 1.0
y[23,14]: 0.0
y[23,22]: 1.0
y[23,24]: 0.0
y[24,13]: 1.0
y[24,21]: 1.0
y[24,23]: 0.0
x[1,2]: 4121.228
x[1,3]: 7332.354
x[2,1]: 4132.354
x[2,6]: 5267.646
x[3,1]: 7321.228
x[3,4]: 11423.332
x[3,12]: 9709.022
x[4,3]: 11421.228
x[4,5]: 16996.257
x[4,11]: 3875.781
x[5,4]: 17006.031
x[5,6]: 9976.653
x[5,9]: 13166.022
x[6,2]: 5278.772
x[6,5]: 10052.449
x[6,8]: 13397.881
x[7,8]: 8600.0
x[7,18]: 12400.0
x[8,6]: 13484.803
x[8,7]: 8500.0
x[8,9]: 2941.406
x[8,16]: 10207.768
x[9,5]: 13100.0
x[9,8]: 2938.255
x[9,10]: 21707.429
x[10,9]: 21738.255
x[10,11]: 17188.342
x[10,15]: 17838.086
x[10,16]: 14263.864
x[10,17]: 5800.0
x[11,4]: 3963.903
x[11,10]: 17068.909
x[11,12]: 11900.0
x[11,14]: 11161.914
x[12,3]: 9700.0
x[12,11]: 11809.022
x[12,13]: 13000.0
x[13,12]: 13000.0
x[13,24]: 10800.0
x[14,11]: 11221.582
x[14,15]: 8767.188
x[14,23]: 5400.0
x[15,10]: 17878.418
x[15,14]: 8826.855
x[15,19]: 17460.227
x[15,22]: 23539.773
x[16,8]: 10197.842
x[16,10]: 13973.791
x[16,17]: 14112.718
x[16,18]: 13600.0
x[17,10]: 6200.0
x[17,16]: 11700.0
x[17,19]: 15200.0
x[18,7]: 12500.0
x[18,16]: 15712.718
x[18,20]: 15300.0
x[19,15]: 19000.0
x[19,17]: 13187.282
x[19,20]: 5860.227
x[20,18]: 17412.718
x[20,19]: 5387.282
x[20,21]: 5400.0
x[20,22]: 5800.0
x[21,20]: 5300.0
x[21,22]: 9812.191
x[21,24]: 10733.001
x[22,15]: 22000.0
x[22,20]: 7439.773
x[22,21]: 9733.001
x[22,23]: 9966.999
x[23,14]: 5400.0
x[23,22]: 9987.809
x[23,24]: 7466.999
x[24,13]: 10700.0
x[24,21]: 10712.191
x[24,23]: 7487.809
xs[1,2,1]: 0.0
xs[1,2,2]: 1221.228
xs[1,2,3]: 0.0
xs[1,2,4]: 0.0
xs[1,2,5]: 0.0
xs[1,2,6]: 300.0
xs[1,2,7]: 500.0
xs[1,2,8]: 800.0
xs[1,2,9]: 0.0
xs[1,2,10]: 0.0
xs[1,2,11]: 0.0
xs[1,2,12]: 0.0
xs[1,2,13]: 0.0
xs[1,2,14]: 0.0
xs[1,2,15]: 0.0
xs[1,2,16]: 500.0
xs[1,2,17]: 400.0
xs[1,2,18]: 100.0
xs[1,2,19]: 0.0
xs[1,2,20]: 300.0
xs[1,2,21]: 0.0
xs[1,2,22]: 0.0
xs[1,2,23]: 0.0
xs[1,2,24]: 0.0
xs[1,3,1]: 0.0
xs[1,3,2]: 0.0
xs[1,3,3]: 200.0
xs[1,3,4]: 700.0
xs[1,3,5]: 200.0
xs[1,3,6]: 0.0
xs[1,3,7]: 0.0
xs[1,3,8]: 0.0
xs[1,3,9]: 500.0
xs[1,3,10]: 1732.354
xs[1,3,11]: 700.0
xs[1,3,12]: 300.0
xs[1,3,13]: 800.0
xs[1,3,14]: 400.0
xs[1,3,15]: 500.0
xs[1,3,16]: 0.0
xs[1,3,17]: 0.0
xs[1,3,18]: 0.0
xs[1,3,19]: 300.0
xs[1,3,20]: 0.0
xs[1,3,21]: 100.0
xs[1,3,22]: 500.0
xs[1,3,23]: 300.0
xs[1,3,24]: 100.0
xs[2,1,1]: 2600.0
xs[2,1,2]: 0.0
xs[2,1,3]: 100.0
xs[2,1,4]: 200.0
xs[2,1,5]: 0.0
xs[2,1,6]: 0.0
xs[2,1,7]: 0.0
xs[2,1,8]: 0.0
xs[2,1,9]: 0.0
xs[2,1,10]: 432.354
xs[2,1,11]: 200.0
xs[2,1,12]: 100.0
xs[2,1,13]: 300.0
xs[2,1,14]: 100.0
xs[2,1,15]: 0.0
xs[2,1,16]: 0.0
xs[2,1,17]: 0.0
xs[2,1,18]: 0.0
xs[2,1,19]: 0.0
xs[2,1,20]: 0.0
xs[2,1,21]: 0.0
xs[2,1,22]: 100.0
xs[2,1,23]: 0.0
xs[2,1,24]: 0.0
xs[2,6,1]: 0.0
xs[2,6,2]: 0.0
xs[2,6,3]: 0.0
xs[2,6,4]: 0.0
xs[2,6,5]: 100.0
xs[2,6,6]: 700.0
xs[2,6,7]: 700.0
xs[2,6,8]: 1200.0
xs[2,6,9]: 200.0
xs[2,6,10]: 167.646
xs[2,6,11]: 0.0
xs[2,6,12]: 0.0
xs[2,6,13]: 0.0
xs[2,6,14]: 0.0
xs[2,6,15]: 100.0
xs[2,6,16]: 900.0
xs[2,6,17]: 600.0
xs[2,6,18]: 100.0
xs[2,6,19]: 100.0
xs[2,6,20]: 400.0
xs[2,6,21]: 0.0
xs[2,6,22]: 0.0
xs[2,6,23]: 0.0
xs[2,6,24]: 0.0
xs[3,1,1]: 6200.0
xs[3,1,2]: 1121.228
xs[3,1,3]: 0.0
xs[3,1,4]: 0.0
xs[3,1,5]: 0.0
xs[3,1,6]: 0.0
xs[3,1,7]: 0.0
xs[3,1,8]: 0.0
xs[3,1,9]: 0.0
xs[3,1,10]: 0.0
xs[3,1,11]: 0.0
xs[3,1,12]: 0.0
xs[3,1,13]: 0.0
xs[3,1,14]: 0.0
xs[3,1,15]: 0.0
xs[3,1,16]: 0.0
xs[3,1,17]: 0.0
xs[3,1,18]: 0.0
xs[3,1,19]: 0.0
xs[3,1,20]: 0.0
xs[3,1,21]: 0.0
xs[3,1,22]: 0.0
xs[3,1,23]: 0.0
xs[3,1,24]: 0.0
xs[3,4,1]: 0.0
xs[3,4,2]: 0.0
xs[3,4,3]: 0.0
xs[3,4,4]: 2500.0
xs[3,4,5]: 800.0
xs[3,4,6]: 800.0
xs[3,4,7]: 800.0
xs[3,4,8]: 1400.0
xs[3,4,9]: 1800.0
xs[3,4,10]: 2032.354
xs[3,4,11]: 90.978
xs[3,4,12]: 0.0
xs[3,4,13]: 0.0
xs[3,4,14]: 0.0
xs[3,4,15]: 600.0
xs[3,4,16]: 200.0
xs[3,4,17]: 100.0
xs[3,4,18]: 0.0
xs[3,4,19]: 300.0
xs[3,4,20]: 0.0
xs[3,4,21]: 0.0
xs[3,4,22]: 0.0
xs[3,4,23]: 0.0
xs[3,4,24]: 0.0
xs[3,12,1]: 0.0
xs[3,12,2]: 0.0
xs[3,12,3]: 0.0
xs[3,12,4]: 0.0
xs[3,12,5]: 0.0
xs[3,12,6]: 0.0
xs[3,12,7]: 0.0
xs[3,12,8]: 0.0
xs[3,12,9]: 0.0
xs[3,12,10]: 0.0
xs[3,12,11]: 909.022
xs[3,12,12]: 3400.0
xs[3,12,13]: 3100.0
xs[3,12,14]: 500.0
xs[3,12,15]: 0.0
xs[3,12,16]: 0.0
xs[3,12,17]: 0.0
xs[3,12,18]: 0.0
xs[3,12,19]: 0.0
xs[3,12,20]: 0.0
xs[3,12,21]: 400.0
xs[3,12,22]: 600.0
xs[3,12,23]: 400.0
xs[3,12,24]: 400.0
xs[4,3,1]: 3700.0
xs[4,3,2]: 321.228
xs[4,3,3]: 1700.0
xs[4,3,4]: 0.0
xs[4,3,5]: 0.0
xs[4,3,6]: 0.0
xs[4,3,7]: 0.0
xs[4,3,8]: 0.0
xs[4,3,9]: 0.0
xs[4,3,10]: 0.0
xs[4,3,11]: 0.0
xs[4,3,12]: 2900.0
xs[4,3,13]: 2200.0
xs[4,3,14]: 0.0
xs[4,3,15]: 0.0
xs[4,3,16]: 0.0
xs[4,3,17]: 0.0
xs[4,3,18]: 0.0
xs[4,3,19]: 0.0
xs[4,3,20]: 0.0
xs[4,3,21]: 300.0
xs[4,3,22]: 0.0
xs[4,3,23]: 0.0
xs[4,3,24]: 300.0
xs[4,5,1]: 0.0
xs[4,5,2]: 0.0
xs[4,5,3]: 0.0
xs[4,5,4]: 0.0
xs[4,5,5]: 2000.0
xs[4,5,6]: 1700.0
xs[4,5,7]: 1200.0
xs[4,5,8]: 2363.903
xs[4,5,9]: 2500.0
xs[4,5,10]: 3232.354
xs[4,5,11]: 0.0
xs[4,5,12]: 0.0
xs[4,5,13]: 0.0
xs[4,5,14]: 0.0
xs[4,5,15]: 1100.0
xs[4,5,16]: 1000.0
xs[4,5,17]: 600.0
xs[4,5,18]: 100.0
xs[4,5,19]: 500.0
xs[4,5,20]: 300.0
xs[4,5,21]: 0.0
xs[4,5,22]: 400.0
xs[4,5,23]: 0.0
xs[4,5,24]: 0.0
xs[4,11,1]: 0.0
xs[4,11,2]: 0.0
xs[4,11,3]: 0.0
xs[4,11,4]: 0.0
xs[4,11,5]: 0.0
xs[4,11,6]: 0.0
xs[4,11,7]: 0.0
xs[4,11,8]: 0.0
xs[4,11,9]: 0.0
xs[4,11,10]: 0.0
xs[4,11,11]: 2575.781
xs[4,11,12]: 0.0
xs[4,11,13]: 0.0
xs[4,11,14]: 700.0
xs[4,11,15]: 0.0
xs[4,11,16]: 0.0
xs[4,11,17]: 0.0
xs[4,11,18]: 0.0
xs[4,11,19]: 0.0
xs[4,11,20]: 0.0
xs[4,11,21]: 0.0
xs[4,11,22]: 0.0
xs[4,11,23]: 600.0
xs[4,11,24]: 0.0
xs[5,4,1]: 3200.0
xs[5,4,2]: 121.228
xs[5,4,3]: 1500.0
xs[5,4,4]: 6700.0
xs[5,4,5]: 0.0
xs[5,4,6]: 0.0
xs[5,4,7]: 0.0
xs[5,4,8]: 0.0
xs[5,4,9]: 0.0
xs[5,4,10]: 0.0
xs[5,4,11]: 1084.803
xs[5,4,12]: 2300.0
xs[5,4,13]: 1600.0
xs[5,4,14]: 200.0
xs[5,4,15]: 0.0
xs[5,4,16]: 0.0
xs[5,4,17]: 0.0
xs[5,4,18]: 0.0
xs[5,4,19]: 0.0
xs[5,4,20]: 0.0
xs[5,4,21]: 100.0
xs[5,4,22]: 0.0
xs[5,4,23]: 100.0
xs[5,4,24]: 100.0
xs[5,6,1]: 0.0
xs[5,6,2]: 878.772
xs[5,6,3]: 0.0
xs[5,6,4]: 0.0
xs[5,6,5]: 0.0
xs[5,6,6]: 3300.0
xs[5,6,7]: 1400.0
xs[5,6,8]: 2863.903
xs[5,6,9]: 0.0
xs[5,6,10]: 0.0
xs[5,6,11]: 0.0
xs[5,6,12]: 0.0
xs[5,6,13]: 0.0
xs[5,6,14]: 0.0
xs[5,6,15]: 0.0
xs[5,6,16]: 1033.978
xs[5,6,17]: 0.0
xs[5,6,18]: 100.0
xs[5,6,19]: 0.0
xs[5,6,20]: 400.0
xs[5,6,21]: 0.0
xs[5,6,22]: 0.0
xs[5,6,23]: 0.0
xs[5,6,24]: 0.0
xs[5,9,1]: 0.0
xs[5,9,2]: 0.0
xs[5,9,3]: 0.0
xs[5,9,4]: 0.0
xs[5,9,5]: 0.0
xs[5,9,6]: 0.0
xs[5,9,7]: 0.0
xs[5,9,8]: 0.0
xs[5,9,9]: 3900.0
xs[5,9,10]: 5200.0
xs[5,9,11]: 0.0
xs[5,9,12]: 0.0
xs[5,9,13]: 0.0
xs[5,9,14]: 0.0
xs[5,9,15]: 1600.0
xs[5,9,16]: 466.022
xs[5,9,17]: 800.0
xs[5,9,18]: 0.0
xs[5,9,19]: 600.0
xs[5,9,20]: 0.0
xs[5,9,21]: 0.0
xs[5,9,22]: 600.0
xs[5,9,23]: 0.0
xs[5,9,24]: 0.0
xs[6,2,1]: 2500.0
xs[6,2,2]: 2778.772
xs[6,2,3]: 0.0
xs[6,2,4]: 0.0
xs[6,2,5]: 0.0
xs[6,2,6]: 0.0
xs[6,2,7]: 0.0
xs[6,2,8]: 0.0
xs[6,2,9]: 0.0
xs[6,2,10]: 0.0
xs[6,2,11]: 0.0
xs[6,2,12]: 0.0
xs[6,2,13]: 0.0
xs[6,2,14]: 0.0
xs[6,2,15]: 0.0
xs[6,2,16]: 0.0
xs[6,2,17]: 0.0
xs[6,2,18]: 0.0
xs[6,2,19]: 0.0
xs[6,2,20]: 0.0
xs[6,2,21]: 0.0
xs[6,2,22]: 0.0
xs[6,2,23]: 0.0
xs[6,2,24]: 0.0
xs[6,5,1]: 0.0
xs[6,5,2]: 0.0
xs[6,5,3]: 800.0
xs[6,5,4]: 2700.0
xs[6,5,5]: 1600.0
xs[6,5,6]: 0.0
xs[6,5,7]: 0.0
xs[6,5,8]: 0.0
xs[6,5,9]: 600.0
xs[6,5,10]: 967.646
xs[6,5,11]: 584.803
xs[6,5,12]: 1500.0
xs[6,5,13]: 800.0
xs[6,5,14]: 100.0
xs[6,5,15]: 300.0
xs[6,5,16]: 0.0
xs[6,5,17]: 0.0
xs[6,5,18]: -0.0
xs[6,5,19]: 0.0
xs[6,5,20]: 0.0
xs[6,5,21]: 0.0
xs[6,5,22]: 0.0
xs[6,5,23]: 0.0
xs[6,5,24]: 100.0
xs[6,8,1]: 0.0
xs[6,8,2]: 0.0
xs[6,8,3]: 0.0
xs[6,8,4]: 0.0
xs[6,8,5]: 0.0
xs[6,8,6]: 0.0
xs[6,8,7]: 2500.0
xs[6,8,8]: 4863.903
xs[6,8,9]: 0.0
xs[6,8,10]: 0.0
xs[6,8,11]: 0.0
xs[6,8,12]: 0.0
xs[6,8,13]: 0.0
xs[6,8,14]: 0.0
xs[6,8,15]: 0.0
xs[6,8,16]: 2833.978
xs[6,8,17]: 1100.0
xs[6,8,18]: 300.0
xs[6,8,19]: 300.0
xs[6,8,20]: 1100.0
xs[6,8,21]: 100.0
xs[6,8,22]: 200.0
xs[6,8,23]: 100.0
xs[6,8,24]: 0.0
xs[7,8,1]: 900.0
xs[7,8,2]: 400.0
xs[7,8,3]: 100.0
xs[7,8,4]: 800.0
xs[7,8,5]: 300.0
xs[7,8,6]: 1200.0
xs[7,8,7]: 0.0
xs[7,8,8]: 3600.0
xs[7,8,9]: 600.0
xs[7,8,10]: 0.0
xs[7,8,11]: 0.0
xs[7,8,12]: 700.0
xs[7,8,13]: 0.0
xs[7,8,14]: 0.0
xs[7,8,15]: 0.0
xs[7,8,16]: 0.0
xs[7,8,17]: 0.0
xs[7,8,18]: 0.0
xs[7,8,19]: 0.0
xs[7,8,20]: 0.0
xs[7,8,21]: 0.0
xs[7,8,22]: 0.0
xs[7,8,23]: 0.0
xs[7,8,24]: 0.0
xs[7,18,1]: 0.0
xs[7,18,2]: 0.0
xs[7,18,3]: 0.0
xs[7,18,4]: 0.0
xs[7,18,5]: 0.0
xs[7,18,6]: 0.0
xs[7,18,7]: 0.0
xs[7,18,8]: 0.0
xs[7,18,9]: 0.0
xs[7,18,10]: 1900.0
xs[7,18,11]: 500.0
xs[7,18,12]: 0.0
xs[7,18,13]: 400.0
xs[7,18,14]: 200.0
xs[7,18,15]: 500.0
xs[7,18,16]: 1400.0
xs[7,18,17]: 1000.0
xs[7,18,18]: 800.0
xs[7,18,19]: 400.0
xs[7,18,20]: 2500.0
xs[7,18,21]: 700.0
xs[7,18,22]: 1200.0
xs[7,18,23]: 600.0
xs[7,18,24]: 300.0
xs[8,6,1]: 2200.0
xs[8,6,2]: 1500.0
xs[8,6,3]: 500.0
xs[8,6,4]: 2300.0
xs[8,6,5]: 1300.0
xs[8,6,6]: 3600.0
xs[8,6,7]: 0.0
xs[8,6,8]: 0.0
xs[8,6,9]: 0.0
xs[8,6,10]: 0.0
xs[8,6,11]: 184.803
xs[8,6,12]: 1300.0
xs[8,6,13]: 600.0
xs[8,6,14]: 0.0
xs[8,6,15]: 0.0
xs[8,6,16]: 0.0
xs[8,6,17]: 0.0
xs[8,6,18]: 0.0
xs[8,6,19]: 0.0
xs[8,6,20]: 0.0
xs[8,6,21]: 0.0
xs[8,6,22]: 0.0
xs[8,6,23]: 0.0
xs[8,6,24]: 0.0
xs[8,7,1]: 0.0
xs[8,7,2]: 0.0
xs[8,7,3]: 0.0
xs[8,7,4]: 0.0
xs[8,7,5]: 0.0
xs[8,7,6]: 0.0
xs[8,7,7]: 4100.0
xs[8,7,8]: 0.0
xs[8,7,9]: 0.0
xs[8,7,10]: 0.0
xs[8,7,11]: 0.0
xs[8,7,12]: 0.0
xs[8,7,13]: 0.0
xs[8,7,14]: 0.0
xs[8,7,15]: 0.0
xs[8,7,16]: 0.0
xs[8,7,17]: 0.0
xs[8,7,18]: 600.0
xs[8,7,19]: 0.0
xs[8,7,20]: 2000.0
xs[8,7,21]: 500.0
xs[8,7,22]: 700.0
xs[8,7,23]: 400.0
xs[8,7,24]: 200.0
xs[8,9,1]: 0.0
xs[8,9,2]: 0.0
xs[8,9,3]: 0.0
xs[8,9,4]: 0.0
xs[8,9,5]: 0.0
xs[8,9,6]: 0.0
xs[8,9,7]: 0.0
xs[8,9,8]: 0.0
xs[8,9,9]: 1400.0
xs[8,9,10]: 926.209
xs[8,9,11]: 615.197
xs[8,9,12]: 0.0
xs[8,9,13]: 0.0
xs[8,9,14]: 0.0
xs[8,9,15]: 0.0
xs[8,9,16]: 0.0
xs[8,9,17]: 0.0
xs[8,9,18]: 0.0
xs[8,9,19]: 0.0
xs[8,9,20]: 0.0
xs[8,9,21]: 0.0
xs[8,9,22]: 0.0
xs[8,9,23]: 0.0
xs[8,9,24]: 0.0
xs[8,16,1]: 0.0
xs[8,16,2]: 0.0
xs[8,16,3]: 0.0
xs[8,16,4]: 0.0
xs[8,16,5]: 0.0
xs[8,16,6]: 0.0
xs[8,16,7]: 0.0
xs[8,16,8]: 0.0
xs[8,16,9]: 0.0
xs[8,16,10]: 673.791
xs[8,16,11]: 0.0
xs[8,16,12]: 0.0
xs[8,16,13]: 0.0
xs[8,16,14]: 400.0
xs[8,16,15]: 600.0
xs[8,16,16]: 5033.978
xs[8,16,17]: 2500.0
xs[8,16,18]: 0.0
xs[8,16,19]: 1000.0
xs[8,16,20]: 0.0
xs[8,16,21]: 0.0
xs[8,16,22]: 0.0
xs[8,16,23]: 0.0
xs[8,16,24]: 0.0
xs[9,5,1]: 3000.0
xs[9,5,2]: 900.0
xs[9,5,3]: 600.0
xs[9,5,4]: 3500.0
xs[9,5,5]: 2500.0
xs[9,5,6]: 1400.0
xs[9,5,7]: 0.0
xs[9,5,8]: 0.0
xs[9,5,9]: 0.0
xs[9,5,10]: 0.0
xs[9,5,11]: 0.0
xs[9,5,12]: 600.0
xs[9,5,13]: 600.0
xs[9,5,14]: 0.0
xs[9,5,15]: 0.0
xs[9,5,16]: 0.0
xs[9,5,17]: 0.0
xs[9,5,18]: 0.0
xs[9,5,19]: 0.0
xs[9,5,20]: 0.0
xs[9,5,21]: 0.0
xs[9,5,22]: 0.0
xs[9,5,23]: 0.0
xs[9,5,24]: 0.0
xs[9,8,1]: 0.0
xs[9,8,2]: 0.0
xs[9,8,3]: 0.0
xs[9,8,4]: 0.0
xs[9,8,5]: 0.0
xs[9,8,6]: 0.0
xs[9,8,7]: 600.0
xs[9,8,8]: 2338.255
xs[9,8,9]: 0.0
xs[9,8,10]: 0.0
xs[9,8,11]: 0.0
xs[9,8,12]: 0.0
xs[9,8,13]: 0.0
xs[9,8,14]: 0.0
xs[9,8,15]: 0.0
xs[9,8,16]: 0.0
xs[9,8,17]: 0.0
xs[9,8,18]: 0.0
xs[9,8,19]: 0.0
xs[9,8,20]: 0.0
xs[9,8,21]: 0.0
xs[9,8,22]: 0.0
xs[9,8,23]: 0.0
xs[9,8,24]: 0.0
xs[9,10,1]: 0.0
xs[9,10,2]: 0.0
xs[9,10,3]: 0.0
xs[9,10,4]: 0.0
xs[9,10,5]: 0.0
xs[9,10,6]: 0.0
xs[9,10,7]: 0.0
xs[9,10,8]: 0.0
xs[9,10,9]: 0.0
xs[9,10,10]: 8926.209
xs[9,10,11]: 2015.197
xs[9,10,12]: 0.0
xs[9,10,13]: 0.0
xs[9,10,14]: 600.0
xs[9,10,15]: 2500.0
xs[9,10,16]: 1866.022
xs[9,10,17]: 1700.0
xs[9,10,18]: 200.0
xs[9,10,19]: 1000.0
xs[9,10,20]: 600.0
xs[9,10,21]: 300.0
xs[9,10,22]: 1300.0
xs[9,10,23]: 500.0
xs[9,10,24]: 200.0
xs[10,9,1]: 2500.0
xs[10,9,2]: 700.0
xs[10,9,3]: 500.0
xs[10,9,4]: 2800.0
xs[10,9,5]: 1700.0
xs[10,9,6]: 1000.0
xs[10,9,7]: 0.0
xs[10,9,8]: 1538.255
xs[10,9,9]: 11000.0
xs[10,9,10]: 0.0
xs[10,9,11]: 0.0
xs[10,9,12]: 0.0
xs[10,9,13]: 0.0
xs[10,9,14]: 0.0
xs[10,9,15]: 0.0
xs[10,9,16]: 0.0
xs[10,9,17]: 0.0
xs[10,9,18]: 0.0
xs[10,9,19]: -0.0
xs[10,9,20]: 0.0
xs[10,9,21]: 0.0
xs[10,9,22]: -0.0
xs[10,9,23]: 0.0
xs[10,9,24]: 0.0
xs[10,11,1]: 0.0
xs[10,11,2]: 0.0
xs[10,11,3]: 0.0
xs[10,11,4]: 0.0
xs[10,11,5]: 0.0
xs[10,11,6]: 0.0
xs[10,11,7]: 0.0
xs[10,11,8]: 0.0
xs[10,11,9]: 0.0
xs[10,11,10]: 0.0
xs[10,11,11]: 8926.428
xs[10,11,12]: 3300.0
xs[10,11,13]: 3000.0
xs[10,11,14]: 1961.914
xs[10,11,15]: 0.0
xs[10,11,16]: 0.0
xs[10,11,17]: 0.0
xs[10,11,18]: 0.0
xs[10,11,19]: 0.0
xs[10,11,20]: 0.0
xs[10,11,21]: 0.0
xs[10,11,22]: 0.0
xs[10,11,23]: 0.0
xs[10,11,24]: 0.0
xs[10,15,1]: 0.0
xs[10,15,2]: 0.0
xs[10,15,3]: 0.0
xs[10,15,4]: 0.0
xs[10,15,5]: 0.0
xs[10,15,6]: 0.0
xs[10,15,7]: 0.0
xs[10,15,8]: 0.0
xs[10,15,9]: 0.0
xs[10,15,10]: 0.0
xs[10,15,11]: 0.0
xs[10,15,12]: 0.0
xs[10,15,13]: 0.0
xs[10,15,14]: 738.086
xs[10,15,15]: 4500.0
xs[10,15,16]: 0.0
xs[10,15,17]: 0.0
xs[10,15,18]: 0.0
xs[10,15,19]: 2800.0
xs[10,15,20]: 0.0
xs[10,15,21]: 1500.0
xs[10,15,22]: 5000.0
xs[10,15,23]: 2300.0
xs[10,15,24]: 1000.0
xs[10,16,1]: 0.0
xs[10,16,2]: 0.0
xs[10,16,3]: 0.0
xs[10,16,4]: 0.0
xs[10,16,5]: 0.0
xs[10,16,6]: 0.0
xs[10,16,7]: 2400.0
xs[10,16,8]: 597.842
xs[10,16,9]: 0.0
xs[10,16,10]: 0.0
xs[10,16,11]: 0.0
xs[10,16,12]: 0.0
xs[10,16,13]: 0.0
xs[10,16,14]: 0.0
xs[10,16,15]: 0.0
xs[10,16,16]: 6566.022
xs[10,16,17]: 0.0
xs[10,16,18]: 1000.0
xs[10,16,19]: 0.0
xs[10,16,20]: 3700.0
xs[10,16,21]: 0.0
xs[10,16,22]: 0.0
xs[10,16,23]: 0.0
xs[10,16,24]: 0.0
xs[10,17,1]: 0.0
xs[10,17,2]: 0.0
xs[10,17,3]: 0.0
xs[10,17,4]: 0.0
xs[10,17,5]: 0.0
xs[10,17,6]: 0.0
xs[10,17,7]: 0.0
xs[10,17,8]: 0.0
xs[10,17,9]: 0.0
xs[10,17,10]: 0.0
xs[10,17,11]: 0.0
xs[10,17,12]: 0.0
xs[10,17,13]: 0.0
xs[10,17,14]: 0.0
xs[10,17,15]: -0.0
xs[10,17,16]: 0.0
xs[10,17,17]: 5800.0
xs[10,17,18]: 0.0
xs[10,17,19]: 0.0
xs[10,17,20]: 0.0
xs[10,17,21]: 0.0
xs[10,17,22]: 0.0
xs[10,17,23]: 0.0
xs[10,17,24]: 0.0
xs[11,4,1]: 0.0
xs[11,4,2]: 0.0
xs[11,4,3]: 0.0
xs[11,4,4]: 2500.0
xs[11,4,5]: 700.0
xs[11,4,6]: 500.0
xs[11,4,7]: 0.0
xs[11,4,8]: 263.903
xs[11,4,9]: 0.0
xs[11,4,10]: 0.0
xs[11,4,11]: 0.0
xs[11,4,12]: 0.0
xs[11,4,13]: 0.0
xs[11,4,14]: 0.0
xs[11,4,15]: 0.0
xs[11,4,16]: 0.0
xs[11,4,17]: 0.0
xs[11,4,18]: 0.0
xs[11,4,19]: 0.0
xs[11,4,20]: 0.0
xs[11,4,21]: 0.0
xs[11,4,22]: 0.0
xs[11,4,23]: 0.0
xs[11,4,24]: 0.0
xs[11,10,1]: 0.0
xs[11,10,2]: 0.0
xs[11,10,3]: 0.0
xs[11,10,4]: 0.0
xs[11,10,5]: 0.0
xs[11,10,6]: 0.0
xs[11,10,7]: 500.0
xs[11,10,8]: 536.097
xs[11,10,9]: 2000.0
xs[11,10,10]: 7432.813
xs[11,10,11]: 0.0
xs[11,10,12]: 0.0
xs[11,10,13]: 0.0
xs[11,10,14]: -0.0
xs[11,10,15]: 0.0
xs[11,10,16]: 2700.0
xs[11,10,17]: 2100.0
xs[11,10,18]: 100.0
xs[11,10,19]: 0.0
xs[11,10,20]: 600.0
xs[11,10,21]: 0.0
xs[11,10,22]: 1100.0
xs[11,10,23]: 0.0
xs[11,10,24]: 0.0
xs[11,12,1]: 800.0
xs[11,12,2]: 300.0
xs[11,12,3]: 400.0
xs[11,12,4]: 0.0
xs[11,12,5]: 0.0
xs[11,12,6]: 0.0
xs[11,12,7]: 0.0
xs[11,12,8]: 0.0
xs[11,12,9]: 0.0
xs[11,12,10]: 0.0
xs[11,12,11]: 0.0
xs[11,12,12]: 6400.0
xs[11,12,13]: 4000.0
xs[11,12,14]: 0.0
xs[11,12,15]: 0.0
xs[11,12,16]: 0.0
xs[11,12,17]: 0.0
xs[11,12,18]: 0.0
xs[11,12,19]: 0.0
xs[11,12,20]: 0.0
xs[11,12,21]: 0.0
xs[11,12,22]: 0.0
xs[11,12,23]: 0.0
xs[11,12,24]: 0.0
xs[11,14,1]: 0.0
xs[11,14,2]: 0.0
xs[11,14,3]: 0.0
xs[11,14,4]: 0.0
xs[11,14,5]: 0.0
xs[11,14,6]: 0.0
xs[11,14,7]: 0.0
xs[11,14,8]: -0.0
xs[11,14,9]: 0.0
xs[11,14,10]: 0.0
xs[11,14,11]: 0.0
xs[11,14,12]: 0.0
xs[11,14,13]: 0.0
xs[11,14,14]: 5461.914
xs[11,14,15]: 2100.0
xs[11,14,16]: 0.0
xs[11,14,17]: 0.0
xs[11,14,18]: 0.0
xs[11,14,19]: 700.0
xs[11,14,20]: 0.0
xs[11,14,21]: 400.0
xs[11,14,22]: 0.0
xs[11,14,23]: 1900.0
xs[11,14,24]: 600.0
xs[12,3,1]: 2400.0
xs[12,3,2]: 700.0
xs[12,3,3]: 900.0
xs[12,3,4]: 1600.0
xs[12,3,5]: 500.0
xs[12,3,6]: 500.0
xs[12,3,7]: 700.0
xs[12,3,8]: 1200.0
xs[12,3,9]: 1200.0
xs[12,3,10]: 0.0
xs[12,3,11]: 0.0
xs[12,3,12]: 0.0
xs[12,3,13]: 0.0
xs[12,3,14]: 0.0
xs[12,3,15]: 0.0
xs[12,3,16]: 0.0
xs[12,3,17]: 0.0
xs[12,3,18]: 0.0
xs[12,3,19]: 0.0
xs[12,3,20]: 0.0
xs[12,3,21]: 0.0
xs[12,3,22]: 0.0
xs[12,3,23]: 0.0
xs[12,3,24]: 0.0
xs[12,11,1]: 0.0
xs[12,11,2]: 0.0
xs[12,11,3]: 0.0
xs[12,11,4]: 0.0
xs[12,11,5]: 0.0
xs[12,11,6]: 0.0
xs[12,11,7]: 0.0
xs[12,11,8]: 0.0
xs[12,11,9]: 0.0
xs[12,11,10]: 3900.0
xs[12,11,11]: 3309.022
xs[12,11,12]: 0.0
xs[12,11,13]: 0.0
xs[12,11,14]: 1200.0
xs[12,11,15]: 700.0
xs[12,11,16]: 1300.0
xs[12,11,17]: 1100.0
xs[12,11,18]: 0.0
xs[12,11,19]: 300.0
xs[12,11,20]: 0.0
xs[12,11,21]: 0.0
xs[12,11,22]: 0.0
xs[12,11,23]: 0.0
xs[12,11,24]: 0.0
xs[12,13,1]: 0.0
xs[12,13,2]: 0.0
xs[12,13,3]: 0.0
xs[12,13,4]: 0.0
xs[12,13,5]: 0.0
xs[12,13,6]: 0.0
xs[12,13,7]: 0.0
xs[12,13,8]: 0.0
xs[12,13,9]: 0.0
xs[12,13,10]: 0.0
xs[12,13,11]: 0.0
xs[12,13,12]: 0.0
xs[12,13,13]: 8400.0
xs[12,13,14]: 0.0
xs[12,13,15]: 0.0
xs[12,13,16]: 0.0
xs[12,13,17]: 0.0
xs[12,13,18]: 200.0
xs[12,13,19]: 0.0
xs[12,13,20]: 400.0
xs[12,13,21]: 700.0
xs[12,13,22]: 1300.0
xs[12,13,23]: 1100.0
xs[12,13,24]: 900.0
xs[13,12,1]: 1400.0
xs[13,12,2]: 300.0
xs[13,12,3]: 300.0
xs[13,12,4]: 1000.0
xs[13,12,5]: 300.0
xs[13,12,6]: 300.0
xs[13,12,7]: 0.0
xs[13,12,8]: 600.0
xs[13,12,9]: 600.0
xs[13,12,10]: 1900.0
xs[13,12,11]: 1000.0
xs[13,12,12]: 4200.0
xs[13,12,13]: 0.0
xs[13,12,14]: 0.0
xs[13,12,15]: 0.0
xs[13,12,16]: 600.0
xs[13,12,17]: 500.0
xs[13,12,18]: 0.0
xs[13,12,19]: 0.0
xs[13,12,20]: 0.0
xs[13,12,21]: 0.0
xs[13,12,22]: 0.0
xs[13,12,23]: 0.0
xs[13,12,24]: 0.0
xs[13,24,1]: 0.0
xs[13,24,2]: 0.0
xs[13,24,3]: 0.0
xs[13,24,4]: 0.0
xs[13,24,5]: 0.0
xs[13,24,6]: 0.0
xs[13,24,7]: 400.0
xs[13,24,8]: 0.0
xs[13,24,9]: 0.0
xs[13,24,10]: 0.0
xs[13,24,11]: 0.0
xs[13,24,12]: 0.0
xs[13,24,13]: 0.0
xs[13,24,14]: 600.0
xs[13,24,15]: 700.0
xs[13,24,16]: 0.0
xs[13,24,17]: 0.0
xs[13,24,18]: 300.0
xs[13,24,19]: 300.0
xs[13,24,20]: 1000.0
xs[13,24,21]: 1300.0
xs[13,24,22]: 2600.0
xs[13,24,23]: 1900.0
xs[13,24,24]: 1700.0
xs[14,11,1]: 300.0
xs[14,11,2]: 100.0
xs[14,11,3]: 100.0
xs[14,11,4]: 1000.0
xs[14,11,5]: 200.0
xs[14,11,6]: 100.0
xs[14,11,7]: 0.0
xs[14,11,8]: 0.0
xs[14,11,9]: 600.0
xs[14,11,10]: 1532.813
xs[14,11,11]: 5588.769
xs[14,11,12]: 1700.0
xs[14,11,13]: 0.0
xs[14,11,14]: 0.0
xs[14,11,15]: 0.0
xs[14,11,16]: 0.0
xs[14,11,17]: 0.0
xs[14,11,18]: 0.0
xs[14,11,19]: 0.0
xs[14,11,20]: 0.0
xs[14,11,21]: 0.0
xs[14,11,22]: 0.0
xs[14,11,23]: 0.0
xs[14,11,24]: 0.0
xs[14,15,1]: 0.0
xs[14,15,2]: 0.0
xs[14,15,3]: 0.0
xs[14,15,4]: 0.0
xs[14,15,5]: 0.0
xs[14,15,6]: 0.0
xs[14,15,7]: 200.0
xs[14,15,8]: 400.0
xs[14,15,9]: 0.0
xs[14,15,10]: 567.187
xs[14,15,11]: 0.0
xs[14,15,12]: 0.0
xs[14,15,13]: 0.0
xs[14,15,14]: 0.0
xs[14,15,15]: 3400.0
xs[14,15,16]: 700.0
xs[14,15,17]: 700.0
xs[14,15,18]: 100.0
xs[14,15,19]: 1000.0
xs[14,15,20]: 500.0
xs[14,15,21]: 0.0
xs[14,15,22]: 1200.0
xs[14,15,23]: 0.0
xs[14,15,24]: 0.0
xs[14,23,1]: 0.0
xs[14,23,2]: 0.0
xs[14,23,3]: 0.0
xs[14,23,4]: 0.0
xs[14,23,5]: 0.0
xs[14,23,6]: -0.0
xs[14,23,7]: 0.0
xs[14,23,8]: 0.0
xs[14,23,9]: 0.0
xs[14,23,10]: 0.0
xs[14,23,11]: 0.0
xs[14,23,12]: 0.0
xs[14,23,13]: 600.0
xs[14,23,14]: 0.0
xs[14,23,15]: 0.0
xs[14,23,16]: 0.0
xs[14,23,17]: 0.0
xs[14,23,18]: 0.0
xs[14,23,19]: 0.0
xs[14,23,20]: 0.0
xs[14,23,21]: 800.0
xs[14,23,22]: 0.0
xs[14,23,23]: 3000.0
xs[14,23,24]: 1000.0
xs[15,10,1]: 800.0
xs[15,10,2]: 100.0
xs[15,10,3]: 100.0
xs[15,10,4]: 1100.0
xs[15,10,5]: 500.0
xs[15,10,6]: 200.0
xs[15,10,7]: 0.0
xs[15,10,8]: 0.0
xs[15,10,9]: 3100.0
xs[15,10,10]: 10767.187
xs[15,10,11]: 1211.231
xs[15,10,12]: 0.0
xs[15,10,13]: 0.0
xs[15,10,14]: 0.0
xs[15,10,15]: 0.0
xs[15,10,16]: -0.0
xs[15,10,17]: 0.0
xs[15,10,18]: 0.0
xs[15,10,19]: 0.0
xs[15,10,20]: 0.0
xs[15,10,21]: 0.0
xs[15,10,22]: 0.0
xs[15,10,23]: 0.0
xs[15,10,24]: 0.0
xs[15,14,1]: 0.0
xs[15,14,2]: 0.0
xs[15,14,3]: 0.0
xs[15,14,4]: 0.0
xs[15,14,5]: 0.0
xs[15,14,6]: 0.0
xs[15,14,7]: 0.0
xs[15,14,8]: 0.0
xs[15,14,9]: 0.0
xs[15,14,10]: 0.0
xs[15,14,11]: 1688.769
xs[15,14,12]: 1000.0
xs[15,14,13]: 0.0
xs[15,14,14]: 6138.086
xs[15,14,15]: -0.0
xs[15,14,16]: 0.0
xs[15,14,17]: 0.0
xs[15,14,18]: 0.0
xs[15,14,19]: 0.0
xs[15,14,20]: 0.0
xs[15,14,21]: 0.0
xs[15,14,22]: 0.0
xs[15,14,23]: 0.0
xs[15,14,24]: 0.0
xs[15,19,1]: 0.0
xs[15,19,2]: -0.0
xs[15,19,3]: 0.0
xs[15,19,4]: 0.0
xs[15,19,5]: 0.0
xs[15,19,6]: 0.0
xs[15,19,7]: 360.227
xs[15,19,8]: 1000.0
xs[15,19,9]: 0.0
xs[15,19,10]: 0.0
xs[15,19,11]: 0.0
xs[15,19,12]: 0.0
xs[15,19,13]: 0.0
xs[15,19,14]: 0.0
xs[15,19,15]: 0.0
xs[15,19,16]: 1900.0
xs[15,19,17]: 5400.0
xs[15,19,18]: 300.0
xs[15,19,19]: 6900.0
xs[15,19,20]: 1600.0
xs[15,19,21]: 0.0
xs[15,19,22]: 0.0
xs[15,19,23]: 0.0
xs[15,19,24]: 0.0
xs[15,22,1]: 0.0
xs[15,22,2]: 0.0
xs[15,22,3]: 0.0
xs[15,22,4]: 0.0
xs[15,22,5]: 0.0
xs[15,22,6]: 0.0
xs[15,22,7]: 339.773
xs[15,22,8]: 0.0
xs[15,22,9]: 0.0
xs[15,22,10]: 0.0
xs[15,22,11]: 0.0
xs[15,22,12]: 0.0
xs[15,22,13]: 1000.0
xs[15,22,14]: 0.0
xs[15,22,15]: 0.0
xs[15,22,16]: 0.0
xs[15,22,17]: 0.0
xs[15,22,18]: 0.0
xs[15,22,19]: 0.0
xs[15,22,20]: 0.0
xs[15,22,21]: 3300.0
xs[15,22,22]: 12900.0
xs[15,22,23]: 4200.0
xs[15,22,24]: 1800.0
xs[16,8,1]: 500.0
xs[16,8,2]: 700.0
xs[16,8,3]: 200.0
xs[16,8,4]: 800.0
xs[16,8,5]: 500.0
xs[16,8,6]: 1600.0
xs[16,8,7]: 0.0
xs[16,8,8]: 5897.842
xs[16,8,9]: 0.0
xs[16,8,10]: 0.0
xs[16,8,11]: 0.0
xs[16,8,12]: 0.0
xs[16,8,13]: 0.0
xs[16,8,14]: 0.0
xs[16,8,15]: -0.0
xs[16,8,16]: 0.0
xs[16,8,17]: 0.0
xs[16,8,18]: 0.0
xs[16,8,19]: 0.0
xs[16,8,20]: 0.0
xs[16,8,21]: 0.0
xs[16,8,22]: 0.0
xs[16,8,23]: 0.0
xs[16,8,24]: -0.0
xs[16,10,1]: 0.0
xs[16,10,2]: 0.0
xs[16,10,3]: 0.0
xs[16,10,4]: 0.0
xs[16,10,5]: 0.0
xs[16,10,6]: 0.0
xs[16,10,7]: 0.0
xs[16,10,8]: 0.0
xs[16,10,9]: 2200.0
xs[16,10,10]: 7773.791
xs[16,10,11]: 2700.0
xs[16,10,12]: 700.0
xs[16,10,13]: 600.0
xs[16,10,14]: 0.0
xs[16,10,15]: 0.0
xs[16,10,16]: 0.0
xs[16,10,17]: 0.0
xs[16,10,18]: 0.0
xs[16,10,19]: 0.0
xs[16,10,20]: 0.0
xs[16,10,21]: 0.0
xs[16,10,22]: 0.0
xs[16,10,23]: 0.0
xs[16,10,24]: 0.0
xs[16,17,1]: 0.0
xs[16,17,2]: 0.0
xs[16,17,3]: 0.0
xs[16,17,4]: 0.0
xs[16,17,5]: 0.0
xs[16,17,6]: 0.0
xs[16,17,7]: 0.0
xs[16,17,8]: 0.0
xs[16,17,9]: 0.0
xs[16,17,10]: 0.0
xs[16,17,11]: 0.0
xs[16,17,12]: 0.0
xs[16,17,13]: 0.0
xs[16,17,14]: 1100.0
xs[16,17,15]: 1800.0
xs[16,17,16]: 0.0
xs[16,17,17]: 7712.718
xs[16,17,18]: 0.0
xs[16,17,19]: 2300.0
xs[16,17,20]: 0.0
xs[16,17,21]: 0.0
xs[16,17,22]: 1200.0
xs[16,17,23]: 0.0
xs[16,17,24]: 0.0
xs[16,18,1]: 0.0
xs[16,18,2]: 0.0
xs[16,18,3]: 0.0
xs[16,18,4]: 0.0
xs[16,18,5]: 0.0
xs[16,18,6]: 0.0
xs[16,18,7]: 4800.0
xs[16,18,8]: 0.0
xs[16,18,9]: 0.0
xs[16,18,10]: 0.0
xs[16,18,11]: 0.0
xs[16,18,12]: 0.0
xs[16,18,13]: 0.0
xs[16,18,14]: 0.0
xs[16,18,15]: 0.0
xs[16,18,16]: 0.0
xs[16,18,17]: 0.0
xs[16,18,18]: 2100.0
xs[16,18,19]: 0.0
xs[16,18,20]: 5300.0
xs[16,18,21]: 600.0
xs[16,18,22]: 0.0
xs[16,18,23]: 500.0
xs[16,18,24]: 300.0
xs[17,10,1]: 400.0
xs[17,10,2]: 0.0
xs[17,10,3]: 100.0
xs[17,10,4]: 500.0
xs[17,10,5]: 200.0
xs[17,10,6]: 0.0
xs[17,10,7]: 0.0
xs[17,10,8]: 0.0
xs[17,10,9]: 900.0
xs[17,10,10]: 2000.0
xs[17,10,11]: 1000.0
xs[17,10,12]: 600.0
xs[17,10,13]: 500.0
xs[17,10,14]: 0.0
xs[17,10,15]: 0.0
xs[17,10,16]: 0.0
xs[17,10,17]: 0.0
xs[17,10,18]: -0.0
xs[17,10,19]: 0.0
xs[17,10,20]: 0.0
xs[17,10,21]: 0.0
xs[17,10,22]: 0.0
xs[17,10,23]: 0.0
xs[17,10,24]: 0.0
xs[17,16,1]: 0.0
xs[17,16,2]: 300.0
xs[17,16,3]: 0.0
xs[17,16,4]: 0.0
xs[17,16,5]: 0.0
xs[17,16,6]: 700.0
xs[17,16,7]: 1000.0
xs[17,16,8]: 3100.0
xs[17,16,9]: 0.0
xs[17,16,10]: 0.0
xs[17,16,11]: 0.0
xs[17,16,12]: 0.0
xs[17,16,13]: 0.0
xs[17,16,14]: 0.0
xs[17,16,15]: 0.0
xs[17,16,16]: 6000.0
xs[17,16,17]: 0.0
xs[17,16,18]: 600.0
xs[17,16,19]: 0.0
xs[17,16,20]: 0.0
xs[17,16,21]: 0.0
xs[17,16,22]: 0.0
xs[17,16,23]: 0.0
xs[17,16,24]: -0.0
xs[17,19,1]: -0.0
xs[17,19,2]: 0.0
xs[17,19,3]: 0.0
xs[17,19,4]: 0.0
xs[17,19,5]: 0.0
xs[17,19,6]: 0.0
xs[17,19,7]: 0.0
xs[17,19,8]: 0.0
xs[17,19,9]: 0.0
xs[17,19,10]: 0.0
xs[17,19,11]: 0.0
xs[17,19,12]: 0.0
xs[17,19,13]: 0.0
xs[17,19,14]: 1800.0
xs[17,19,15]: 3300.0
xs[17,19,16]: 0.0
xs[17,19,17]: 0.0
xs[17,19,18]: 0.0
xs[17,19,19]: 4000.0
xs[17,19,20]: 1700.0
xs[17,19,21]: 600.0
xs[17,19,22]: 2900.0
xs[17,19,23]: 600.0
xs[17,19,24]: 300.0
xs[18,7,1]: 400.0
xs[18,7,2]: 200.0
xs[18,7,3]: 0.0
xs[18,7,4]: 400.0
xs[18,7,5]: 100.0
xs[18,7,6]: 800.0
xs[18,7,7]: 8000.0
xs[18,7,8]: 2600.0
xs[18,7,9]: 0.0
xs[18,7,10]: 0.0
xs[18,7,11]: 0.0
xs[18,7,12]: 0.0
xs[18,7,13]: 0.0
xs[18,7,14]: 0.0
xs[18,7,15]: 0.0
xs[18,7,16]: 0.0
xs[18,7,17]: 0.0
xs[18,7,18]: 0.0
xs[18,7,19]: 0.0
xs[18,7,20]: 0.0
xs[18,7,21]: 0.0
xs[18,7,22]: 0.0
xs[18,7,23]: 0.0
xs[18,7,24]: 0.0
xs[18,16,1]: 0.0
xs[18,16,2]: 0.0
xs[18,16,3]: 0.0
xs[18,16,4]: 0.0
xs[18,16,5]: 0.0
xs[18,16,6]: 0.0
xs[18,16,7]: 0.0
xs[18,16,8]: 0.0
xs[18,16,9]: 800.0
xs[18,16,10]: 5100.0
xs[18,16,11]: 1300.0
xs[18,16,12]: 0.0
xs[18,16,13]: 0.0
xs[18,16,14]: 0.0
xs[18,16,15]: -0.0
xs[18,16,16]: 6100.0
xs[18,16,17]: 2412.718
xs[18,16,18]: 0.0
xs[18,16,19]: 0.0
xs[18,16,20]: 0.0
xs[18,16,21]: 0.0
xs[18,16,22]: 0.0
xs[18,16,23]: 0.0
xs[18,16,24]: 0.0
xs[18,20,1]: 0.0
xs[18,20,2]: 0.0
xs[18,20,3]: 0.0
xs[18,20,4]: -0.0
xs[18,20,5]: 0.0
xs[18,20,6]: 0.0
xs[18,20,7]: 0.0
xs[18,20,8]: 0.0
xs[18,20,9]: 0.0
xs[18,20,10]: 0.0
xs[18,20,11]: 0.0
xs[18,20,12]: 200.0
xs[18,20,13]: 500.0
xs[18,20,14]: 300.0
xs[18,20,15]: 700.0
xs[18,20,16]: 0.0
xs[18,20,17]: 0.0
xs[18,20,18]: 0.0
xs[18,20,19]: 700.0
xs[18,20,20]: 8200.0
xs[18,20,21]: 1400.0
xs[18,20,22]: 1500.0
xs[18,20,23]: 1200.0
xs[18,20,24]: 600.0
xs[19,15,1]: 300.0
xs[19,15,2]: 0.0
xs[19,15,3]: 0.0
xs[19,15,4]: 200.0
xs[19,15,5]: 100.0
xs[19,15,6]: 0.0
xs[19,15,7]: 0.0
xs[19,15,8]: 0.0
xs[19,15,9]: 400.0
xs[19,15,10]: 1800.0
xs[19,15,11]: 400.0
xs[19,15,12]: 300.0
xs[19,15,13]: 300.0
xs[19,15,14]: 2900.0
xs[19,15,15]: 5900.0
xs[19,15,16]: -0.0
xs[19,15,17]: 0.0
xs[19,15,18]: 0.0
xs[19,15,19]: 0.0
xs[19,15,20]: 0.0
xs[19,15,21]: 1000.0
xs[19,15,22]: 4100.0
xs[19,15,23]: 900.0
xs[19,15,24]: 400.0
xs[19,17,1]: 0.0
xs[19,17,2]: 100.0
xs[19,17,3]: 0.0
xs[19,17,4]: -0.0
xs[19,17,5]: 0.0
xs[19,17,6]: 200.0
xs[19,17,7]: 0.0
xs[19,17,8]: 1700.0
xs[19,17,9]: 0.0
xs[19,17,10]: 0.0
xs[19,17,11]: 0.0
xs[19,17,12]: 0.0
xs[19,17,13]: 0.0
xs[19,17,14]: 0.0
xs[19,17,15]: 0.0
xs[19,17,16]: 3200.0
xs[19,17,17]: 7987.282
xs[19,17,18]: 0.0
xs[19,17,19]: 0.0
xs[19,17,20]: 0.0
xs[19,17,21]: 0.0
xs[19,17,22]: 0.0
xs[19,17,23]: 0.0
xs[19,17,24]: 0.0
xs[19,20,1]: 0.0
xs[19,20,2]: 0.0
xs[19,20,3]: 0.0
xs[19,20,4]: 0.0
xs[19,20,5]: 0.0
xs[19,20,6]: 0.0
xs[19,20,7]: 760.227
xs[19,20,8]: 0.0
xs[19,20,9]: 0.0
xs[19,20,10]: 0.0
xs[19,20,11]: 0.0
xs[19,20,12]: 0.0
xs[19,20,13]: 0.0
xs[19,20,14]: 0.0
xs[19,20,15]: 0.0
xs[19,20,16]: 0.0
xs[19,20,17]: 0.0
xs[19,20,18]: 600.0
xs[19,20,19]: 0.0
xs[19,20,20]: 4500.0
xs[19,20,21]: 0.0
xs[19,20,22]: 0.0
xs[19,20,23]: 0.0
xs[19,20,24]: 0.0
xs[20,18,1]: 300.0
xs[20,18,2]: 200.0
xs[20,18,3]: 0.0
xs[20,18,4]: 300.0
xs[20,18,5]: 100.0
xs[20,18,6]: 700.0
xs[20,18,7]: 3000.0
xs[20,18,8]: 2300.0
xs[20,18,9]: 600.0
xs[20,18,10]: 2500.0
xs[20,18,11]: 600.0
xs[20,18,12]: 0.0
xs[20,18,13]: 0.0
xs[20,18,14]: 0.0
xs[20,18,15]: 0.0
xs[20,18,16]: 4200.0
xs[20,18,17]: 812.718
xs[20,18,18]: 1800.0
xs[20,18,19]: 0.0
xs[20,18,20]: -0.0
xs[20,18,21]: 0.0
xs[20,18,22]: 0.0
xs[20,18,23]: 0.0
xs[20,18,24]: 0.0
xs[20,19,1]: 0.0
xs[20,19,2]: 0.0
xs[20,19,3]: 0.0
xs[20,19,4]: 0.0
xs[20,19,5]: 0.0
xs[20,19,6]: 0.0
xs[20,19,7]: 0.0
xs[20,19,8]: 0.0
xs[20,19,9]: 0.0
xs[20,19,10]: 0.0
xs[20,19,11]: 0.0
xs[20,19,12]: 0.0
xs[20,19,13]: 0.0
xs[20,19,14]: 800.0
xs[20,19,15]: 1800.0
xs[20,19,16]: 0.0
xs[20,19,17]: 887.282
xs[20,19,18]: 0.0
xs[20,19,19]: 1900.0
xs[20,19,20]: 0.0
xs[20,19,21]: 0.0
xs[20,19,22]: 0.0
xs[20,19,23]: -0.0
xs[20,19,24]: 0.0
xs[20,21,1]: 0.0
xs[20,21,2]: 0.0
xs[20,21,3]: 0.0
xs[20,21,4]: 0.0
xs[20,21,5]: -0.0
xs[20,21,6]: 0.0
xs[20,21,7]: 0.0
xs[20,21,8]: 0.0
xs[20,21,9]: 0.0
xs[20,21,10]: 0.0
xs[20,21,11]: 0.0
xs[20,21,12]: 700.0
xs[20,21,13]: 1100.0
xs[20,21,14]: 0.0
xs[20,21,15]: 0.0
xs[20,21,16]: 0.0
xs[20,21,17]: 0.0
xs[20,21,18]: 0.0
xs[20,21,19]: 0.0
xs[20,21,20]: 0.0
xs[20,21,21]: 2600.0
xs[20,21,22]: 0.0
xs[20,21,23]: 0.0
xs[20,21,24]: 1000.0
xs[20,22,1]: 0.0
xs[20,22,2]: 0.0
xs[20,22,3]: 0.0
xs[20,22,4]: 0.0
xs[20,22,5]: 0.0
xs[20,22,6]: 0.0
xs[20,22,7]: 0.0
xs[20,22,8]: 0.0
xs[20,22,9]: 0.0
xs[20,22,10]: 0.0
xs[20,22,11]: 0.0
xs[20,22,12]: 0.0
xs[20,22,13]: 0.0
xs[20,22,14]: 0.0
xs[20,22,15]: 0.0
xs[20,22,16]: 0.0
xs[20,22,17]: 0.0
xs[20,22,18]: 0.0
xs[20,22,19]: 0.0
xs[20,22,20]: 0.0
xs[20,22,21]: 0.0
xs[20,22,22]: 3900.0
xs[20,22,23]: 1900.0
xs[20,22,24]: 0.0
xs[21,20,1]: 0.0
xs[21,20,2]: 0.0
xs[21,20,3]: 0.0
xs[21,20,4]: 0.0
xs[21,20,5]: 0.0
xs[21,20,6]: 100.0
xs[21,20,7]: 700.0
xs[21,20,8]: 600.0
xs[21,20,9]: 0.0
xs[21,20,10]: 0.0
xs[21,20,11]: 0.0
xs[21,20,12]: 0.0
xs[21,20,13]: 0.0
xs[21,20,14]: 0.0
xs[21,20,15]: 0.0
xs[21,20,16]: 900.0
xs[21,20,17]: 0.0
xs[21,20,18]: 400.0
xs[21,20,19]: 0.0
xs[21,20,20]: 2600.0
xs[21,20,21]: 0.0
xs[21,20,22]: 0.0
xs[21,20,23]: 0.0
xs[21,20,24]: 0.0
xs[21,22,1]: 0.0
xs[21,22,2]: 0.0
xs[21,22,3]: 0.0
xs[21,22,4]: 0.0
xs[21,22,5]: 0.0
xs[21,22,6]: 0.0
xs[21,22,7]: 0.0
xs[21,22,8]: 0.0
xs[21,22,9]: 300.0
xs[21,22,10]: 2000.0
xs[21,22,11]: 0.0
xs[21,22,12]: 0.0
xs[21,22,13]: 0.0
xs[21,22,14]: 0.0
xs[21,22,15]: 1900.0
xs[21,22,16]: 0.0
xs[21,22,17]: 600.0
xs[21,22,18]: 0.0
xs[21,22,19]: 800.0
xs[21,22,20]: 0.0
xs[21,22,21]: 0.0
xs[21,22,22]: 4212.191
xs[21,22,23]: 0.0
xs[21,22,24]: 0.0
xs[21,24,1]: 500.0
xs[21,24,2]: 0.0
xs[21,24,3]: 100.0
xs[21,24,4]: 200.0
xs[21,24,5]: 100.0
xs[21,24,6]: 0.0
xs[21,24,7]: 0.0
xs[21,24,8]: 0.0
xs[21,24,9]: 0.0
xs[21,24,10]: 0.0
xs[21,24,11]: 400.0
xs[21,24,12]: 1700.0
xs[21,24,13]: 4000.0
xs[21,24,14]: 400.0
xs[21,24,15]: 0.0
xs[21,24,16]: 0.0
xs[21,24,17]: 0.0
xs[21,24,18]: 0.0
xs[21,24,19]: 0.0
xs[21,24,20]: 0.0
xs[21,24,21]: 0.0
xs[21,24,22]: 0.0
xs[21,24,23]: 700.0
xs[21,24,24]: 2633.001
xs[22,15,1]: 0.0
xs[22,15,2]: 0.0
xs[22,15,3]: 0.0
xs[22,15,4]: 400.0
xs[22,15,5]: 200.0
xs[22,15,6]: 0.0
xs[22,15,7]: 0.0
xs[22,15,8]: 0.0
xs[22,15,9]: 1700.0
xs[22,15,10]: 6400.0
xs[22,15,11]: 1100.0
xs[22,15,12]: 0.0
xs[22,15,13]: 0.0
xs[22,15,14]: 1200.0
xs[22,15,15]: 5500.0
xs[22,15,16]: 0.0
xs[22,15,17]: 3200.0
xs[22,15,18]: 0.0
xs[22,15,19]: 2300.0
xs[22,15,20]: 0.0
xs[22,15,21]: 0.0
xs[22,15,22]: 0.0
xs[22,15,23]: 0.0
xs[22,15,24]: 0.0
xs[22,20,1]: 0.0
xs[22,20,2]: 100.0
xs[22,20,3]: 0.0
xs[22,20,4]: 0.0
xs[22,20,5]: 0.0
xs[22,20,6]: 300.0
xs[22,20,7]: 1039.773
xs[22,20,8]: 800.0
xs[22,20,9]: 0.0
xs[22,20,10]: 0.0
xs[22,20,11]: 0.0
xs[22,20,12]: 0.0
xs[22,20,13]: 0.0
xs[22,20,14]: 0.0
xs[22,20,15]: 0.0
xs[22,20,16]: 1700.0
xs[22,20,17]: 0.0
xs[22,20,18]: 400.0
xs[22,20,19]: 0.0
xs[22,20,20]: 3100.0
xs[22,20,21]: 0.0
xs[22,20,22]: 0.0
xs[22,20,23]: 0.0
xs[22,20,24]: 0.0
xs[22,21,1]: 400.0
xs[22,21,2]: 0.0
xs[22,21,3]: 100.0
xs[22,21,4]: 0.0
xs[22,21,5]: 0.0
xs[22,21,6]: 0.0
xs[22,21,7]: 0.0
xs[22,21,8]: -0.0
xs[22,21,9]: 0.0
xs[22,21,10]: 0.0
xs[22,21,11]: 0.0
xs[22,21,12]: 700.0
xs[22,21,13]: 2300.0
xs[22,21,14]: 0.0
xs[22,21,15]: 0.0
xs[22,21,16]: 0.0
xs[22,21,17]: 0.0
xs[22,21,18]: 0.0
xs[22,21,19]: 0.0
xs[22,21,20]: 0.0
xs[22,21,21]: 5100.0
xs[22,21,22]: 0.0
xs[22,21,23]: 0.0
xs[22,21,24]: 1133.001
xs[22,23,1]: 0.0
xs[22,23,2]: 0.0
xs[22,23,3]: 0.0
xs[22,23,4]: 0.0
xs[22,23,5]: 0.0
xs[22,23,6]: 0.0
xs[22,23,7]: 0.0
xs[22,23,8]: 0.0
xs[22,23,9]: 0.0
xs[22,23,10]: 0.0
xs[22,23,11]: 0.0
xs[22,23,12]: 0.0
xs[22,23,13]: 0.0
xs[22,23,14]: 0.0
xs[22,23,15]: 0.0
xs[22,23,16]: 0.0
xs[22,23,17]: 0.0
xs[22,23,18]: 0.0
xs[22,23,19]: 0.0
xs[22,23,20]: 0.0
xs[22,23,21]: 0.0
xs[22,23,22]: 0.0
xs[22,23,23]: 8200.0
xs[22,23,24]: 1766.999
xs[23,14,1]: 0.0
xs[23,14,2]: 0.0
xs[23,14,3]: 0.0
xs[23,14,4]: 500.0
xs[23,14,5]: 100.0
xs[23,14,6]: 0.0
xs[23,14,7]: 0.0
xs[23,14,8]: 0.0
xs[23,14,9]: 0.0
xs[23,14,10]: 0.0
xs[23,14,11]: 2300.0
xs[23,14,12]: 0.0
xs[23,14,13]: 0.0
xs[23,14,14]: 2500.0
xs[23,14,15]: 0.0
xs[23,14,16]: 0.0
xs[23,14,17]: 0.0
xs[23,14,18]: 0.0
xs[23,14,19]: 0.0
xs[23,14,20]: 0.0
xs[23,14,21]: 0.0
xs[23,14,22]: -0.0
xs[23,14,23]: 0.0
xs[23,14,24]: 0.0
xs[23,22,1]: 0.0
xs[23,22,2]: 0.0
xs[23,22,3]: 0.0
xs[23,22,4]: 0.0
xs[23,22,5]: 0.0
xs[23,22,6]: 100.0
xs[23,22,7]: 200.0
xs[23,22,8]: 300.0
xs[23,22,9]: 700.0
xs[23,22,10]: 1800.0
xs[23,22,11]: 0.0
xs[23,22,12]: 0.0
xs[23,22,13]: 0.0
xs[23,22,14]: 0.0
xs[23,22,15]: 1000.0
xs[23,22,16]: 500.0
xs[23,22,17]: 900.0
xs[23,22,18]: 100.0
xs[23,22,19]: 300.0
xs[23,22,20]: 700.0
xs[23,22,21]: 0.0
xs[23,22,22]: 3387.809
xs[23,22,23]: 0.0
xs[23,22,24]: 0.0
xs[23,24,1]: 300.0
xs[23,24,2]: 0.0
xs[23,24,3]: 100.0
xs[23,24,4]: -0.0
xs[23,24,5]: 0.0
xs[23,24,6]: 0.0
xs[23,24,7]: 0.0
xs[23,24,8]: 0.0
xs[23,24,9]: 0.0
xs[23,24,10]: 0.0
xs[23,24,11]: 0.0
xs[23,24,12]: 700.0
xs[23,24,13]: 1400.0
xs[23,24,14]: 0.0
xs[23,24,15]: 0.0
xs[23,24,16]: 0.0
xs[23,24,17]: 0.0
xs[23,24,18]: 0.0
xs[23,24,19]: 0.0
xs[23,24,20]: 0.0
xs[23,24,21]: 1500.0
xs[23,24,22]: 0.0
xs[23,24,23]: 0.0
xs[23,24,24]: 3466.999
xs[24,13,1]: 900.0
xs[24,13,2]: 0.0
xs[24,13,3]: 200.0
xs[24,13,4]: 400.0
xs[24,13,5]: 100.0
xs[24,13,6]: 100.0
xs[24,13,7]: 0.0
xs[24,13,8]: 0.0
xs[24,13,9]: 0.0
xs[24,13,10]: 0.0
xs[24,13,11]: 0.0
xs[24,13,12]: 2900.0
xs[24,13,13]: 6100.0
xs[24,13,14]: 0.0
xs[24,13,15]: 0.0
xs[24,13,16]: 0.0
xs[24,13,17]: 0.0
xs[24,13,18]: 0.0
xs[24,13,19]: 0.0
xs[24,13,20]: 0.0
xs[24,13,21]: 0.0
xs[24,13,22]: 0.0
xs[24,13,23]: 0.0
xs[24,13,24]: 0.0
xs[24,21,1]: 0.0
xs[24,21,2]: 0.0
xs[24,21,3]: 0.0
xs[24,21,4]: 0.0
xs[24,21,5]: 0.0
xs[24,21,6]: 0.0
xs[24,21,7]: 500.0
xs[24,21,8]: 200.0
xs[24,21,9]: 0.0
xs[24,21,10]: 800.0
xs[24,21,11]: 0.0
xs[24,21,12]: 0.0
xs[24,21,13]: 0.0
xs[24,21,14]: 0.0
xs[24,21,15]: 1100.0
xs[24,21,16]: 300.0
xs[24,21,17]: 0.0
xs[24,21,18]: 300.0
xs[24,21,19]: 400.0
xs[24,21,20]: 1400.0
xs[24,21,21]: 3300.0
xs[24,21,22]: 2412.191
xs[24,21,23]: 0.0
xs[24,21,24]: 0.0
xs[24,23,1]: 0.0
xs[24,23,2]: 0.0
xs[24,23,3]: 0.0
xs[24,23,4]: 0.0
xs[24,23,5]: 0.0
xs[24,23,6]: 0.0
xs[24,23,7]: 0.0
xs[24,23,8]: 0.0
xs[24,23,9]: 200.0
xs[24,23,10]: 0.0
xs[24,23,11]: 1000.0
xs[24,23,12]: 0.0
xs[24,23,13]: 0.0
xs[24,23,14]: 1400.0
xs[24,23,15]: 0.0
xs[24,23,16]: 0.0
xs[24,23,17]: 300.0
xs[24,23,18]: 0.0
xs[24,23,19]: 0.0
xs[24,23,20]: 0.0
xs[24,23,21]: 0.0
xs[24,23,22]: 1287.809
xs[24,23,23]: 3300.0
xs[24,23,24]: 0.0
x2[1,2]: 16984516.854
x2[1,3]: 53763410.198
x2[2,1]: 17076346.773
x2[2,6]: 27748097.962
x2[3,1]: 53600373.433
x2[3,4]: 130492512.893
x2[3,12]: 94265102.523
x2[4,3]: 130444439.676
x2[4,5]: 288872746.555
x2[4,11]: 15021680.298
x2[5,4]: 289205075.014
x2[5,6]: 99533609.663
x2[5,9]: 173344144.762
x2[6,2]: 27865438.15
x2[6,5]: 101051736.882
x2[6,8]: 179503210.472
x2[7,8]: 73960000.0
x2[7,18]: 153760000.0
x2[8,6]: 181839910.811
x2[8,7]: 72250000.0
x2[8,9]: 8651870.728
x2[8,16]: 104198536.382
x2[9,5]: 171610000.0
x2[9,8]: 8633341.745
x2[9,10]: 471212456.822
x2[10,9]: 472551725.185
x2[10,11]: 295439102.566
x2[10,15]: 318197296.474
x2[10,16]: 203457824.74
x2[10,17]: 33640000.0
x2[11,4]: 15712528.415
x2[11,10]: 291347665.396
x2[11,12]: 141610000.001
x2[11,14]: 124588333.948
x2[12,3]: 94090000.0
x2[12,11]: 139452993.696
x2[12,13]: 169000000.0
x2[13,12]: 169000000.0
x2[13,24]: 116640000.0
x2[14,11]: 125923900.941
x2[14,15]: 76863576.66
x2[14,23]: 29160000.0
x2[15,10]: 319637832.78
x2[15,14]: 77913368.982
x2[15,19]: 304859536.598
x2[15,22]: 554120899.805
x2[16,8]: 103995980.229
x2[16,10]: 195266829.104
x2[16,17]: 199168812.066
x2[16,18]: 184960000.0
x2[17,10]: 38440000.0
x2[17,16]: 136890000.0
x2[17,19]: 231040000.0
x2[18,7]: 156250000.0
x2[18,16]: 246889509.975
x2[18,20]: 234090000.0
x2[19,15]: 361000000.0
x2[19,17]: 173904404.007
x2[19,20]: 34342263.749
x2[20,18]: 303202751.501
x2[20,19]: 29022806.31
x2[20,21]: 29160000.0
x2[20,22]: 33640000.0
x2[21,20]: 28090000.0
x2[21,22]: 96279087.649
x2[21,24]: 115197300.888
x2[22,15]: 484000000.0
x2[22,20]: 55350218.155
x2[22,21]: 94731299.781
x2[22,23]: 99341077.96
x2[23,14]: 29160000.0
x2[23,22]: 99756333.273
x2[23,24]: 55756080.729
x2[24,13]: 114490000.0
x2[24,21]: 114751031.03
x2[24,23]: 56067287.109

Network Visualization¶

1. Network visualization with highlighted links¶

Now, let's visualize the results showcasing congested traffic flows and the selected links for expansion. In this graph, we'll observe the network's topology using node coordinates and links. Our graph will be directional to represent the road network.

Nodes are depicted in blue, while selected nodes and links are highlighted in pink and red.

Task 2.4:

Run the visualisation scripts. Note that you can also view the printout of the labels if it is difficult to read.

In [18]:
network_visualization_highlight_links (G, pos, link_select=links_selected)
No description has been provided for this image

2. Network visualization with upgraded links¶

In this section, we'll visualize our upgraded network, incorporating the new capacities. Following that, we'll represent the network along with its results, displaying the flow (F) and capacity (C) alongside each link.

Notes:

  1. Pink nodes highlight the selected nodes.
  2. Colored edges denote the upgraded edges selected through the optimization process.
  3. Various edge colors indicate different ranges for edge attributes (Flow/Capacity), as demonstrated in the legend.
  4. Diverse edge widths represent varying flow ranges on the edges.
  5. Your plot is interactive; to clearly view the numbers, simply click on them!
In [19]:
# Define new capacity after expansion
cap_normal = {(i, j): cap for (i, j), cap in net_data['capacity'].items()}
cap_extend = {(i, j): cap * extension_factor for (i, j), cap in net_data['capacity'].items()}
capacity = {(i, j): cap_normal[i, j] * (1 - links_selected[i, j]) + cap_extend[i, j] * links_selected[i, j]
            for (i, j) in links}
In [20]:
# To see flow and capacity for the entire network
network_visualization_upgraded (G = G, pos=pos, link_flow=link_flows, capacity_new=capacity ,link_select=links_selected, labels='on')
No description has been provided for this image

End of notebook.

Creative Commons License TU Delft MUDE

© Copyright 2023 MUDE Teaching Team TU Delft. This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.