{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Optimization of Sao Paulo traffic" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Lead author: Jules Deschamps.\n", "\n", "This notebook presents a simple use case of *information geometry*, in the context of *traffic optimization* in Sao Paulo.\n", "We rely on a dataset listing all traffic jams in Sao Paulo for the past two decades (their location, date, their size, their duration, i.e. how long the traffic was jammed) to propose a solution involving information geometry.\n", "\n", "This analysis relies heavily on the geometry of the *Gamma manifold*, which is particularly adapted to addressing this situation, as seen later on." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", " \n", "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", " Figure 1: Sao Paulo: A city with 180km traffic jams -- BBC News\n", "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# 1. Introduction and Motivation" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "40% of São Paulo residents own a motor vehicle. While this is lower than cities in the United States, it is still higher than most other Latin American cities and São Paulo’s infrastructure was not built to accommodate such a large number of private vehicles. As The Urban Mobility Research Network of São Paulo found, some São Paulo residents spend one month per year in traffic, or 2.4 hours per day. As car ownership increases, and with it further congestion, this time spent in traffic will only grow. In that regard, considering the increase in car ownership and air pollution, even though widening roads only brings a temporary solution, it can alleviate Brazilians of the absurd amount of time they spend in traffic.\n", "\n", "In the role of Sao Paulo's city planners, we have been granted a certain amount of resources to solve the congestion problem of Sao Paulo. The issue at hand becomes that of choosing which roads to renovate. More formally, the goal is eventually to reduce the mean expected congestion time in traffic." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Setup" ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Working directory: C:\\Users\\Jules\\Documents\\geomstats\n" ] } ], "source": [ "import os\n", "import subprocess\n", "\n", "geomstats_gitroot_path = subprocess.check_output(\n", " [\"git\", \"rev-parse\", \"--show-toplevel\"], universal_newlines=True\n", ")\n", "\n", "os.chdir(geomstats_gitroot_path[:-1])\n", "\n", "print(\"Working directory: \", os.getcwd())" ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [], "source": [ "import matplotlib.pyplot as plt\n", "import geomstats.backend as gs\n", "import pandas as pd" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# 2. Dataset description" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We have at our disposal a dataset (accessible [here](https://www.kaggle.com/datasets/danlessa/sao-paulo-traffic-jams-since-2001)) containing traffic jam size measurements by CET at several locations on São Paulo between 2001 and 2019, with more than 5M entries.\n", "\n", "Available columns:\n", "- passage (str) - Name of the passage\n", "- direction (str)\n", "- type (str) - Indicates if the passage is an expressway (E)\n", "- region (str) - São Paulo region\n", "- timestamp (datetime) - When the traffic jam was measured (UTC-4)\n", "- jam_size (int) - Traffic jam in meters\n", "- segment (str) - Where the passage is located\n", "\n", "Our modeling will not take into account the fact that many of the passages/roads must have been renovated between 2001 and 2019. Similarly, the dataset does not offer information on the width of given roads (even though we could base it off of the type of the road), and therefore on their flow rate: this is an obvious flaw in our analysis but it is easy to fix if the relevant data can be accessed." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Pre-processing the dataset" ] }, { "cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "INFO: Data has already been downloaded... using cached file ('C:\\Users\\Jules\\.geomstats_data\\jam.zip').\n" ] } ], "source": [ "from geomstats.datasets.utils import load_sao_paulo\n", "df, jam_count = load_sao_paulo()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Some of the columns of the dataset are not necessary for our study: let alone __index__, __type__ and __segment__ do not seem to add any value to the table in our case. In addition, the times (__timestamp__) at which jams are occurring are not relevant in that specific format: it would make much more sense to have the duration of given jam. We also decide to drop the __jam_size__ column.\n", "\n", "Additionally, we would want to transform the original dataset so as to access a more relevant table, with features:\n", "- name of the road (primary key = passage + direction for instance, segments are regrouped within same key)\n", "- date (day only)\n", "- duration of the traffic jam (in h)\n" ] }, { "cell_type": "code", "execution_count": 25, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
namedateduration
0Abraão Ribeiro, Av Dr (F) Bairro...2005-01-121.0
1Abraão Ribeiro, Av Dr (F) Bairro...2005-01-201.5
2Abraão Ribeiro, Av Dr (F) Bairro...2005-01-211.5
3Abraão Ribeiro, Av Dr (F) Bairro...2005-02-244.5
4Abraão Ribeiro, Av Dr (F) Bairro...2005-02-282.0
............
650519Xangai, Vd unico/...2004-01-163.5
650520Xangai, Vd unico/...2004-03-244.0
650521Xangai, Vd unico/...2004-03-262.0
650522Xangai, Vd unico/...2004-04-294.0
650523Xangai, Vd unico/...2004-06-013.0
\n", "

650524 rows × 3 columns

\n", "
" ], "text/plain": [ " name date \\\n", "0 Abraão Ribeiro, Av Dr (F) Bairro... 2005-01-12 \n", "1 Abraão Ribeiro, Av Dr (F) Bairro... 2005-01-20 \n", "2 Abraão Ribeiro, Av Dr (F) Bairro... 2005-01-21 \n", "3 Abraão Ribeiro, Av Dr (F) Bairro... 2005-02-24 \n", "4 Abraão Ribeiro, Av Dr (F) Bairro... 2005-02-28 \n", "... ... ... \n", "650519 Xangai, Vd unico/... 2004-01-16 \n", "650520 Xangai, Vd unico/... 2004-03-24 \n", "650521 Xangai, Vd unico/... 2004-03-26 \n", "650522 Xangai, Vd unico/... 2004-04-29 \n", "650523 Xangai, Vd unico/... 2004-06-01 \n", "\n", " duration \n", "0 1.0 \n", "1 1.5 \n", "2 1.5 \n", "3 4.5 \n", "4 2.0 \n", "... ... \n", "650519 3.5 \n", "650520 4.0 \n", "650521 2.0 \n", "650522 4.0 \n", "650523 3.0 \n", "\n", "[650524 rows x 3 columns]" ] }, "execution_count": 25, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Above is the table __df__ of all traffic jams and their durations, for each day." ] }, { "cell_type": "code", "execution_count": 26, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'Abraão Ribeiro, Av Dr (F) Bairro/Centro ': 185,\n", " 'Abraão Ribeiro, Av Dr (F) Centro/Bairro ': 28,\n", " 'Abraão de Morais, Av Prof/Imig Santos/São Paulo ': 1870,\n", " 'Abraão de Morais, Av Prof/Imig São Paulo/Santos ': 852,\n", " 'Abraão de Morais, Av Prof/Imigrantes (F)Santos/São Paulo ': 396,\n", " 'Abraão de Morais, Av Prof/Imigrantes (F)São Paulo/Santos ': 107,\n", " 'Adolfo Pinheiro e Lgo 13/05 Bairro/Centro ': 391,\n", " 'Adolfo Pinheiro e Lgo 13/05 Centro/Bairro ': 657,\n", " 'Aliomar Baleeiro, Vd Min Anchieta/Imigrantes ': 3831,\n", " 'Aliomar Baleeiro, Vd Min Imigrantes/Anchieta ': 3191,\n", " 'Aliomar Baleeiro, Vd Min (F) Anchieta/Imigrantes ': 1,\n", " 'Alvarenga, R único// ': 1919,\n", " 'Amaro, Al Sto único// ': 1000,\n", " 'Amaro, Av Sto (F) Bairro/Centro ': 647,\n", " 'Amaro, Av Sto (F) Centro/Bairro ': 316,\n", " 'Amaro, Av Sto (Pavao/Nebraska) (F) Bairro/Centro ': 41,\n", " 'Amaro, Av Sto (Pavao/Nebraska) (F) Centro/Bairro ': 23,\n", " 'Amaro, Av Sto - DEC SA (F) Bairro/Centro ': 6,\n", " 'Amaro, Av Sto - DEC SA (F) Centro/Bairro ': 8,\n", " 'Amaro, Av Sto DEC IB Bairro/Centro ': 1814,\n", " 'Amaro, Av Sto DEC IB Centro/Bairro ': 1280,\n", " 'Amaro, Av Sto DEC SA Bairro/Centro ': 830,\n", " 'Amaro, Av Sto DEC SA Centro/Bairro ': 803,\n", " 'Anchieta, Via Santos/São Paulo ': 836,\n", " 'Anchieta, Via São Paulo/Santos ': 1293,\n", " 'Angélica, Av Bairro/Centro ': 19,\n", " 'Angélica, Av Centro/Bairro ': 29,\n", " 'Angélica, Av (F) Centro/Bairro ': 6,\n", " 'Antonio Nakashima, Vd único// ': 1432,\n", " 'Antártica, Vd Limão/Sumaré ': 1331,\n", " 'Antártica, Vd Sumaré/Limão ': 1308,\n", " 'Antônio Joaquim de Moura Andrade, Av Ibirapuera/Marginal ': 7071,\n", " 'Antônio Joaquim de Moura Andrade, Av Marginal/Ibirapuera ': 2428,\n", " 'Arcoverde, R Card //unico ': 238,\n", " 'Arcoverde, R Cardeal (F) único// ': 1270,\n", " 'Aricanduva, Av/Elev/Pt Itaquera/Marginal ': 4929,\n", " 'Aricanduva, Av/Elev/Pt Marginal/Itaquera ': 3891,\n", " 'Aricanduva/Elevado/Ponte( F) Itaquera/Marginal ': 2258,\n", " 'Aricanduva/Elevado/Ponte( F) Marginal/Itaquera ': 1315,\n", " 'Arnaldo, Av Dr Consolação/Sumare ': 2596,\n", " 'Arnaldo, Av Dr Sumare/Consolação ': 5998,\n", " 'Arthur da Costa e Silva, Elev Pres Lapa/Penha ': 4972,\n", " 'Arthur da Costa e Silva, Elev Pres Penha/Lapa ': 3743,\n", " 'Ary Torres, Eng. Pte único// ': 3517,\n", " 'Asc.Reis/R.Berta(Local) Bairro/Centro ': 2614,\n", " 'Asc.Reis/R.Berta(Local) Centro/Bairro ': 998,\n", " 'Ataliba Leonel, Av. Gal. Bairro/Centro ': 56,\n", " 'Ataliba Leonel, Av. Gal. Centro/Bairro ': 110,\n", " 'Atilio Fontana, Pte Capital/Interior ': 71,\n", " 'Atilio Fontana, Pte Interior/Capital ': 3640,\n", " 'Atlantica, AV Bairro/Centro ': 485,\n", " 'Atlantica, AV Centro/Bairro ': 24,\n", " 'Ayrton Senna I, Tn (NÃO USAR) Centro/Bairro ': 2,\n", " 'Ayrton Senna I, Túnel unico// ': 7159,\n", " 'Ayrton Senna II, Túnel unico// ': 3815,\n", " 'Bandeirantes, Av dos Imigrantes/Marginal ': 7714,\n", " 'Bandeirantes, Av dos Marginal/Imigrantes ': 6796,\n", " 'Bento, Lgo São //unico ': 9,\n", " 'Bernardino/Verg/Noe/Domingos/Jabaquara Bairro/Centro ': 2153,\n", " 'Bernardino/Verg/Noe/Domingos/Jabaquara Centro/Bairro ': 519,\n", " 'Bernardo Goldfarb, Pte Bairro/Centro ': 1079,\n", " 'Bernardo Goldfarb, Pte Centro/Bairro ': 174,\n", " 'Brasil, Av Ibirapuera/Pinheiros ': 246,\n", " 'Brasil, Av Pinheiros/Ibirapuera ': 537,\n", " 'Brás Leme, Av / Pte Casa Verde Bairro/Centro ': 2002,\n", " 'Brás Leme, Av / Pte Casa Verde Centro/Bairro ': 419,\n", " 'Butantã, R //unico ': 206,\n", " 'Butantã, R (F) unico// ': 2032,\n", " 'CJardim/Europa, Av/Colômbia, R (F) Bairro/Centro ': 1,\n", " 'Caetano Alvares, Av. Eng. Bairro/Centro ': 26,\n", " 'Caetano Alvares, Av. Eng. Centro/Bairro ': 85,\n", " 'Camargo, R único// ': 1430,\n", " 'Carlos Caldeira Filho, Av Bairro/Centro ': 1209,\n", " 'Carlos Caldeira Filho, Av Centro/Bairro ': 345,\n", " 'Carrão, Av Cons (F) Bairro/Centro ': 488,\n", " 'Carrão, Av Cons (F) Centro/Bairro ': 61,\n", " 'Carrão, Av Cons Bairro/Centro ': 264,\n", " 'Carrão, Av Cons Centro/Bairro ': 116,\n", " 'Casa Verde, Pte e Av Bras Leme (F) Bairro/Centro ': 874,\n", " 'Casa Verde, Pte e Av Bras Leme (F) Centro/Bairro ': 324,\n", " 'Catiguá, R / Melo Peixoto, R (F) Bairro/Centro ': 1339,\n", " 'Catiguá, R / Melo Peixoto, R (F) Centro/Bairro ': 21,\n", " 'Celso Garcia, Av Bairro/Centro ': 124,\n", " 'Celso Garcia, Av Centro/Bairro ': 549,\n", " 'Chucri Zaidan, Av Dr Bandeirantes/Morumbi ': 1706,\n", " 'Chucri Zaidan, Av Dr Morumbi/Bandeirantes ': 285,\n", " 'Chucri Zaidan, Av Dr (F) Bandeirantes/Morumbi ': 461,\n", " 'Chucri Zaidan, Av Dr (F) Morumbi/Bandeirantes ': 380,\n", " 'Cidade Jardim / Europa / Colômbia Bairro/Centro ': 6013,\n", " 'Cidade Jardim / Europa / Colômbia Centro/Bairro ': 5448,\n", " 'Cidade Universitária, Pt PanAmericana/USP ': 3050,\n", " 'Cidade Universitária, Pt USP/PanAmericana ': 179,\n", " 'Cidade Universitária, Pte (F) PanAmericana/USP ': 1744,\n", " 'Cidade Universitária, Pte (F) USP/PanAmericana ': 116,\n", " 'Clelia, R (F) único// ': 172,\n", " 'Clélia, R //unico ': 391,\n", " 'Consolação, R da Bairro/Centro ': 3618,\n", " 'Consolação, R da Centro/Bairro ': 3679,\n", " 'Consolação, R da (F) Bairro/Centro ': 2257,\n", " 'Consolação, R da (F) Centro/Bairro ': 2784,\n", " 'Copa-Afonso de S. Souza/Harry DannembergAricanduva/Itaquera ': 1,\n", " 'Copa-Aguia de Haia A Alvim/S Miguel ': 11,\n", " 'Copa-Aguia de Haia S Miguel/A Alvim ': 4,\n", " 'Copa-Aguia de Haia (F) S Miguel/A Alvim ': 1,\n", " 'Copa-Campanella Bairro/Centro ': 10,\n", " 'Copa-Campanella Centro/Bairro ': 11,\n", " 'Copa-Itaquera/Lider Itaquera/Vila Formosa ': 6,\n", " 'Copa-Itaquera/Lider Vila Formosa/Itaquera ': 14,\n", " 'Copa-Jacu Pessêgo-N. Trabalhadores A Senna/Maua ': 4,\n", " 'Copa-Jacu Pessêgo-N. Trabalhadores Maua/A Senna ': 8,\n", " 'Copa-Luiz Ayres Bairro/Centro ': 2,\n", " 'Copa-Luiz Ayres Centro/Bairro ': 11,\n", " 'Copa-Pires do Rio Bairro/Centro ': 7,\n", " 'Copa-Pires do Rio Centro/Bairro ': 8,\n", " 'Corifeu de A Marques, Av Bairro/Centro ': 663,\n", " 'Corifeu de A Marques, Av Centro/Bairro ': 141,\n", " 'Corifeu de Azevedo Marques, Av (F) Bairro/Centro ': 73,\n", " 'Corifeu de Azevedo Marques, Av (F) Centro/Bairro ': 4,\n", " 'Cruzeiro do Sul, Pt e Av Ipiranga/Santana ': 1377,\n", " 'Cruzeiro do Sul, Pt e Av Santana/Ipiranga ': 2409,\n", " 'Cruzeiro do Sul, Pte e Av (F) Ipiranga/Santana ': 397,\n", " 'Cruzeiro do Sul, Pte e Av (F) Santana/Ipiranga ': 421,\n", " 'Dianópolis, Av //unico ': 395,\n", " 'Dianópolis, Av (F) unico// ': 181,\n", " 'Diário Popular, Vd único// ': 189,\n", " 'Dom Pedro (Av Exterior) Pq //unico ': 15,\n", " 'Dom Pedro (Av do Exterior), Parque (F) unico// ': 43,\n", " 'Edgar Facó, Av. Bairro/Centro ': 1197,\n", " 'Edgar Facó, Av. Centro/Bairro ': 160,\n", " 'Eliseu de Almeida, Av Bairro/Centro ': 821,\n", " 'Eliseu de Almeida, Av Centro/Bairro ': 75,\n", " 'Ermano Marchetti, Av Barra Funda/Lapa ': 710,\n", " 'Ermano Marchetti, Av Lapa/Barra Funda ': 606,\n", " 'Escola Politécnica, Av Bairro/Centro ': 752,\n", " 'Escola Politécnica, Av Centro/Bairro ': 39,\n", " 'Estado, Av do - DEC CT Ipiranga/Santana ': 7017,\n", " 'Estado, Av do - DEC CT Santana/Ipiranga ': 4633,\n", " 'Estado, Av do - DEC VILA PRUDENTE Ipiranga/Santana ': 3409,\n", " 'Estado, Av do - DEC VILA PRUDENTE Santana/Ipiranga ': 3920,\n", " 'Estela, R unico// ': 41,\n", " 'Eusébio M/Francisco Morato, Av Prof Bairro/Centro ': 5021,\n", " 'Eusébio M/Francisco Morato, Av Prof Centro/Bairro ': 2887,\n", " 'Eusébio Stevaux, Vd único// ': 1445,\n", " 'F1 - Jacinto Júlio, Av Bairro/Centro ': 1,\n", " 'F1 - Jacinto Júlio, Av Centro/Bairro ': 3,\n", " 'F1 - Jangadeiro, Av Bairro/Centro ': 4,\n", " 'F1 - Jangadeiro, Av Centro/Bairro ': 2,\n", " 'F1 - João Paulo da Silva, Av Bairro/Centro ': 2,\n", " 'F1 - Miguel Yunes/Pte Vitorino Goulart Interlagos/Marginal ': 2,\n", " 'F1 - Papini, Av Prof Centro/Bairro ': 3,\n", " 'F1 - Rio Bonito, Av Bairro/Centro ': 2,\n", " 'F1 - Rio Bonito, Av Centro/Bairro ': 1,\n", " 'F1 - Rubens Montanaro de Borba, Av Bairro/Centro ': 1,\n", " 'F1 - Teotonio Vilela, Av Sen Bairro/Centro ': 3,\n", " 'F1 - Teotonio Vilela, Av Sen Centro/Bairro ': 3,\n", " 'Faria Lima, Av Brig Itaim/Pinheiros ': 3606,\n", " 'Faria Lima, Av Brig Pinheiros/Itaim ': 5154,\n", " 'Fernando Vieira de Mello Túnel(Reboucas)Bairro/Centro ': 5663,\n", " 'Fernando Vieira de Mello Túnel(Reboucas)Centro/Bairro ': 5516,\n", " 'Ferradura unico// ': 698,\n", " 'Figueira, R da unico// ': 802,\n", " 'Francisco Matarazzo, Av Bairro/Centro ': 1170,\n", " 'Francisco Matarazzo, Av Centro/Bairro ': 1316,\n", " 'Francisco Matarazzo, Av (F) Bairro/Centro ': 1895,\n", " 'Francisco Matarazzo, Av (F) Centro/Bairro ': 2070,\n", " 'Francisco Mesquita, Av Dr S. Caetano/Sao Paulo ': 2214,\n", " 'Francisco Mesquita, Av Dr Sao Paulo/S. Caetano ': 168,\n", " 'Francisco Morato, Av Prof Bairro/Centro ': 1751,\n", " 'Francisco Morato, Av Prof Centro/Bairro ': 1145,\n", " 'Frederico Eduardo Mayr, Vd unico// ': 861,\n", " 'Freguesia, Pte Freguesia/Lapa ': 775,\n", " 'Freguesia, Pte Lapa/Freguesia ': 323,\n", " 'Freguesia/Com Martinelli, Pte (F) Freguesia/Lapa ': 507,\n", " 'Freguesia/Com Martinelli, Pte (F) Lapa/Freguesia ': 110,\n", " 'Gabriel, Av São (F) Bairro/Centro ': 127,\n", " 'Gabriel, Av São (F) Centro/Bairro ': 271,\n", " 'Gabriel, Av São Bairro/Centro ': 114,\n", " 'Gabriel, Av São Centro/Bairro ': 428,\n", " 'Gastão Vidigal, Av Dr Marginal/Pinheiros ': 804,\n", " 'Gastão Vidigal, Av Dr Pinheiros/Marginal ': 670,\n", " 'Gastão Vidigal, Av Dr (F) Lapa/Pinheiros ': 163,\n", " 'Gastão Vidigal, Av Dr (F) Pinheiros/Lapa ': 132,\n", " 'Gasômetro, R e Vd único// ': 1324,\n", " 'Gazeta do Ipiranga, Vd unico// ': 301,\n", " 'Grande Sao Paulo, Vd Ipiranga/Vila Prudente ': 3851,\n", " 'Grande Sao Paulo, Vd Vila Prudente/Ipiranga ': 1965,\n", " 'Groenlandia, R unico// ': 2879,\n", " 'Guadalajara, Vd Belem/Mooca ': 50,\n", " 'Guadalajara, Vd Mooca/Belem ': 20,\n", " 'Guaicurus, R //unico ': 143,\n", " 'Guaicurus, R (F) unico// ': 111,\n", " 'Guarapiranga, Av Bairro/Centro ': 755,\n", " 'Guarapiranga, Av Centro/Bairro ': 751,\n", " 'Guido Caloi, Av Bairro/Centro ': 292,\n", " 'Guido Caloi, Av Centro/Bairro ': 423,\n", " 'Guilherme Dumont Vilares, Av Dr Campo Limpo/Morato ': 16,\n", " 'Guilherme Dumont Vilares, Av Dr Morato/Campo Limpo ': 7,\n", " 'Heitor Penteado, R Bairro/Centro ': 202,\n", " 'Heitor Penteado, R Centro/Bairro ': 179,\n", " 'Ibirapuera, Av Bairro/Centro ': 2225,\n", " 'Ibirapuera, Av Centro/Bairro ': 3705,\n", " 'Ibirapuera, Av (F) Bairro/Centro ': 2433,\n", " 'Ibirapuera, Av (F) Centro/Bairro ': 2911,\n", " 'Ibitirama, R unico// ': 171,\n", " 'Iguatemi, R //unico ': 336,\n", " 'Iguatemi, R (F) único// ': 437,\n", " 'Inajar de Souza, Av Freguesia/Lapa ': 794,\n", " 'Inajar de Souza, Av Lapa/Freguesia ': 34,\n", " 'Inajar de Souza, Av (F) Freguesia/Lapa ': 16,\n", " 'Interlagos, Av I Bairro/Centro ': 2008,\n", " 'Interlagos, Av I Centro/Bairro ': 1110,\n", " 'Ipiranga, Av unico// ': 1523,\n", " 'Itapecerica, Est de Bairro/Centro ': 871,\n", " 'Itapecerica, Est de Centro/Bairro ': 145,\n", " 'Itapecirica, Est de (F) Bairro/Centro ': 274,\n", " 'Itapecirica, Est de (F) Centro/Bairro ': 86,\n", " 'Itápolis, R //unico ': 6,\n", " 'Jacinto Júlio, Av Bairro/Centro ': 2,\n", " 'Jaguare, Av Bairro/Centro ': 353,\n", " 'Jaguare, Av Centro/Bairro ': 287,\n", " 'Jaguaré, Pte Jaguaré/Lapa ': 314,\n", " 'Jaguaré, Pte Lapa/Jaguaré ': 828,\n", " 'Jangadeiro, Av Bairro/Centro ': 1,\n", " 'Jangadeiro, Av Centro/Bairro ': 4,\n", " 'Jose Colassuono, Vd unico// ': 1534,\n", " 'Jose Felix, R Campo Limpo/Morato ': 6,\n", " 'Jose Felix, R Morato/Campo Limpo ': 2,\n", " 'José Diniz, Av Ver (F) Bairro/Centro ': 915,\n", " 'José Diniz, Av Ver (F) Centro/Bairro ': 1726,\n", " 'José Diniz, Av Ver Bairro/Centro ': 2743,\n", " 'José Diniz, Av Ver Centro/Bairro ': 3017,\n", " 'José Garzotti, Av. Pe Teotônio/Batista Botelho ': 1,\n", " 'José Maria, Av Pe Bairro/Centro ': 267,\n", " 'José Maria, Av Pe Centro/Bairro ': 18,\n", " 'João De Luca, Ver Diadema/Marginal ': 122,\n", " 'João De Luca, Ver Marginal/Diadema ': 68,\n", " 'João Dias, Av Bairro/Centro ': 2689,\n", " 'João Dias, Av Centro/Bairro ': 2667,\n", " 'João Dias, Av (F) Bairro/Centro ': 1580,\n", " 'João Dias, Av (F) Centro/Bairro ': 1350,\n", " 'João Goulart, Elev Pres Lapa/Penha ': 173,\n", " 'João Goulart, Elev Pres Penha/Lapa ': 95,\n", " 'João Jorge Saad,Vd (Cebolinha) Centro/Bairro ': 384,\n", " 'João Mendes, Pça //unico ': 642,\n", " 'João Paulo da Silva, Av Bairro/Centro ': 5,\n", " 'João Paulo da Silva, Av Centro/Bairro ': 2,\n", " 'João, Av São único// ': 185,\n", " 'Julio de Mesquita, Pte Lapa/Piqueri ': 29,\n", " 'Julio de Mesquita, Pte Limão/Pompéia ': 667,\n", " 'Julio de Mesquita, Pte Piqueri/Lapa ': 77,\n", " 'Julio de Mesquita, Pte Pompéia/Limão ': 55,\n", " 'Juntas Provisórias, R das Ipiranga/Vila Prudente ': 2782,\n", " 'Juntas Provisórias, R das Vila Prudente/Ipiranga ': 1425,\n", " 'Juscelino Kubitschek, Av Pres Ibirapuera/Pinheiros ': 7635,\n", " 'Juscelino Kubitschek, Av Pres Pinheiros/Ibirapuera ': 8411,\n", " 'Jânio Quadros, Pres. Pte (Vila Maria) Bairro/Centro ': 114,\n", " 'Jânio Quadros, Pres. Pte (Vila Maria) Centro/Bairro ': 68,\n", " 'Jânio Quadros, Túnel unico// ': 4050,\n", " 'Lapa, Vd Lapa/Piqueri ': 306,\n", " 'Lapa, Vd Piqueri/Lapa ': 684,\n", " 'Liberdade/ Vergueiro, Av Bairro/Centro ': 841,\n", " 'Liberdade/ Vergueiro, Av Centro/Bairro ': 735,\n", " 'Ligação - Dec HG (F) Lapa/Penha ': 2672,\n", " 'Ligação - Dec HG (F) Penha/Lapa ': 2958,\n", " 'Ligação Leste-Oeste Lapa/Penha ': 4424,\n", " 'Ligação Leste-Oeste Penha/Lapa ': 4357,\n", " 'Limão / Av. Ordem e Progresso, Pte Limão/Sumaré ': 3797,\n", " 'Limão / Av. Ordem e Progresso, Pte Sumaré/Limão ': 182,\n", " 'Limão, Pt/Ordem e Progresso, Av (N USAR)Limão/Sumaré ': 3,\n", " 'Lineu de Paula Machado, Av Bairro/Centro ': 1190,\n", " 'Lineu de Paula Machado, Av Butanta/Morumbi ': 849,\n", " 'Lineu de Paula Machado, Av Centro/Bairro ': 70,\n", " 'Lineu de Paula Machado, Av Joquei/USP ': 62,\n", " 'Lineu de Paula Machado, Av Morumbi/Butanta ': 79,\n", " 'Lineu de Paula Machado, Av USP/Joquei ': 597,\n", " 'Luis Antonio, Av Brig Bairro/Centro ': 433,\n", " 'Luis Antonio, Av Brig Centro/Bairro ': 171,\n", " 'Luis Antonio, Av Brig. Dec-PA (F) Bairro/Centro ': 357,\n", " 'Luis Antonio, Av Brig. Dec-PA (F) Centro/Bairro ': 20,\n", " 'Luis Carlos Berrini, Av Eng Bandeirantes/Morumbi ': 1593,\n", " 'Luis Carlos Berrini, Av Eng Morumbi/Bandeirantes ': 967,\n", " 'Luis Carlos Berrini,Eng Av (F) Bandeirantes/Morumbi ': 1514,\n", " 'Luis Carlos Berrini,Eng Av (F) Morumbi/Bandeirantes ': 906,\n", " 'Luis, Av. São //unico ': 195,\n", " 'Luiz Ignácio de Anhaia Mello, Av Prof Bairro/Centro ': 4055,\n", " 'Luiz Ignácio de Anhaia Mello, Av Prof Centro/Bairro ': 2964,\n", " 'Luiz Ignácio de Anhaia Mello, Av Prof Sapopem./Vila Prudente ': 706,\n", " 'Luiz Ignácio de Anhaia Mello, Av Prof Vila Prudente/Sapopem. ': 360,\n", " 'M Paula, R/Jacarei/n Julho, Vd (F) //unico ': 2,\n", " 'M.M.D.C, R único// ': 1597,\n", " 'Manuel de Teffé, R Bairro/Centro ': 7,\n", " 'Marginal Pinheiros Castelo/Interlagos ': 10332,\n", " 'Marginal Pinheiros Interlagos/Castelo ': 9675,\n", " 'Marginal Tietê A.Senna/Castelo Branco ': 10776,\n", " 'Marginal Tietê Castelo/A.Senna ': 9885,\n", " 'Marginal Tietê - Pista Central A.Senna/Castelo Branco ': 2883,\n", " 'Marginal Tietê - Pista Central Castelo/A.Senna ': 2974,\n", " 'Maria Coelho Aguiar, Av Bairro/Centro ': 746,\n", " 'Maria Coelho Aguiar, Av Centro/Bairro ': 2554,\n", " 'Maria Maluf, CV Anchieta/Imigrantes ': 4512,\n", " 'Maria Maluf, CV Imigrantes/Anchieta ': 5019,\n", " 'Maria Paula/Vd Jacareí/Vd 9 de Julho único// ': 2778,\n", " 'Matriz, R da unico// ': 14,\n", " 'Max Feffer Túnel (Cidade Jardim) Bairro/Centro ': 4793,\n", " 'Max Feffer Túnel (Cidade Jardim) Centro/Bairro ': 2667,\n", " 'Melo Peixoto, R Bairro/Centro ': 1244,\n", " 'Melo Peixoto, R Centro/Bairro ': 1352,\n", " 'Melo Peixoto, R (F) Bairro/Centro ': 286,\n", " 'Melo Peixoto, R (F) Centro/Bairro ': 126,\n", " 'Mercúrio, Av único// ': 3250,\n", " 'Miguel Estefano,VD Abraão de Morais/Cursino ': 26,\n", " 'Miguel Estefano,VD Cursino/Abraão de Morais ': 10,\n", " 'Miguel Yunes/Pte Vitorino Goulart Interlagos/Marginal ': 6,\n", " 'Miguel Yunes/Pte Vitorino Goulart Marginal/Interlagos ': 3,\n", " 'Morumbi, Av Campo Limpo/Santo Amaro ': 194,\n", " 'Morumbi, Av Morumbi/Santo Amaro ': 1134,\n", " 'Morumbi, Av Santo Amaro/Campo Limpo ': 196,\n", " 'Morumbi, Av Santo Amaro/Morumbi ': 358,\n", " 'Morumbi, Av. e Pte Aeroporto/Marginal ': 2175,\n", " 'Morumbi, Av. e Pte Marginal/Aeroporto ': 2632,\n", " 'M´Boi Mirim, Est Bairro/Centro ': 8,\n", " 'M´Boi Mirim, Est Centro/Bairro ': 1,\n", " 'Natanael, R Mj (F) Estadio/Jardins ': 279,\n", " 'Nova Morumbi, Pte (F) unico// ': 1026,\n", " 'Nove de Julho, Av Bairro/Centro ': 4115,\n", " 'Nove de Julho, Av Centro/Bairro ': 5088,\n", " 'Nove de Julho, Av (F) Bairro/Centro ': 2488,\n", " 'Nove de Julho, Av (F) Centro/Bairro ': 2439,\n", " 'Nove de Julho, Av - DEC PA (F) Bairro/Centro ': 297,\n", " 'Nove de Julho, Av - DEC PA (F) Centro/Bairro ': 719,\n", " 'Olivia Guedes Penteado, R Bairro/Centro ': 2,\n", " 'Oscar Americano, R Eng Bairro/Centro ': 2037,\n", " 'Oscar Americano, R Eng Centro/Bairro ': 1767,\n", " 'Oscar Americano, R Eng (F) Bairro/Centro ': 445,\n", " 'Oscar Americano, R Eng (F) Centro/Bairro ': 62,\n", " 'Outeiro, Av NSra do Batista Botelho/Teotônio ': 1,\n", " 'Pacaembu / Mj Natanael / Abraao Ribeiro Estádio/Marginal ': 1390,\n", " 'Pacaembu / Mj Natanael / Abraao Ribeiro Marginal/Estádio ': 4199,\n", " 'Pacaembu, Vd (F) Bairro/Centro ': 330,\n", " 'Pacaembu, Vd (F) Centro/Bairro ': 279,\n", " 'Pacheco e Chaves, Cap. Vd Ipiranga/Vila Prudente ': 188,\n", " 'Pacheco e Chaves, Cap. Vd Vila Prudente/Ipiranga ': 1791,\n", " 'Pacheco e Chaves, R Cap Bairro/Centro ': 310,\n", " 'Pacheco e Chaves, R Cap Centro/Bairro ': 36,\n", " 'Papini, Av Prof Bairro/Centro ': 5,\n", " 'Papini, Av Prof Centro/Bairro ': 20,\n", " 'Paulina, Vd Dona //unico ': 2644,\n", " 'Paulina, Vd Dona (F) único// ': 1935,\n", " 'Paulista, Av Consolação/Paraiso ': 6247,\n", " 'Paulista, Av Paraiso/Consolação ': 9888,\n", " 'Paulo Eiró, R único// ': 2,\n", " 'Paulo VI, Av Limão/Sumaré ': 72,\n", " 'Paulo VI, Av Sumaré/Limão ': 36,\n", " 'Pedro Alvares Cabral, Av Pinheiros/Vila Mariana ': 680,\n", " 'Pedro Alvares Cabral, Av Vila Mariana/Pinheiros ': 1231,\n", " 'Pedro Alvares Cabral, Av (F) Pinheiros/Vila Mariana ': 791,\n", " 'Pedro Alvares Cabral, Av (F) Vila Mariana/Pinheiros ': 1975,\n", " 'Pedro I, Av. Dom Bairro/Centro ': 13,\n", " 'Pedro I, Av. Dom Centro/Bairro ': 18,\n", " 'Pinedo, Av de unico// ': 1,\n", " 'Piqueri, Pt Lapa/Piqueri ': 579,\n", " 'Piqueri, Pt Piqueri/Lapa ': 903,\n", " 'Piqueri, Pte (F) Lapa/Piqueri ': 278,\n", " 'Piqueri, Pte (F) Piqueri/Lapa ': 1054,\n", " 'Pirajussara, Av Bairro/Centro ': 17,\n", " 'Pirajussara, Av Centro/Bairro ': 53,\n", " 'Pompeia, Vd Marginal/Pompeia ': 2452,\n", " 'Pompeia, Vd Pompeia/Marginal ': 384,\n", " 'Queiroz Filho /Jaguaré, Pte Bairro/Centro ': 554,\n", " 'Queiroz Filho /Jaguaré, Pte Centro/Bairro ': 1276,\n", " 'Queiroz, Av. Sen. //unico ': 956,\n", " 'Radial Leste - DEC BR Bairro/Centro ': 6210,\n", " 'Radial Leste - DEC BR Centro/Bairro ': 4474,\n", " 'Radial Leste - DEC MO Bairro/Centro ': 7150,\n", " 'Radial Leste - DEC MO Centro/Bairro ': 4722,\n", " 'Raimundo Pereira Magalhaes, Av Bairro/Centro ': 47,\n", " 'Raimundo Pereira Magalhaes, Av Centro/Bairro ': 5,\n", " 'Raimundo Pereira de Magalhães - Norte Bairro/Centro ': 12,\n", " 'Raimundo Pereira de Magalhães - Norte Centro/Bairro ': 3,\n", " 'Raimundo Pereira de Magalhães - Sul Bairro/Centro ': 4,\n", " 'Raimundo Pereira de Magalhães - Sul Centro/Bairro ': 5,\n", " 'Rangel Pestana, Av (F) unico// ': 163,\n", " 'Rangel Pestana, Av DEC BR //unico ': 1134,\n", " 'Rangel Pestana, Av DEC CT Bairro/Centro ': 548,\n", " 'Rangel Pestana, Av DEC CT Centro/Bairro ': 66,\n", " 'Raposo Tavares, Via Capital/Interior ': 632,\n", " 'Raposo Tavares, Via Interior/Capital ': 3652,\n", " 'Reação, R único// ': 1388,\n", " 'Rebouças/ Eusébio Matoso, Av Bairro/Centro ': 8167,\n", " 'Rebouças/ Eusébio Matoso, Av Centro/Bairro ': 8720,\n", " 'Remédios, Pte Lapa/Remédios ': 1471,\n", " 'Remédios, Pte Remédios/Lapa ': 1965,\n", " 'Republica da Armenia, Vd único// ': 4197,\n", " 'República do Líbano, Av Bairro/Centro ': 750,\n", " 'República do Líbano, Av Centro/Bairro ': 788,\n", " 'República do Líbano, Av (F) Bairro/Centro ': 248,\n", " 'República do Líbano, Av (F) Centro/Bairro ': 129,\n", " 'Ribeiro Lacerda, R Abraão de Morais/Cursino ': 2,\n", " 'Ribeiro Lacerda, R Cursino/Abraão de Morais ': 21,\n", " 'Ricardo Jafet, Av Bairro/Centro ': 159,\n", " 'Ricardo Jafet, Av Centro/Bairro ': 228,\n", " 'Rio Bonito, Av Centro/Bairro ': 1,\n", " 'Rio Branco, Br do unico// ': 122,\n", " 'Rio Branco, Av Bairro/Centro ': 195,\n", " 'Rio Branco, Av Centro/Bairro ': 342,\n", " 'Robert Kennedy, Av Bairro/Centro ': 164,\n", " 'Robert Kennedy, Av Centro/Bairro ': 37,\n", " 'Roberto Abreu Sodré, Vd Bairro/Centro ': 2243,\n", " 'Roberto Abreu Sodré, Vd Centro/Bairro ': 169,\n", " 'Roque Petroni Júnior, Av Diadema/Marginal ': 1253,\n", " 'Roque Petroni Júnior, Av Marginal/Diadema ': 683,\n", " 'Roque Petroni Júnior, Av (F) Diadema/Marginal ': 881,\n", " 'Roque Petroni Júnior, Av (F) Marginal/Diadema ': 496,\n", " 'Rudge, Av/Orlando Murgel, Vd Bairro/Centro ': 484,\n", " 'Rudge, Av/Orlando Murgel, Vd Centro/Bairro ': 541,\n", " 'Rudge, Av/Orlando Murgel, Vd (F) Bairro/Centro ': 233,\n", " 'Rudge, Av/Orlando Murgel, Vd (F) Centro/Bairro ': 232,\n", " 'S.Vicente, Av Marques de (F) Barra Funda/Lapa ': 90,\n", " 'S.Vicente, Av Marques de (F) Lapa/Barra Funda ': 526,\n", " 'Sabará, Av NSra do Bairro/Centro ': 6,\n", " 'Sabará, Av NSra do Centro/Bairro ': 1,\n", " 'Salim F Maluf, Av/Tatuapé, Pt (N USAR) Marginal/Vila Prudente ': 1,\n", " 'Salim Farah Maluf, Av/Tatuapé, Pte Marginal/Vila Prudente ': 5335,\n", " 'Salim Farah Maluf, Av/Tatuapé, Pte Vila Prudente/Marginal ': 3669,\n", " 'Sapetuba, R único// ': 1637,\n", " 'Sebastião Camargo, Túnel unico// ': 4718,\n", " 'Socorro, Pte Bairro/Centro ': 1365,\n", " 'Socorro, Pte Centro/Bairro ': 1640,\n", " 'Sumaré, Av Limão/Sumaré ': 149,\n", " 'Sumaré, Av Sumaré/Limão ': 255,\n", " 'Susana Rodrigues, R unico// ': 444,\n", " 'São Vicente, Av Marq de Barra Funda/Lapa ': 856,\n", " 'São Vicente, Av Marq de Lapa/Barra Funda ': 1933,\n", " 'Sé, Pça da //unico ': 205,\n", " 'Tabapua,R (F) unico// ': 196,\n", " 'Tabapuã, R //unico ': 39,\n", " 'Tabapuã, R único// ': 482,\n", " 'Tajurás, Av dos Bairro/Centro ': 2201,\n", " 'Tajurás, Av dos Centro/Bairro ': 297,\n", " 'Tancredo Neves, Av Anchieta/Imigrantes ': 395,\n", " 'Tancredo Neves, Av Imigrantes/Anchieta ': 336,\n", " 'Teodoro Sampaio, R unico// ': 1651,\n", " 'Teotonio Vilela, Av Sen Bairro/Centro ': 41,\n", " 'Teotonio Vilela, Av Sen Centro/Bairro ': 7,\n", " 'Transamérica, Pte unico// ': 1208,\n", " 'Trib de Justiça, Túnel Ibirapuera/Marginal ': 6386,\n", " 'Trib de Justiça, Túnel Marginal/Ibirapuera ': 3397,\n", " 'Trinta e Um de Março, Vd unico// ': 1540,\n", " 'Vale/P.Maia/Tirad/S.Dumont Aeroporto/Santana ': 5988,\n", " 'Vale/P.Maia/Tirad/S.Dumont Santana/Aeroporto ': 9089,\n", " 'Vale/P.Maia/Tirad/S.Dumont (NÃO USAR) Santana/Aeroporto ': 1,\n", " 'Valerio, Av São Bairro/Centro ': 1471,\n", " 'Valerio, Av São Centro/Bairro ': 24,\n", " 'Vicente Rao, Av Prof Diadema/Marginal ': 362,\n", " 'Vicente Rao, Av Prof Marginal/Diadema ': 245,\n", " 'Vicente Rao, Av Prof (F) Diadema/Marginal ': 5,\n", " 'Vicente Rao, Av Prof (F) Marginal/Diadema ': 2,\n", " 'Vila Guilherme, Pte Bairro/Centro ': 211,\n", " 'Vila Guilherme, Pte Centro/Bairro ': 92,\n", " 'Vila Matilde, Vd Penha/Vl Matilde ': 19,\n", " 'Vila Matilde, Vd Vl Matilde/Penha ': 32,\n", " 'Vinte Três/R Berta/M Guim (NÃO USAR) Aeroporto/Santana ': 2,\n", " 'Vinte Três/R Berta/M Guimarães Aeroporto/Santana ': 9678,\n", " 'Vinte Três/R Berta/M Guimarães Santana/Aeroporto ': 10112,\n", " 'Vinte e Cinco de Março, Vd único// ': 140,\n", " 'Vital Brasil, Av Bairro/Centro ': 2983,\n", " 'Vital Brasil, Av Centro/Bairro ': 459,\n", " 'Vitor Manzini, Av Bairro/Centro ': 199,\n", " 'Vitor Manzini, Av Centro/Bairro ': 806,\n", " 'Washington Luis, Av Bairro/Centro ': 3511,\n", " 'Washington Luis, Av Centro/Bairro ': 2900,\n", " 'XXX Campo Limpo/Morato ': 7,\n", " 'XXX Morato/Campo Limpo ': 5,\n", " 'Xangai, Vd unico// ': 84}" ] }, "execution_count": 26, "metadata": {}, "output_type": "execute_result" } ], "source": [ "jam_count" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "__jam_count__ is the dictionary listing all counts of traffic jams for each road." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The following graph plots the distribution of traffic jam counts between 2001 and 2019 for each and every road. It might seem more adapted to focus our renovations on the roads more likely to be impacted by traffic jams, and for that we may drop the roads with a small jam count." ] }, { "cell_type": "code", "execution_count": 27, "metadata": {}, "outputs": [], "source": [ "sorted_jam_count = sorted(jam_count, key = jam_count.get)" ] }, { "cell_type": "code", "execution_count": 28, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "fig = plt.figure(figsize=(12,8))\n", "\n", "plt.plot(gs.sort(list(jam_count.values())))\n", "plt.xlabel(\"road n°\")\n", "plt.ylabel(\"number of traffic jams between 2001 and 2019\")\n", "plt.title(\"Number of traffic jams between 2001 and 2019 for each road in increasing order\")\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 29, "metadata": {}, "outputs": [], "source": [ "list_jam_count = gs.sort(list(jam_count.values()))\n", "cdf = [list_jam_count[0]]\n", "for i in range(len(list_jam_count)):\n", " cdf.append(cdf[i] + list_jam_count[i])\n", "\n", "cdf = cdf / cdf[-1]" ] }, { "cell_type": "code", "execution_count": 30, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "fig = plt.figure(figsize=(12,8))\n", "plt.plot(cdf)\n", "\n", "plt.xlabel(\"road n°\")\n", "plt.title(\"Cumulative distribution function of traffic jams in SP\")\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The 180 most congestioned roads make up for 90% of all traffic jams in Sao Paulo between 2001 and 2019. That is where we will focus our renovation efforts." ] }, { "cell_type": "code", "execution_count": 31, "metadata": {}, "outputs": [], "source": [ "roads_to_renovate = sorted_jam_count[-180:]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# 3. Mathematical modeling" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In the following 2 sections, we establish a precise framework, listing the hypotheses and simplifications supporting our model. In particular:\n", "- 3.1. gives an introduction to the Gamma manifold and explains how each road can be represented by a point on it.\n", "- 3.2. justifies the use of information geometry to tackle the problem at hand, by seeing a renovation effort on a given road as a tangent vector based at its associated point." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 3.1. Road representation: introduction to the Gamma manifold." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The modeling of the study relies heavily on the representation of a traffic jam as a random variable.\n", "In fact, the waiting time in a given traffic jam can be predicted by a Gamma distribution." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 3.1.1. Hypotheses" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We consider that a traffic jam has a fixed exit rate, meaning that on average, in a given unit of time the same count of cars will exit the jam. The waiting time to exit the traffic jam once a car is ahead of the lane is independent of other cars and depends on the road only.\n", "\n", "In addition, switching lanes rarely helps, and if so, to a negligible extent; furthermore a car entering the traffic jam will almost always choose the least crowded lane (all drivers are a priori mentally sane). These two observations allow to reduce the modeling of a whole traffic jam to that of a single lane, although only in representation, because cars next to each other will have the same behavior. This means that in our modelling the width of the road is not taken into account, as mentioned in the introduction. \n", "\n", "Both of these hypotheses are central to the model." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 3.1.2. Model" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In a traffic jam, you wait until every car in front of you has exited the traffic jam, meaning that the waiting time for a car entering the jam is merely the sum of the exit times of all the cars in front.\n", "\n", "As a $\\nu$-exponential process predicts the waiting time until one very first event (where $\\nu$ is a rate of a unit of time), a $(k,\\, \\nu)$-Gamma process will predict the waiting time until the $k$-th event: mathematically, it is the sum of $k$ i.i.d. $\\nu$-exponential processes. In the context of congestion time in a traffic jam, we are summing exit times, hence the connection between waiting time and Gamma disribution.\n", "\n", "Therefore, the congestion time of the jam follows a Gamma distribution associated to the road. Its parameters are:\n", "- $k$, the length of the car lane (jam size) in arbitrary units;\n", "- $\\nu$, the exit time rate of the traffic jam, i.e. the number of cars (in the same arbitrary unit) that exit the traffic jam in a given amount of time, so essentially the speed of the traffic jam.\n", "\n", "By arbitrary units we mean that there exists a number $n$ of cars, common to every road, such that $n$ cars will exit the jam every $\\frac{1}{\\nu}$ (depending on the road) unit of time on average. From this we draw that a road with car length $k$ is in fact as long as $kn$ cars. \n", "\n", "For a given road $r$, we note $T_r$ the congestion time that cars will have to wait in the case the traffic is jammed: $T_r \\rightsquigarrow G(k_r, \\nu_r)$, with distribution: $$\\forall t>0, \\, \\mathbb{f}(t) = \\frac{\\nu_r^{k_r}}{\\Gamma(k_r)} t^{k_r-1} e^{-\\nu_r t}.$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", " \n", "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "As a road $x_r$ can be represented by two parameters $k_r$ and $\\nu_r$, we can consider our space of study to be the space of such parameters (i.e. $\\mathbb{(R_+^*)^2}$).\n", "\n", "For the following, we denote Gamma distributions' parameters by $(\\kappa_r, \\gamma_r)$, where $\\kappa_r$=$k_r$ (expected jam size) and $\\gamma_r$=$\\frac{k_r}{\\nu_r}$ is the expected congestion time (mean of the Gamma distribution). The space of study is still $\\mathbb{(R_+^*)^2}$, and we are instantiating it in the next cell." ] }, { "cell_type": "code", "execution_count": 32, "metadata": {}, "outputs": [], "source": [ "import matplotlib.pyplot as plt\n", "from geomstats.information_geometry.gamma import *\n", "\n", "space = GammaDistributions()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "For instance, on the following graph we are representing 3 roads." ] }, { "cell_type": "code", "execution_count": 33, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAs4AAAH0CAYAAAAt5at6AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAAAsTAAALEwEAmpwYAAA57UlEQVR4nO3de7xVdZ3/8ddHxEACTQNNMdBMtLgkHpQKsfF+y6TfTGaaUznTdJuc3zSW2Y2xyEntYtPF+k2OWpZaCaZ2HcOUtBIQL4XkZJDgJVAhMCiEz++PtQ5sD+dw1uacffbG83o+Hvtx9rp/9tprr/0+a3/XWpGZSJIkSdq6HZpdgCRJkrQ9MDhLkiRJFRicJUmSpAoMzpIkSVIFBmdJkiSpAoOzJEmSVIHBWduViLgiIj7Rh8vLiNi/i2FnRMSP+6qWZouIT0TEioh4rOyeFhEPR8SaiDg4In4dEa+pc54vLqcf0Iia1XsiYnFEHN3sOrpSbkf7NbuOnoiI6RHxjWbX0Z913CdFxB4RcVtErI6IT3cz7WsiYulWhvfp95caw+CsbkXENyLi0Yj4U0T8NiL+odk1tYLMvDozj+3JPCJidBnOd9zKOD36Mu2NnXVEvBh4H/CyzNyz7H0J8J7MfH5m3p2ZL8/MW+uZb2b+oZx+Q0/q09Z194X+XFBuRw9VGXdr/xD3lb54TyKiLSJuioinImJlRPwmImZExAsaudztWSf7pLcDK4Bhmfm+JpamFmFwVhUXAqMzcxhwCvCJiDikyoRbC4RqDRXfoxcDT2TmH2v6jQJ+3ZiqWkdvbsNRcL+rhouIVwG3Aj8HDszMXYHjgWeACc2rbLszCvhNerc4tctMHz4qP4AxwKPAG7oY/haKHfVngSeATwC7AFcBy4ElwIeBHcrxXwL8tBx3BXA1sGvN/A4G5gOrgWuBa4BPlMNeCNwErASeBG5vn2+HmqKs54/An4D7gLHlsFuBf+hQ/5ya7gTeCzxU1ndxTe0dxz0Q+ElZy6LadQQMBj5dvv5VwJyy3x/KZawpH6/sUPvxwF+B9eXwe8r+ewHfK5f1v8A/dvF+vL2c9q/l9DeW/RcDHwDuBf4C7AicB/yuXNe/AaaV4x4NrAU2lvP4Vvk3gaeB39XM8+jy+QDg/Jr5zQP26aS+0eV8diy73wosLKd5CPinmnFfAywF3l++l48CpwInAr8t18X5NeMfCswt3/PHgc9U3ManA98BvlFO+w8U2/DXymUuo9iuB3TY5r9QvrcPAEfVzO9WYEY5zlpg/262lRPL9b+6XNa/1Qw7GVhAsc3fAYyvGbYY+LfyPV1F8XkZBAzp8P6todh+dqh5z58ArgN2q5nfmym21yeAD9W+v52ss5OAu8v19TAwvWbYoHJdPlHWfRewRxfzWQx8sHz9TwH/DQyqGf6PFNv7kxTb/14dPqv7l8+vAL4I3Fyux18CLymH3cbmbXcNcBoV9yXl9K8qX8Oq8u+rOrzXHy/f69XAj4EXdjKPrt6T6eX7cFU5/a+Btprp9gK+S7Ev/T3w3q1sx3OA/+xmW+9u/7sYOLfcpp6m+AzsAfygrO9/gBd0+Cy/tdwGngLeAUwqp18JfKHqsjupNYF3AQ+Wy/54OY87KLa764CdynFfUL6fy8s6bgJGVnmfal7HjuV2VLv/PBp4HvA54JHy8TngebX7qCrfXz6230fTC/CxfTyALwF/Lnco84HndzHeWyiOaPxzueMZXH4J3AAMLXdKvwXOLsffHzim3BkNp/hS+1w5bCeKL+7/CwwE/rbcibUH5wuBy8phA4HDgeikpuMogtuuFCH6IOBF5bBb6T44zwZ2ozjq+tv28WvHpfgifJjiS2PHcoe5gqJpAxRf4rcCe1OEyleVr3nTTnor63468I0O/W4r35NBwCsoviCO7GL6KzrurCm+EBcA+wCDy35/x+ZAdRrFF2X7enoNNV8INetm/w7zbA/O51L8gzKmXOcTgN07qe1Zr58igL2knOYIim1uYk0NzwAfLd/vfyxf9zcptq2XU4SRfcvx7wTeXD5/PjC54rY+nWI7O7VcF4OBmcBXyvd5BPArylDP5m2+fTs9jSJU7Vazjf2hrG9HihC+tW3lUeDw8vkLal7/wRT/MBxGsQ39fbnOn1ez/n9Vvoe7UfwD8o6tvH/nAL8ARlJsi18BvlUOexlFUJhaDvtM+Rq7Cs6vAcaV62s8xT8qp5bD/gm4Edi5rPsQip+9O5vPYuB+iu1yN4pg0/55P7JcTxPLmv4TuK2z7ZFim3+C4p+nHSlC2TVb2Xar7kt2owhiby7ne3rZvXvNe/074ACK7eZW4D+2ss46vifTgXUU/zwNKOv6RTlsB4r92Ecp9o37UfxzeVwn8x4CbABe08223uX+t+b9+AVFWN6bYvubT7EtDqIIvh/r8Fm+rBx2bPlaZlF8ZtqnP6LKsjupNSm+R4ZRfJb+AtxSroddKP7Z+vty3N2B/0OxzQ0Fvg3MqplXl+8TW+6TrqBm/wlcUK6TEWXddwAf7/ie0s33l4/t99H0AnxsP49yRz6F4ojxwC7GeQvwhw7T/JUyFJT9/gm4tYvpTwXuLp9PpfiPPmqG38HmL9ILyh3p/t3UfSRF4J1Mh6NIVAvOx9d0vwu4peO4FGHp9g7z/grwMYovvLXAhE5qe9ZOuov6p1MTnClCxQZgaE2/C4Erupj+WTv+st9i4G3drLcFwOvK55u+EDqsm66C86L2abtZxlZfP8WX7jk1Naxl85HeoeW0h9WMP4/Nge024N/p5IhfNzVN59mBbA+KL+nBNf1OB2bXbAcdt9NfsTm03wpcUDOsy22lfP4His/IsA7jfJnyC7qm3yI2B5HFwJk1wy4CLtvK+7eQZx8ZfxHFF/uOFOGsNmgOofgcdxqcO1mHnwM+Wz5/Gx2Ojm9lusWUYb/sPpHNv2h8DbioZtjzy3pHd9weKbb5/+ownwe2su1W3Ze8GfhVh353Am+pea8/XDPsXcAPu5hXZ+/JdOB/arpfBqwtnx9Gzb617PdB4L87mffI8jUe2GF7WEnxD/GHu6jpVMr9b837cUZN93eBL9d0/zNlIGXzZ3nvmuFPAKd1mP5fqiy7k+EJvLqmex7wgZruT9NF8KY4uPBUTXeX7xPdB+ffASfWdB8HLO74ntLN95eP7fdhWztVlpkbMnMOxU75nVsZ9eGa5y+k+G97SU2/JRRHH9rPWL4mIpZFxJ8oftJ9YTneXsCyLPc4NdO2u5jiZ9sfR8RDEXFeF3X/lOJn9C8Cf4yIr0bEsG5eblevZ0lZV0ejgMPKE3BWRsRK4Axgz/L1DKLY4faGvYAnM3N1h7r2rnM+ta+LiDgrIhbU1D+Wze9FvfZhG15vRJwQEb+IiCfLGk7sUMMTufmknbXl38drhq+lCFQAZ1McUXogIu6KiJPrKKV23Yyi2IYfrVk3X6E44tSus+20djvpOL+uthUojpSdCCyJiJ9FxCtrpntfh+n26bCcx2qe/5nN66Izo4CZNfNaSPEP2R7lPDfVnJlPU4SgTkXEYRExOyKWR8Qqip/o29+3rwM/Aq6JiEci4qKIGLiVurr6vO1Fzec/M9eUNXW13dezLirtSzrWUFNjbQ31LLczHacfVLazHwXs1eH9P5/i/eroKYpmIC9q75GZ78+infNMin+Outv/tuv4+erq81bX+BWX3VHVee8cEV+JiCXlvG8Ddu1w9Z5tfZ86bgNdfSd09/2l7ZTBWdtiR4qf07tSu6NYQXFUaFRNvxdTtN0E+GQ5/rgsTj48k+Jneih+st47IqLDtMVCMldn5vsycz+Kkxb/NSKO6rSgzM9n5iEUR3AOoGhKAMXRl51rRt2z47QU4aR2+Y90Ms7DwM8yc9eax/Mz853lOlhH5+ssO+nX3TiPALtFxNAOdS2jc10tY1P/iBgF/D/gPRQ/O+9K8ZN5dD5ptx5m69vIFiLieRRHpC6haAO7K/D9ba0hMx/MzNMpAu6ngO9ExJCqk9c8f5jiiPMLa97bYZn58ppxOttOa7eTjvPralshM+/KzNeVdc+iaLvZPt2MDtPtnJnfqvP11NZxQof5DcrMZRSfvU3bfUTsTPHzd1e+SdHmeJ/M3IXi5/ooX8/6zPz3zHwZRROlk4GztjKvrj5vj1CzHynfy93peruvrI59ybNqqKlxW2qo8tmv9TDw+w7v19DMPHGLGRf/6PwSeH0389za/rfRGrns91E0EzusnPfUsn9vzL/jNtDVd8JWv7+0/TI4a6siYkREvDEinh8RAyLiOIqfqW+pMn15dPA6YEZEDC0D2r9SHF2A4uf2NcCqiNibzYEWip9AnwHeGxEDI+L1FG0W22s7OSL2L3dMqyiOlm3s5DVMKo+IDaQIyutqxlsAvL48QrE/xVHKjs6NiBdExD4U7UKv7WScm4ADIuLNZa0Dy+UelJkbgcuBz0TEXuV6fGUZFJeXtWzt+rOPA6Pbr8aQmQ9T/OR3YUQMiojxZd1dXbLu8W7mD8VP8VnWQ0S8leKI87b6L+DjEfHS8koS4yNia8ELijaB7evkmYg4gaKd5DaJiDMjYni5/leWvTeWwxZHxFuqzCczH6U4eejTETEsInaIiJdExBE1o41g83b6dxTt6L/fxSy73FYiYqcorg++S2aupzjpqX1b/X/AO8ptOSJiSESc1OEfqK48DuweEbvU9LuM4nM5qlwnwyPideWw7wAnR8SUiNiJoinD1r4vhlL8CrIuIg4F3tQ+ICL+JiLGlUf7/kTxj/QWn9Ma746IkRGxG8VJie2ft28Bb42IV5SfnU8Cv8zMxRVef0fP+kxU3ZdQvKcHRMSbImLHiDiN4p/xm7axho7vydb8ClgdER+IiMHlfmRsREzqYvz3A2+LiPMiYgRARIwE9q0ZZ2v730Zr5LKHUhyBXlluRx/rxXl/C/hw+Xl5IUWzps72vVv9/tL2y+Cs7iRFs4ylFD//XULRRu17dczjnykC60MUZ3p/kyJIQtEGdSLFl9XNwPWbFpz5V4ojJm+hONP9tNrhwEspzupeQ7GT+lJmzu5k+cMoQsdTbL5KwMXlsM9StN18HLiS4iSijm6gaE+3oKzxax1HKJtNHAu8keLow2MURzmfV47ybxQny91VvpZPUbS3/jPlFRei+Pl1cifL/3b594mImF8+P52iLd4jFD+9fiwz/6eTaSnrfVk5/1mdjZCZv6FoI3gnxboYR3Fi1rb6DMU/TD+mCEtfozgJp0vlOnxvOd1TFOGrnu2so+OBX0fEGuBS4I2ZubYMgrtTnOBT1VkUwb79ag/foeZncIqjey+l+HVhBvC3mdlp04YK28qbgcVR/MT8DopmHGTmXIoTIr9Q1vC/FJ+NbmXmAxRf+A+V28FeFOvkexTNE1ZTrI/DyvF/Dbyb4rP6aLm8rV1z+F3ABeV8Psrmo+RQ/IrzHYrtYCHwM4rmG135JsV28xBFc59PlDX9D/ARil8lHqX4ReONVV5/J6YDV5br4g1U3JeU7+nJFEc0n6AIpydn5op6C+jiPdna+BvKZb+C4ooaKyj+Qe00eJfN6o6kONr62yiadvyQon3vf5ajdbn/7QONXPbnKPY3Kyi26x/24rw/QXG1nnsp9unzy37P0t33V2y+0YpHobcz8ezmN5Kqioi3UZyMdWSza9leRXGnt99SnGzaJzujiJgCvLtsxtEb83sLxQmmU3pjfv1ZRCymWJdd/RMoSU3lzSmkbfdyiiM/2nZjgSV9FZph05G4OX21PEnSc0efBufyaMJqivZjz2RmW18uX+otZZOHl1Jc+1jbICL+leKn7n9udi2SJFXRp001yuDcti3twSRJkqRm8uRASZIkqYK+Ds5JcQb3vIh4ex8vW5IkSdpmfX1y4JTMXFZeU/InEfFAZt5WO0IZqN8OMGTIkEMOPPDAPi5RkiRJ/cm8efNWZObw7sZr2uXoImI6sCYzL+lqnLa2tpw7d27fFSVJkqR+JyLmVbloRZ811SjvcjW0/TnFDQDu76vlS5IkST3Rl0019gBmFnc0ZUfgm5nZm3fzkSRJkhqmz4JzZj4ETOir5UmSJEm9yTsHSpIk9RPr169n6dKlrFu3rtmlNMWgQYMYOXIkAwcO3KbpDc6SJEn9xNKlSxk6dCijR4+mbD7bb2QmTzzxBEuXLmXffffdpnl4AxRJkqR+Yt26dey+++79LjQDRAS77757j462G5wlSZL6kf4Ymtv19LUbnCVJkrRdmj59OpdcUtwS5Nvf/jYvf/nL2WGHHWjUfUAMzpIkSWqKzGTjxo29Mq+xY8dy/fXXM3Xq1F6ZX2cMzpIkSerUrLuX8er/+Cn7nnczr/6PnzLr7mU9nufixYsZM2YMZ511FmPHjuXss89m7NixjBs3jmuvvRaANWvWcNRRRzFx4kTGjRvHDTfcsGn6GTNmcMABBzBlyhQWLVq0qf9BBx3EmDFjelzf1nhVDUmSJG1h1t3L+OD197F2/QYAlq1cywevvw+AUw/eu0fzfvDBB7nyyitZtmwZl112Gffccw8rVqxg0qRJTJ06leHDhzNz5kyGDRvGihUrmDx5Mqeccgrz58/nmmuuYcGCBTzzzDNMnDiRQw45pMevtSqPOEuSJGkLF/9o0abQ3G7t+g1c/KNFXUxR3ahRo5g8eTJz5szh9NNPZ8CAAeyxxx4cccQR3HXXXWQm559/PuPHj+foo49m2bJlPP7449x+++1MmzaNnXfemWHDhnHKKaf0uJZ6eMRZkiRJW3hk5dq6+tdjyJAhWx1+9dVXs3z5cubNm8fAgQMZPXp0S9y0xSPOkiRJ2sJeuw6uq/+2OPzww7n22mvZsGEDy5cv57bbbuPQQw9l1apVjBgxgoEDBzJ79myWLFkCwNSpU5k1axZr165l9erV3Hjjjb1WSxUGZ0mSJG3h3OPGMHjggGf1GzxwAOce13sn4E2bNo3x48czYcIEjjzySC666CL23HNPzjjjDObOncu4ceO46qqrOPDAAwGYOHEip512GhMmTOCEE05g0qRJm+Y1c+ZMRo4cyZ133slJJ53Ecccd12t1tovM7PWZ9pa2trZs1HX4JEmS+puFCxdy0EEHVR5/1t3LuPhHi3hk5Vr22nUw5x43pscnBjZbZ+sgIuZlZlt309rGWZIkSZ069eC9t/ug3JtsqiFJkiRVYHCWJEmSKjA4S5IkSRUYnCVJkqQKDM6SJElSBQZnSZIkbZemT5/OJZdcAsC5557LgQceyPjx45k2bRorV67s9eUZnCVJktQUmcnGjRt7ZV7HHHMM999/P/feey8HHHAAF154Ya/Mt5bBWZIkSZ279zr47FiYvmvx997rejzLxYsXM2bMGM466yzGjh3L2WefzdixYxk3bhzXXnstAGvWrOGoo45i4sSJjBs3jhtuuGHT9DNmzOCAAw5gypQpLFq0aFP/Y489lh13LG5RMnnyZJYuXdrjWjvyBiiSJEna0r3XwY3vhfVri+5VDxfdAOPf0KNZP/jgg1x55ZUsW7aMyy67jHvuuYcVK1YwadIkpk6dyvDhw5k5cybDhg1jxYoVTJ48mVNOOYX58+dzzTXXsGDBAp555hkmTpzIIYccssX8L7/8ck477bQe1dgZjzhLkiRpS7dcsDk0t1u/tujfQ6NGjWLy5MnMmTOH008/nQEDBrDHHntwxBFHcNddd5GZnH/++YwfP56jjz6aZcuW8fjjj3P77bczbdo0dt55Z4YNG8Ypp5yyxbxnzJjBjjvuyBlnnNHjOjvyiLMkSZK2tKqLpg5d9a/DkCFDtjr86quvZvny5cybN4+BAwcyevRo1q1b1+18r7jiCm666SZuueUWIqLHdXbkEWdJkiRtaZeR9fXfBocffjjXXnstGzZsYPny5dx2220ceuihrFq1ihEjRjBw4EBmz57NkiVLAJg6dSqzZs1i7dq1rF69mhtvvHHTvH74wx9y0UUX8b3vfY+dd96512qs5RFnSZIkbemojz67jTPAwMFF/14ybdo07rzzTiZMmEBEcNFFF7Hnnntyxhln8NrXvpZx48bR1tbGgQceCMDEiRM57bTTmDBhAiNGjGDSpEmb5vWe97yHv/zlLxxzzDFAcYLgZZdd1mu1AkRm9uoMe1NbW1vOnTu32WVIkiQ9JyxcuJCDDjqo+gT3Xle0aV61tDjSfNRHe3xiYLN1tg4iYl5mtnU3rUecJUmS1Lnxb9jug3Jvso2zJEmSVIHBWZIkSarA4CxJkiRVYHCWJEmSKjA4S5IkSRUYnCVJkrRdmj59OpdccgkAH/nIRxg/fjyveMUrOPbYY3nkkUd6fXkGZ0mSJDVFZrJx48Zemde5557Lvffey4IFCzj55JO54IILemW+tQzOkiRJ6tTND93Msd85lvFXjufY7xzLzQ/d3ON5Ll68mDFjxnDWWWcxduxYzj77bMaOHcu4ceO49tprAVizZg1HHXUUEydOZNy4cdxwww2bpp8xYwYHHHAAU6ZMYdGiRZv6Dxs2bNPzp59+mojoca0deQMUSZIkbeHmh25m+h3TWbdhHQCPPv0o0++YDsBJ+53Uo3k/+OCDXHnllSxbtozLLruMe+65hxUrVjBp0iSmTp3K8OHDmTlzJsOGDWPFihVMnjyZU045hfnz53PNNdewYMECnnnmGSZOnMghhxyyab4f+tCHuOqqq9hll12YPXt2j2rsjEecJUmStIVL51+6KTS3W7dhHZfOv7TH8x41ahSTJ09mzpw5nH766QwYMIA99tiDI444grvuuovM5Pzzz2f8+PEcffTRLFu2jMcff5zbb7+dadOmsfPOOzNs2DBOOeWUZ813xowZPPzww5xxxhl84Qtf6HGdHRmcJUmStIXHnn6srv71GDJkyFaHX3311Sxfvpx58+axYMEC9thjD9atW7fVaWqdccYZfPe73+1pmVswOEuSJGkLew7Zs67+2+Lwww/n2muvZcOGDSxfvpzbbruNQw89lFWrVjFixAgGDhzI7NmzWbJkCQBTp05l1qxZrF27ltWrV3PjjTdumteDDz646fkNN9zAgQce2Gt1trONsyRJkrZwzsRzntXGGWDQgEGcM/GcXlvGtGnTuPPOO5kwYQIRwUUXXcSee+7JGWecwWtf+1rGjRtHW1vbphA8ceJETjvtNCZMmMCIESOYNGnSpnmdd955LFq0iB122IFRo0Zx2WWX9Vqd7SIze32mvaWtrS3nzp3b7DIkSZKeExYuXMhBBx1UefybH7qZS+dfymNPP8aeQ/bknInn9PjEwGbrbB1ExLzMbOtuWo84S5IkqVMn7XfSdh+Ue5NtnCVJkqQKDM6SJElSBQZnSZKkfqSVz29rtJ6+doOzJElSPzFo0CCeeOKJfhmeM5MnnniCQYMGbfM8PDlQkiSpnxg5ciRLly5l+fLlzS6lKQYNGsTIkSO3eXqDsyRJUj8xcOBA9t1332aXsd2yqYYkSZJUgcFZkiRJqsDgLEmSJFVgcJYkSZIqMDhLkiRJFRicJUmSpAoMzpIkSVIFBmdJkiSpAoOzJEmSVIHBWZIkSarA4CxJkiRVYHCWJEmSKjA4S5IkSRUYnCVJkqQKDM6SJElSBQZnSZIkqQKDsyRJklSBwVmSJEmqwOAsSZIkVWBwliRJkiowOEuSJEkVGJwlSZKkCgzOkiRJUgUGZ0mSJKkCg7MkSZJUgcFZkiRJqsDgLEmSJFVgcJYkSZIq6PPgHBEDIuLuiLipr5ctSZIkbatmHHE+B1jYhOVKkiRJ26xPg3NEjAROAv6rL5crSZIk9VRfH3H+HPB+YGMfL1eSJEnqkT4LzhFxMvDHzJzXzXhvj4i5ETF3+fLlfVSdJEmStHV9ecT51cApEbEYuAY4MiK+0XGkzPxqZrZlZtvw4cP7sDxJkiSpa30WnDPzg5k5MjNHA28EfpqZZ/bV8iVJkqSe8DrOkiRJUgU7NmOhmXkrcGszli1JkiRtC484S5IkSRUYnCVJkqQKDM6SJElSBQZnSZIkqQKDsyRJklSBwVmSJEmqwOAsSZIkVWBwliRJkiowOEuSJEkVGJwlSZKkCgzOkiRJUgUGZ0mSJKkCg7MkSZJUgcFZkiRJqsDgLEmSJFVgcJYkSZIqMDhLkiRJFRicJUmSpAoMzpIkSVIFBmdJkiSpAoOzJEmSVIHBWZIkSarA4CxJkiRVYHCWJEmSKjA4S5IkSRUYnCVJkqQKDM6SJElSBQZnSZIkqQKDsyRJklSBwVmSJEmqwOAsSZIkVWBwliRJkiowOEuSJEkVGJwlSZKkCgzOkiRJUgUGZ0mSJKkCg7MkSZJUgcFZkiRJqsDgLEmSJFVgcJYkSZIqMDhLkiRJFRicJUmSpAoMzpIkSVIFBmdJkiSpgrqDc0QMiYgBjShGkiRJalXdBueI2CEi3hQRN0fEH4EHgEcj4jcRcXFE7N/4MiVJkqTmqnLEeTbwEuCDwJ6ZuU9mjgCmAL8APhURZzawRkmSJKnpdqwwztGZub5jz8x8Evgu8N2IGNjrlUmSJEktpNsjzp2F5m0ZR5IkSdqeVT45MCKujIhda7pfEBGXN6QqSZIkqcXUc1WN8Zm5sr0jM58CDu71iiRJkqQWVE9w3iEiXtDeERG7Ua2NtCRJkrTdqyf4fhr4RURcBwTwt8AnG1KVJEmS1GIqB+fMvCoi5gJ/U/aalpkLG1OWJEmS1Fq6Dc4RMSczp0TEaiApjja3D8vMHNbIAiVJkqRW0G1wzswp5d+hjS9HkiRJak1Vbrn99fLvOY0vR5IkSWpNVa6qcUhE7AW8rbx28261j0YXKEmSJLWCKicHfhm4BdgXmEdNG2eKNs/7NaAuSZIkqaVUCc6HZuZBEbEuMw3JkiRJ6peqBOf2phqLyhug1B5xJjOfbEhlkiRJUgupEpwvo2iqsR821ZAkSVI/1e3JgZn5+cw8CLg8M/fLzH1rHoZmSZIk9QtVrqoBQGa+s5GFSJIkSa2s8i23Aco2zi8FBrX3y8zbersoSZIkqdVUDs4R8Q/AOcBIYAEwGbgTOLIhlUmSJEktpHJTDYrQPAlYkpl/AxwMrGxEUZIkSVKrqSc4r8vMdQAR8bzMfAAY05iyJEmSpNZSTxvnpRGxKzAL+ElEPAUsaURRkiRJUqupFJwjIoD3ZuZKYHpEzAZ2AX7YwNokSZKkllEpOGdmRsT3gXFl988aWpUkSZLUYupp4zw/IiY1rBJJkiSphdXTxvkw4IyIWAI8TXHr7czM8Q2pTJIkSWoh9QTn4xpWhSRJktTi6mmq8a7MXFL7AN7VqMIkSZKkVlJPcD6mk34n9FYhkiRJUivrtqlGRLyT4sjyfhFxb82gocDPG1WYJEmS1EqqtHH+JvAD4ELgvJr+qzPzyYZUJUmSJLWYboNzZq4CVgGn92RBETEIuA14Xrnc72Tmx3oyT0mSJKmv1HNVjZ76C3BkZq6JiIHAnIj4QWb+og9rkCRJkrZJnwXnzExgTdk5sHxkXy1fkiRJ6onKwTkingf8H2B07XSZeUEd8xgAzAP2B76Ymb+sXKkkSZLURPVcju4G4HXAMxR3Dmx/VJaZGzLzFcBI4NCIGNtxnIh4e0TMjYi5y5cvr2f2kiRJUsPU01RjZGYe3xsLzcyVETEbOB64v8OwrwJfBWhra7MphyRJklpCPUec74iIcdu6oIgYHhG7ls8HU9xQ5YFtnZ8kSZLUl+o54jwFeEtE/J7iChlBcc7f+IrTvwi4smznvANwXWbeVFe1kiRJUpPUE5x7dHvtzLwXOLgn85AkSZKapXJwzswljSxEkiRJamXdBueImJOZUyJiNc++7nJ7U41hDatOkiRJahFVbrk9pfw7tPHlSJIkSa2pnqtqSJIkSf2WwVmSJEmqwOAsSZIkVVA5OEfEp6r0kyRJkp6L6jnifEwn/Xp0bWdJkiRpe1HlcnTvBN4F7BcR99YMGgrc0ajCJEmSpFZS5QYo3wR+AFwInFfTf3VmPtmQqiRJkqQWU+U6zquAVRHxVuD1wOj26SKCzLygoRVKkiRJLaDyLbeBWcAqYB7wl4ZUI0mSJLWoeoLzyMw8vmGVSJIkSS2snqtq3BER4xpWiSRJktTC6jniPAV4S0T8nqKpRgCZmeMbUpkkSZLUQuoJzl6zWZIkSf1W5eCcmUsaWYgkSZLUyuq55XZExJkR8dGy+8URcWjjSpMkSZJaRz0nB34JeCVwetm9Gvhir1ckSZIktaB62jgflpkTI+JugMx8KiJ2alBdkiRJUkup54jz+ogYACRARAwHNjakKkmSJKnF1BOcPw/MBPaIiBnAHOCTDalKkiRJajH1XFXj6oiYBxxV9jo1Mxc2pixJkiSptVQOzhExCDgROJyiicZOEfH7zFzXqOIkSZKkVlHPyYFXUVxJ4/Nl95uArwN/19tFSZIkSa2mnuA8NjNfVtM9OyJ+09sFSZIkSa2onpMD50fE5PaOiDgMmNv7JUmSJEmtp54jzocAd0TEH8ruFwOLIuI+IDNzfK9XJ0mSJLWIeoLz8Q2rQpIkSWpx9TTVOBR4MjOXAG8GPgvsnplLyn6SJEnSc1Y9wfkjmbk6IqYARwNfA77cmLIkSZKk1lJPcN5Q/j0J+Gpm3gzs1PslSZIkSa2nnuC8LCK+ApwGfD8inlfn9JIkSdJ2q57g+wbgR8BxmbkS2A04txFFSZIkSa2m8lU1MvPPwPU13Y8CjzaiKEmSJKnV2NRCkiRJqsDgLEmSJFVQOThH4cyI+GjZ/eKIOLRxpUmSJEmto54jzl8CXgmcXnavBr7Y6xVJkiRJLaieW24flpkTI+JugMx8KiK8jrMkSZL6hXqOOK+PiAFAAkTEcGBjQ6qSJEmSWkw9wfnzwExgRETMAOYAn2xIVZIkSVKLqec6zldHxDzgKCCAUzNzYcMqkyRJklpIPW2cycwHgAcaVIskSZLUsioH54hoAz4EjCqnCyAzc3yDapMkSZJaRj1HnK8GzgXuw5MCJUmS1M/UE5yXZ+b3GlaJJEmS1MLqCc4fi4j/Am4B/tLeMzOv7/WqJEmSpBZTT3B+K3AgMJDNTTUSMDhLkiTpOa+e4DwpM8c0rBJJkiSphdVzA5Q7IuJlDatEkiRJamH1HHGeDCyIiN9TtHH2cnSSJEnqN+oJzsc3rApJkiSpxdVzy+0ljSxEkiRJamXdBueImJOZUyJiNcVVNDYNomiqMaxh1UmSJEktotvgnJlTyr9DG1+OJEmS1JoqX1UjIj5VpZ8kSZL0XFTP5eiO6aTfCb1ViCRJktTKqrRxfifwLmC/iLi3ZtBQ4OeNKkySJElqJVWuqvFN4AfAhcB5Nf1XZ+aTDalKkiRJajFVTg5cBawCTm98OZIkSVJrqqeNsyRJktRvGZwlSZKkCqqcHPivWxuemZ/pvXIkSZKk1lTl5MD2G5+MASYB3yu7Xwv8qhFFSZIkSa2mysmB/w4QEbcBEzNzddk9Hbi5odVJkiRJLaKeNs57AH+t6f5r2U+SJEl6zqvSVKPdVcCvImJm2X0qcEVvFyRJkiS1osrBOTNnRMQPgMPLXm/NzLsbU5YkSZLUWuo54kxmzgfmN6gWSZIkqWVVbuMchTMj4qNl94sj4tDGlSZJkiS1jnpODvwS8Eo233p7NfDFXq9IkiRJakH1NNU4LDMnRsTdAJn5VETs1KC6JEmSpJZSzxHn9RExAEiAiBgObGxIVZIkSVKLqSc4fx6YCYyIiBnAHOCTDalKkiRJajH1BOfxwPuBC4FHKa7j3NaAmiRJkqSWU08b52My8wPAA+09IuIE4AO9XpUkSZLUYroNzhHxTuBdwH4RcW/NoKHAzxtVmCRJktRKqhxx/ibwA4omGufV9F+dmU9WXVBE7ENx2+49KE4w/GpmXlpHrZIkSVLTdBucM3MVsIrN12/eVs8A78vM+RExFJgXET/JzN/0cL7qB25+6GYunX8pjz39GHsO2ZNzJp7DSfud1OyyJElSP1LPnQOvjIhda7pfEBGXV50+Mx8tb9lNZq4GFgJ711Gr+qmbH7qZ6XdM59GnHyVJHn36UabfMZ2bH7q52aVJkqR+pK6ramTmyvaOzHwKOHhbFhoRo8tpf7kt06t/uXT+pazbsO5Z/dZtWMel823pI0mS+k49wXmHiHhBe0dE7EZ9V+Von+75wHeBf8nMP3Uy/O0RMTci5i5fvrze2es56LGnH6urvyRJUiPUE5w/DfwiIj4eER8H7gAuqmdhETGQIjRfnZnXdzZOZn41M9sys2348OH1zF7PUXsO2bOu/pIkSY1QOThn5lXANODx8vH6zPx61ekjIoCvAQsz8zP1Fqr+65yJ5zBowKBn9Rs0YBDnTDynSRVJkqT+qJ6TAwOYCOyWmV8A1kTEoXUs69XAm4EjI2JB+TixvnLVH52030lMf9V0XjTkRQTBi4a8iOmvmu5VNSRJUp+KzKw2YsSXgY3AkZl5UNne+ceZOalRxbW1teXcuXMbNXtJkiSJiJiXmW3djVfPyX2HZebEiLgbiqtqRMRO21yhJEmStB2p5+TA9RExgOKuf0TEcIoj0JIkSdJzXj3B+fPATGCPiJgBzAE+2ZCqJEmSpBZTualGZl4dEfOAo8pep2bmwsaUJUmSJLWWysE5IgYBJwKHUzTR2Ckifp+Z67Y+pSRJkrT9q+fkwKuA1RRNNgDeBHwd+LveLkqSJElqNfUE57GZ+bKa7tkR8ZveLkiSJElqRfWcHDg/Iia3d0TEYYAXWZYkSVK/UM8R50OAOyLiD2X3i4FFEXEfkJk5vterkyRJklpEPcH5+IZVIUmSJLW4eoLzkMx8VpvmiHhNZt7auyVJkiRJraeeNs7XRcQHojA4Iv4TuLBRhUmSJEmtpJ7gfBiwD3AHcBfwCPDqRhQlSZIktZp6gvN6YC0wGBgE/D4zNzakKkmSJKnF1BOc76IIzpMo7h54ekR8uyFVSZIkSS2mnpMDz87M9us2Pwq8LiLe3ICaJEmSpJZT+YhzTWiu7ff13i1HkiRJak2Vg3N5NY0zI+KjZfeLI+LQxpUmSZIktY562jh/CXglcHrZvRr4Yq9XJEmSJLWgeto4H5aZEyPiboDMfCoidmpQXZIkSVJLqetydBExAEiAiBgOeDk6SZIk9Qv1BOfPAzOBERExA5gDfLIhVUmSJEktptumGhERWbg6IuYBRwEBnJqZC2vHaXCtkiRJUtNUaeM8OyK+C9yQmQ8ADwBExE4RcSTw98Bs4IqGVSlJkiQ1WZXgfDzwNuBbEbEvsJLiltsDgB8Dn8vMuxtWoSRJktQCug3OmbmO4lJ0X4qIgcALgbWZubLBtUmSJEkto57L0ZGZ6yluty1JkiT1K/VcVUOSJEnqt+q55fbejSxEkiRJamX1HHG+KSKmR8TghlUjSZIktah6gvMkYBXwy4g4q0H1SJIkSS2pcnDOzGcy87PAEcAhEXFHRBzeuNIkSZKk1lH5qhoRsR9wHDCmfOwP/Hd5ibrFmXlEY0qUJEmSmq+ey9HdAnyl/Ptl4HeZ+QxARIxqQG2SJElSy6gnOB+Tmf/b2YDMXNJL9UiSJEktqZ42zp2GZkmSJKk/8AYokiRJUgUGZ0mSJKkCg7MkSZJUgcFZkiRJqsDgLEmSJFVgcJYkSZIqMDhLkiRJFRicJUmSpAoMzpIkSVIFBmdJkiSpAoOzJEmSVIHBWZIkSarA4CxJkiRVYHCWJEmSKjA4S5IkSRUYnCVJkqQKDM6SJElSBQZnSZIkqQKDsyRJklSBwVmSJEmqwOAsSZIkVWBwliRJkiowOEuSJEkVGJwlSZKkCgzOkiRJUgUGZ0mSJKkCg7MkSZJUgcFZkiRJqsDgLEmSJFVgcJYkSZIqMDhLkiRJFRicJUmSpAoMzpIkSVIFBmdJkiSpAoOzJEmSVIHBWZIkSarA4CxJkiRVYHCWJEmSKjA4S5IkSRUYnCVJkqQKDM6SJElSBQZnSZIkqYI+C84RcXlE/DEi7u+rZUqSJEm9Zcc+XNYVwBeAq/pwmXqOmHX3Mi7+0SIeWbmWvXYdzLnHjeHUg/dudllqtnuvg1sugFVLYZeRcNRHYfwbml2VJOk5qs+Cc2beFhGj+2p5eu6YdfcyPnj9faxdvwGAZSvX8sHr7wMwPPdn914HN74X1q8tulc9XHSD4VmS1BC2cVbLu/hHizaF5nZr12/g4h8talJFagm3XLA5NLdbv7boL0lSA7RccI6It0fE3IiYu3z58maXoxbwyMq1dfVXP7FqaX39JUnqoZYLzpn51cxsy8y24cOHN7sctYC9dh1cV3/1E7uMrK+/JEk91HLBWero3OPGMHjggGf1GzxwAOceN6ZJFaklHPVRGNjhn6eBg4v+kiQ1QF9eju5bwJ3AmIhYGhFn99WytX079eC9ufD149h718EEsPeug7nw9eM8MbC/G/8GeO3nYZd9gCj+vvbznhgoSWqYyMxm19Cltra2nDt3brPLkCRJ0nNYRMzLzLbuxrOphiRJklSBwVmSJEmqwOAsSZIkVWBwliRJkiowOEuSJEkVGJwlSZKkCgzOkiRJUgUGZ0mSJKkCg7MkSZJUgcFZkiRJqsDgLEmSJFVgcJYkSZIqMDhLkiRJFRicJUmSpAoMzpIkSVIFBmdJkiSpAoOzJEmSVIHBWZIkSarA4CxJkiRVYHCWJEmSKjA4S5IkSRUYnCVJkqQKDM6SJElSBQZnSZIkqQKDsyRJklSBwVmSJEmqwOAsSZIkVWBwliRJkiowOEuSJEkVGJwlSZKkCgzOkiRJUgUGZ0mSJKkCg7MkSZJUgcFZkiRJqsDgLEmSJFVgcJYkSZIqMDhLkiRJFRicJUmSpAoMzpIkSVIFBmdJkiSpAoOzJEmSVIHBWZIkSarA4CxJkiRVYHCWJEmSKjA4S5IkSRUYnCVJkqQKDM6SJElSBQZnSZIkqQKDsyRJklSBwVmSJEmqwOAsSZIkVWBwliRJkiowOEuSJEkVGJwlSZKkCgzOkiRJUgUGZ0mSJKkCg7MkSZJUgcFZkiRJqsDgLEmSJFVgcJYkSZIqMDhLkiRJFRicJUmSpAoMzpIkSVIFBmdJkiSpAoOzJEmSVIHBWZIkSarA4CxJkiRVYHCWJEmSKjA4S5IkSRUYnCVJkqQKDM6SJElSBQZnSZIkqQKDsyRJklSBwVmSJEmqwOAsSZIkVWBwliRJkiowOEuSJEkVGJwlSZKkCvo0OEfE8RGxKCL+NyLO68tlS5IkST3RZ8E5IgYAXwROAF4GnB4RL+ur5UuSJEk90ZdHnA8F/jczH8rMvwLXAK/rw+VLkiRJ26wvg/PewMM13UvLfpIkSVLL27HZBXQUEW8H3l52/iUi7m9mPWo5LwRWNLsItRy3C3XG7UKdcbtQZ8ZUGakvg/MyYJ+a7pFlv2fJzK8CXwWIiLmZ2dY35Wl74DahzrhdqDNuF+qM24U6ExFzq4zXl0017gJeGhH7RsROwBuB7/Xh8iVJkqRt1mdHnDPzmYh4D/AjYABweWb+uq+WL0mSJPVEn7ZxzszvA9+vY5KvNqoWbbfcJtQZtwt1xu1CnXG7UGcqbReRmY0uRJIkSdruecttSZIkqYKWDM7emlsdRcTlEfFHL0+oWhGxT0TMjojfRMSvI+KcZtek5ouIQRHxq4i4p9wu/r3ZNal1RMSAiLg7Im5qdi1qDRGxOCLui4gF3V1do+WaapS35v4tcAzFTVLuAk7PzN80tTA1VURMBdYAV2Xm2GbXo9YQES8CXpSZ8yNiKDAPONX9Rf8WEQEMycw1ETEQmAOck5m/aHJpagER8a9AGzAsM09udj1qvohYDLRlZrfX927FI87emltbyMzbgCebXYdaS2Y+mpnzy+ergYV4R9J+Lwtrys6B5aO1jhKpKSJiJHAS8F/NrkXbp1YMzt6aW1LdImI0cDDwyyaXohZQ/hy/APgj8JPMdLsQwOeA9wMbm1yHWksCP46IeeUdrLvUisFZkuoSEc8Hvgv8S2b+qdn1qPkyc0NmvoLiLrWHRoRNvPq5iDgZ+GNmzmt2LWo5UzJzInAC8O6yeWinWjE4V7o1tyQBlG1YvwtcnZnXN7setZbMXAnMBo5vcilqvlcDp5TtWa8BjoyIbzS3JLWCzFxW/v0jMJOi2XCnWjE4e2tuSZWUJ4F9DViYmZ9pdj1qDRExPCJ2LZ8PpjjZ/IGmFqWmy8wPZubIzBxNkS1+mplnNrksNVlEDClPLicihgDHAl1ewavlgnNmPgO035p7IXCdt+ZWRHwLuBMYExFLI+LsZteklvBq4M0UR44WlI8Tm12Umu5FwOyIuJfiYMxPMtNLj0nqzB7AnIi4B/gVcHNm/rCrkVvucnSSJElSK2q5I86SJElSKzI4S5IkSRUYnCVJkqQKDM6SJElSBQZnSZIkqQKDsyRJklSBwVmSJEmqwOAsSd2IiMER8bOIGNDEGnaNiHdtw3TTI+LfOul/R+9UVqmGupcVETtFxG0RsWMjapKkbWFwlqTuvQ24PjM3NLGGXYG6g3NXMvNVvTWvRiwrM/8K3AKc1vsVSdK2MThL6tci4r8j4rXlEd3vR8S0TkY7A7ihHP/MiPhVeXvvr7QfhY6ISRFxb0QMioghEfHriBgbEaMj4oGIuDoiFkbEdyJi527mdVY5r3si4utlDf8BvKQc9+Kupi2n/1BE/DYi5gBjunjda2qez4qIeWXNby/7tdd9RTmvqyPi6Ij4eUQ8GBGHdjLPIRFxc1n3/RFxWu2yIuIdNbdG/31EzN7aegBmleteklqCwVlSfzcOeIoiGH8iM2fWDoyInYD9MnNxRBxEcQT01Zn5CmADZbDLzLuA7wGfAC4CvpGZ95ezGQN8KTMPAv4EvKureUXEy4EPA0dm5gTgnHIe5wG/K8e9vKs6IuIQ4I3AK4ATgUkV1sHbMvMQoA14b0TsXvbfH/g0cGD5eBMwBfg34PxO5nM88EhmTsjMscAPawdm5mVlvZOApcBntrZOgfsr1i9JfcK2Y5L6rYjYATgI+CbwxczsrC3uC4GV5fOjgEOAuyICYDDwx5pxLwDuAtYB763p/3Bm/rx8/o1y2Lou5rUL8O3MXAGQmU92UtPW6jgcmJmZfy5f4/e6WQ1QhOX2I+37AC8FHgN+n5n3lfP5NXBLZmZE3AeM7mQ+9wGfjohPATdl5u1dLO9S4KeZeWNEvKer15KZGyLirxExNDNXV3gdktRQBmdJ/dlLgUeAfwK+FhGfycz1HcZZCwwqnwdwZWZ+sIv57Q48HxhYTvN02T87jJddzSsi/rlC3d3VUVlEvAY4GnhlZv45Im5l8+v9S82oG2u6N9LJ90dm/jYiJlIc6f5ERNySmRd0WN5bgFHAeyq+ludR/JMhSU1nUw1J/dk44CeZ+VOKZgFndRwhM58CBkTEIIqT1f42IkYARMRuETGqZvSvAB8BrgY+VdP/xRHxyvL5m4A5W5nXT4G/a28uERG7ldOtBoaWz7dWx23AqeWVQIYCr+1mHewCPFWG5gOByd2M36WI2Av4c2Z+A7gYmNhh+CEUzTzOzMyN3b2Wch2s6OSfGUlqCo84S+rPxlEEZoBPAl+PiCsz85kO4/0YmJKZ/xMRHwZ+XDbzWA+8G1gSEWcB6zPzm+XJbXdExJHAQ8Ai4N0RcTnwG+DLZVDdYl6Z+YuImAH8LCI2AHcDb8nMJ8oT8+4HfkDRDnqLOjJzfkRcC9xD0eThri5ee/tR8B8C74iIhWWdv9i2VQkU6/PiiNhY1vTODsPfA+wGzC6bZczNzH/oap0CfwPc3IN6JKlXRWbHXxAlSbXK5gf/NzPfvA3TjqZo7zu21wvbRuWR3PmZOarbkZsoIq4HzsvM3za7FkkCm2pIUrcycz7FUdKm3QClt5TNKe4ELml2LVtTXs1klqFZUivxiLMkSZJUgUecJUmSpAoMzpIkSVIFBmdJkiSpAoOzJEmSVIHBWZIkSarA4CxJkiRVYHCWJEmSKjA4S5IkSRX8f1i/bHjFD1tFAAAAAElFTkSuQmCC", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "road1 = gs.array([1.0,1.0])\n", "road2 = gs.array([2.0,1.0])\n", "road3 = gs.array([1.0,2.0])\n", "fig = plt.figure(figsize=(12,8))\n", "plt.scatter(*road1, label = 'road1')\n", "plt.scatter(*road2, label = 'road2')\n", "plt.scatter(*road3, label = 'road3')\n", "plt.xlabel(\"$\\\\kappa$ (expected jam size)\")\n", "plt.ylabel(\"$\\\\gamma$ (expected time spent in traffic)\")\n", "plt.title(\"3 roads subject to traffic jams, represented as points on the Gamma manifold.\")\n", "plt.legend()\n", "plt.xlim(0,5)\n", "plt.ylim(0,5)\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here:\n", "- road 1 is $(\\kappa_1=1,\\gamma_1=1)$;\n", "- road 2 is $(\\kappa_2=2,\\gamma_2=1)$;\n", "- road 3 is $(\\kappa_3=1,\\gamma_3=2)$.\n", "\n", "This means that cars on road 1 will spend half as much time as cars on road 3 in the case of a traffic jam, on average. On the other hand, cars on road 1 and road 2 will spend the same time in traffic on average, but the line is twice as long on road 2." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 3.2. Mathematical representation of renovation efforts" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 3.2.1. Hypotheses" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Renovating a road initially aims at reducing the expected time spent in traffic. This means that for a given road $x_r = (\\kappa_r, \\gamma_r)$, we want to reduce $\\gamma_r$ as efficiently as possible. But, the efficiency of the renovation in that regard heavily depends on the road: one can argue that it is more efficient to renovate a road where traffic jams are frequent than a road on which the traffic is almost fluid. This is where information geometry comes in handy: as a riemannian manifold, the metric of the Gamma manifold is point-dependent.\n", "\n", "By seeing renovation as an effort in reducing the expected time in traffic, we can model the advancement of the renovation as the geodesic departing from the point representation of the road, and with initial tangent vector in the direction and orientation $-\\gamma$. This reflects the fact that the advancement of the renovation will follow the most natural path, i.e. the distribution of the waiting time of the associated road will change as little as possible throughout the renovation. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 3.2.2. Model" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We decide to model a renovation effort of budget/effort $r_i$ on road $x_r$ as the tangent vector $r_i \\left(\\begin{array}{c} 0 \\\\ -1 \\end{array}\\right)_{x_r}$, where $\\left(\\begin{array}{c} 0 \\\\ -1 \\end{array}\\right)_{x}$ is the unit tangent vector at $x$ with direction and orientation $-\\gamma$. The amount of effort/resources invested in the renovation of a given road is directly represented by the norm of the tangent vector.\n", "\n", "Investing as much as $r_i$ renovation resources on road $x_r$ will result in having the renovated road $x_r' = \\exp_{x_r} \\left( r_i \\times \\left(\\begin{array}{c} 0 \\\\ -1 \\end{array}\\right)_{x_r} \\right)$, where $\\exp_{x}$ is the exponential map at $x$." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The following plot shows a comparison of similar renovations undertaken on the roads in the previous example." ] }, { "cell_type": "code", "execution_count": 34, "metadata": {}, "outputs": [ { "data": { "image/png": "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qampLFiwgN69e5OWlkazZs2IiYlh3rx5bNiwAYCzzjqL2bNnk56ezv79+3nrrbfy3O6yZcu46aabmDNnDs2aNSuxvCJVgVqoJU8x0TFkezZZ2VlER0UHHUdEpGIYNuH4PtQAMbVC80vI2LFjWbRoEYmJiZgZjz32GKeccgpXXnklo0ePJj4+np49e9KpUycAkpKSGDduHImJiTRr1oxevXrlud3x48dz4MABLrnkEgBat27NnDlzSiy3SGVmoaGfK66ePXt6SkpK0DEqnb9+/lcmLZ1EylUp1IjWz34iUnWtXr2azp07R77CitdCfabTNodapodNKFb/aREJRl7ffTNb4u49T1xWLdSSp5ioGAAysjJUUIuIFEXCpSqgRaoY9aGWPFWLCv1bS/2oRURERAqmglrydKyFWjd3ERERESmYCmrJU06XD7VQi4iIiBRIBbXkSV0+RERERCKjglryFBP9/UWJIiIiIpI/FdSSJ3X5EBGpnCZOnMjvfve7H8x/9tlniY+Pp3v37gwYMIBVq1YFkE6kYlJBLXnSRYkiIuWPu5OdnV0q277iiiv4/PPPWb58OXfffTd33XVXqexHpDJSQS15Ugu1iMjJefubtzln5jkkTE3gnJnn8PY3bxdre+vXr6djx45cc801dOvWjU2bNjF+/Hi6detGfHw8M2bMAODAgQMMGzaMpKQk4uPj+fvf/56zjYcffpgOHTowYMAA1qxZk+d+6tevn/P44MGDmFmxcotUJbqxi+RJFyWKiBTd29+8zcSPJnI46zAA3x38jokfTQTg/Hbnn/R2v/rqK6ZOnUqfPn144403WL58OZ999hk7d+6kV69enHXWWTRt2pRZs2ZRv359du7cSZ8+fRgzZgxLly5l+vTpLF++nMzMTJKSkkhOTs5zP8888wxPPPEER48e5b333jvpvCJVjVqoJU9qoRYRKbpJSyflFNPHHM46zKSlk4q13bi4OPr06QPAwoULufzyy4mOjqZ58+YMGjSIxYsX4+7cd999JCQkcPbZZ7Nlyxa2b9/OBx98wNixY6lduzb169dnzJgx+e7n1ltvZd26dTz66KM89NBDxcosUpWohVrydGyUD/WhFhGJ3LaD24o0P1J16tQpdJlp06aRmprKkiVLiImJoU2bNhw+fLjQ9fJy2WWXcfPNN5/UuiJVkVqoJU9qoRYRKbpT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euopZs2aBcCmTZv46quv2LZtG4MHD6Zp06YAjBs3jrVr1+Y8njFjBkOGDGH69OnccsstAKxcuZJf/vKX7N27lwMHDjBixIicfVx44YVERUXRpUsXtm/fDsA777zD9ddfT+3atQFo1KgRBw4c4KOPPuKSSy7JWffIkSM5j0ePHo2ZER8fT/PmzYmPjwega9eurF+/ns2bN7Nq1Sr69+8PwNGjR+nbt2/O+hdddBEAycnJvPnmm4Wem4ULF/LGG28AMHToUHbt2sW+ffsKXW/cuHEArFmzhpUrVzJ8+HAAsrKyaNGiRZ551q9fn7PP22+/HYBOnToRFxfH2rVrufTSSznnnHN48MEHee2117j44ouB0K8G1157LV999RVmRkZG4b/+Llq0KOf4r776au6+++6c1/J6r3J79913WbJkCb169QIgPT2dZs2aFbi/tLQ09u7dy6BBgwC49tprj3uPj52v0swNEBcXR58+fYDQeb788suJjo6mefPmDBo0iMWLFzNy5Ejuu+8+FixYQFRUFFu2bGH79u188MEHjB07NufzWtrdZ3JTQS35qmbqQy0iktsDo7uW+T7nz5/PO++8w6JFi6hduzaDBw/m8OHDBa4zZswY7rvvPnbv3s2SJUsYOnQoEPrZffbs2SQmJjJlyhTmz5+fs06NGjVyHoca4vKWnZ1NbGxsvn2Tj20nKirquG1GRUWRmZlJdHQ0w4cP59VXXy1w/ejoaDIzS69Rp06dOkDoWLt27cqiRYuKnee0006jcePGrFixghkzZvDss88CcP/99zNkyBBmzZrF+vXrGTx4cLGyF/ZeuTvXXnstv/3tb4u1n9yOna/iiOQzFsl+pk2bRmpqKkuWLCEmJoY2bdoU+p0obepDLfmKidYoHyIiQUtLS6Nhw4bUrl2bL7/8ko8//hiAM888k/fff59du3aRkZHB66+/nrNO3bp16dWrF3feeSejRo0iOjoagP3799OiRQsyMjKYNm1aofsePnw4kydPzulrvXv3burXr0/btm1z9ufufPbZZxEfT58+ffjwww9zLoQ7ePBgTst6furVq8f+/fvzfG3gwIE5xzJ//nyaNGlC/fr1I87TsWNHUlNTcwrqjIyM4/pBF7bPtWvXsnHjRjp27AiEWnIfe+wx0tLSSEhIAELv4WmnnQaERmOJ5Lj69evH9OnTgVABOXDgwIiPadiwYcycOZMdO3YAofdtw4YNBa7ToEEDGjZsmNNP/OWXX85prT5RaeU+0cCBA5kxYwZZWVmkpqayYMECevfuTVpaGs2aNSMmJoZ58+blHNtZZ53F7NmzSU9PZ//+/bz11lsnve+iUkEt+dJFiSIiwTv33HPJzMykc+fO3HvvvTk/h7do0YKJEyfSt29f+vfvT+fOnY9bb9y4cbzyyivH/VT/61//mjPPPJP+/fvTqVOniPY9ZswYevbsSffu3XNGRZg2bRovvPACiYmJdO3a9biLwgrTtGlTpkyZkjNcW9++fXMuaszP6NGjmTVrVp4XJU6cOJElS5aQkJDAvffey9SpUyPOAlC9enVmzpzJPffcQ2JiIt27dy90iL5bbrmF7Oxs4uPjGTduHFOmTMlpfb344ouZPn06l156ac7yd999Nz//+c/p0aPHca3cQ4YMYdWqVXkO7ffHP/6RyZMnk5CQwMsvv8ykSZMiPqYuXbrw0EMPcc4555CQkMDw4cNzLrQsyNSpUxk/fjwJCQksX76cCRMm5LncZZddxuOPP06PHj1+cFFicXKfaOzYsSQkJJCYmMjQoUN57LHHOOWUU7jyyitJSUkhPj6el156KeeznJSUxLhx40hMTGTkyJE5XV5OtHjxYlq2bMnrr7/OTTfdRNeuxf/lyQr6Waci6Nmzp6ekpAQdo1K67B+X0ahmI/509p+CjiIiEpjVq1f/oFgVkcovr+++mS1x954nLqsWasmXWqhFRERECqeCWvKlG7uIiIiIFE4FteRLLdQiIiIihSuzgtrMXjSzHWa2Mp/XG5jZW2b2mZl9YWbXl1U2yZtG+RAREREpXFm2UE8Bzi3g9VuBVe6eCAwGfm9m1csgl+QjJiqGTNeNXUREREQKUmYFtbsvAHYXtAhQz8wMqBteVtVcgKpFVVMLtYiIiEghylMf6qeBzsBW4HPgTnfPzmtBM/uJmaWYWUpqampZZqxS1IdaRKTimDJlCrfddlvQMUrF/PnzCx0b+kRHjhzh7LPPznOM5/Ji+fLlzJ07N+f5nDlzeOSRR0p1n6+//jqdO3dmyJAhADnjgT/55JMRb2P27NmsWrWqtCKWmIkTJ+aMnZ7bE088QZcuXUhISGDYsGGF3vQmEuWpoB4BLAdOBboDT5tZnrc6cvfn3L2nu/ds2rRp2SWsYlRQi4hIeXAyBfWyZcuAUNGa++Y2JyrN25sX5sSCesyYMdx7772lus8XXniB559/nnnz5rFt2zYWL17MihUr+N///d+I1s/MzCyTgtrdyc7Os1212Hr06EFKSgorVqzg4osv5u677y72NstTQX098KaHfA18CxR+GycpNTFRMWRmq9eNiEjQLrzwQpKTk+natSvPPfdczvzJkyfToUMHevfuzYcffgiEbnMdFxeXU4wcPHiQVq1akZGRwfPPP0+vXr1ITEzkRz/6Uc4txa+77jruuOMO+vXrR7t27Zg5c2bOPh599FHi4+NJTEzMKfbWrVvHueeeS3JyMgMHDsy50+F1113HzTffTJ8+fWjXrh3z58/nhhtuoHPnzlx33XU52/zPf/5D3759SUpK4pJLLuHAgQMAtGnThgceeICkpCTi4+P58ssvWb9+Pc8++yxPPvlknndK3L17NxdeeCEJCQn06dOHFStWsGPHDq666ioWL15M9+7df3A3v8GDB/Ozn/2Mnj17MmnSJJYsWcKgQYNITk5mxIgROXcVHDx4MPfccw+9e/emQ4cOOfs+fPgw119/PfHx8fTo0YN58+YBoduq575t+eDBg0lJSeHTTz+lb9++9OjRg379+rFmzRqOHj3KhAkTmDFjRk4reu5fGdavX8/QoUNzWlE3btxY6HuV2yuvvELv3r3p3r07N910E1lZWfzqV79i4cKF3HjjjYwfP55zzjmHLVu25JzX5cuX06dPHxISEhg7dix79uz5wfl69NFHmTNnDuPHj8/z3BYn9/r16+nYsSPXXHMN3bp1Y9OmTYwfP55u3boRHx+f80vDgQMHGDZsWM7nJPedOh9++GE6dOjAgAEDWLNmTZ7nZsiQIdSuXTvnPdu8eXOeyxWJu5fZBLQBVubz2p+BieHHzYEtQJPCtpmcnOxSOn6/+Pee9FKSZ2dnBx1FRCQwq1at+v7J3HvcXzyvZKe59xSaYdeuXe7ufujQIe/atavv3LnTt27d6q1atfIdO3b4kSNHvF+/fn7rrbe6u/uYMWP8vffec3f36dOn+4033uju7jt37szZ5i9+8Qt/6qmn3N392muv9YsvvtizsrL8iy++8Pbt24cOd+5c79u3rx88ePC4HEOHDvW1a9e6u/vHH3/sQ4YMydnOuHHjPDs722fPnu316tXzFStWeFZWliclJfmyZcs8NTXVBw4c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s2YNR48eZcKECcyYMSOnFT33rwzr169n6NChJCQkMGzYMDZu3Fjoe5XbK6+8Qu/evenevTs33XQTWVlZ/OpXv2LhwoXceOONjB8/nnPOOYctW7bknNfly5fTp08fEhISGDt2LHv27PnB+Xr00UeZM2cO48ePz/PcFif3+vXr6dixI9dccw3dunVj06ZNjB8/nm7duhEfH5/zS8OBAwcYNmxYzuck9506H374YTp06MCAAQNYs2ZNnucm963pDx48WDINhsf+BVBRp+TkZJfS88baN7zblG6+Zf+WoKOIiARi1apVOY8f+eQRv+6f15Xo9MgnjxSaYdeuXe7ufujQIe/atavv3LnTt27d6q1atfIdO3b4kSNHvF+/fn7rrbe6u/uYMWP8vffec3f36dOn+4033uju7jt37szZ5i9+8Qt/6qmn3N392muv9YsvvtizsrL8iy++8Pbt27u7+9y5c71v375+8ODB43IMHTrU165d6+7uH3/8sQ8ZMiRnO+PGjfPs7GyfPXu216tXz1esWOFZWVmelJTky5Yt89TUVB84cKAfOHAgdE4fecQffPBBd3ePi4vLyfTMM8/k5H7ggQf88ccfz/Pc3HbbbT5x4kR3d3/33Xc9MTHR3d3nzZvn559/fp7rDBo0yG+++WZ3dz969Kj37dvXd+zYkXO+rr/++pzl7rrrLnd3f/vtt33YsGHu7v673/0uZ5nVq1d7q1atPD093Z944gmfMGGCu7tv3brVO3To4O7uaWlpnpGR4e7u//3vf/2iiy5yd/fJkyfnvGcnPh81apRPmTLF3d1feOEFv+CCCwp8r3JbtWqVjxo1yo8ePeru7jfffLNPnTo155gWL17s7u7ffvutd+3aNWe9+Ph4nz9/vru733///X7nnXf+4Hwdy/D666/neW6Lk/vbb791M/NFixa5u/vMmTP97LPP9szMTN+2bZu3atXKt27d6hkZGZ6Wlubu7qmpqd6+fXvPzs72lJQU79atmx88eNDT0tK8ffv2+X5unn76aW/Xrp23bNky57Oc13k8EZDiedSj6vIhBTp2t8Q9R/Zwat1Tgw0jIlJFPfXUU8yaNQuATZs28dVXX7Ft2zYGDx5M06ZNARg3bhxr167NeTxjxgyGDBnC9OnTueWWWwBYuXIlv/zlL9m7dy8HDhxgxIgROfu48MILiYqKokuXLmzf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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "Road 1 renovation: expected waiting time has decreased from 1.0 to 0.409, expected jam size has increased from 1.0 to 1.443.\n", "Road 2 renovation: expected waiting time has decreased from 1.0 to 0.536, expected jam size has increased from 2.0 to 2.995.\n", "Road 3 renovation: expected waiting time has decreased from 2.0 to 0.818, expected jam size has increased from 1.0 to 1.443.\n" ] } ], "source": [ "fig = plt.figure(figsize=(12,8))\n", "\n", "t = gs.linspace(0,1,10)\n", "\n", "plt.scatter(*road1, label = 'road 1')\n", "plt.scatter(*road2, label = 'road 2')\n", "plt.scatter(*road3, label = 'road 3')\n", "\n", "effort = gs.array([0.0, -1.0])\n", "\n", "effort1 = space.metric.normalize(effort, road1)\n", "renovation1 = space.metric.geodesic(initial_point=road1, initial_tangent_vec=effort1)\n", "renovation1 = renovation1(t)\n", "plt.plot(*gs.transpose(renovation1), label = 'advancement of renovation effort on road 1')\n", "\n", "effort2 = space.metric.normalize(effort, road2)\n", "renovation2 = space.metric.geodesic(initial_point=road2, initial_tangent_vec=effort2)\n", "renovation2 = renovation2(t)\n", "plt.plot(*gs.transpose(renovation2), label = 'advancement of renovation effort on road 2')\n", "\n", "effort3 = space.metric.normalize(effort, road3)\n", "renovation3 = space.metric.geodesic(initial_point=road3, initial_tangent_vec=effort3)\n", "renovation3 = renovation3(t)\n", "plt.plot(*gs.transpose(renovation3), label = 'advancement of renovation effort on road 3')\n", "\n", "plt.xlabel(\"$\\\\kappa$ (expected jam size)\")\n", "plt.ylabel(\"$\\\\gamma$ (expected time spent in traffic)\")\n", "\n", "plt.title(\"Comparison of different renovation efforts\")\n", "\n", "plt.legend()\n", "plt.axis(\"equal\")\n", "\n", "plt.show()\n", "\n", "print(f\"Road 1 renovation: expected waiting time has decreased from {road1[1]} to {str(renovation1[-1,1])[:5]}, expected jam size has increased from {road1[0]} to {str(renovation1[-1,0])[:5]}.\")\n", "print(f\"Road 2 renovation: expected waiting time has decreased from {road2[1]} to {str(renovation2[-1,1])[:5]}, expected jam size has increased from {road2[0]} to {str(renovation2[-1,0])[:5]}.\")\n", "print(f\"Road 3 renovation: expected waiting time has decreased from {road3[1]} to {str(renovation3[-1,1])[:5]}, expected jam size has increased from {road3[0]} to {str(renovation3[-1,0])[:5]}.\")\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We observe that it is much more efficient to renovate road 3 rather than road 1 in terms of gained expected waiting time. This was expected given road 1 is much more fluid than road 3. In terms of relative time gain however, the result is the same: this is specific to Gamma distributions. In addition, renovating road 3 is more efficient than renovating road 2, either in absolute or relative time gain. We observe furthermore that investing similar efforts in renovating roads 3 and 2 result in different evolutions regarding the expected jam size: it increases by 44% in the first case and by as much as 50% in the second one. This becomes delicate especially considering the expected car line on road 2 was already long.\n", "\n", "We notice that renovations increase the expected jam size: this can be interpreted as the fact that a renovated roads allows drivers to go faster and the lane becomes longer, in a sense the traffic becomes more diluted. This can be observed in the following plot: renovations increase at once the expected jam size and the expected exit time rate, rendering the road open to much more traffic." ] }, { "cell_type": "code", "execution_count": 35, "metadata": {}, "outputs": [ { "data": { "image/png": "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06YNDRs29Kz77NmzjBw5ksDAQFq2bMmyZcsACAsLY9OmTResJyIigt9//53w8HBatmxJu3bt2LZtG4mJiUyYMIG5c+d6zn6n/XUgOjqabt26ERQURPfu3dm7d2+m71Vas2bNok2bNrRo0YJRo0aRkpLC008/zcqVK7nzzjsZO3YsvXr14sCBA579GhUVRVhYGEFBQQwaNIgTJ078bX+99NJLLF68mLFjx6a7b7OTOzo6mkaNGnH77bfTvHlz9u3bx9ixY2nevDmBgYGeXwji4+Pp3r275zj5/PPPPct47rnnaNiwIR06dGDbtm3p7pu6desSFBTkk0JcRKTQOHUQZvZzFcph98KIL1Uo55TzZ4zy4i00NNRebPPmzZ77kxZvtDdO+TVHb5MWb/zbOi927Ngxa621p0+fts2aNbNHjx61Bw8etLVq1bJHjhyx586ds+3atbP33XeftdbaAQMG2B9//NFaa+2cOXPsnXfeaa219ujRo55lPv744/aNN96w1lo7fPhwO3jwYJuSkmI3bdpkGzRoYK21dunSpTY8PNwmJCRckKNbt252+/bt1lprV69ebbt27epZztChQ21qaqpdtGiRLVOmjF2/fr1NSUmxISEhdt26dTYmJsZ27NjRxsfHW2utffHFF+1TTz1lrbW2Tp06nkxvv/22J/fEiRPt5MmT0903999/v500aZK11toffvjBBgcHW2utXbZsmb322mvTnadz58529OjR1lprExMTbXh4uD1y5Ihnf40cOdLzuocffthaa+2SJUts9+7drbXWvvLKK57XbNmyxdaqVcueOXPGvvrqq3bChAnWWmsPHjxoGzZsaK21NjY21iYlJVlrrf3uu+/s9ddfb621dvr06Z737OLH/fr1szNmzLDWWjtt2jR73XXXXfK9Smvz5s22X79+NjEx0Vpr7ejRo+3MmTM927RmzRprrbW7d++2zZo188wXGBholy9fbq219sknn7Rjxoz52/46n2HevHnp7tvs5N69e7c1xthVq1ZZa62dP3++7dGjh01OTraHDh2ytWrVsgcPHrRJSUk2NjbWWmttTEyMbdCggU1NTbURERG2efPmNiEhwcbGxtoGDRpkeNxkth1pP/ciInKRXSusfbmBtc9Wt3bDfKfT5EtAhM2gHlUzjMvwxhtvsHDhQgD27dvHjh07OHToEF26dKFy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1g4YMMD++OOP1lpr58yZY++8805rrbVHjx71LPPxxx+3b7zxhrXW2uHDh9vBgwfblJQUu2nTJtugQQPX5i5dasPDw21CQsIFObp162a3b99urbV29erVtmvXrp7lDB061KamptpFixbZMmXK2PXr19uUlBQbEhJi161bZ2NiYmzHjh1tfHy8tdbaF1980T711FPWWmvr1KnjyfT22297ck+cONFOnjw53X1z//3320mTJllrrf3hhx9scHCwtdbaZcuW2WuvvTbdeTp37mxHjx5trbU2MTHRhoeH2yNHjnj218iRIz2ve/jhh6211i5ZssR2797dWmvtK6+84nnNli1bbK1ateyZM2fsq6++aidMmGCttfbgwYO2YcOG1lprY2NjbVJSkrXW2u+++85ef/311lprp0+f7nnPLn7cr18/O2PGDGuttdOmTbPXXXfdJd+rtDZv3mz79etnExMTrbXWjh492s6cOdOzTWvWrLHWWrt7927brFkzz3yBgYF2+fLl1lprn3zySTtmzJi/7a/zGebNm5fuvs1O7t27d1tjjF21apW11tr58+fbHj162OTkZHvo0CFbq1Yte/DgQZuUlGRjY2OttdbGxMTYBg0a2NTUVBsREWGbN29uExISbGxsrG3QoEGGx8159913n33mmWfS3YciIgVGSoq1P022dlI5a99qY23MdqcTFXpAhM2gHtWfL5fhjTfeYOHChQDs27ePHTt2cOjQIbp06ULlypUBGDp0KNu3b/fcnzt3Ll27dmXOnDnce++9AGzcuJEnnniCkydPEh8fT+/evT3rGDhwIH5+fjRt2pTDhw8D8P333zNy5EjPWbgKFSoQHx/Pr7/+ypAhQzzznjt3znO/f//+GGMIDAykatWqBAYGAtCsWTOio6PZv38/mzdvpn379gAkJiYSHv6/dlLXX389AKGhoXz22WeZ7puVK1eyYMECALp168axY8c4depUpvMNHToUgG3btrFx40Z69uwJQEpKCtWrV083T3R0tGedDzzwAACNGzemTp06bN++nRtvvJFevXrx1FNP8emnnzJ48GDAdbZ/+PDh7NixA2MMSUlJmeZbtWqVZ/tvu+02HnnkEc9z6b1Xaf3www9ERkbSunVrAM6cOUOVKlUuub7Y2FhOnjxJ586dARg+fPgF7/H5/eXL3AB16tQhLCwMcO3nYcOG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J04kJCSEwMBAtm7dSnR0NFOmTOG1115LdwS/48ePM3DgQIKCgggLC2P9+vUcOXKEW2+9lTVr1tCiRYu/jTLXpUsXHnroIVq1asXrr79OZGQknTt3JjQ0lN69e3tGu+vSpQvjxo2jTZs2NGzY0LPus2fPMnLkSAIDA2nZsiXLli0DXEN5px0qu0uXLkRERPD7778THh5Oy5YtadeuHdu2bSMxMZEJEyYwd+5cz9nvtL8OREdH061bN4KCgujevTt79+7N9L1Ka9asWbRp04YWLVowatQoUlJSePrpp1m5ciV33nknY8eOpVevXhw4cMCzX6OioggLCyMoKIhBgwZx4sSJv+2vl156icWLFzN27Nh09212ckdHR9OoUSNuv/12mjdvzr59+xg7dizNmzcnMDDQ8wtBfHw83bt39xwnaUeQfO6552jYsCEdOnRg27Zt6e6btMOhJyQkYDT8q4jkZTuXwXud4Xg0DJsLXcarUC7ozp8xyou30NBQe7HNmzd77r/424t2xFcjcvT24m8v/m2dFzt27Ji11trTp0/bZs2a2aNHj9qDBw/aWrVq2SNHjthz587Zdu3a2fvuu89aa+2AAQPsjz/+aK21ds6cOfbOO++01lp79OhRzzIff/xx+8Ybb1hrrR0+fLgdPHiwTUlJsZs2bbINGjSw1lq7dOlSGx4ebhMSEi7I0a1bN7t9+3ZrrbWrV6+2Xbt29Sxn6NChNjU11S5atMiWKVPGrl+/3qakpNiQkBC7bt06GxMTYzt27Gjj4+Nd+/TFF+1TTz1lrbW2Tp06nkxvv/22J/fEiRPt5MmT0903999/v500aZK11toffvjBBgcHW2utXbZsmb322mvTnadz58529OjR1lprExMTbXh4uD1y5Ihnf40cOdLzuocffthaa+2SJUts9+7drbXWvvLKK57XbNmyxdaqVcueOXPGvvrqq3bChAnWWmsPHjxoGzZsaK21NjY21iYlJVlrrf3uu+/s9ddfb621dvr06Z737OLH/fr1szNmzLDWWjtt2jR73XXXXfK9Smvz5s22X79+NjEx0Vpr7ejRo+3MmTM927RmzRprrbW7d++2zZo188wXGBholy9fbq219sknn7Rjxoz52/46n2HevHnp7tvs5N69e7c1xthVq1ZZa62dP3++7dGjh01OTraHDh2ytWrVsgcPHrRJSUk2NjbWWmttTEyMbdCggU1NTbURERG2efPmNiEhwcbGxtoGDRpkeNy89dZbtn79+rZmzZqeY/nifSgi4qjUVGt/fs3aSeWsfauttUf/dDqR5CAgwmZQj6oZxmV44403WLhwIQD79u1jx44dHDp0iC5dulC5cmUAhg4dyvbt2z33586dS9euXZkzZw733nsvABs3buSJJ57g5MmTxMfH07t3b886Bg4ciJ+fH02bNuXw4cMAfP/994wcOZKSJUsCUKFCBeLj4/n1118ZMmSIZ95z58557vfv3x9jDIGBgVStWpXAwEAAmjVrRnR0NPv372fz5s20b98egMTERMLDwz3zX3/99QCEhoby2WefZbpvVq5cyYIFCwDo1q0bx44d49SpU5nON3ToUAC2bdvGxo0b6dmzJwApKSlUr1493TzR0dGedT7wwAMANG7cmDp16rB9+3ZuvPFGevXqxVNPPcWnn37K4MGDAdfZ/uHDh7Njxw6MMSQlJWWab9WqVZ7tv+2223jkkUc8z6X3XqX1ww8/EBkZSevWrQE4c+YMVapUueT6YmNjOXnyJJ07dwZg+PDhF7zH5/eXL3MD1KlTh7CwMMC1n4cNG4a/vz9Vq1alc+fOrFmzhr59+/LYY4+xYsUK/Pz8OHDgAIcPH+bnn39m0KBBnuP1Uk1a7rvvPu677z4+/vhjnn32WWbOnJml7RMRyRXn4uHz+2DzImg2CAa8BcVKO51Kckm+LpbHtRmX6+tcvnw533//PatWraJkyZJ06dKFs2fPXnKeAQMG8Nhjj3H8+HEiIyPp1q0b4PopfNGiRQQHBzNjxgyWL1/umadYsWKe+64/eNKXmppKuXLlMmwLfH45fn5+FyzTz8+P5ORk/P396dmzJ5988skl5/f39yc5OfmS25kdpUqVAlzb2qxZM1atWpXtPDVq1KBixYqsX7+euXPnMmXKFACefPJJunbtysKFC4mOjqZLly7Zyp7Ze2WtZfjw4bzwwgvZWk9a5/dXdmTlGMvKembPnk1MTAyRkZEEBARQt27dTD8TGbnpppsYPXr0Zc0rIuITx3bCnJvh6Hbo+Qy0ewDUXKxQUSMbL8XGxlK+fHlKlizJ1q1bWb16NQBt27blp59+4tixYyQlJTFv3jzPPKVLl6Z169aMGTOGfv364e/vD0BcXBzVq1cnKSmJ2bNnZ7runj17Mn36dE/b5uPHj1O2bFnq1avnWZ+1lj/++CPL2xMWFsYvv/ziuagsISHBc0Y8I2XKlCEuLi7d5zp27OjZluXLl1OpUqUL2qRmplGjRsTExHiK5aSkpAvaHWe2zu3bt7N3714aNWoEuM7Avvzyy8TGxhIUFAS43sMaNWoArl5LsrJd7dq1Y86cOYCrOOzYsWOWt6l79+7Mnz+fI0eOAK73bc+ePZec54orrqB8+fKedtkfffSR5yzzxXyV+2IdO3Zk7ty5pKSkEBMTw4oVK2jTpg2xsbFUqVKFgIAAli1b5tm2Tp06sWjRIs6cOUNcXBxffPFFusvdsWOH5/6SJUu4+uqrLzujiEiO2vY1TO0C8UfgtoXQ/kEVyoWQimUv9enTh+TkZJo0acL48eM9P1FXr16dSZMmER4eTvv27WnS5MLuY4YOHcqsWbMu+Pn8mWeeoW3btrRv357GjRtnad0DBgygVatWtGjRwtMN1+zZs5k2bRrBwcE0a9bsggusMlO5cmVmzJjh6bIsPDzcc4FgRvr378/ChQvTvcBv0qRJREZGEhQUxPjx473+Ob1o0aLMnz+fcePGERwcTIsWLTLtpu7ee+8lNTWVwMBAhg4dyowZMzxnTQcPHsycOXO48cYbPa9/5JFHePTRR2nZsuUFZ6e7du3K5s2b0+3e7s0332T69OkEBQXx0Ucf8frrr2d5m5o2bcqzzz5Lr169CAoKomfPnp6LFi9l5syZjB07lqCgIKKiopgwYUK6r7vpppuYPHkyLVu2/NsFftnJfbFBgwYRFBREcHAw3bp14+WXX6ZatWrccsstREREEBgYyIcffug5lkNCQhg6dCjBwcH07dvX0wzlYm+99RbNmjWjRYsWvPrqq2qCISLOS02FZS/AJ0OhQj0Y9ZNr+GoplMylfuJ3WqtWrWxERMQF07Zs2fK3QlRECjZ97kUk15w5CQtHwfavIfhm6PcqBJRwOpX4mDEm0lrbKr3n8nWbZREREZEcc3izq//kk3vgmleg9V1qdiEqlkVERETY+Bl8fr+rl4vhX0Kd8MznkUJBxbKIiIgUXinJ8MNT8OsbUKstDJkJZatnPp8UGvmyWLbWapQvkUIiL19XISL5XMIxmD8Sdv8Ere6EPi9CkaJOp5I8Jt8Vy8WLF+fYsWNUrFhRBbNIAWet5dixYxQvXtzpKCJS0ByMgrm3QfxhuO5taHmr04kkj8p3xXLNmjXZv38/MTExTkcRkVxQvHhxatas6XQMESlIoj6BLx+CkpXgjq+hRojTiSQPy3fFckBAAPXq1XM6hoiIiOQ3yYnwzWOw5n2o2xGGzIBSlZxOJXlcviuWRURERLwWdwjmjYC9qyD8fujxFPirDJLM6SgRERGRgm3vb/Dp7XDuFNwwDQIHO51I8hEVyyIiIlIwWQsR0+Cr8XBFTbh1AVRr7nQqyWdULIuIiEjBk3QWlvwTombB1b3g+qlQorzTqSQfUrEsIiIiBcvJffDpbXBwHXR6BLo8Cn5+TqeSfErFsoiIiBQcu1e4LuRLToSbPobG1zqdSPI5FcsiIiKS/1kLq96G7yZAxavgptlQ6WqnU0kBoGJZRERE8rfEBFj8AGxcAE36w8B3oVgZp1NJAaFiWURERPKv47tgzq1wZDN0nwgd/g+McTqVFCAqlkVERCR/2vEdLLgTjJ+rW7irujudSAogFcsiIiKSv6Smws+vwLLnXf0mD50F5es6nUoKKBXLIiIikn+cjYWFo2HbEggaCv3+A0VLOp1KCjAVyyIiIpI/xGyDOTfD8d3Q5yVoO0rtk8XnVCyLiIhI3rd5MSwaDQElYPgXULe904mkkFCxLCIiInlXagr8+AysfA1qtIIbP4QrajidSgoRFcsiIiKSN50+7urtYuePEDIcrpkMRYo5nUoKGRXLIiIikvf8tR7m3gJxh6D/6xA6wulEUkipWBYREZG8Zf2nsPhBKFEeRn4FNVs5nUgKMRXLIiIikjekJMG3T8Jv70Kd9jBkBpSu4nQqKeRULIuIiIjz4o/AvBGw5xcIuxd6Pg3+AU6nElGxLCIiIg7bHwFzb4MzJ+D69yHoRqcTiXioWBYRERHnRM6Epf+CMtXhzm+hepDTiUQuoGJZREREcl9KEnz9KKx5Hxp0gxumQckKTqcS+RsVyyIiIpK7Eo7BvOEQ/TO0ewB6PAV+/k6nEkmXimURERHJPYc3wSc3QdxhGPQeBN/kdCKRS1KxLCIiIrlj82JY+A8oVsbdf3Ko04lEMqViWURERHwrNRV+egl+ehFqtIKhs6BsdadTiWSJimURERHxnXPxsHAUbP0Sgm+Gfq9BQHGnU4lkmYplERER8Y0T0fDJzRCzBXq/AGGjwRinU4l4xeti2RhTCjhrrU3xQR4REREpCHavgE+Hg02FWxe4uocTyYf8MnuBMcbPGHOzMWaJMeYIsBX4yxiz2Rgz2Rhzle9jioiISL5gLfw2FT4cCKUqw90/qlCWfC0rZ5aXAd8DjwIbrbWpAMaYCkBX4CVjzEJr7SzfxRQREZE8LzkRlv4T1n4IDfvC9VOheFmnU4lkS1aK5R7W2qSLJ1prjwMLgAXGmIAcTyYiIiL5R/wRmHsb7FsNHf8JXZ8Av0x/wBbJ8zItltMrlC/nNSIiIlJAHYyCOTfD6eMw+L/Q/AanE4nkmCz/yWeMmWmMKZfmcXljzH99kkpERETyhw3z4b99AAN3fqNCWQocb3rDCLLWnjz/wFp7whjTMucjiYiISJ6XmgI/PgMrX4Pa4XDjR1C6stOpRHKcN8WynzGmvLX2BHgu8FM/zSIiIoXN2VhYcDfs+AZCR0DfyVCkqNOpRHzCm2L338BqY8yngAEGA8/7JJWIiIjkTcd2wic3wfFdcO2/ofVdTicS8aksF8vW2g+NMRG4uosDGGSt3eKbWCIiIpLn/Pk9zL8DjD/c/jnU7eB0IhGfy7RYNsastNZ2MMbEARbXWeXzz1lrrVcdKBpj/IEI4IC1tp+3gUVERCSXWQur3obvnoQqTeGmj6F8HadTieSKrHQd18H9b5kcWucYYAugXspFRETyuqSz8OVD8Mcn0GQADHwXipV2OpVIrsnKcNcfuf8dk92VGWNqAtcCH2R3WSIiIuJjp/6CGde4CuWuj8OQmSqUpdDJSpvlUGPMlcAdxpgPSdMMAzwj+WXVf4BHgJw6Sy0iIiK+sD8C5twCifEwdDY0UctJKZyyUiy/C/wA1AMiubBYtkD9rKzIGNMPOGKtjTTGdLnE6+4B7gGoXbt2VhYtIiIiOSnqY/hiDJSpDrcthKpNnU4k4pisFMttrLVNjDFnrbVZKowz0B4YYIy5BigOlDXGzLLW3pr2RdbaqcBUgFatWtlsrE9ERES8kZIM302A1W9DvU6uZhclKzidSsRR3jTD2GaMKc9lNsOw1j4KPArgPrP8r4sLZREREXHImRMwbyTsWgZt/wG9ngN/jT0mkpVPwRRczTDqk41mGCIiIpJHxWxzDTRych8MeAtCbnM6kUiekZWu494A3jDGvGutHZ0TK7XWLgeW58SyREREJBu2fQ0L7oKAEjBiCdRu63QikTzFmxH8cqRQFhERkTzAWvj53/Djs1A9GG6aDVfUdDqVSJ7jVWMkd5vlq3FdoAeAtXZFTocSERERH0o8DZ/fB5s+g8AhMOBN15llEfmbLBfLxpi7cI2+VxOIAsKAVUA3nyQTERGRnHdyH8y5GQ5tgB5PQfsxYEzm84kUUpmO4JfGGKA1sMda2xVoCZz0RSgRERHxgT2/wtQucCIabv4UOjykQlkkE94Uy2ettWcBjDHFrLVbgUa+iSUiIiI5KnIGzBwAJcrBXT9Aw15OJxLJF7xps7zfGFMOWAR8Z4w5AezxRSgRERHJISlJ8PWjsOZ9uKoH3DDNVTCLSJZkqVg2xhjgQWvtSWCSMWYZcAXwtQ+ziYiISHYkHIN5wyH6Z2j3IPSYBH7+TqcSyVeyVCxba60xZikQ6H78k09TiYiISPYc2ghzhkHcYRg0FYKHOp1IJF/yps3yWmNMa58lERERkZyx+XOY1tPVBOOOr1Qoi2SDN22W2wK3GGP2AAm4hr221tognyQTERER76Smwk8vwk8vQc3WMHQWlKnmdCqRfM2bYrm3z1KIiIhI9pyLh4WjYOuX0OJW6PcqFCnmdCqRfM+bZhj3Wmv3pL0B9/oqmIiIiGTR8d2uZhfbvoI+L8J1b6lQFskh3hTLPdOZ1jengoiIiMhl2PUTvN8VTh2EWxdA2GgNNCKSgzJthmGMGY3rDHJ9Y8z6NE+VAX7xVTARERHJxO/vw1fjoNLVcNPHULGB04lECpystFn+GPgKeAEYn2Z6nLX2uE9SiYiISMZSU+Cbx+C3KdCwL1w/FYqXdTqVSIGUabFsrY0FYoFhvo8jIiIil3QuDubfCTu+gfD7oefTGmhExIe86Q1DREREnBS7Hz4eCke2wLWvQus7nU4kUuCpWBYREckPDqyFT26CpDNwyzy4qrvTiUQKhSwXy8aYYsANQN2081lrn875WCIiIuKx5UtYcBeUqgy3fw5VmjidSKTQ8ObM8ue42i5HAud8E0dEREQ8rIVf34TvJkCNUBj2CZSu4nQqkULFm2K5prW2j8+SiIiIyP+kJMGSf8LamdBsEAx8FwJKOJ1KpNDxZlCSX40xgT5LIiIiIi5nTsKsG1yFcsd/wQ3/VaEs4hBvzix3AEYYY3bjaoZhAGutDfJJMhERkcLo+G74+EbXvwPfhRY3O51IpFDzpljW0NYiIiK+tPc3mHMzpCbD7YugbgenE4kUelkulq21e3wZREREpFDbMB8W3QtX1ICb50Glq5xOJCJkoVg2xqy01nYwxsQBNu1TuJphaHxNERGRy2UtrJgMy56DOu1h6CwoWcHpVCLilpXhrju4/y3j+zgiIiKFSPI5WPwgrJ8DwcOg/+tQpJjTqUQkDY3gJyIi4oSEYzD3Vtj7K3R7wtXrhTFOpxKRi6hYFhERyW1Hd8DsIXDqIAz+LzS/welEIpIBFcsiIiK5affPrjPKfkVgxJdQq43TiUTkErI8KIlxudUYM8H9uLYxRp9wKVTOJqU4HUFE8rN1s+CjgVCmGtz9gwplkXzAmxH83gHCgWHux3HA2zmeSCSP+nbTIbq+spydMfFORxGR/CY1Fb5/Cj6/D+p2hDu+gfJ1nU4lIlngTTOMttbaEGPMOgBr7QljTFEf5RLJU/48EsfDn/5B/cqlqFFOQ86KiBeSzsDCUbD5cwgdAde8Av4BTqcSkSzyplhOMsb44+5r2RhTGUj1SSqRPOTU2STu+TCS4gF+TLk1lOIB/k5HEpH8Iv4IfHITHFgLvZ6D8PvU44VIPuNNsfwGsBCoYox5DhgMPOmTVCJ5RGqq5f/mRLH3+Gk+vjuMK3VWWUSy6vBm+HgonD7qGmikST+nE4nIZfBmuOvZxphIoDuu0fsGWmu3+CyZSB7wn++388PWIzx9XTPa1NOIWiKSRX9+D5+OgKKlYORSuLKl04lE5DJluVg2xrxkrR0HbE1nmkiB8/XGQ7zx458MCa3JbWF1nI4jIvnFmg9g6SNQpSncPBeuqOF0IhHJBm96w+iZzrS+ORVEJC/ZcTiOf34aRXCtcjwzsDlGbQxFJDOpKfD1o7Dkn3B1T7jjaxXKIgVApmeWjTGjgXuB+saY9WmeKgP86qtgIk6JPZPEPR9FUqJoEd7TBX0ikhXn4mHBXbD9Kwi7F3o9C3767hApCLLSDONj4CvgBWB8mulx1trjPkkl4pCUVMtDc9ax7/hpPrknjGpXFHc6kojkdbEH4JOhcHiTq1u4Nnc7nUhEclCmxbK1NhaIBYYZY8oDVwPFAYwxWGtX+DaiSO557bvtLNsWwzMDm9O6ri7oE5FMHIxydQ13Lh5ungdX93A6kYjkMG8u8LsLGAPUBKKAMGAV0M0nyURy2Vcb/uKtZX9yU+ta3Nq2ttNxRCSv27rE1fSiZEW48xuo2szpRCLiA95c4DcGaA3ssdZ2BVoCJ30RSiS3bTsUxz/n/UHL2uV46rpmuqBPRDJmLfz6Fsy5BSo3hrt+UKEsUoB5MyjJWWvtWWMMxphi1tqtxphGPksmkktiTydxz0cRlCpWhCm3hlKsiC7KEZEMpCTB0rEQOR2aDIBB70HRkk6nEhEf8qZY3m+MKQcsAr4zxpwA9vgilEhuSUm1PDhnHQdPnmHOPWFULasL+kQkA2djYd4I2PkjdPg/6DYB/Lz5gVZE8qMsFcvG9Zv0g9bak8AkY8wy4Argax9mE/G5f3+7jZ+2x/D8oEBC6+iCPhHJwIk98PGNcOxPGPAWhNzmdCIRySVZKpattdYYsxQIdD/+yaepRHLBkvV/8c7ynQxrU5ubdUGfiGRk3xqYMwxSEuG2hVCvk9OJRCQXefP70VpjTGufJRHJRVsPneJf8/4gpHY5Jg1o6nQcEcmrNi+Gmf2gaGnXhXwqlEUKHW/aLLcFbjHG7AESAIPrpHOQT5KJ+MjJ04nc82EkZYrrgj4RuYSI6bDkYagRCsPmQqmKTicSEQd4Uyz39lkKkVySkmp54JN1HIo9y5xRYVTRBX0icjFrYcVkWPYcXN0LhsxUjxcihViWi2VrrXq+kHzv5W+28vOOo7x4fSAhtcs7HUdE8prUVPh6HPw+FYJuguveAv8Ap1OJiIO8ObMskq998cdB3vtpF7e0rc1NbXRBn4hcJDkRFv0DNi6A8Puh5zPqGk5EVCxL4bD54Ckemb+eVnXKM7G/RtoSkYuci4O5t8GuZdDzaWg/xulEIpJHqFiWAu9EQiKjZkVQtkQR3rk1hKJFdKZIRNJIOAqzB8Nf6+G6d6DlLU4nEpE8JMtVg3G51Rgzwf24tjGmje+iiWRfckoqD3yyjsOx55hyayhVyuiCPhFJ48Qe+G9vOLIFbpqtQllE/sabU2zvAOHAMPfjOODtHE8kkoNe/mYbK/88yrMDm9NSF/SJSFqHN7kK5YQYuP1zaNTX6UQikgd51c+ytTbEGLMOwFp7whhT1Ee5RLLt86gDTF2xi9vC6nBj61pOxxGRvGTvatfw1QElYeTXUFWDE4lI+rw5s5xkjPEHLIAxpjKQ6pNUItm06WAs4xasp03dCjzZT/8Jikga276GD6+DUpXhzm9VKIvIJXlTLL8BLASqGGOeA1YCz/sklUg2HE9wjdBXvmRR3r5FF/SJSBrrZsOcm6FKE7jjGyinbiRF5NK8GZRktjEmEuiOa6jrgdbaLT5LJnIZklNSuf/jtcTEn2PeqHAqlynmdCQRySt+eR2+mwD1u8DQWVCsjNOJRCQf8KrrOGvtVmCrj7KIZNuLX23l153HmDw4iOBa5ZyOIyJ5QWoqfPckrHoLml0Pg96DIrrkRkSyJsvFsjGmFfA4UMc9nwGstTbIR9lEvPJ51AE+WLmbEe3qMqSVLugTESAlCT6/H9bPgTb3QJ+XNCqfiHjFmzPLs4GxwAZ0YZ/kMRsPxPLI/PW0rVeBx69t4nQcEckLEhNg3gjY8S10fQI6/QuMcTqViOQz3hTLMdbaxT5LInKZjsWfY9RHkVQs5bqgL8BfZ41ECr3Tx+HjoXAgAvr9B1qNdDqRiORT3hTLE40xHwA/AOfOT7TWfpbjqUSyyHVB3zpi4s8x/x/hVCqtC/pECr3YAzDreji+C4bMhKYDnE4kIvmYN8XySKAxEMD/mmFYQMWyOOb5pVtZtesY/x4STFDNck7HERGnxWyHjwbB2Vi4dQHU6+R0IhHJ57wplltbaxv5LImIlz5bu5///rKbke3rckNoTafjiIjT9kfA7CHgVwRGLoHqwU4nEpECwJvGnb8aYzTMkeQJG/bH8uhnGwirX4HHrtEFfSKF3p/fw8z+ULws3PmNCmURyTHenFkOA/4wxuzC1WZZXceJI47Gn2PURxFUKl2Mt2/WBX0ihd76ebDoH65R+W5ZAGWqOp1IRAoQb4rl3rgL5MtZkTGmOLACKOZe73xr7cTLWZYUXkkpqdw3ey3HEhJZMLodFXVBn0jhtnoKfD0O6naEm2ZD8SucTiQiBUymxbIxZqW1tgOwiQsL5fOFc9ksrusc0M1aG2+MCQBWGmO+stau9ja0FF7PLdnCb7uP85+hLWheQ/8pihRa1sKPz8DP/4bG/eCGaRBQ3OlUIlIAZVosuwtlrLVlsrMia60F4t0PA9y3yzpLLYXTZ2v3M+PXaO7sUI+BLWs4HUdEnJKSDEv+D9Z+CCHDod9r4OfvdCoRKaCy3NjTGPNSVqZlsgx/Y0wUcAT4zlr7mzfzS+G18cD/Luh7tG9jp+OIiFOSzsC84a5CudNY6P+6CmUR8Slvrozqmc60vt6szFqbYq1tAdQE2hhjml/8GmPMPcaYCGNMRExMjDeLlwLqREIi/5gVSYVSRXnr5hCK6II+kcLpzEmYdQNsXQJ9X4ZuT2j4ahHxuUyrDmPMaGPMBqCRMWZ9mttuYP3lrNRaexJYBvRJ57mp1tpW1tpWlStXvpzFSwGSkmp5cM46jsSdY8qtoRqhT6SwijsEM66Ffb/DDR9A21FOJxKRQiIrvWF8DHwFvACMTzM9zlp7PKsrMsZUBpKstSeNMSVwnan2qhmHFD6vfLuNn3cc5eUbggiuVc7pOCLihGM7XaPyJRyFWz6FBt2cTiQihUhWLvCLBWKBYdlcV3VgpjHGH9cZ7U+ttV9mc5lSgH214S/eXb6Tm9vW5sbWtZyOIyJOOLbTdUY5+RyM+AJqhDqdSEQKGW/6Wc4Wa+16oGVurU/ytx2H4/jXvD9oWbscE/tr4EiRQun4LpjRD1ISYcQSqKrvAhHJfblWLItk1amzSYz6KJISRYvw7i2hFCuiK91FCp0T0TCjPySfgeFfqlAWEcfkatdxIplJTbU8PPcP9h4/zTu3hFDtCg0yIFLonNzrKpQT4+H2xVDtbx0niYjkmlztOk4kM28t+5PvtxzmiWub0KZeBafjiEhui93vanpxLhZu/xyqBzmdSEQKuawMdz0auBeob4xJ21VcGeAXXwWTwmfZ1iO89v12BrWswfB2dZ2OIyK5LfaAq1A+cxJuXwhXtnA6kYhI7nUdJ3Ip0UcTGDNnHU2qleX5QYEYDTQgUric+gtm9nd1D3f7IvV6ISJ5Rm52HSeSrtOJyfxjViR+fob3bgulRFFd0CdSqMQdchXK8Yfh1s+gZiunE4mIeGSlGcZKa20HY0wcYNM+BVhrbVmfpZMCz1rLuAUb2H44jhkj21CrQkmnI4lIboo/AjMHwKmDcOsCqN3W6UQiIhfIypnlDu5/y/g+jhQ201bu5os/DvJIn0Z0aqjhzUUKlfgYV6Ecuw9umQ91wp1OJCLyN950Hfe3Ti6NMV1yMowULr/uPMoLX22lb/NqjO7cwOk4IpKbEo7Bh9e5+lO+eS7Ube90IhGRdHnTddynxphxxqWEMeZNXBf9iXjt4MkzPPDxOupVKsXkIcG6oE+kMDl93FUoH98JN8+Bep2cTiQikiFviuW2QC3gV2ANcBDQqQDx2tmkFP4xK5LE5FTeuy2U0sU0kKRIoXHmhKtQProdbvoY6ndxOpGIyCV5U6UkAWeAEkBxYLe1NtUnqaTAstYy4fONrN8fy9TbQmlQubTTkUQkt5w5CR8NgpitrkL5qu5OJxIRyZQ3Z5bX4CqWWwMdgWHGmHk+SSUF1se/7+XTiP080O0qejWr5nQcEcktZ2Nh1vVwaCPc+BFcnd6gsCIieY83Z5bvtNZGuO//BVxnjLnNB5mkgIrcc4JJizfRpVFlHurR0Ok4IpJbzp6CWTfAX3+4CuVGfZxOJCKSZd6cWY40xtxqjJkAYIypDWzzTSwpaI7EneXe2ZFUv6IErw9tib+fLugTKRTOxcHsIXBgLQyZAY2vcTqRiIhXvCmW3wHC+d9IfnHA2zmeSAqcpJRU7p+9jlNnknnvtlCuKBngdCQRyQ2JCTD7Rti/Bgb/F5r0dzqRiIjXvGmG0dZaG2KMWQdgrT1hjCnqo1xSgDy3ZAu/Rx/njWEtaVJdAz6KFAqJp+HjobBvNdzwATQb6HQiEZHL4s2Z5SRjjD/uIa+NMZUB9YYhl/TZ2v3M+DWauzrUY0DwlU7HEZHckHgaPhkKe36BQVOh+Q1OJxIRuWzeFMtvAAuBKsaY54CVwPM+SSUFwsYDsTz62QbC6ldgfN/GTscRkdyQdAbm3Ay7f4aB70LQEKcTiYhkS5abYVhrZxtjIoHugAEGWmu3+CyZ5GsnEhL5x6xIKpQqyls3h1DE35u/y0QkX0o6C3NvhV3L4bq3IfgmpxOJiGSbV0OnWWu3Alt9lEUKiJRUy4Nz1nHk1Dnm/SOcSqWLOR1JRHwt+Rx8ejv8+T0MeBNa3uJ0IhGRHKFxhiXHvfLtNn7ecZSXbggkuFY5p+OIiK8lJ8Knw2HHN9DvPxByu9OJRERyjH4blxz11Ya/eHf5Tm5uW5uhrWs7HUdEfM1aWPov2P4VXPMKtBrpdCIRkRylYllyzI7Dcfxr3h+0rF2Oif2bOh1HRHLD71Nh7Uzo8DC0udvpNCIiOS7TZhjGmIcv9by19tWciyP51amzSYz6KJISRYvw7i2hFCvi73QkEfG1ncvg60eh0TXQ7Umn04iI+ERW2iyXcf/bCGgNLHY/7g/87otQkr+kplr++ekf7D1+mo/vDqPaFcWdjiQivnZsJ8wbDpUbwfVTwU8/VIpIwZRpsWytfQrAGLMCCLHWxrkfTwKW+DSd5Avv/rST7zYfZmL/prSpV8HpOCLia2dj4ZObwPjDsE+gWJnM5xERyae86Q2jKpCY5nGie5oUYit3HOXf327juhZXMqJdXafjiIivpabA/Dvg+C64/XMoX9fpRCIiPuVNsfwh8LsxZqH78UBgZo4nknzj4MkzPDhnHVdVKc0L1wdijHE6koj42ncTXH0p93sN6nZwOo2IiM95M4Lfc8aYr4CO7kkjrbXrfBNL8rrE5FTunb2WxORU3r01lJJF1WW3SIG3bjasegva3AOt7nA6jYhIrsjyFRnGddqwKXCFtfZ14Jgxpo3Pkkme9tySzUTtO8nkwUE0qFza6Tgi4mt7f4MvH4J6naH3C06nERHJNd5cvvwOEA4Mcz+OA97O8USS5y1ad4CZq/Zwd8d69A2s7nQcEfG1k/tg7i1wRU0YMgP89UuSiBQe3nzjtbXWhhhj1gFYa08YY4r6KJfkUdsOxfHoZxtoU68C4/o0djqOiPhaYgLMGQbJ52DEEiipHm9EpHDxplhOMsb4AxbAGFMZSPVJKsmT4s4mMXpWJKWLF+GtYS0p4q9+VUUKtNRUWDQaDm2Emz919aksIlLIeFPtvAEsBKoYY54DVgJquFZIWGt5ZP569hw/zVvDWlKlrAYeESnwVrwMmz+Hnk9Dw15OpxERcYQ3vWHMNsZEAt0BAwy01m7xWTLJU6at3M1XGw/x+DVNaFu/otNxRMTXNi2E5S9A8M3Q7gGn04iIOCbLxbIx5iVr7ThgazrTpAD7bdcxXvhqK32bV+OujvWcjiMivvbXH7BwNNRsA/3/A+pDXUQKMW+aYfRMZ1rfnAoiedORU2e5/5N11KlQkpcHB2ngEZGCLv4IfHKz60K+obOgSDGnE4mIOCrTM8vGmNHAvUADY8z6NE+VAX71VTBxXlJKKvd/vI74s8nMurMtZYoHOB1JRHwp+RzMuQVOH4M7v4EyVZ1OJCLiuKw0w/gY+ArXxXzj00yPs9Ye90kqyRMmf7ON36OP85+hLWhUrYzTcUTEl6yFL/8P9v/u6ku5erDTiURE8oRMm2FYa2OttdFAIhBrrd1jrd0DWGPMf30dUJzx1Ya/mLpiF7eH12FgyxpOxxERX1v1NkTNhs7joNkgp9OIiOQZ3rRZDrLWnjz/wFp7AmiZ44nEcTtj4hk7fz0tapXj8WubOB1HRHxtx3fw3ZPQZAB0Hp/560VEChFvimU/Y0z58w+MMRXwblATyQdOJyYzelYkRYv48c4tIRQr4u90JBHxpbOnYNG9UKUpDJoCfhpsSEQkLW+K3X8Dq40xn7ofDwGey/lI4hRrLY9+toEdR+L56I62XFmuhNORRMTXVrwMCTFw8xwoWsrpNCIieY43g5J8aIyJALq5J11vrd3sm1jihI9W7+HzqIP8q1dDOlxdyek4IuJrMdth9bvQ8laoEep0GhGRPCnLv7cZVwe7IUAFa+1bQLwxpo3PkkmuWrv3BM98uZlujatwb5ernI4jIr5mLXw9DgJKQfeJTqcREcmzvGmc9g4QDgxzP44D3s7xRJLrjsWf477Za6l2RXFeu7EFfn4aeESkwNu2FHb+CF0fhdKVnU4jIpJnedNmua21NsQYsw5cvWEYY4r6KJfkkpRUy5g5URxLSOSz0e24oqQGHhEp8JLOwNePQuUm0Poup9OIiORp3hTLScYYf8ACGGMqA6k+SSW55j/fb2fln0d5+YYgmte4wuk4IpIbfn0TTu6B2xeDv/5AFhG5FG+aYbwBLASqGGOeA1YCz/skleSKH7Yc5s0f/2Roq1rc2LqW03FEJDec3Ac/vwpNr4P6nZ1OIyKS53nTG8ZsY0wk0B0wwEBr7RafJROf2nvsNP83N4pmV5blqeuaOR1HRHLLt0+4/u31rLM5RETyCa8GFbHWbgW2+iiL5JKzSSmMnh0JwLu3hFI8QAOPiBQKu1fA5kXQ5TEoV9vpNCIi+UKWi2VjTHHgXqADrnbLK4F3rbVnfZRNfGTi55vYdPAU/x3RitoVSzodR0RyQ0oyfDXOVSS3f9DpNCIi+YY3Z5Y/xNVd3JvuxzcDH+EayU/yiblr9jI3Yh8PdLuKbo2rOh1HRHLLmg/gyGYYOgsCNDqniEhWeVMsN7fWNk3zeJkxRiP45SObDsby5Oeb6HBVJR7q0dDpOCKSWxKOwrLnoX5XaNzP6TQiIvmKN71hrDXGhJ1/YIxpC0TkfCTxhfhzydz/8TrKlwzg9Zta4K+BR0QKjx+egqQE6PsSGH32RUS84c2Z5VDgV2PMXvfj2sA2Y8wGwFprg3I8neQIay2PfbaBPccS+OTuMCqWLuZ0JBHJLQfWwtqPIPw+qNzI6TQiIvmON8VyH5+lEJ/65Pd9LP7jIP/q1ZC29Ss6HUdEcktqKnz1CJSqDJ3HOZ1GRCRf8qZYLmWtvaCNsjGmi7V2ec5Gkpy05a9TPPXFJjpeXYl7u1zldBwRyU2bPoP9a+C6d6B4WafTiIjkS960Wf7UGDPOuJQwxrwJvOCrYJJ9CeeSue/jtVxRIoDXhrbAT+2URQqXbV9B6WoQPMzpJCIi+ZY3xXJboBbwK7AGOAi090UoyT5rLU8s2kj00QRev6klldROWaRwsRb2roI67cDPm696ERFJy5tv0CTgDFACKA7sttam+iSVZNu8iP0sXHeAMd0bEt5A7ZRFCp2Te+HUAagd7nQSEZF8zZtieQ2uYrk10BEYZoyZ55NUki3bD8cxYfFG2jWoyP3d1E5ZpFDau8r1bx0VyyIi2eHNBX53WmvP96v8F3CdMeY2H2SSbDidmMy9s9dSulgA/1F/yiKF195VUOwKqNI089eKiEiGvDmzHGmMudUYMwHAGFMb2OabWHK5Jny+iZ0x8bx+UwuqlCnudBwRccqeVVC7Lfj5O51ERCRf86ZYfgcIB85fVh0HvJ3jieSyLYjcz/zI/TzQ9SraX1XJ6Tgi4pSEY3B0G9QOy/y1IiJySd40w2hrrQ0xxqwDsNaeMMYU9VEu8dKfR+J4YtFG2tarwJgeDZ2OIyJOOt9euXY7Z3OIiBQAXvWGYYzxByyAMaYyoN4w8oAziSncN3sdJYv688awlmqnLFLY7V0F/sWgRojTSURE8j1viuU3gIVAFWPMc8BK4HmfpBKvPPXFJrYdjuPVoS2oWlbtlEUKvb2roEYoFFH/6iIi2ZXlZhjW2tnGmEigO2CAgdbaLVmd3xhTC/gQqIrr7PRUa+3rXuaVi3wedYA5a/Zxb5cGdG5Y2ek4IuKk9Z/C95Nc/SsXK+N6HHSj06lERPK1TItlY4yx1loAa+1WYOulXnMJycA/rbVrjTFlcPWu8Z21dvPlBBfYFRPPY59toHXd8jzcU+2URQq19Z/CFw9C0hnX43NxrseggllEJBuy0gxjmTHmAXdXcR7GmKLGmG7GmJnA8MwWYq39y1q71n0/DtgC1Lic0AJnk1K47+N1FC3ixxvDWlLEX8PZihRqPzz9v0L5vKQzrukiInLZstIMow9wB/CJMaYecBLXkNd+wLfAf6y167xZqTGmLtAS+C2d5+4B7gGoXbv2xU+L2zNfbmbLX6eYPqI11a8o4XQcEXFa7H7vpouISJZkWixba8/i6mP5HWNMAFAJOGOtPXk5KzTGlAYWAA9Za0+ls76pwFSAVq1aZda0o1D6cv1BZv+2l1Gd6tO1cRWn44hIXnBFTYjdl/50ERG5bF79dm+tTXI3pzh5OStzF9sLgNnW2s8uZxmFXfTRBMYv2EBI7XL8q3cjp+OISF7RfQIEXPQrU0AJ13QREblsudbQ1RhjgGnAFmvtq7m13oLE1U55Lf5+hjdvDiFA7ZRF5LygG6H/G3BFLcC4/u3/hi7uExHJpix3HefuwSIIOGSt3XkZ62oP3AZsMMZEuac9Zq1dehnLKpSeX7qFTQdP8cHtrahRTu2UReQiQTeqOBYRyWHeDHe9DPgDaGyMiQHusNYez+rM1tqVuPpnlsuwdMNffLhqD3d1qEePplWdjiMiIiJSKHgzKEmr8/eNMYOBpcaY6621B32STDwOnDzDuAXrCa5Vjkf6NHY6joiIiEih4VWjV2OMnzGmBrAH+BrX2WbxoZRUy8Nzo0hNtbx5U0uKFlE7ZREREZHc4k2b5UO4+lc+BBwE/gK+8FEucfvg5138tvs4Lw8OonbFkk7HERERESlUvGmz3DC9fpHFdzYfPMUr326jT7NqDAlVX6kiIiIiuS3Lv+mrUM5dZ5NSeGjuOsqXLMrz1wfi6nlPRERERHKTN2eWJRe99PVWth+OZ+YdbahQqqjTcUREREQKJV0tlgf9vCOG6b9EM6JdXTo3rOx0HBEREZFCS8VyHnMiIZF/zfuDq6qUZnxfdRMnIiIi4iQVy3mItZbHFm7geEIi/xnaguIB/k5HEhERESnUVCznIQvWHuCrjYd4uGcjmte4wuk4IiIiIoWeiuU8Yt/x00xavIk29SpwT6f6TscREREREVQs5wkpqZb/mxuFAV69MRh/P3UTl1edSznndAQRERHJRSqW84ApP+0kYs8JnhnYnJrlNUpfXpSUmsQHGz7gmgXXcPTMUafjiIiISC5RP8sO27A/lte+206/oOpc1+JKp+NIOtYdWcfTq57mz5N/0r12d6fjiIiISC5SseygM4kpjJm7jsplivHcQI3Sl9fEnovltcjXWLBjAdVLVefNbm/SpVYXp2OJiIhILlKx7KDnl25hV0wCH9/VlitKBjgdR9ystSzdvZSX17xM7LlYhjcdzr0t7qVkgJrIiIiIFDYqlh2ybOsRPlq9h7s71qPdVZWcjiNue0/t5ZnVz7D6r9UEVgrkvZ7v0biCBocREREprFQsO+BY/DnGzl9P42pl+FfvRk7HESApJYnpm6bz3h/vEeAfwGNtH+PGhjfi76eBYURERAozFcu5zFrL+M82cOpMErPuakOxIirGnBZ5OJKnVz3Nrthd9KrTi3FtxlGlZBWnY4mIiEgeoGI5l81ds4/vNh/miWub0LhaWafjFGonz57ktbWv8dmOz7iy1JW83f1tOtXs5HQsERERyUNULOeigyfP8MyXm2l/VUXuaF/P6TiFlrWWL3d9yeQ1kzmVeIqRzUfyj6B/6AI+ERER+RsVy7nEWsuTizaSauHF64Pw0yh9joiOjebZ1c/y26HfCKocxISwCTSqoHbjIiIikj4Vy7lk6YZD/LD1CE9c24RaFXQGM7clpiQybeM03l//PsX9i/Nk2JMMbjgYP6NBLEVERCRjKpZzQezpJCYu3kRgjSsY0a6u03EKnTWH1vD0qqeJPhVN37p9eaTNI1Qqoe76REREJHMqlnPBi19v4cTpRGaMbE0Rf53JzC0nzp7g3xH/5vOdn1OjdA3e7fEuHWp0cDqWiIiI5CMqln1s9a5jfPL7PkZ1qk/zGlc4HadQsNby+c7P+XfEv4lPjOeuwLu4J+geShQp4XQ0ERERyWdULPvQ2aQUHlu4gVoVSvBQj4ZOxykUdsXu4plVzxBxOIIWlVswIXwCV5e/2ulYIiIikk+pWPahd5b9ya6YBD68ow0limrwEV86l3KODzZ8wLQN0yhepDgTwydy/dXX6wI+ERERyRYVyz6y/XAc7/60k0Eta9CpYWWn4xRov/31G8+sfoY9p/Zwbf1r+Verf+kCPhEREckRKpZ9IDXV8uhnGyhdrAhPXNvE6TgF1vGzx3llzSt8sesLapWpxXs936Pdle2cjiUiIiIFiIplH5j9+14i95zg30OCqVi6mNNxCpxUm8qiPxfxauSrJCQlcE/QPdwdeDfFixR3OpqIiIgUMCqWc9ih2LO8/NVWOlxVietDajgdp8DZeXInT696mrVH1hJSJYSJ4ROpX66+07FERESkgFKxnMMmLt5IYkoqzw1qjjEa0jqnnEs5x/vr32faxmmUCijF0+2e5rqrrtMFfCIiIuJTKpZz0NcbD/HNpsOM69OYOhVLOR2nwEg7Al+/+v34V6t/UbFERadjiYiISCGgYjmHnDqbxMTFG2lSvSx3dazndJwCIfZcLP+O+DcL/1xIzdI1dQGfiIiI5DoVyzlk8tfbiIk7x9TbWhGgIa2zxVrLV7u/4qU1LxF7LpY7m9/JqOBRGoFPREREcp2K5RwQuecEs37bw8h29QiuVc7pOPna/rj9PPvbs/xy4BcCKwUytedUGlVo5HQsERERKaRULGeTtZZnvtxM1TLF+WcvDWl9uZJTk5m1eRZvR72Nn/FjfJvx3NToJvz9NPKhiIiIOEfFcjZ9u/kwUftO8tINgZQqpt15OTYd3cSkVZPYenwrXWp14fG2j1OtVDWnY4mIiIioWM6O5JRUJn+zjQaVS3FDSE2n4+Q7p5NO8+a6N/l468dULF6R17q8Rvfa3dXlnoiIiOQZKpaz4bN1B/jzSDxTbg2hiC7q88qK/St4dvWzHEo4xI2NbmRMyBjKFC3jdCwRERGRC6hYvkxnk1L4z3fbCa55Bb2bqclAVsWcjuHF31/k2z3fclW5q/iw74e0qNLC6VgiIiIi6VKxfJlmrd7DwdizvDIkWM0GsiDVprJgxwJei3iNcynneLDlg4xoNoIA/wCno4mIiIhkSMXyZYg7m8Tby/6k49WVaHdVJafj5Hk7T+7kqVVPse7IOtpUa8OE8AnUKVvH6VgiIiIimVKxfBne/3k3J04nMba3+v+9lHMp5/hgwwd8sOEDSgWU4pn2z3Bdg+t0Jl5ERETyDRXLXoqJO8cHP+/i2sDqBNUs53ScPGvNoTU8veppok9F069+P8a2HkuF4hWcjiUiIiLiFRXLXnp72Z+cS07VACQZiD0Xy6uRr/LZjs+oWbom7/V8j3ZXtnM6loiIiMhlUbHshX3HTzP7tz3c2KoW9SuXdjpOnmKt5evor3nx9xeJPRfLHc3v4B/B/6BEkRJORxMRERG5bCqWvfDad9vxM4Yx3a92OkqecjD+IM+sfoaVB1YSWCmQqT2n0qiC2nOLiIhI/qdiOYu2HjrFwqgD3NOpPtWuKO50nDwhJTWFT7Z+whvr3sBgGN9mPDc1ugl/P3+no4mIiIjkCBXLWfTKN9soXawIozs3cDpKnrDz5E4m/DqB9THr6VijI0+GPUn10tWdjiUiIiKSo1QsZ8G+46f5fssRxnS/mnIlizodx1FJKUl8sOEDpm6YSumA0rzY8UWuqXeNuoMTERGRAknFchbMj9yPMXBj61pOR3HU+pj1TPx1In+e/JNr6l3DuDbj1B2ciIiIFGgqljORmmqZH7mf9g0qUaNc4ezZ4XTSad6KeotZm2dRpWQV3u7+Np1qdnI6loiIiIjPqVjOxOpdxzhw8gyP9CmcvTusOriKp1Y9xYH4AwxtNJSHQh6idFF1myciIiKFg4rlTMyL3E+Z4kXo3aya01FyVey5WF6JeIVFfy6ibtm6zOgzg9CqoU7HEhEREclVKpYv4dTZJL7a+Bc3hNSkeEDh6A7NWst3e77j+d+e5+S5k9wdeDejgkdRzL+Y09FEREREcp2K5UtYsv4vzialMqRV4biw78jpIzy3+jl+3PcjTSo0YUrPKTSu0NjpWCIiIiKOUbF8CfMi9nF1ldIE17zC6Sg+Za3lsx2f8e+If5OYmsjDoQ9zW9PbKOKnw0NEREQKN1VDGfjzSDxr957ksWsaF+g+hPee2stTq57i90O/07paayaGT6RO2TpOxxIRERHJE1QsZ2B+5H78/QwDW9ZwOopPJKcmM2vzLN6OepsifkWYGD6R66++Hj/j53Q0ERERkTxDxXI6klNS+Wztfro2qkyVMsWdjpPjth3fxoRfJ7D52Ga61OrCE22foGqpqk7HEhEREclzVCyn4/fo4xyJO8fg0JpOR8lRiSmJTPljCtM3TqdssbJM7jyZ3nV6F+hmJiIiIiLZoWI5HVv/igOgVd2CM5TzpqObeOKXJ/jz5J8MaDCAsa3GUq54OadjiYiIiORpKpbTsftoAmWLF6FiqaJOR8m282eT/7vxv1QsXpF3ur9Dx5odnY4lIiIiki+oWE7HrqPx1KtcOt83T9h8bDOPr3ycP0/+yXUNruORNo9QtmhZp2OJiIiI5BsqltOxKyaB8PoVnY5x2ZJSkpi6YSrvr3+fCsUr8Hb3t+lUs5PTsURERETyHRXLFzmdmMxfsWepX7mU01Euy9bjW3li5RNsO7GN/vX7M67NOK4oVrAHVRERERHxlVwrlo0x/wX6AUestc1za73e2hWTAED9yqUdTuKdpNQkPlj/AVPXT6Vc8XK80fUNutbu6nQsERERkXwtN88szwDeAj7MxXV6ZdG6Azz1xSYAJi3eRGJyar4YlGTb8W08+cuTbDm+hWvqXcOjbR5VTxciIiIiOSDXimVr7QpjTN3cWp+3Fq07wKOfbeBMUgoAR+LO8ehnGwDybMGclJrEtA3TeG/9e5QtWpb/dPkP3et0dzqWiIiISIGhNstuk7/Z5imUzzuTlMLkb7blyWJ5x4kdPL7ycbYc30Lfun15tO2jlC9e3ulYIiIiIgVKniuWjTH3APcA1K5dO9fWe/DkGa+mOyU5NZnpG6fzzh/vULZoWV7t8io96/R0OpaIiIhIgZTnimVr7VRgKkCrVq1sbq33ynIlOJBOYXxluRK5FSFTO0/u5PGVj7Pp2CZ61enF42GPU6F4wRllUERERCSv8XM6QF4xtncjSgT4XzCtRIA/Y3s3cijR/6SkpvDfjf9lyBdDOBB/gMmdJ/PvLv9WoSwiIiLiY7nZddwnQBegkjFmPzDRWjstt9afmfPtkid/s42DJ89wZbkSjO3dyPH2yocSDvHoz48ScTiC7rW780TYE1QqUcnRTCIiIiKFRW72hjEst9Z1uQa2rOF4cZzW19Ff8/Sqp0lOTeaZ9s9wXYPr8v0Q3CIiIiL5SZ5rsyyQkJTAC7+9wOc7PyewUiAvdnyR2mVz72JHEREREXFRsZzHrI9Zz/ifx3Mg/gD3BN3DP4L/QYBfgNOxRERERAolFct5REpqCh9s+IB3/3iXKiWr8N/e/yW0aqjTsUREREQKNRXLecDB+IM8+vOjrD2ylr71+vJE2BOULVrW6VgiIiIihZ6KZYct3bWUZ1Y/g8XyfIfn6Ve/ny7iExEREckjVCw7JC4xjud/e54vd31Ji8oteKHjC9QsU9PpWCIiIiKShoplB0QdiWL8z+P5K+Ev7g2+l7uD7qaIn94KERERkbxGFVouSklNYer6qUxZP4Xqpaozs89MWlRp4XQsEREREcmAiuVcEnsulnE/j+OXA7/Qr34/Hm/7OKWLlnY6loiIiIhcgorlXLD1+FYeWvYQh08f5smwJxnScIgu4hMRERHJB1Qs+9gXO7/g6VVPU7ZYWWb0mUFw5WCnI4mIiIhIFqlY9pGk1CReWfMKH2/9mFZVWzG582QqlajkdCwRERER8YKKZR+IOR3Dv376F2uPrOX2prfzUOhDGrJaREREJB9SsZzDoo5E8fDyh4lPiuflTi/Tt15fpyOJiIiIyGVSsZxDrLXM2TaHl39/meqlqzOl5xQalm/odCwRERERyQYVyzngbPJZnln9DIt3LqZTzU680PEFyhYt63QsEREREckmFcvZFJcYx30/3EfUkSjubXEvo4JG4Wf8nI4lIiIiIjlAxXI2HDtzjNHfj2bHyR1M7jyZ3nV7Ox1JRERERHKQiuXLdCjhEHd/ezeHEg7xZrc36VCjg9ORRERERCSHqVi+DHtP7eXub+/mVOIppvScQmjVUKcjiYiIiIgPqFj20vYT27nn23tItalM6z2NphWbOh1JRERERHxEV6J5YX3MekZ+PRJ/P39m9JmhQllERESkgFOxnEW///U7d317F1cUu4IP+35I/XL1nY4kIiIiIj6mZhhZsOvkLu7/8X5qlK7B1J5TqVyystORRERERCQX6MxyJk4nnebh5Q9TokgJ3uv5ngplERERkUJEZ5YvwVrLs6ufZVfsLt7r+R5VSlZxOpKIiIiI5CKdWb6EhX8u5ItdXzA6eDThV4Y7HUdEREREcpmK5QxsO76N5397nrDqYdwTdI/TcURERETEASqW05GQlMA/f/onZYuW5cWOL+Lv5+90JBERERFxgNosp2Pp7qXsObWHD3p9QMUSFZ2OIyIiIiIO0ZnldCzft5wapWvQplobp6OIiIiIiINULKexZNcSeszrwYr9Kzhx9gRLdy91OpKIiIiIOEjNMNyW7FrCpF8ncTblLACnk08z6ddJAFxb/1oHk4mIiIiIU3Rm2e31ta97CuXzzqac5fW1rzuUSEREREScpmLZ7VDCIa+mi4iIiEjBp2LZrVqpal5NFxEREZGCT8Wy25iQMRT3L37BtOL+xRkTMsahRCIiIiLiNF3g53b+Ir7X177OoYRDVCtVjTEhY3Rxn4iIiEghpmI5jWvrX6viWEREREQ81AxDRERERCQDKpZFRERERDKgYllEREREJAMqlkVEREREMqBiWUREREQkAyqWRUREREQyoGJZRERERCQDKpZFRERERDKgYllEREREJAMqlkVEREREMqBiWUREREQkAyqWRUREREQyoGJZRERERCQDKpZFRERERDKgYllEREREJAPGWut0hgwZY2KAPQ6suhJw1IH15lfaX97TPvOO9pd3tL+8o/3lPe0z72h/eceJ/VXHWls5vSfydLHsFGNMhLW2ldM58gvtL+9pn3lH+8s72l/e0f7ynvaZd7S/vJPX9peaYYiIiIiIZEDFsoiIiIhIBlQsp2+q0wHyGe0v72mfeUf7yzvaX97R/vKe9pl3tL+8k6f2l9osi4iIiIhkQGeWRUREREQyUKiKZWPMf40xR4wxGzN43hhj3jDG/GmMWW+MCUnz3HBjzA73bXjupXZOFvbXLe79tMEY86sxJjjN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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "fig = plt.figure(figsize=(12,8))\n", "\n", "road1 = space.natural_to_standard(road1)\n", "road2 = space.natural_to_standard(road2)\n", "road3 = space.natural_to_standard(road3)\n", "\n", "plt.scatter(*road1, label = 'road 1')\n", "plt.scatter(*road2, label = 'road 2')\n", "plt.scatter(*road3, label = 'road 3')\n", "\n", "renovation1 = space.standard_to_natural(renovation1)\n", "renovation2 = space.standard_to_natural(renovation2)\n", "renovation3 = space.standard_to_natural(renovation3)\n", "\n", "plt.plot(*gs.transpose(renovation1), label = 'advancement of renovation effort on road 1')\n", "plt.plot(*gs.transpose(renovation2), label = 'advancement of renovation effort on road 2')\n", "plt.plot(*gs.transpose(renovation3), label = 'advancement of renovation effort on road 3')\n", "\n", "plt.xlabel(\"$\\\\kappa$ (expected jam size)\")\n", "plt.ylabel(\"$\\\\nu$ (expected exit time rate in traffic)\")\n", "\n", "plt.title(\"Comparison of different renovation efforts in natural coordinates\")\n", "\n", "plt.legend()\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The fact that these results validate our observations and expected consequences of renovations legitimates the use of information geometry to model the situation. For instance, a euclidean modeling of the situation would make no sense: all renovations would have the same impact although applied to different roads, because the norm of a tangent vector (i.e. the renovation effort) would be independent of its base point (the road)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Therefore, the key to optimizing Sao Paulo's traffic obviously lies in maximizing the efficiency of the renovation, with limited renovation resources." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 3.3. Optimization problem" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The aim is to minimize the mean expected congestion time in Sao Paulo, weighted by the frequencies $f_i$ of traffic jams $1 \\leq i \\leq n$, under the constraint of a total quantity of resources $r$. This reads:\n", "\n", "\\begin{equation}\n", "\\begin{cases}\n", "\\min_{(r_i)} \\sum_{i=1}^n f_i \\times \\exp_{x_i} \\left( r_i \\times \\left(\\begin{array}{c} 0 \\\\ -1 \\end{array}\\right)_{x_i} \\right)_{\\gamma} \\\\\n", "\\forall i \\in \\{1,...,n\\}, r_i \\geq 0 \\\\\n", "\\sum_{1 \\leq i \\leq n} r_i = r \\\\\n", "\\end{cases},\n", "\\end{equation}\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "where:\n", "- $(x_i)$ are the roads;\n", "- $\\left(\\begin{array}{c} 0 \\\\ -1 \\end{array}\\right)_{x_i}$ is the unit tangent vector at $x_i$ with direction and orientation $-\\gamma$;\n", "- $\\exp_{x_i}$ is the exponential map at $x_i$;\n", "- for $x \\in G$ (the Gamma manifold), $x_{\\gamma}$ is its $\\gamma$ coordinate;\n", "- $r_i$ is the resource allocated for renovating road $i$." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Remark" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We could rewrite the problem in a simpler way analytically, making use of the following results:\n", "- the relative efficiency of renovation (i.e. the ratio of expected congestion times) does not depend on the original expected congestion time of the road ($\\gamma$);\n", "- similarly, the length of the car lane of the renovated road does not depend on the original expected congestion time of the road ($\\gamma$).\n", "\n", "However, we will not use these results to make way for a better computational solution of the problem.\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# 4. Dataset processing" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "First, we associate to each of the roads eligible for renovation its parameters for a Gamma distribution, through a maximum likelihood fit of the durations of traffic jams: __jam_table__ gives, for each road $r$, a sample of size $n_r$ of all the traffic jams and their durations from 2001 to 2019." ] }, { "cell_type": "code", "execution_count": 36, "metadata": {}, "outputs": [], "source": [ "names, kappas, gammas = [], [], []\n", "\n", "for road in roads_to_renovate:\n", " frame = df.loc[df[\"name\"] == road]\n", " sample = frame[\"duration\"]\n", " try:\n", " kappa, gamma = space.maximum_likelihood_fit(sample)\n", " if not(gs.any(gs.isnan([kappa, gamma]))):\n", " names.append(road)\n", " kappas.append(kappa)\n", " gammas.append(gamma)\n", " except:\n", " continue" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Having focused on the 180 most congestioned roads makes sense now, as the estimations for the Gamma parameters of the roads are much more relevant. Accounting for all the roads would result in having outliers in our set of roads, rendering the computation far more complex. In addition, roads with a negligible count of traffic jams in such a long time span do not necessarily call for renovation.\n", "\n", "That is why, for the following and for the problem at hand, we can consider the following simplification: the roads eligible for renovation represent SP's roads subject to traffic jams, i.e. the exact dataset we want to be working on." ] }, { "cell_type": "code", "execution_count": 37, "metadata": {}, "outputs": [], "source": [ "dict_parameters = {\"name\": names, \"kappa\": kappas, \"gamma\": gammas}\n", "data = pd.DataFrame.from_dict(dict_parameters)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "To each of the roads eligible for renovation we associate a weight proportional to the number of traffic jams between 2001 and 2019." ] }, { "cell_type": "code", "execution_count": 38, "metadata": {}, "outputs": [], "source": [ "good_points = list(data[\"name\"])\n", "weights = list(map(jam_count.get, good_points))\n", "weights = weights / gs.sum(weights)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The 180 most congestioned roads of SP can be represented as follows on the Gamma manifold." ] }, { "cell_type": "code", "execution_count": 39, "metadata": {}, "outputs": [ { "data": { "image/png": "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nXLKKRo/frxeeOEFzZo1S+PHj1dra6uuv/56SdKaNWt0yCGHaNKkSWptbdUtt9zSs42LLrpIu+++u/bbbz8tW7as4H5WrlypD3/4w5oyZYqmTJmi++67b7NlcluKH374YU2YMEETJ07siUeSFi5cqCOOOKJnnccee0z77ruv3vOe9+iKK67YbJsbN27UrFmzNGXKFE2YMEE//OEPN1vmzDPP1N///nd94AMf0CWXXKLXXntNM2fO1IQJEzRt2jQ9/vjjPfGdfPLJmj59uk4++eRe21i4cKH2339/HXnkkdpzzz0j97tw4UIdeOCBOvbYYzV27FideOKJcndJ0l133aW2tja1trbqtNNO01tvvaXf//73Ou6443rtp/v5n3XWWZo8ebLGjRunCy64QFLQQv7SSy/poIMO0kEHHSQpmFn51VdflSR961vf0vjx4zV+/HhdeumlkoJzYI899tDpp5+ucePG6bDDDlNnZ2fB17GqdP/6y+Lf3nvv7QAAoG9PPvlk7GVvfuRFH/vl233kl37b8zf2y7f7zY+82O/9L1++3M3MH3jgAXd3v+GGG/zQQw/1DRs2+D/+8Q/fZZdd/KWXXvKuri5/44033N195cqVvttuu/mmTZt80aJFPn78eF+7dq2/8cYbvttuu/ncuXM3288JJ5zg99xzj7u7P/fccz527Fh3d7/yyiv9nHPOcXf3Cy64oGfdcePG+f333+/u7l/60pd83Lhx7u6+YMECP/zww3uWnzBhgq9bt85XrlzpI0aM8Pb2dl++fHnP8j/84Q/9f/7nf9zdff369b733nv73//+983iGzlypK9cudLd3T/1qU/57Nmz3d39rrvu8r322qtnf5MmTfJ169Zttv6CBQt866237tl21H4XLFjg2267rb/wwgu+ceNGnzZtmt9zzz3e2dnpI0aM8GXLlrm7+8knn+yXXHKJd3V1+S677OJr1qxxd/czzzzTr732Wnd3X7Vqlbu7b9iwwQ844AB/7LHHNnsuube7X6s1a9b46tWrfc899/RHHnnEly9f7g0NDb5kyRJ3dz/uuON69pElhd4rkhZ5RD5KyzIAAHVm7h3L1Nm1sdd9nV0bNfeOwq25cY0cOVLTpk2TJN1777064YQT1NDQoJ133lkHHHCAHn74Ybm7/vu//1sTJkzQoYceqvb2dr3yyiu65557dPTR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LY0fP17jx4/XpZde2hPfmDFjdMopp2j8+PF64YUXem1n1KhR+tKXvqRJkybp17/+deR+R40apQsuuECTJk1Sa2urnn76aUnSa6+9ppkzZ2rChAmaNm2aHn/8cW3atEmjRo1SR0dHz37e85736JVXXtGtt96qffbZR21tbTr00EP1yiuvaMWKFbr88st1ySWXaOLEibrnnns0e/ZsffOb35QUTHE+bdo0TZgwQUcffbRef/31nnPgS1/6kqZOnardd99d99xzT+TrmIi7Z/Zv7733dgAA0Lcnn3yy74XOOsu9sdE9aE8u/NfY6H7OOYn3v3z5cm9oaPDHH3/cN27c6JMmTfKPf/zjvmnTJp83b54fddRR7u5+3nnn+bXXXuvu7q+//rq/5z3v8TVr1vjatWu9s7PT3d2feeYZ784BFixY4Ntuu62/8MILvnHjRp82bZrfc889m+3/gAMO8LPOOsvd3Ts7O33EiBG+bNkyd3c/+eST/ZJLLnF391WrVvWsc9JJJ/lvfvMbd3dvbW31P/3pT+7u/sUvftHHjRu32T7uuOMOP/30033Tpk2+ceNGP/zww3vWGTJkSM9x6F537ty5fsYZZ7i7+9KlS72hocEffvhhd3cfOXKkr1y50pcvX+6S/N5773V3949//OM+d+7cnuf08MMP+8qVK33//ff3NWvWuLv7nDlz/Ktf/epm8V1wwQU96y5atMjHjx/va9as8dWrV/uee+7pjzzyiC9fvtzNzB944IGCr+PIkSP9G9/4hrt70f2OHDnSL7vsMnd3/973vuef+MQn3N39U5/6lM+ePdvd3e+66y7fa6+93N3905/+tP/0pz91d/cHH3zQDznkEHd3f+2113zTpk3u7n7FFVf45z//+c2eS/7t1tZWX7hwobu7n3/++f6Zz3ym53h1r3/bbbf17CNfofeKpEUekY/SsgwAQL342c82b1HO19UlXXttvzY/evRotba2atCgQRo3bpwOOeQQmZlaW1u1YsUKSUEL6Zw5czRx4kQdeOCBWr9+vZ5//nl1dXXp9NNPV2trq4477jg9+eSTPdudOnWqRowYoUGDBmnixIk928rXPfnIsmXLNHr0aO2+++6SpI997GO6++67JUkLFizQPvvso9bWVs2fP19PPPGEOjo61NHRofe+972SpJNPPrng9u+8807deeedamtr06RJk/T000/rr3/9a+TxuPfee/WRj3xEkjR+/HhNmDCh4HK77LKLpk+fLkk66aSTdO+99/Z6/MEHH9STTz6p6dOna+LEibr66qv13HPPRe63e99HH320hgwZom222UbHHHNMT0vryJEjNW3atMh1u49jX/s95phjJEl77713z2ty77339hy/gw8+WKtWrdKbb76p448/Xtdff70k6Ze//GXPPl588UXNmDFDra2tmjt3rp544omiz+uNN95QR0eHDjjgAEm9X9uomAaK0TAAAKgXeZfuB7xcnq222qrn/4MGDeq5PWjQoJ46YnfXjTfeqDFjeg+xOnv2bO2888567LHHtGnTJg0ePLjgdhsaGiJrkocMGVI0vvXr1+vss8/WokWLtMsuu2j27Nlav3597Ofn7jrvvPP0H//xH7HXicPMit52d73vfe/TL37xi5Lsr6/j1P14X/vtfl2KvSbd9t13Xz377LNauXKl5s2bpy9/+cuSpP/8z//U5z//eR155JFauHChZs+enfDZ9D+muGhZBgCgXoQjNpRsuX6YMWOGvvOd7/TUCi9ZskRS0GL4rne9S4MGDdK11147oM5lY8aM0YoVK/Tss89Kkq699lodcMABPYnxTjvtpDVr1vR0xGtublZzc3NPi+51110XGftPf/rTnrrd9vZ2/fOf/4yMY/r06frVr34lSXryySe1dOnSgss9//zzeuCBByRJP//5z7Xffvv1enzatGm67777ep7P2rVr9cwzzxQ9Bvvvv7/mzZundevWae3atbr55pu1//77F10nX3/32338Fi5cqJ122knbbrutzExHH320Pv/5z2uPPfbQjjvuKCl43VtaglHErr766p7tDB06VKtXr95s+9ttt5223377nlby7tc2TSTLAADUi5NOkhobiy/T2ChFlCGUwvnnn6+uri5NmDBB48aN0/nnny9JOvvss3X11Vdrr7320tNPP91n62cxgwcP1pVXXqnjjjuupyzkzDPPVHNzs04//XSNHz9eM2bM0JQpU3rWufLKK3XOOedo4sSJBTsQStJhhx2mj370o9p3333V2tqqY489tmBC1+3ss8/WypUrteeee+rLX/6yxo0bp+22226z5caMGaPvfe972mOPPfT666/rrLPO6vX4sGHDdNVVV+mEE07QhAkTtO+++/Z0qIsyadIknXrqqZo6dar2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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "kappa, gamma = data[\"kappa\"], data[\"gamma\"]\n", "\n", "fig = plt.figure(figsize=(12,8))\n", "\n", "mean = gs.array([gs.sum(weights*kappa), gs.sum(weights*gamma)])\n", "\n", "plt.scatter(kappa, gamma, label='road eligible for renovation')\n", "plt.scatter(*mean, color = 'r', s=100, label='mean road eligible for renovation')\n", "plt.xlabel(\"$\\\\kappa$ (number of cars in arbitrary units)\")\n", "plt.ylabel(\"$\\\\gamma$ (expected time spent in traffic in hours)\")\n", "plt.title(\"Sao Paulo's roads most subject to traffic jams, as represented as points on the Gamma manifold.\")\n", "plt.legend()\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We observe that the vast majority of traffic jams in SP can take from 2 to 6+ hours of congestion time. On the most impactful roads (eligible for renovation), the mean waiting time is 3h 24min." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# 5. Solving the problem at hand" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Arbitrarily (and for computational purposes), we are allocated a total of 10 resources to allocate on the renovations. It might seem like the amount of total resources should not matter that much as the original aim is simply knowing how to allocate the total quantity of resources between all the roads eligible for renovation, but renovations are not linear." ] }, { "cell_type": "code", "execution_count": 40, "metadata": {}, "outputs": [], "source": [ "total_resources = 10" ] }, { "cell_type": "code", "execution_count": 41, "metadata": {}, "outputs": [], "source": [ "points = gs.transpose(gs.stack([kappa, gamma]))\n", "n_points = len(points)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We optimize the allocation of resources for renovation here:" ] }, { "cell_type": "code", "execution_count": 42, "metadata": {}, "outputs": [ { "ename": "RuntimeError", "evalue": "Automatic differentiation is not supported with numpy backend. Use autograd, pytorch or tensorflow backend instead.\nChange backend via the command export GEOMSTATS_BACKEND=autograd in a terminal.", "output_type": "error", "traceback": [ "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[1;31mRuntimeError\u001b[0m Traceback (most recent call last)", "\u001b[1;32mc:\\Users\\Jules\\Documents\\Geomstats\\notebooks\\18_real_world_applications__sao_paulo_traffic_optimization.ipynb Cell 71'\u001b[0m in \u001b[0;36m\u001b[1;34m()\u001b[0m\n\u001b[0;32m 13\u001b[0m gammas \u001b[39m=\u001b[39m end_points[:,\u001b[39m1\u001b[39m]\n\u001b[0;32m 14\u001b[0m \u001b[39mreturn\u001b[39;00m gs\u001b[39m.\u001b[39mmean(weights\u001b[39m*\u001b[39mgammas)\n\u001b[1;32m---> 16\u001b[0m objective_with_grad \u001b[39m=\u001b[39m gs\u001b[39m.\u001b[39;49mautodiff\u001b[39m.\u001b[39;49mvalue_and_grad(objective, to_numpy\u001b[39m=\u001b[39;49m\u001b[39mTrue\u001b[39;49;00m)\n\u001b[0;32m 18\u001b[0m resources \u001b[39m=\u001b[39m total_resources \u001b[39m*\u001b[39m weights\n\u001b[0;32m 20\u001b[0m res \u001b[39m=\u001b[39m minimize(\n\u001b[0;32m 21\u001b[0m objective_with_grad,\n\u001b[0;32m 22\u001b[0m resources,\n\u001b[1;32m (...)\u001b[0m\n\u001b[0;32m 29\u001b[0m tol\u001b[39m=\u001b[39mgs\u001b[39m.\u001b[39matol,\n\u001b[0;32m 30\u001b[0m )\n", "File \u001b[1;32m~\\Documents\\geomstats\\geomstats\\_backend\\numpy\\autodiff.py:23\u001b[0m, in \u001b[0;36mvalue_and_grad\u001b[1;34m(*args, **kwargs)\u001b[0m\n\u001b[0;32m 21\u001b[0m \u001b[39mdef\u001b[39;00m \u001b[39mvalue_and_grad\u001b[39m(\u001b[39m*\u001b[39margs, \u001b[39m*\u001b[39m\u001b[39m*\u001b[39mkwargs):\n\u001b[0;32m 22\u001b[0m \u001b[39m\"\"\"Return an error when using automatic differentiation with numpy.\"\"\"\u001b[39;00m\n\u001b[1;32m---> 23\u001b[0m \u001b[39mraise\u001b[39;00m \u001b[39mRuntimeError\u001b[39;00m(\n\u001b[0;32m 24\u001b[0m \u001b[39m\"\u001b[39m\u001b[39mAutomatic differentiation is not supported with numpy backend. \u001b[39m\u001b[39m\"\u001b[39m\n\u001b[0;32m 25\u001b[0m \u001b[39m\"\u001b[39m\u001b[39mUse autograd, pytorch or tensorflow backend instead.\u001b[39m\u001b[39m\\n\u001b[39;00m\u001b[39m\"\u001b[39m\n\u001b[0;32m 26\u001b[0m \u001b[39m\"\u001b[39m\u001b[39mChange backend via the command \u001b[39m\u001b[39m\"\u001b[39m\n\u001b[0;32m 27\u001b[0m \u001b[39m\"\u001b[39m\u001b[39mexport GEOMSTATS_BACKEND=autograd in a terminal.\u001b[39m\u001b[39m\"\u001b[39m\n\u001b[0;32m 28\u001b[0m )\n", "\u001b[1;31mRuntimeError\u001b[0m: Automatic differentiation is not supported with numpy backend. Use autograd, pytorch or tensorflow backend instead.\nChange backend via the command export GEOMSTATS_BACKEND=autograd in a terminal." ] } ], "source": [ "original_SP = gs.sum(gs.einsum(\"...,...j->...j\", weights, points), axis=0)\n", "\n", "def rebuilding(point, resources):\n", " n_points = point.shape[0] if len(point.shape)>1 else 1\n", " vec = gs.tile([gs.array([0.0,-1.0])], (n_points, 1))\n", " norm = resources * total_resources\n", " tangent_vec = gs.einsum(\"...,...j->...j\", norm, vec)\n", " end_point = space.metric.exp(tangent_vec, point, n_steps=100)\n", " return end_point\n", "\n", "def objective(resources):\n", " end_points = rebuilding(points, resources)\n", " gammas = end_points[:,1]\n", " return gs.mean(weights*gammas)\n", "\n", "objective_with_grad = gs.autodiff.value_and_grad(objective, to_numpy=True)\n", "\n", "resources = total_resources * weights\n", "\n", "res = minimize(\n", " objective_with_grad,\n", " resources,\n", " method=\"SLSQP\",\n", " constraints=({'type': 'ineq', 'fun': lambda x: total_resources - gs.sum(x)},\n", " {'type': 'ineq', 'fun': lambda x: x.min()},\n", " ),\n", " jac=True,\n", " options={\"disp\": False, \"maxiter\": 100},\n", " tol=gs.atol,\n", ")\n", "\n", "resources = res.x\n", "\n", "new_points = rebuilding(points, resources)\n", "\n", "fig = plt.figure(figsize=(16,12))\n", "\n", "plt.scatter(points[:,0], points[:,1], label = 'original points', s=20)\n", "\n", "plt.scatter(*original_SP, label = 'original SP', s=50)\n", "\n", "plt.scatter(new_points[:,0], new_points[:,1], label = 'points after renovation', s=20)\n", "\n", "for i in range(n_points):\n", " plt.arrow(points[i,0], points[i,1], (new_points - points)[i,0], (new_points - points)[i,1], head_width=.01, linestyle =\"\", length_includes_head = True)\n", " percentage = resources[i] * 100 / total_resources\n", " if percentage > 2:\n", " plt.text(points[i,0], points[i,1], f\"{str(percentage)[:5]} %\")\n", " \n", "new_SP = gs.sum(gs.einsum(\"...,...j->...j\", weights, new_points), axis=0)\n", "\n", "plt.scatter(*new_SP, label = 'SP after renovation', s=50)\n", "\n", "plt.arrow(*original_SP, *(new_SP - original_SP), head_width=.05, linestyle = \"-\", length_includes_head = True)\n", "\n", "plt.xlabel(\"$\\\\kappa$ (expected jam size)\")\n", "plt.ylabel(\"$\\\\gamma$ (expected time spent in traffic in hours)\")\n", "\n", "plt.title(\"Optimization of SP's traffic\")\n", "\n", "plt.legend()\n", "\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Above, the percentages represent the proportion of the total resources that have been allocated to the renovation of each road: they are visible if greater than 1%." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "original_size, original_time = original_SP\n", "new_size, new_time = new_SP\n", "\n", "relative_time_reduction = (original_time - new_time) / original_time\n", "\n", "original_variance, new_variance = original_time**2 / original_size, new_time**2 / new_size\n", "relative_variance_reduction = (original_variance - new_variance) / original_variance\n", "\n", "print(f\"Mean expected congestion time has been reduced by as much as {str(relative_time_reduction*100)[:5]} % in Sao Paulo :)\")\n", "print(f\"Variance in congestion time has been reduced by as much as {str(relative_variance_reduction*100)[:5]} % in Sao Paulo :)\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Conclusion" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We have managed to substantially reduce the mean expected congestion time in SP by as much as 25%, not at great expense of the expected jam sizes! We also happen to have halved the variance of the mean congestion time, rendering long traffic jams rarer. This is a great success!" ] } ], "metadata": { "backends": [ "autograd" ], "interpreter": { "hash": "bb13ff0fdb59d83d23981f704716babf0aa4691da0c52572c8d02d981125b795" }, "kernelspec": { "display_name": "Python 3.10.4 64-bit", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.10.4" }, "orig_nbformat": 4 }, "nbformat": 4, "nbformat_minor": 2 }