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.
import gurobipy as gp
import pandas as pd
import numpy as np
from matplotlib import pyplot as plt
# 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.
# 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
# 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)
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.
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]
# 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)
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.
# 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.
## 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.
# 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.
# 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 $$# 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 $
# 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:
# 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!
# 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.
# 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.
#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
).
# 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.
network_visualization_highlight_links (G, pos, link_select=links_selected)
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:
- Pink nodes highlight the selected nodes.
- Colored edges denote the upgraded edges selected through the optimization process.
- Various edge colors indicate different ranges for edge attributes (Flow/Capacity), as demonstrated in the legend.
- Diverse edge widths represent varying flow ranges on the edges.
- Your plot is interactive; to clearly view the numbers, simply click on them!
# 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}
# 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')
End of notebook.