scieee AI-readable full text Open interactive document viewer

Desarrollo de una metodología para el diseño de una red de carriles para bicicletas considerando el nivel de satisfacción de los usuarios

León Cubeiro, Cristina Isabel

Abstract

En los últimos años se han realizados cambios en la mentalidad urbanística de las diferentes ciudades [1], que en conjunto con la concienciación de la problemática ambiental, han impulsado a las personas a emplear sistemas de transportes alternativos a los convencionales. Por ello, es necesario que las ciudades cuenten con una infraestructura que permita a los usuarios emplear medios de transportes alternativos, sin perjudicar la infraestructura de los sistemas de transportes actuales. Estas infraestructuras (carriles para bicicletas) deben cumplir con las normativas de seguridad, las normativas de urbanismo y al mismo tiempo deben ser adecuados para la práctica del ciclismo [2], es por ello por lo que su diseño se ha convertido en una tarea importante. Desde un punto de vista científico, este diseño es posible gracias a la implementación de modelos matemáticos que permiten describir y analizar sistemas o situaciones reales mediante el modelado de las relaciones entre sus elementos. En el presente Trabajo de Fin de Grado se propone una metodología que permite resolver el problema de diseño de una red de carriles de bici teniendo en cuenta el nivel de satisfacción de los usuarios, así como la implementación de múltiples tipos de infraestructuras, y se ilustra su aplicación usando la red de la ciudad de Sevilla, España.

Full text

Equation Chapter 1 Section 1 Trabajo de Fin de Grado Ingeniería en Organización Industrial Desarrollo de una metodología para el diseño de una red de carriles para bicicletas considerando el nivel de satisfacción de los usuarios. Autor: Cristina Isabel León Cubeiro Tutor: José David Canca Ortiz Dpto. Organización Industrial y Gestión de Empresas I Escuela Técnica Superior de Ingeniería Universidad de Sevilla Sevilla, 2022 iii Trabajo de Fin de Grado Ingeniería en Organización Industrial Desarrollo de una metodología para el diseño de una red de carriles para bicicletas considerando el nivel de satisfacción de los usuarios. Autor: Cristina Isabel León Cubeiro Tutor: José David Canca Ortiz Profesor titular Dpto. de Organización Industrial y Gestión de Empresas I Escuela Técnica Superior de Ingeniería Universidad de Sevilla Sevilla, 2022 v Trabajo de Fin de Grado: Desarrollo de una metodología para el diseño de una red de carriles para bicicletas considerando el nivel de satisfacción de los usuarios. Autor: Cristina Isabel León Cubeiro Tutor: José David Canca Ortiz El tribunal nombrado para juzgar el Trabajo de Fin de Grado arriba indicado, compuesto por los siguientes miembros: Presidente: Vocales: Secretario: Acuerdan otorgarle la calificación de: Sevilla, 2022 El Secretario del Tribunal vii AGRADECIMIENTOS En este apartado quiero agradecer primeramente a mis padres, hermana y abuela por siempre brindarme su amor y apoyo incondicional en todos los momentos importantes y no tan importantes de mi vida. Especialmente a mis padres por darme la educación y herramientas necesarias para ser la persona que soy. A Marcel Martinez por estar siempre presente no solo en esta etapa de mi vida si no en todo momento y brindarme su apoyo incondicional. A la Sra. Mercedes y al Sr. Marcel por el apoyo y cariño que he recibido en todo momento de esta etapa de mi vida. A Lola por su apoyo y amistad durante esta etapa de mi vida. Finalmente, a mi tutor por darme las herramientas necesarias para la realización del presente trabajo. Muchas gracias a todos. Cristina Isabel León Cubeiro Sevilla, 2022 ix RESUMEN En los últimos años se han realizados cambios en la mentalidad urbanística de las diferentes ciudades [1], que en conjunto con la concienciación de la problemática ambiental, han impulsado a las personas a emplear sistemas de transportes alternativos a los convencionales. Por ello, es necesario que las ciudades cuenten con una infraestructura que permita a los usuarios emplear medios de transportes alternativos, sin perjudicar la infraestructura de los sistemas de transportes actuales. Estas infraestructuras (carriles para bicicletas) deben cumplir con las normativas de seguridad, las normativas de urbanismo y al mismo tiempo deben ser adecuados para la práctica del ciclismo [2], es por ello por lo que su diseño se ha convertido en una tarea importante. Desde un punto de vista científico, este diseño es posible gracias a la implementación de modelos matemáticos que permiten describir y analizar sistemas o situaciones reales mediante el modelado de las relaciones entre sus elementos. En el presente Trabajo de Fin de Grado se propone una metodología que permite resolver el problema de diseño de una red de carriles de bici teniendo en cuenta el nivel de satisfacción de los usuarios, así como la implementación de múltiples tipos de infraestructuras, y se ilustra su aplicación usando la red de la ciudad de Sevilla, España. xvii ÍNDICE DE ILUSTRACIONES Ilustración 1 Carril compuesto por paneles solares realizado por la empresa SOLAROAD. Fuente: https://www.solaroad.nl/ 2 Ilustración 2 Carril compuesto de 1000 kg de plástico reciclado, realizado por la empresa PLASCTICROAD. Fuente: https://plasticroad.com/ 3 Ilustración 3 Grafo con 5 vértices y 6 aristas 7 Ilustración 4 Grafo no dirigido (izquierda) y grafo dirigido (derecha) 7 Ilustración 5 Grafo no ponderado (izquierda) y grafo ponderado (derecha). 8 Ilustración 6 Grafo G (izquierda) y subgrafo de G (derecha). 9 Ilustración 7 Grafo dirigido G con 6 vértices y 5 aristas. 9 Ilustración 8 Capa 1: Servicio urbano en la ciudad de Lisboa. Fuente: https://www.turismoenportugal.org/trenen-portugal 11 Ilustración 9 Capa 2: Servicio pendular. Fuente: https://www.eurail.com/es/get-inspired/trains-europe/highspeed-trains/alfa-pendular 11 Ilustración 10 Capa 3: Servicio Inter ciudades. Fuente: https://www.eurail.com/es/get-inspired/trainseurope/high-speed-trains/alfa-pendular 12 Ilustración 11. Redes temporales. Fuente: Boccaletti et al.,2014 13 Ilustración 12 Redes interconectadas .Fuente: Boccaletti et al.,2014 13 Ilustración 13 Redes multinivel. Fuente: Hammoud y Kramer (2020). 15 Ilustración 14. Hiperredes. Fuente: Hammoud y Kramer (2020) 15 Ilustración 15. Nodos coloreados. Fuente: Hammoud y Kramer (2020) 16 Ilustración 16. Arcos coloreados. Fuente: Hammoud y Kramer (2020). 17 Ilustración 17. Red base 26 Ilustración 18 Tipos de infraestructura 26 Ilustración 19 Soluciones alternativas 27 Ilustración 20 Estructura multicapa (nodos) 32 Ilustración 21. Estructura multicapa (arcos capas). 33 Ilustración 22 Estructura multicapa (arcos de cambio). 34 Ilustración 23. Red G base. 38 Ilustración 24 Conjunto de pares OD para un conjunto 𝑊={1,3,1,5,2,6,4,6}. 39 Ilustración 25 Solución Prueba 1: Presupuesto 𝑃=700.000 u.m. 41 Ilustración 26 Solución gráfica del viaje 𝑊=(1,5) en la estructura multicapa 43 Ilustración 27 Solución grafo final para el viaje 𝑊=1,5 43 Ilustración 28 Solución gráfica del viaje 𝑊=(1,3) en la estructura multicapa 44 Ilustración 29 Solución grafo final para el viaje 𝑊=(1,3) 45 Ilustración 30 Solución grafo final para el viaje 𝑊=(2,6) 46 Ilustración 31 Solución grafo final para el viaje 𝑊=(2,6) 46 Ilustración 32 Solución grafo final para el viaje 𝑊=(4,6) 47 Ilustración 33 Solución grafo final para el viaje 𝑊=(4,6) 48 Ilustración 34 Solución Prueba 2: Presupuesto 𝑃=1.000.000 u.m. 49 Ilustración 35 Solución Prueba 3: Presupuesto 𝑃=3.000.000 u.m. 50 Ilustración 36 Red H. 51 Ilustración 37 Conjunto de pares OD para un conjunto 𝑊={(2,6),(7,9),(4,6),(1,7)}. 52 Ilustración 38 Solución Prueba 4: Presupuesto 𝑃=25.000.000 u.m 53 Ilustración 39 Prueba 5: Presupuesto 𝑃=50.000.000 u.m 54 Ilustración 40 Red Bicicleta Sevilla 57 Ilustración 41 Red de las principales avenidas y calles de Sevilla 58 Ilustración 42 Red de las principales avistas y calles de Sevilla 59 Ilustración 43 Red de bicicleta para la ciudad de Sevilla. Prueba 1, Caso 1 61 Ilustración 44 Red de bicicleta para la ciudad de Sevilla. Prueba 2, Caso 1. 63 Ilustración 45 Red de bicicletas para la ciudad de Sevilla. Prueba 1, Caso 2. 65 xix NOTACIÓN ∈ Perteneciente Σ Sumatoria | Tal que ∀ Para todo ∩ Intersección ∪ Unión ≤ Menor o igual que ≥ Mayor o igual que ≠ Diferente de 1 1 INTRODUCCIÓN En muchas ciudades se está promoviendo la bicicleta como medio de transporte para entre otras cosas, enfrentar la problemática ambiental [3], debido a esto, cada vez son más las personas que deciden emplear bicicletas frente al transporte público u otros vehículos de motor. Poco a poco la bicicleta ha ido ganando protagonismo como medio de transporte alternativo, ya que es un medio beneficioso para la salud de los usuarios, es económico y se trata de un medio de transporte sostenible libre de emisiones de 𝐶𝑂2 al ambiente [4]. Las personas son más cocientes de la importancia de ser protagonista y agente de cambio en materia ambiental, por tanto, la bicicleta y recientemente los monopatines se están convirtiendo en actores cada vez más populares en la rutina de las personas, principalmente para desplazarse al trabajo, universidad, etc. Los organismos gubernamentales reconocen la importancia de una movilidad más sostenible [5], para ello deben proporcionar a las ciudades, las infraestructuras necesarias que permitan el desplazamiento de los usuarios y que representen una alternativa frente al uso del transporte público u otros vehículos de motor. Estas infraestructuras (carriles para bicicletas) deben cumplir con las normativas de seguridad, las normativas de urbanismo y al mismo tiempo deben ser adecuados para la práctica del ciclismo [2]. Desde un punto de vista científico, este diseño es posible gracias a la implementación de modelos matemáticos que permiten describir y analizar sistemas o situaciones reales mediante el modelado de las relaciones entre sus elementos. 1.1 ESTADO DEL ARTE Un sistema de transporte sostenible se basa en la eficiencia energética y en la falta de efectos nocivos para el medioambiente y los seres humanos [6]. Para fomentar una movilidad sostenible es necesario que las ciudades cuenten con una infraestructura que permita a los usuarios utilizar medios de transporte alternativos a los convencionales. El diseño y estudio de dichas infraestructuras forman parte del estudio de sistemas abstractos. Las redes o grafos “La flor que florece en la adversidad es la más rara y hermosa de todas.” - Mulán - INTRODUCCIÓN 2 2 pueden facilitar la comprensión de dichos sistemas, por ejemplo, pueden facilitar el estudio del comportamiento de la red de personas que forman la sociedad, las neuronas, los transportes urbanos, la ruta de barcos o aviones, etc. Todo ello mediante la implementación de herramientas o teorías matemáticas. Los modelos de diseño de redes tienen numerosas aplicaciones en varios campos, tales como: telecomunicaciones [7], planificación de la distribución [8] y transporte [9]. Aunque en cada una de estas aplicaciones el planteamiento del problema puede ser diferente, los modelos matemáticos subyacentes pueden ser muy similares entre si [9]. En cuanto al campo de transporte existen numerosos estudios que no solo se enfocan al diseño de una red para bicicletas, sino que también se enfocan en la optimización de estas. Una mejora puede ser por ejemplo la que describe Murawsky y Church [10], que proponen un modelo que mejore los enlaces de la red para garantizar una máxima accesibilidad de las ubicaciones (centros de salud). Otro ejemplo en cuanto a la optimización de las redes se debe a Leblanc [11], que trata de determinar que enlaces deben mejorarse en una red vial urbana para minimizar la congestión total. El diseño de carriles para bicicletas en una determinada ciudad debe satisfacer la demanda de viajes diarios de los usuarios y de igual forma no perjudicar a los sistemas de transportes existentes, para ello, las ciudades deben contar con infraestructura para la práctica del ciclismo de la misma forma que existen las infraestructuras especializadas para peatones y automóviles. Hoy en día existen numerosos proyectos para llevar a cabo la construcción de infraestructuras de carriles para bicicletas que empleen materiales que sean amigables para el medio ambiente, como lo es por ejemplo el proyecto que llevó a cabo la empresa SOLAROAD en la ciudad de Krommenie (Países bajos) donde instalaron 90 m de un carril compuesto por paneles solares capaces de generar energía renovable. Ilustración 1 Carril compuesto por paneles solares realizado por la empresa SOLAROAD. Fuente: https://www.solaroad.nl/ 3 3 Desarrollo de una metodología para el diseño de una red de carriles para bicicletas considerando el nivel de satisfacción de los usuarios. Otros proyectos los ha llevado a cabo la empresa PLASTICROAD, en el bosque de Chapultepec, México, consiste en un carril de bicicleta fabricados con 1000 kilos de residuos plásticos, que equivalen a medio millón de tapas de botellas. Además de ser un carril para bicicletas, este proyecto ayuda a enfrentar la problemática de las inundaciones que tiene la zona ya que el carril se utiliza para almacenar agua de lluvia de forma rápida para hacer frente a las lluvias extremas. Ilustración 2 Carril compuesto de 1000 kg de plástico reciclado, realizado por la empresa PLASCTICROAD. Fuente: https://plasticroad.com/ Por otro lado, también existen las infraestructuras convencionales como lo pueden ser: (i) Vías específicamente acondicionada para el tráfico de bicicletas, con la señalización horizontal y vertical correspondiente, y cuyo ancho permite el paso seguro de estos vehículos, (ii) Vía ciclista que discurre adosada a la calzada, en un solo sentido o en doble sentido, (iii) Carril-bici provisto de elementos laterales que lo separan físicamente del resto de la calzada, así como de la acera, etc. Como se puede observar el diseño de carriles de bicicletas puede abarcar muchas casuísticas que incluyen considerar el coste de construcción, la demanda de los usuarios y hasta seleccionar el tipo de infraestructura a utilizar, en este caso la elección del tipo de material a utilizar determinará o no el coste total de construcción. 5 2 OBJETIVOS 2.1 OBJETIVO GENERAL El presente Trabajo de Fin de Grado tiene como objetivo desarrollar una metodología que permita resolver el problema de diseño de una red de carriles para bicicletas e ilustrar su aplicación utilizando la red de la ciudad de Sevilla, España. 2.2 OBJETIVOS ESPECÍFICOS • Construir un modelo matemático para el diseño de una red de carriles para bicicletas. • Demostrar el funcionamiento de la metodología propuesta en redes pequeñas. • Aplicar la metodología a una red de mayor tamaño y analizar las soluciones obtenidas. “Un solo granito de arroz puede inclinar la balanza. Un solo hombre puede ser la diferencia entre una victoria y una derrota.” -Mulán- FUNDAMENTOS TEÓRICOS 12 12 Ilustración 10 Capa 3: Servicio Inter ciudades. Fuente: https://www.eurail.com/es/get-inspired/trains-europe/high-speed-trains/alfapendular Gracias al carácter multiplex de las redes multicapa se pueden representar sistemas considerando todas las interacciones que tienen cada una de las redes y a su vez las interacciones entre redes. A continuación, se describe la definición formal básica de una red o grafo multicapa: Una red o grafo multicapa es un par 𝑀=(𝐺,𝐶) donde 𝐺={𝐺𝛼; 𝛼∈{1,…,𝑀}} es una familia de grafos (direccionados o no, ponderados o no) 𝐺𝛼=(𝑉𝛼,𝐴𝛼), que contiene las capas de M, siendo: 𝐶={ 𝐴𝛼𝛽⊆ 𝑉𝛼𝑥𝑉𝛽 ;𝛼,𝛽∈𝑀,𝛼≠ 𝛽} El conjunto de interconexiones entre nodos de diferentes capas 𝐺𝛼 𝑦 𝐺𝛽 con 𝛼≠ 𝛽. Los elementos de C se denominarán capas cruzadas. Los elementos de 𝐴𝛼 se denominarán conexiones intracapas de M, mientras que los elementos de cada 𝐴𝛼𝛽 con 𝛼≠ 𝛽 se denominarán conexiones Inter capa. El conjunto de vértices en cada capa de denota de la siguiente forma: 𝑉𝛼={𝑣1𝛼,…,𝑣𝑉𝛼 𝛼} y la matriz de adyacencia de cada capa se denota con 𝑨[𝛼] cuyos elementos son: 𝑎𝑖𝑗 𝛼={1 𝑠𝑖 𝑙𝑎 𝑎𝑟𝑖𝑠𝑡𝑎 (𝑣𝑖𝛼,𝑣𝑗𝛼)∈ 𝐴𝛼 0 𝑒𝑛 𝑐𝑎𝑠𝑜 𝑐𝑜𝑛𝑡𝑟𝑎𝑟𝑖𝑜 La matriz de adyacencia entre capas corresponde al conjunto 𝐴𝛼𝛽 de las interconexiones entre las capas 𝛼 y 𝛽 es 𝑨[𝛼,𝛽] cuyos elementos son: 𝑎𝑖𝑗 𝛼𝛽={1 𝑠𝑖 𝑙𝑎 𝑎𝑟𝑖𝑠𝑡𝑎 (𝑣𝑖𝛼,𝑣𝑗𝛽)∈ 𝐴𝛼𝛽 0 𝑒𝑛 𝑐𝑎𝑠𝑜 𝑐𝑜𝑛𝑡𝑟𝑎𝑟𝑖𝑜 13 13 Desarrollo de una metodología para el diseño de una red de carriles para bicicletas considerando el nivel de satisfacción de los usuarios. A continuación, se presenta los principales tipos e implementaciones del marco multicapa: 1. Redes multiplex: Una red multiplex M, es un conjunto de capas donde cada capa es un grafo 𝐺= {𝐺𝛼; 𝛼∈{1,…,𝑀}}, puede ser dirigido o no, puede estar ponderado o no, denominado grafo 𝐺𝛼= (𝑉𝛼,𝐴𝛼), con 𝑉∝={𝑣1,…,𝑣𝑁}. Todas las capas contienen los mismos nodos, es por ello por lo que las redes multiplex se pueden considerar como una red multicapa ya que en todas las capas se dispone del mismo conjunto de nodos 𝑉1=⋯=𝑉𝑀=𝑉 y 𝐴𝛼𝛽={(𝑥,𝑥);𝑥∈𝑋} para cada 1≤𝛼≠ 𝛽 ≤𝑀. 2. Redes temporales: una red temporal (𝐺(𝑡))𝑡=1 𝑇 se puede representar como una red multicapa con un conjunto de capas {𝐺1,…,𝐺𝑇} donde 𝐺𝑡=𝐺(𝑡), 𝐴𝛼𝛽=∅ si 𝛽≠ 𝛼+ 1, mientras 𝐴𝛼,𝛼+1= { (𝑣,𝑣);∈𝑉𝛼∩ 𝑉𝛼+1}. Ilustración 11. Redes temporales. Fuente: Boccaletti et al.,2014 3. Redes interconectadas: Si se considera una familia de redes {𝐺1,…,𝐺𝐿} que interactúan, se puede modelar como una red multicapa de capas {𝐺1,…,𝐺𝐿} y cuyas capas cruzadas 𝐴𝛼𝛽 corresponde a las interaciones entre la red 𝐺𝛼 𝑦 𝐺𝛽. Ilustración 12 Redes interconectadas .Fuente: Boccaletti et al.,2014 4. Redes multidimensionales: un multigrafo con aristas o arcos etiquetados, 𝐺=(𝑉,𝐴,𝐷), donde V es el conjunto de nodos o vértices, D es un conjunto de etiquetas que representan dimensiones y A es un conjunto de arcos etiquetados, es decir un conjunto triple 𝐴={(𝑢,𝑣,𝑑); 𝑢,𝑣∈𝑉,𝑑∈𝐷}. FUNDAMENTOS TEÓRICOS 14 14 Se puede suponer que dado un par de nodos 𝑢,𝑣∈𝑉 y una etiqueta 𝑑∈𝐷, puede existir solo un arco (𝑢,𝑣,𝑑). Además, si el grafo es considerado un grafo dirigido, los arcos (𝑢,𝑣,𝑑) y (𝑣,𝑢,𝑑) son distintos. Así, dado |𝐷|=𝑚, cada par de nodos en G se puede conectar como máximo a m arcos posibles. Cuando sea necesario, es posible considerar pesos, de modo que los arcos ya no sean triples, sino que vienen representados por tuplas de 4 elementos, (𝑢,𝑣,𝑑,𝑤), donde w es un número real que representa el peso de la relación entre 𝑢,𝑣 𝜖 𝑉 y etiquetado con 𝑑∈𝐷. Una red multidimensional 𝐺=(𝑉,𝐴,𝐷) se puede modelar como una red múlticapa asignando cada etiqueta a una capa. Específicamente, G se puede asociar a una red multicapa de capas {𝐺1,…,𝐺|𝐷|} donde por cada 𝛼≠ 𝐷, 𝐺𝛼=(𝑋𝛼,𝐴𝛼), 𝑋𝛼= 𝑉, 𝐴𝛼={(𝑥,𝑥);𝑥𝜖𝑉 𝑥 𝑉;(𝑢,𝑣,𝑑)∈𝐴 𝑦 𝑑=𝛼 y 𝐴𝛼𝛽={(𝑥,𝑥);𝑥 𝜖 𝑉 para cada 1≤𝛼 ≠ 𝛽 ≤|𝐷|. 5. Redes interdependientes: Es una colección de diferentes redes, las capas, cuyos nodos son interdependientes entre sí. En la práctica, los nodos de una capa de la red dependen de los nodos de control en una capa diferente. En este tipo de representación, las dependencias son aristas adicionales que conectan las diferentes capas. Esta estructura, entre las capas de la red, a menudo se denomina meso estructura. 6. Redes multinivel: Son similares a las redes multiplex, con la diferencia de que las capas pueden contener no solo un subconjunto de aristas sino también un subconjunto de nodos. El grafo M es una tupla definida por conjuntos de nodos V, aristas A y capas S con longitud p. 𝑀=(𝑉,𝐴,𝑆) 𝑆={𝑆1,…,𝑆𝑝} 𝑠𝑢𝑏𝑔𝑟𝑎𝑓𝑜𝑠 𝑐𝑜𝑛 𝑆𝑗=(𝑉𝑗,𝐴𝑗),𝑗=1,…,𝑝 𝑉= ⋃𝑉𝑗 𝑝 𝑗=1 𝐴= ⋃𝐴𝑗 𝑝 𝑗=1 15 15 Desarrollo de una metodología para el diseño de una red de carriles para bicicletas considerando el nivel de satisfacción de los usuarios. Ilustración 13 Redes multinivel. Fuente: Hammoud y Kramer (2020). 7. Hiperredes: Son grafos basados en nodos formados por diferentes comunidades o subredes que se cruzan. Un hipergrafo está definido por un par (𝑉,𝐻), siendo V el conjunto de nodos y H una familia de subconjunto de V, cada uno llamado hiperaristas de H. Estos grafos se centran en los nodos que pertenecen al mismo grupo en lugar de las conexiones entre ellos. Los nodos del mismo subconjunto se asignan a una capa con nodos completamente conectados. La noción de las aristas aquí difiere de las redes normales; las aristas en estas redes se denominan hiperaristas y puede conectar múltiples nodos al mismo tiempo. Luego, cada hiperarista se asigna a una sola capa. Las hiperredes múltiples no están separadas por capas, sino alineadas con los nodos, ya que un nodo se puede asignar a varias capas, en función de la intersección de los subconjuntos. 𝜑=(𝑉,ℎ) 𝐻={𝐻1,…,𝐻𝑝} 𝑠𝑢𝑏𝑐𝑜𝑛𝑗𝑢𝑛𝑡𝑜𝑠 𝐴𝛼𝛽={(𝑥,𝑥);𝑥𝜖 𝑉𝛼 ∩ 𝑉𝛽} 𝑑𝑜𝑛𝑑𝑒 𝛼,𝛽 𝜖 𝐻 Ilustración 14. Hiperredes. Fuente: Hammoud y Kramer (2020) Otro enfoque sobre las redes multicapa se explica en [14] que presenta una formulación abstracta sobre los grafos multicapas y los diferentes criterios para elegir capas. FUNDAMENTOS TEÓRICOS 16 16 El enfoque que presentan Hammoud y Kramer [14], se basa en realizar una diferenciación entre los tipos de nodos y los tipos de arcos. Para el primer caso, especifican que los nodos tienen diferentes aspectos o tipos (para diferenciarlos gráficamente se emplea el uso de colores). El grafo 𝐺𝑁 es una tupla definida por un conjunto de nodos V, un conjunto de arcos A y un conjunto de capas C, donde las capas representan el color de los nodos. Dos nodos 𝑣𝛼 𝑦 𝑣𝛽 están conectados por un arco 𝐴𝛼𝛽. 𝐺𝑁=(𝑉,𝐴,𝐶),𝑉𝛼 𝜖 𝑉 𝑥 𝐶,𝐴𝛼𝛽∈𝑉𝛼 𝑥 𝑉𝛽,𝑑𝑜𝑛𝑑𝑒 𝛼,𝛽 𝜖 𝐶 Ilustración 15. Nodos coloreados. Fuente: Hammoud y Kramer (2020) En dichos gráficos, el enfoque es explotar la topología del sistema desde una perspectiva basada en nodos. En la mayoría de los casos, el gráfico es disjunto en capas, es decir, el nodo solo puede pertenecer a una capa y tener un color. Para el segundo caso, especifican que el sistema se representa con conexiones (arcos) heterogéneas entre los nodos. El grafo 𝐺𝐴 es una tupla definida por un conjunto de nodos V, un conjunto de colores C con longitud b y un conjunto de aristas A, cada uno asignado a un tipo o un aspecto definido por el color. Los arcos del mismo color pertenecen a una misma capa. Cada capa puede contener un subconjunto o el conjunto completo de nodos. 𝐺𝐴=(𝑉,𝐴,𝐶) {𝐺𝛼}𝛼=1 𝑏={(𝑉𝛼,𝐴𝛼)}𝛼=1 𝑏,∀ 𝛼,𝛽 𝜖 𝐶 𝑉𝛼=𝑉𝛽 𝐴𝛼𝜖𝑉𝛼𝑥𝑉𝛽𝑥𝐶 17 17 Desarrollo de una metodología para el diseño de una red de carriles para bicicletas considerando el nivel de satisfacción de los usuarios. Ilustración 16. Arcos coloreados. Fuente: Hammoud y Kramer (2020). El gráfico está alineado con los nodos, es decir, el mismo nodo puede pertenecer a diferentes capas simultáneamente. En dichos gráficos, la atención se centra en la dinámica de la red y las interacciones entre sus componentes. Resulta muy eficiente cuando se estudian diferentes aspectos del mismo sistema. Dos nodos solo pueden conectarse usando una arista de cada color. En caso de que se deba establecer el mismo tipo de conexión entre dos nodos, este marco se puede combinar con otro para lograr este propósito. 19 4 DESARROLLO En la primera parte de este capítulo se realiza un análisis del problema de flujo sobre un grafo sin limitaciones de capacidad, definiendo las variables que conforman al modelo. Posteriormente, se explica su implementación para el diseño de la red de carriles para bicicletas. 4.1 ANÁLISIS DEL PROBLEMA DE DISEÑO DE LA RED DE CARRILES PARA BICICLETAS. El problema general de flujo a coste mínimo sobre un grafo sin limitación de capacidad [9] es un problema de la teoría de grafos que considera diferentes productos (demanda de flujo) que deben ser transportados entre un conjunto de nodos del grafo que actúan como orígenes y destinos de los envíos. Cada envío se origina en un nodo y su destino es otro nodo del grafo. Estos dos nodos definen un par origen-destino. Los principales conjuntos necesarios para modelar el problema son: (i) un conjunto de nodos N y (ii) un conjunto de arcos A (direccionados o no). El modelo busca la inclusión de los arcos a la red en función de los costes de construcción de estos. A continuación, se describe los inputs del modelo: i. P representa el presupuesto para la construcción de la red. ii. 𝐶𝑎 representa el coste de construcción de un arco 𝑎 ∈𝐴. iii. 𝜃𝑖𝑤 representa el termino de la derecha de la restricción de equilibrio de flujo, es igual 𝐷𝑤 si 𝑖 es el origen del par OD 𝑤, es igual a −𝐷𝑤 si 𝑖 es el destino del par 𝑤, e igual a 0 en caso contrario. 𝐷𝑤 representa el elemento de la matriz OD de demanda correspondiente al par 𝑤−é𝑠𝑖𝑚𝑜, cuyo origen es “El viento puede soplar fuerte, pero la montaña no lo reverencia.” - Mulán - DESARROLLO 20 20 𝑜𝑤 y cuyo destino es 𝑑𝑤. El conjunto completo de pares OD se representará mediante la letra 𝑊. iv. 𝑦𝑎 es una variable binaria que se utiliza para representar la construcción (𝑦𝑎=1) o no del arco (𝑦𝑎= 0). v. 𝑥𝑎𝑤 es una variable real no negativa que representa el flujo del par OD 𝑤∈𝑊 sobre el arco 𝑎 ∈𝐴. vi. Una matriz cuadrada D que representa la demanda de viajes en los nodos del conjunto N en un horizonte temporal dado. Cada elemento de la matriz, 𝐷𝑖𝑗, representa el número de desplazamientos desde el nodo 𝑖 al nodo 𝑗. vii. 𝑢𝑎≥0 es el coste de desplazamiento del usuario al usar el arco 𝑎. El modelo matemático general que permite diseñar la red corresponde a la siguiente formulación: 𝑚𝑖𝑛∑𝑐𝑎∗ 𝑦𝑎 𝑎∈𝐴𝑇+𝛼∑∑𝑢𝑎∗𝑥𝑎𝑤 𝑎∈𝐴𝑤∈𝑊 (1) 𝑠.𝑎. ∑𝑐𝑎∗𝑦𝑎≤𝑃 𝑎∈𝐴 (2) ∑𝑥𝑎𝑤 𝑎∈𝐴𝑖+−∑𝑥𝑎𝑤 𝑎∈𝐴𝑖−=𝜃𝑖𝑤 ; ∀ 𝑖 ∈𝑁,𝑤 ∈𝑊, (3) 𝑥𝑎𝑤≤ 𝐷𝑤∗𝑦𝑎 ; ∀ 𝑎 ∈ 𝐴 ,𝑤∈𝑊, (4) 𝑦𝑎∈ {0,1}; ∀ 𝑎 ∈ 𝐴, (5) 𝑥𝑎𝑤≥0 ; ∀ 𝑎 ∈𝐴,𝑤∈𝑊 (6) La función objetivo (1) minimiza el coste total de construcción de la red y el coste de viaje de los usuarios, ponderando ambos términos adecuadamente mediante el peso 𝛼. La restricción (2) impone el límite presupuestario para la construcción de la red. El conjunto de restricciones (3) impone el equilibrio de flujo en cada nodo del grafo, para cada par OD. El conjunto de restricciones (4) establece que el flujo sobre cada arco de la red está sujeto a la existencia de la infraestructura adecuada sobre ese arco, es decir, si existe flujo sobre un arco, ese arco debe ser construido. Finalmente, las restricciones (5) y (6) establecen los dominios de las variables de decisión. En el contexto del diseño de redes, el modelo descrito anteriormente busca el diseño de una red que por un lado minimice el coste de viaje en los arcos y por otro que el coste de construcción sea el menor posible. En lo que sigue se amplía el modelo anterior considerando la posibilidad de construir diferentes tipos de carriles 21 21 Desarrollo de una metodología para el diseño de una red de carriles para bicicletas considerando el nivel de satisfacción de los usuarios. bici. Para cada arco del grafo se considerarán diferentes posibilidades o tecnologías de construcción, que hacen referencia a aspectos como la calidad del firme, la anchura del carril, la señalización y protecciones laterales. Se planteará pues el diseño de una red de carriles bici en la que diferentes tramos pueden utilizar una tecnología de construcción diferente, si es conveniente y se valorará también la repercusión que los usuarios pueden experimentar al cambiar entre tecnologías de construcción. Así, si un carril que transcurre por una avenida es cómodo y ancho, está protegido, la rodadura es suave como consecuencia del material usado en el firme del carril y al finalizar la calle el carril cambia a un carril estrecho o de peor firme, o con menos protecciones, se supondrá que el usuario experimenta una pérdida de confort que deberá ser tenida en cuenta. El objetivo del modelo que se plantea pretende: 1. Maximizar la satisfacción del usuario, es decir, minimizar del coste del viaje del usuario, que puede ser expresado como el tiempo de viaje necesario para realizar el trayecto. Este tiempo de viaje estará relacionado con la propia construcción del carril bici. Carriles con mejor firme, más amplios y adecuadamente protegidos reducirán el coste de usuario, aunque resultarán más caros. 2. Deberá seleccionar la tecnología de construcción que se usará en las diferentes calles, si es que se decide usar esa calle para construir un carril bici. El modelo expuesto con anterioridad simplemente incorpora la construcción o no de un arco de la red. En lo que sigue, no sólo se considerará si construir o no un carril bici sobre cada uno de los arcos del grafo, sino que también se seleccionará la tecnología de construcción de entre un conjunto de posibilidades disponibles. En la experimentación, a fin de simplificar, se considerarán dos tipos de carriles bici, un tipo básico y otro de mayor coste que permita un menor tiempo de viaje y una mayor seguridad en los desplazamientos. Aunque se consideren dos tipos, el modelo propuesto será general y extensible a un mayor número de posibilidades de construcción. 3. Cada arco tendrá por tanto un coste de construcción asociado a cada uno de los tipos de carril bici que puedan ser construidos sobre él, además, cada tecnología de construcción implicará un coste o tiempo de viaje diferente para los usuarios. Si se opta por un tipo de carril bici más caro (más ancho, con mejor firme y protecciones), la velocidad de desplazamiento podrá ser en promedio mayor y por lo tanto, desde el punto de vista del usuario, su coste (tiempo de viaje) será menor. Es decir, mayores costes de construcción implicarán menores costes de usuario. Para ampliar el modelo anterior de forma que se consideren diferentes posibilidades de construcción del carril bici sobre los arcos del grafo, se procederá de la siguiente manera: • Se considerará un grafo dirigido 𝐺=(𝑉,𝐴󰆹), que representa la red base disponible para construir la red de carriles bici. Cada arco 𝑎∈ 𝐴󰆹 es vendrá caracterizado por su longitud 𝑙𝑎. DESARROLLO 28 28 𝑀𝑖𝑛∑( ∑ 𝑢𝑎 𝑥𝑎𝑤 𝑎∈𝐴∖𝐴𝐶 + 𝛽 ∑𝑥𝑎𝑤 𝑎∈𝐴𝐶𝐵 ) 𝑤∈𝑊 (1) 𝑠.𝑎. ∑𝑐𝑎 𝑦𝑎≤𝑃 𝑎∈𝐴∖𝐴𝐶 (2) ∑𝑥𝑎𝑤 𝑎∈𝐴𝑖+=𝐷𝑤 ; ∀ 𝑖=𝑜𝑤,𝑤 ∈𝑊, (3) ∑𝑥𝑎𝑤 𝑎∈𝐴𝑖−=−𝐷𝑤 ; ∀ 𝑖=𝑑𝑤,𝑤 ∈𝑊, (4) ∑𝑥𝑎𝑤 𝑎∈𝐴𝑖+−∑𝑥𝑎𝑤 𝑎∈𝐴𝑖−=0 ∀ 𝑖 ∈𝑉{𝑜𝑤,𝑑𝑤},𝑤 ∈𝑊, (5) 𝑥𝑎𝑤≤ 𝐷𝑤∗𝑦𝑎 ∀ 𝑎 ∈ 𝐴\𝐴𝐶 ,𝑤∈𝑊, (6) ∑𝑦𝑠 =1 𝑠𝜖𝑀(𝑎) ∀ 𝑎∈ 𝐴\𝐴𝐶, (7) 𝑦𝑎∈ {0,1} ∀ 𝑎 ∈ 𝐴\𝐴𝐶, (8) 𝑥𝑎𝑤≥0 ∀ 𝑎 ∈𝐴,𝑤∈𝑊 (9) .2.2.3 Fase 3: Escritura de la metodología y red multicapa: En este apartado constará de dos partes. En la primera se explica el código utilizado para la metodología y en la segunda parte se explica la creación de la estructura multicapa. .2.2.3.1 Escritura de la metodología: 1. Importar la librería y creación del modelo en Gurobi: Para importar toda la librería de Gurobi se debe escribir la siguiente línea de código: 1. from gurobipy import * Para crear el modelo, se utiliza una función constructora (Model) tal y como se muestra a continuación: 29 29 Desarrollo de una metodología para el diseño de una red de carriles para bicicletas considerando el nivel de satisfacción de los usuarios. 2. m = Model("Network_City") El argumento de la función es el nombre del modelo en el que se está trabajando (Network_City). 2. Introducir las variables de decisión: Las variables de decisión en el modelo son: i. 𝑦𝑎 es una variable binaria que representa la construcción o no de la infraestructura del arco 𝑎∈ 𝐴\𝐴𝐶. ii. 𝑥𝑎𝑤 es una variable real no negativa que representa el flujo del par OD 𝑤∈𝑊 sobre el arco 𝑎 ∈ 𝐴. En el modelo matemático, las variables de decisión se estructuran de la siguiente forma: 𝑦𝑎∈ {0,1}; ∀ 𝑎 ∈ 𝐴\𝐴𝐶, 𝑥𝑎𝑤≥0 ; ∀ 𝑎 ∈𝐴,𝑤∈𝑊 Para definir las variables de decisión del modelo en lenguaje de programación se utiliza la función addVars, tal y como se muestra a continuación: 3. x = m.addVars(A,W, vtype=GRB.INTEGER, name='x') 4. y = m.addVars(A1, vtype=GRB.BINARY, name='y') Mediante la función addVars se agregan las variables de decisión al modelo, la función recibe como argumento los conjuntos a los que pertenecen dichas variables, por otro lado, también se debe especificar el tipo de variable (binaria, continua, etc.) y finalmente el nombre de dicha variable. 3. Creación de la función objetivo: Para definir la función objetivo se emplea el uso de la función setObjective, para los operadores de sumatorias se emplea el uso de la función quicksum. 𝑀𝑖𝑛∑( ∑ 𝑐𝑎∗𝑥𝑎𝑘 𝑎∈𝐴∖𝐴𝐶 + 𝛽 ∑ 𝑥𝑎𝑘 𝑎∈𝐴𝐶𝐵 ) 𝑤∈𝑊 A continuación, se muestra la forma que toma la función objetivo en lenguaje de programación: DESARROLLO 30 30 1. m.setObjective((quicksum((U[i,j]*x[i,j,t,v] for i,j in A1 for t,v in W)))+(quicksum(B[i,j]*x[i,j,t,v] for i,j in arcCB for t,v in W))) 4. Creación de las restricciones: Restricciones de balance de flujo: ∑𝑥𝑎𝑤 𝑎∈𝐴𝑖+=𝐷𝑤 ; 𝑖=𝑜𝑤,𝑤 ∈𝑊, ∑𝑥𝑎𝑤 𝑎∈𝐴𝑖−=−𝐷𝑤 ; 𝑖=𝑑𝑤,𝑤 ∈𝑊, ∑𝑥𝑎𝑤 𝑎∈𝐴𝑖+−∑𝑥𝑎𝑤 𝑎∈𝐴𝑖−=0 ; ∀ 𝑖 ∈𝑉\{𝑜𝑤,𝑑𝑤},𝑤 ∈𝑊, Para crear las restricciones, se debe emplear el uso de la función addConstrs, las tres líneas de código que se muestra a continuación representan la restricción de balance de flujo a través de los arcos de la red: 1. m.addConstrs(((quicksum(x[i,j,t,v] for i,j in arcos_O[t,v]))==D[t,v] for t,v in W), name='Flujo_Norigen') 2. m.addConstrs(((quicksum(x[i,j,t,v] for i,j in arcos_D[t,v]))==D[t,v] for t,v in W), name='Flujo_Ndestino') 3. m.addConstrs((-quicksum(x[n,j,t,v] for i,j in Aii[t,v] if (n==i)) + quicksum(x[i,n,t,v] for i,j in Aii[t,v] if (n==j))==0 for n in nodosf for t,v in W), name='Flujo_Nintermedios') A continuación, se muestra la restricción, que representa la limitación de presupuesto: ∑𝑐𝑎 𝑦𝑎≤𝑃 𝑎∈𝐴∖𝐴𝐶 La forma que toma la restricción en lenguaje de programación se detalla a continuación; 1. m.addConstr(quicksum((y[i,j]*C[i,j] for i,j in arcI ) <= P), name='Limitación_Presupuesto_Contrucción') Seguidamente, se muestra la restricción que especifica que se debe asignar un solo tipo de infraestructura a cada arco: ∑𝑦𝑠 =1 𝑠𝜖𝑀(𝑎) ; ∀ 𝑎∈ 𝐴\𝐴𝐶, 31 31 Desarrollo de una metodología para el diseño de una red de carriles para bicicletas considerando el nivel de satisfacción de los usuarios. A continuación, se muestra la forma que toma la restricción en lenguaje de programación: 1. m.addConstrs((quicksum(y[i,j] for i,j in M[l,m] ) == 1 for l,m in arc), name='Limitación_Tecnologíaporarcos') Finalmente, se muestra la restricción que establece que el flujo sobre un arco dado está sujeto a la existencia de la infraestructura en ese arco: 𝑥𝑎𝑤 ≤ 𝐷𝑤∗𝑦𝑎 ; ∀ 𝑎 ∈ 𝐴\𝐴𝐶 ,𝑤∈𝑊, A continuación, se muestra la forma que toma la restricción en lenguaje de programación: 1. m.addConstrs((x[i,j,t,v]<=y[i,j]*D[t,v] for i,j in A1 for t,v in W), name='Existencia Infraestructura_Sujeta a flujo') Para buscar la solución óptima se debe emplear el uso de la función optimize, la función display para que imprima los resultados y la función getAttr muestra los valores que toma las variables de decisión del modelo. 2. m.optimize() 3. m.display() 4. sol = m.getAttr('x', y) La metodología recibe los siguientes parámetros de entrada: 1. Una red base, es decir, un grafo dirigido con sus respectivos conjuntos de nodos y arcos, siendo que la estructura del conjunto de los arcos debe tener la forma de un diccionario mientras que la estructura de los nodos debe tener la forma de una lista. 2. Una matriz 𝐷 que representa la demanda de viajes entre nodos del grafo en un horizonte temporal dado. Debe tener la forma de un diccionario, tiene como “clave” el par OD y como “valor” la demanda de ese viaje OD. 3. El conjunto de los pares origen-destino del horizonte temporal 𝑊, es decir, de los escenarios que se van a estudiar. Debe tener la forma de una lista. 4. El importe del presupuesto 𝑃 para la construcción de la red. 5. Un conjunto 𝐾 de diferentes infraestructuras para construir la red de bicicletas. Debe tener la forma de una lista. 6. Las características propias de los arcos, es decir, el coste de construcción, el coste de usuario y penalización diferenciado por infraestructuras. Todos deben tener la forma de un diccionario, es decir, como “clave” el arco y como “valor” el valor respectivo de cada característica. DESARROLLO 32 32 Debido a que el coste de construcción va en función de la longitud del arco, al programa se le indicó los precios por metros, por lo que para calcular el coste de todos los arcos debe multiplicar dicho coste por la longitud del arco tal y como se muestra a continuación: 1. #Coste de contruccion 2. 3. CB=arc.copy() 4. for i in CB: 5. CB[i]=0 # Red Base no consume coste de construcción 6. #Coste de construcción K1 7. CT1=arcT1.copy() 8. for i in CT1: 9. CT1[i]=c_T1*long_dT1[i[0],i[1]] #Coste por longitude K=1 10. #Coste de construcción K2 11. CT2=arcT2.copy() 12. for i in CT2: 13. CT2[i]=c_T2*long_dT2[i[0],i[1]] #Coste por longitud K=2 14. ##### Coste de construccion ######## 15. C={} # coste total de construcción 16. C.update(CB) 17. C.update(CT1) 18. C.update(CT2) .2.2.3.2 Red multicapa: A partir del conjunto de nodos y arcos de la red base se construye la red multicapa. Para conformar el conjunto de nodos de la red multicapa se tomó el conjunto de nodos de la red base y se “copió” tantas veces como tecnologías de construcción se tuviera. Por ejemplo: si se tiene una red base con un conjunto de nodos 𝑉=(1,2,3) y un conjunto de tecnología 𝐾=(1,2), se crea para cada tecnología un conjunto de nodos 𝑉1 y 𝑉2. Siendo 𝑉1 el conjunto de nodos que pertenece a la tecnología 1 o lo que es lo mismo a la capa 1 y 𝑉2 el conjunto de nodos que pertenece a la capa o tecnología 2 , estos nuevos conjuntos tienen la misma forma y tamaño que 𝑉. Finalmente, el conjunto de nodos de la red multicapa queda de la siguiente forma: 𝑉=(𝑉∪ 𝑉1∪𝑉2). Ilustración 20 Estructura multicapa (nodos) 33 33 Desarrollo de una metodología para el diseño de una red de carriles para bicicletas considerando el nivel de satisfacción de los usuarios. Para poder diferenciar el nodo 1 de la red base respecto al nodo 1 de la capa 1 y al nodo 1 de la capa 2. Se llevó a cabo un tratamiento para renombrar los nodos de 𝑉1 y 𝑉2 respectivamente. El tratamiento consistió en que los nodos de los conjuntos nuevos debían continuar la numeración de los nodos de la red base. De esta forma si el último nodo de la red se denomina “m” entonces el primer nodo de la red de la capa 1 se debía renombrar por m+1. El primer nodo de la capa 2 se debía renombrar por 2m+1. Ilustración 21. Estructura multicapa (arcos capas). De esta forma ya queda definido el conjunto de nodos de la red multicapa 𝑉=(1,2,3,4,5,6,7,8,9). Por otro lado, también se define el conjunto de arcos pertenecientes a cada tecnología, por ejemplo, para la tecnología 1 el conjunto de arcos queda de la siguiente forma 𝐴1={(4,5),(5,6)} y para la tecnología 2 el conjunto de arcos queda de la siguiente forma 𝐴2={(7,8),(8,9)}. A continuación, se muestra las líneas de código utilizada para llevar a cabo lo descrito anteriormente: 1. #### DEFINIMOS NODOS ##### 2. nodosT11=[] 3. nodosT11.extend(nodos) 4. nodosT22=[] 5. nodosT22.extend(nodos) ### REPETIR TANTAS TECNOLOGÍAS SE TENGA 6. #### Para poder diferenciar los nodos de las diferentes tecnologias le damos continuidad 7. # a la numeración. 8. nodosT1=list(range(len(nodos)+1,(2*(len(nodos))+1))) 9. 10. nodosf11= nodos+ nodosT1 # Replicar en caso de tener más tecnologías 11. nodosT2=list(range(len(nodosf11)+1,(3*(len(nodos))+1))) Tal y como se ha comentado en apartados anteriores, en la red multicapa existe un conjunto de arcos denominados arcos de cambio de tecnología. Estos arcos unen entre si a los nodos de la capa base y los nodos de las diferentes capas, formando un conjunto representado como 𝐴𝐶, o arcos de cambio. Es importante señalar que estos arcos unen nodos consecutivos en 𝑁(𝑖), es decir, si i está en la capa 𝑘 e 𝑖’ en la capa 𝑘+1, existen dos arcos de cambio, uniendo 𝑖 e 𝑖’ como arco de subida e 𝑖’ con 𝑖 como arco de bajada o de disminución de la DESARROLLO 34 34 calidad de construcción. Ilustración 22 Estructura multicapa (arcos de cambio). De esta forma queda definido el conjunto de arcos de cambio de la red multicapa. Los arcos de subida, es decir los que cambian a una tecnología k+1 se definen dentro del conjunto 𝐴𝐶𝐴 y por el contrario los arcos que cambian a una tecnología k-1 se definen dentro del conjunto 𝐴𝐶𝐵. Finalmente, el conjunto que contiene todos los arcos de cambio se define como 𝐴𝐶. A continuación, se muestra las líneas de código utilizada para llevar a cabo lo descrito anteriormente: 1. ### Aqui se crea los arcos de cambio #### 2. 3. ### UNIMOS LOS NODOS DEL GRAFO BASE CON LOS NODOS DE K1 4. arcosB_T1={} 5. arcosT1_B={} 6. for i in enumerate(nodos): 7. for j in enumerate(nodosT1): 8. if i[0]==j[0]: 9. arcosB_T1[i[1],j[1]] = {} 10. arcosT1_B[j[1],i[1]] = {} 11. #print(arcosB_T1) 12. 13. ### UNIMOS LOS NODOS DEL GRAFO BASE CON LOS NODOS DE K2 14. arcosB_T2={} 15. arcosT2_B={} 16. for i in enumerate(nodos): 17. for j in enumerate(nodosT2): 18. if i[0]==j[0]: 19. arcosB_T2[i[1], j[1]] = {} 20. arcosT2_B[j[1], i[1]] = {} 21. #print(arcosB_T2) 22. 23. ### UNIMOS LOS NODOS DEL GRAFO K1 CON LOS NODOS DE K2 24. arcosT1_T2={} 25. arcosT2_T1={} 26. for i in enumerate(nodosT1): 27. for j in enumerate(nodosT2): 35 35 Desarrollo de una metodología para el diseño de una red de carriles para bicicletas considerando el nivel de satisfacción de los usuarios. 28. if i[0]==j[0]: 29. arcosT1_T2[i[1], j[1]] = {} 30. arcosT2_T1[j[1], i[1]] = {} 31. #print(arcosT1_T2) 32. 33. ### CONJUNTO DE ARCOS QUE CONECTA A LAS TECNOLOGÍAS 34. 35. arcC={} 36. arcC.update(arcosB_T1) 37. arcC.update(arcosT1_T2) 38. arcC.update(arcosB_T2) 39. arcC.update(arcosT1_B) 40. arcC.update(arcosT2_T1) 41. arcC.update(arcosT2_B) 42. 43. arcCB={} #PENALIZADOS 44. arcC.update(arcosT1_B) 45. arcC.update(arcosT2_T1) 46. arcC.update(arcosT2_B) 47. Por otro lado, una vez que se resuelve el modelo, los resultados deben tratarse para obtener una representación gráfica de la red tal que se pueda observar la red base con los caminos señalados por el tipo de infraestructura a construir. Para realizar esta operación se emplea el uso de las siguientes líneas de códigos: 1. ####SE NECESITA SABER CUALES SON LOS ARCOS QUE PERTENECEN A LA SOLUCIÓN 2. arcos_activos1=[] 3. for i,j in arcos_activos: 4. for l in arcos_sol1: 5. if ((i,j)==(l[0],l[1])): 6. arcos_activos1.append([i,j]) 7. 8. ########## GRAFICA DE LA RED ############# 9. ########################################## 10. 11. print('>>PREPARACIÓN DE DATOS PARA GRAFICAR') 12. #################################### 13. # diccionario nodos 14. n_grafo = {} 15. for i in nodos: 16. n_grafo = nodos.copy() 17. 18. e = {} 19. for i in range(1, len(n_grafo)+1): 20. e[i] = str(i) 21. 22. arc_grafo={} 23. for i in arcos_activos1: 24. for j in M: 25. , if (i[0],i[1]) == M[j][0]: 26. arc_grafo.setdefault(j,1) 27. if (i[0],i[1]) == M[j][1]: 28. arc_grafo.setdefault(j,2) 29. if (i[0], i[1]) == M[j][2]: 30. arc_grafo.setdefault(j, 0) 31. 32. ######## COORDENADAS DE LOS NODOS ####### 33. 34. for i in nodosXY: 35. nodosXY[i]=(D_CoordenadasX[i-1],D_CoordenadasY[i-1]) 36. ########## REALIZACIÓN DE LA GRAFICA #### 37. 38. print('>>INICIO DE GRAFICA') 39. 40. G = nx.Graph() 41. nx.draw_networkx_nodes(G,nodosXY, n_grafo,node_size=1,node_color="black") ###RECIBE DICCIONARIO NODOXY Y LA LISTA DE NODOS 42. nx.draw_networkx_labels(G, pos=nodosXY, labels=e, font_color="black",font_size=7) 43. nx.draw_networkx_edges(G, nodosXY, arc, edge_color="silver",arrowstyle="-") DESARROLLO 36 36 44. #print(nodosXY, '<-') 45. k=0 46. 47. for i in arc_grafo: 48. 49. if arc_grafo[i]==1: 50. arc_grafo_list=list(arc_grafo.keys()) 51. nx.draw_networkx_edges(G,nodosXY,[arc_grafo_list[k]],edge_color="green",arrowstyle="- |>",arrows=False) 52. 53. if arc_grafo[i]==2: 54. 55. arc_grafo_list = list(arc_grafo.keys()) 56. nx.draw_networkx_edges(G, nodosXY,[arc_grafo_list[k]], edge_color="red",arrowstyle="-|>",arrows=False) 57. 58. if arc_grafo[i]==0: 59. 60. arc_grafo_list = list(arc_grafo.keys()) 61. nx.draw_networkx_edges(G, nodosXY,[arc_grafo_list[k]], edge_color="black",arrowstyle="-|>",arrows=False) 62. 63. k=k+1 64. if DIBUJARED == 1: 65. plt.show() En primer lugar, se determina cuáles son los arcos que pertenecen a la solución, a continuación, para realizar la representación gráfica de la red. Para ello se define el grafo empleando la función Graph, a continuación, con la función draw_networkx_nodes el programa grafica los nodos. Esta función recibe como argumentos: el grafo definido y las coordenadas de los nodos. La función draw_networkx_labels asigna la enumeración a los nodos, para ello recibe el grafo definido y un diccionario que contine como “clave” a los nodos del grafo y como “valor” la etiqueta o numeración correspondiente del nodo. Para graficar los arcos se emplea la función draw_networkx_edge que recibe como argumentos el grafo definido y el conjunto total de arcos, en esta función se especifica que todos estos arcos deben pintarse en la solución gráfica de color negro. Una vez que el programa tiene generado el grafo original, mediante la implementación de un bucle-for repasa el listado de arcos que pertenecen a la solución y le cambia el color si dicho arco pertenece al conjunto solución. Para diferenciar los arcos por el tipo de infraestructura, se le asigna un color u otro dependiendo de la infraestructura de dicho arco. Finalmente, se emplearon las siguientes líneas de códigos para imprimir los resultados: 1. ######### IMPRIME RESULTADOS ############### 2. arcos_activos2=[] 3. for i,j in arcos_activos1: 4. if (i<500 ): 5. if (j<600): 6. arcos_activos2.append([i,j]) 7. 8. Cont=0 37 37 Desarrollo de una metodología para el diseño de una red de carriles para bicicletas considerando el nivel de satisfacción de los usuarios. 9. for i in arcos_activos2: 10. Cont=C[tuple(i)]+Cont 11. print('El presupuesto disponible ---------------------------->',P,'u.m') 12. print('Coste total de construcción de la red fue ------------>', Cont , 'u.m.') 13. #print("Coste total de viaje del usuario") 14. 15. Cont1=0 16. for i in arcos_activos2: 17. Cont1=U[tuple(i)]+Cont1 18. #print("U" + str(i) + " =" + str(U[tuple(i)])) 19. print('Coste total de viaje del usuario:--------------------->', Cont1 , 'u.m.') 20. 21. #print('Utilizacion del presupuesto') 22. Cont6=(Cont/P)*100 23. print('Se ha utilizado--------->--------------------------', Cont6, '% del presupuesto') 24. print('La red cuenta con', Cont10 ,'carriles con infraestrutura 0') 25. print('La red cuenta con', Cont4 ,'carriles con infraestrutura 1') 26. print('La red cuenta con', Cont5 ,'carriles con infraestrutura 2') 27. Mediante el código anterior se puede conocer el coste total de construcción de la red, el coste total de los viajes de usuario, el número de carriles construidos y la diferenciación por infraestructura, finalmente se imprime el porcentaje de presupuesto utilizado. De esta forma, se concluye la fase de desarrollo de la metodología. En los próximos apartados se explica las pruebas llevadas a cabo. 4.3 FUNCIONALIDAD DE LA METODOLOGÍA Para testar la funcionalidad de la metodología se realizaron dos pruebas: Caso 1 y Caso 2, en ambos casos se emplearon redes diferentes. Caso 1: Red 6 nodos: Con esta red, se llevaron a cabo 3 pruebas diferentes variando el presupuesto: A continuación, se indican los parámetros de entrada para el programa: Como se ha mencionado anteriormente, la metodología se alimenta de una red base, para ello se definió una red G que contiene un conjunto de 6 nodos y un conjunto de 7 arcos, dicha red tiene la siguiente forma: DESARROLLO 44 44 Tabla 7 Coste del usuario (en unidades de tiempo) para realizar el viaje 𝑊=(1,5) COSTE DE USUARIO U[2, 5] 50 U[7, 8] 20 TOTAL 70 2. Viaje 𝑊=(1,3) con una demanda 𝐷1,3=700: Tabla 8 Solución para el viaje 𝑊=(1,3) VARIABLE FLUJO VALOR DEL FLUJO TIPO DE ARCO x[503,1,1,3] 700 OD x[1,7,1,3] 700 Transferencia x[7,8,1,3] 700 Infraestructura 1 x[8,9,1,3] 700 Infraestructura 1 x[9,3,1,3] 700 Transferencia x[3,603,1,3] 700 OD A continuación, se muestra el recorrido del flujo a través de la estructura multicapa: Ilustración 28 Solución gráfica del viaje 𝑊=(1,3) en la estructura multicapa 45 45 Desarrollo de una metodología para el diseño de una red de carriles para bicicletas considerando el nivel de satisfacción de los usuarios. De la ilustración anterior, se observa que para el viaje 𝑊=(1,3) se utiliza dos arcos con la infraestructura 1. El arco (7,8) que pertenece a la infraestructura 1 es equivalente arco (1,2) en la red base, de igual forma ocurre con el arco (8,9) que es equivalente al arco (2,3) en la red base. La solución final para este viaje se representaría de la siguiente forma: Ilustración 29 Solución grafo final para el viaje 𝑊=(1,3) El coste del usuario para realizar este viaje se muestra a continuación: Tabla 9 Coste del usuario (en unidades de tiempo) para realizar el viaje 𝑊=(1,3) COSTE DE USUARIO U[8, 9] 20 U[7, 8] 20 TOTAL 40 3. Viaje 𝑊=(2,6) con una demanda 𝐷2,6=100: Tabla 10 Solución para el viaje W=(2,6) VARIABLE FLUJO VALOR DEL FLUJO TIPO DE ARCO x[508,14,2,6] 100 OD x[14,8,2,6] 100 Transferencia x[8,9,2,6] 100 Infraestructura 1 x[9,3,2,6] 100 Transferencia x[3,6,2,6] 100 Red base x[6,12,2,6] 100 Transferencia x[12,18,2,6] 100 Transferencia x[18,608,2,6] 100 OD DESARROLLO 46 46 A continuación, se muestra el recorrido del flujo a través de la estructura multicapa: Ilustración 30 Solución grafo final para el viaje 𝑊=(2,6) De la ilustración anterior, se observa que para el viaje 𝑊=(2,6) se utiliza dos arcos con la infraestructura 1 y uno con la infraestructura cero. El arco (8,9) que pertenece a la infraestructura 1 es equivalente arco (2,3) en la red base. La solución final para este viaje se representaría de la siguiente forma: Ilustración 31 Solución grafo final para el viaje 𝑊=(2,6) El coste del usuario para realizar este viaje se muestra a continuación: 47 47 Desarrollo de una metodología para el diseño de una red de carriles para bicicletas considerando el nivel de satisfacción de los usuarios. Tabla 11 Coste del usuario (en unidades de tiempo) para realizar el viaje 𝑊=(1,3) COSTE DE USUARIO U[3,6] 50 U[8, 9] 20 TOTAL 70 4. Viaje 𝑊=(4,6) con una demanda 𝐷4,6=400: Tabla 12 Solución para el viaje 𝑊=(4,6) VARIABLE FLUJO VALOR DEL FLUJO TIPO DE ARCO x[509,4,4,6] -400 OD x[4,5,4,6] +400 Red Base x[5,6,4,6] -400 Red Base x[6,609,4,6] +400 OD A continuación, se muestra el recorrido del flujo a través de la estructura multicapa: Ilustración 32 Solución grafo final para el viaje 𝑊=(4,6) De la ilustración anterior, se observa que para el viaje 𝑊=(4,6) se utiliza dos arcos con la infraestructura 0. DESARROLLO 48 48 La solución final para este viaje se representaría de la siguiente forma: Ilustración 33 Solución grafo final para el viaje 𝑊=(4,6) El coste del usuario para realizar este viaje se muestra a continuación: Tabla 13 Coste del usuario (en unidades de tiempo) para realizar el viaje 𝑊=(1,3) COSTE DE USUARIO U[4,5] 50 U[5,6] 50 TOTAL 100 Con lo expuesto anteriormente, se demuestra el cumplimiento de la demanda para cada viaje del conjunto 𝑊. En adelante para cada prueba sólo se indicará la tabla que contiene los arcos pertenecientes a la solución y su representación gráfica. 3.3.2 PRUEBA 2: Presupuesto P=1.000.000 u.m. Para un presupuesto de red de 𝑃=1.000.000 u.m., se genera una red para los viajes 𝑊= {(1,5),(1,3),(2,6),(4,6)} con las siguientes características: • La red cuenta con 2 carriles con infraestructura 0. Estos carriles no consumen presupuesto de construcción, pero si incrementan el coste del usuario. En la solución gráfica, estos carriles se representan con el color negro. • La red cuenta con 3 carriles con infraestructura 1. Estos carriles consumen presupuesto de construcción y son la mejor alternativa desde el punto de vista del usuario. En la solución gráfica estos carriles se representan con el color verde. • El coste de construcción fue de 900.000 u.m. lo que representa un 90% del presupuesto total. 49 49 Desarrollo de una metodología para el diseño de una red de carriles para bicicletas considerando el nivel de satisfacción de los usuarios. • El coste total de para los usuarios de esta red fue: 160 unidades de tiempo. A continuación, se muestra el resultado gráfico de la prueba 1: Ilustración 34 Solución Prueba 2: Presupuesto 𝑃=1.000.000 u.m. De la ilustración anterior, se observa que los arcos (1,2),(2,3) y (5,6) se construirán con la infraestructura 1 y los arcos (4,5) y (2,5) con la infraestructura 0. Tabla 14 Solución Prueba 2: Presupuesto 𝑃=1.000.000 u.m. ARCOS SOLUCIÓN INFRAESTRUCTURA y(4, 5) 0 y(2, 5) 0 y(1, 2) 1 y(2, 3) 1 y(5, 6) 1 3.3.3 PRUEBA 3: Presupuesto P=3.000.000 u.m. Para un presupuesto de red de 𝑃=3.000.000 u.m., se genera una red para los viajes 𝑊= {(1,5),(1,3),(2,6),(4,6)} con las siguientes características: • La red cuenta con 2 carriles con infraestructura 1. • La red cuenta con 3 carriles con infraestructura 2. • El coste de construcción fue de 2.850.000 u.m. lo que representa un 95% del presupuesto total. • El coste total de para los usuarios de esta red fue: 55 unidades de tiempo. A continuación, se muestra el resultado gráfico de la prueba 1: DESARROLLO 50 50 Ilustración 35 Solución Prueba 3: Presupuesto 𝑃=3.000.000 u.m. De la ilustración anterior, se observa que los arcos (1,2),(2,3) y (5,6) se construirán con la infraestructura 2 y los arcos (4,5) y (2,5) con la infraestructura 1. Tabla 15 Solución Prueba 3: Presupuesto 𝑃=3.000.000 u.m. ARCOS SOLUCIÓN INFRAESTRUCTURA y(4, 5) 1 y(2, 5) 1 y(1, 2) 2 y(2, 3) 2 y(5, 6) 2 Caso 2: red 9 nodos: Con esta red, se llevaron a cabo 2 pruebas diferentes variando el presupuesto y esta vez se emplearon arcos de diferentes longitudes: Los parámetros de entrada se describen a continuación: Para este caso, la red definida 𝐻  contiene un conjunto de 9 nodos y un conjunto de 12 arcos, dicha red tiene la siguiente forma: 51 51 Desarrollo de una metodología para el diseño de una red de carriles para bicicletas considerando el nivel de satisfacción de los usuarios. Ilustración 36 Red H. De la red 𝐻  se obtienen los siguientes conjuntos: un conjunto de nodos 𝑉=(1,2,3,4,5,6,7,8,9) y un conjunto de arcos 𝐴󰆹={(1,2),(2,3),(4,5),(5,6),(1,4),(2,5),(3,6),(4,7),(5,8),(6,9),(7,8),(8,9)}. El conjunto D que representa la demanda de viaje por los arcos, para este problema los valores de la demanda son los siguientes: Tabla 16 Matriz de demanda D de viajes por los arcos de la red 𝐻 . NODOS 1 2 3 4 5 6 7 8 9 1 0 500 300 100 700 100 100 700 200 2 600 0 200 500 200 800 100 600 300 3 400 600 0 100 100 200 100 400 800 4 300 500 200 0 200 100 200 500 500 5 200 100 500 600 0 200 100 200 100 6 500 900 800 900 400 0 100 100 300 7 600 700 800 900 500 300 0 200 100 8 500 300 100 700 100 100 700 0 300 9 500 300 100 700 100 100 700 200 0 En esta red 𝐻 , para una mayor cobertura de la red se empleó el siguiente conjunto:𝑊= {(2,6),(7,9),(4,6),(1,7)}, con este conjunto lo que se quiere conseguir es una red satisfaga la demanda de estos caminos, tal y como se muestra a continuación: DESARROLLO 52 52 . Ilustración 37 Conjunto de pares OD para un conjunto 𝑊={(2,6),(7,9),(4,6),(1,7)}. Por otro lado, los presupuestos de construcción para la red 𝐻  fueron los siguientes: un presupuesto ajustado de 25.000.000 u.m. y por último el presupuesto generoso fue de 50.000.000 u.m. En referencia al conjunto de infraestructuras k, el planificador central es quien decide la cantidad y la tipología de estas. Para la red 𝐻  el conjunto de infraestructuras a analizar es el siguiente: 𝐾=(1,2), siendo la infraestructura 1 más barata en término de construcción, pero más cara en cuanto al coste de viaje del usuario respecto a la infraestructura 2, en otras palabras, la infraestructura 2 es mejor que la infraestructura 1 en término de coste de viaje del usuario. Finalmente se indican los conjuntos de coste de usuario, coste de construcción y penalización en función de los arcos y la infraestructura: A continuación, se muestra los parámetros anteriormente mencionados en función de las infraestructuras: Tabla 17 Coste de construcción y usuario en función del tipo de infraestructura. INFRAESTRTURA COSTE DE CONSTRUCCIÓN ARCOS (U. MONETARIA/U. LONGITUD) COSTE DE USUARIO (TIEMPO) 0 0 50 1 3000 20 2 6000 5 A continuación, se indica las penalizaciones utilizadas: Tabla 18 Penalización por cambio de infraestructura CAMBIO DE INFRAESTRUTURA PENALIZACIÓN β DE LA INFRAESTRUCTURA 1 A LA 0 1 DE LA INFRAESTRUCTURA 2 A LA 0 3 DE LA INFRAESTRUCTURA 2 A LA 1 2 53 53 Desarrollo de una metodología para el diseño de una red de carriles para bicicletas considerando el nivel de satisfacción de los usuarios. A continuación, se muestra los resultados de las pruebas realizadas con los diferentes presupuestos establecidos: 3.3.4 PRUEBA 4. Presupuesto P=25.000.000 u.m. Para un presupuesto de red de 𝑃=25.000.000 u.m., se genera una red para los viajes 𝑊= {(2,6),(7,9),(4,6),(1,7)} con las siguientes características: • La red cuenta con 5 carriles con infraestructura 0. • La red cuenta con 2 carriles con infraestructura 1. • El coste de construcción fue de 21.727.922,06 u.m. lo que representa un 86.91% del presupuesto total. • El coste total de para los usuarios de esta red fue: 290 unidades de tiempo. A continuación, se muestra el resultado gráfico del programa: Ilustración 38 Solución Prueba 4: Presupuesto 𝑃=25.000.000 u.m De la ilustración anterior, se observa que los arcos (2,5) y (5,6) se construirán con la infraestructura 1 y los arcos (1,4), (4,7),(7,8),(8,9) y (4,5) con la infraestructura 0. Tabla 19 Solución Prueba 4: Presupuesto 𝑃=25.000.000 u.m. ARCOS SOLUCIÓN INFRAESTRUCTURA y(4, 5) 0 y(7, 8) 0 y(8, 9) 0 y(1, 4) 0 y(4, 7) 0 CASO PRÁCTICO 60 60 Tabla 21 Datos red Sevilla COSTE DE CONSTRUCCIÓN COSTE DE USUARIO (UNIDADES DE TIEMPO) INFRAESTRUCTURA 0 0 50 INFRAESTRUCTURA 1 400 𝒖.𝒎 𝒍𝒐𝒏𝒈𝒊𝒕𝒖𝒅 20 INFRAESTRUCTURA 2 700 𝒖.𝒎 𝒍𝒐𝒏𝒈𝒊𝒕𝒖𝒅 5 Tal y como se observa en la Tabla 21 se emplearon dos tipos de infraestructuras (infraestructura 1,2) y la opción de no realizar ninguna construcción (infraestructura 0). Al igual que en apartado anterior, se evaluaron diferentes casos variando el presupuesto. Para el diseño de esta red se llevó a cabo la realización de un primer caso donde se evaluaron dos tipos de presupuestos. Por otro lado, se llevó a cabo la ejecución de un segundo caso para el cual se evaluó el mismo presupuesto utilizado para la prueba 2 del caso 1 pero esta vez ampliando el conjunto de viajes 𝑊. Caso 1: Prueba 1: El presupuesto asignado es el siguiente: 𝑃=6.000.000 um. El conjunto de viajes definidos para esta red es el siguiente: W ={(1,60),(37,107),(106,123),(124,139),(60,104),(102,139),(60,139),(1,107),(6,110),(128,139),(86, 126), (54,60),(38,52),(91,128), (52,72),(20,38),(91,96)} El resultado gráfico generado por la metodología se muestra a continuación: 61 61 Desarrollo de una metodología para el diseño de una red de carriles para bicicletas considerando el nivel de satisfacción de los usuarios. Ilustración 43 Red de bicicleta para la ciudad de Sevilla. Prueba 1, Caso 1 Para un presupuesto de red de 6.000.000 u.m., se genera una red para los viajes 𝑊con las siguientes características: • La red cuenta con 47 carriles con infraestructura 0. • La red cuenta con 9 carriles con infraestructura 1. • La red cuenta con 23 carriles con infraestructura 2. • El coste de construcción fue de 5.998.621.88 u.m. lo que representa un 99,71% del presupuesto total. • El coste total de para los usuarios de esta red fue: 2645 unidades de tiempo. CASO PRÁCTICO 62 62 Tabla 22 Solución Prueba 1: Presupuesto 𝑃=6.000.000 u.m. ARCOS SOLUCIÓN CAPA ARCOS SOLUCIÓN CAPA ARCOS SOLUCIÓN CAPA y(1, 2) 0 y(70, 72) 0 y(86, 88) 2 y(2, 5) 0 y(79, 80) 0 y(100, 101) 2 y(6, 7) 0 y(80, 81) 0 y(88, 100) 2 y(5, 8) 0 y(91, 93) 0 y(103, 104) 2 y(1, 17) 0 y(93, 95) 0 y(105, 106) 2 y(15, 16) 0 y(95, 96) 0 y(106, 110) 2 y(14, 15) 0 y(102, 103) 0 y(110, 113) 2 y(7, 14) 0 y(104, 105) 0 y(113, 121) 2 y(10, 20) 0 y(17, 107) 0 y(121, 122) 2 y(20, 21) 0 y(106, 107) 0 y(122, 123) 2 y(22, 24) 0 y(108, 109) 0 y(123, 124) 2 y(29, 30) 0 y(109, 110) 0 y(124, 126) 2 y(30, 140) 0 y(91, 112) 0 y(128, 132) 2 y(140, 38) 0 y(112, 121) 0 y(132, 136) 2 y(38, 45) 0 y(126, 128) 0 y(136, 139) 2 y(38, 41) 0 y(8, 9) 1 y(46, 47) 0 y(45, 46) 1 y(43, 54) 0 y(53, 54) 1 y(51, 52) 0 y(47, 50) 1 y(52, 53) 0 y(58, 59) 1 y(50, 51) 0 y(84, 85) 1 y(37, 66) 0 y(85, 86) 1 y(54, 58) 0 y(101, 103) 1 y(59, 60) 0 y(16, 108) 1 y(60, 81) 0 y(9, 10) 2 y(58, 64) 0 y(21, 22) 2 y(64, 65) 0 y(24, 29) 2 y(65, 66) 0 y(41, 42) 2 y(68, 70) 0 y(42, 43) 2 y(66, 68) 0 y(81, 82) 2 y(66, 71) 0 y(82, 83) 2 y(71, 79) 0 y(83, 84) 2 Prueba 2: El presupuesto asignado es el siguiente: 𝑃=15.000.000 um. El conjunto de viajes definidos para esta red corresponde al mismo conjunto utilizado la prueba 1. A continuación se muestra el resultado gráfico generado por la metodología: 63 63 Desarrollo de una metodología para el diseño de una red de carriles para bicicletas considerando el nivel de satisfacción de los usuarios. Ilustración 44 Red de bicicleta para la ciudad de Sevilla. Prueba 2, Caso 1. Para un presupuesto de red de 𝑃=15.000.000 u.m., se genera una red para los viajes 𝑊con las siguientes características: • La red cuenta con 8 carriles con infraestructura 0. • La red cuenta con 3 carriles con infraestructura 1. • La red cuenta con 58 carriles con infraestructura 2. • El coste de construcción fue de 14.944.217,42 u.m. lo que representa un 99,62% del presupuesto total. • El coste total de para los usuarios de esta red fue: 750 unidades de tiempo. CASO PRÁCTICO 64 64 Tabla 23 Solución Prueba 2: Presupuesto 𝑃=15.000.000 u.m. ARCOS SOLUCIÓN CAPA ARCOS SOLUCIÓN CAPA ARCOS SOLUCIÓN CAPA y(1, 17) 0 y(50, 51) 2 y(124, 125) 2 y(140, 38) 0 y(47, 50) 2 y(125, 128) 2 y(58, 64) 0 y(54, 58) 2 y(128, 132) 2 y(95, 96) 0 y(58, 59) 2 y(132, 136) 2 y(17, 107) 0 y(59, 60) 2 y(136, 139) 2 y(106, 107) 0 y(60, 81) 2 y(91, 112) 0 y(64, 65) 2 y(112, 121) 0 y(65, 66) 2 y(2, 5) 1 y(68, 70) 2 y(52, 53) 1 y(66, 68) 2 y(70, 72) 1 y(81, 82) 2 y(1, 2) 2 y(82, 83) 2 y(5, 6) 2 y(83, 84) 2 y(6, 9) 2 y(84, 85) 2 y(9, 10) 2 y(85, 86) 2 y(10, 20) 2 y(86, 88) 2 y(20, 21) 2 y(91, 93) 2 y(21, 22) 2 y(93, 95) 2 y(22, 24) 2 y(100, 101) 2 y(24, 29) 2 y(88, 100) 2 y(29, 30) 2 y(101, 103) 2 y(30, 140) 2 y(102, 103) 2 y(140, 36) 2 y(103, 104) 2 y(38, 45) 2 y(104, 105) 2 y(36, 37) 2 y(105, 106) 2 y(37, 40) 2 y(106, 110) 2 y(40, 43) 2 y(110, 113) 2 y(45, 46) 2 y(113, 121) 2 y(46, 47) 2 y(121, 122) 2 y(43, 54) 2 y(122, 123) 2 y(53, 54) 2 y(123, 124) 2 y(51, 52) 2 y(124, 126) 2 Caso 2: Prueba 1: El presupuesto asignado es el siguiente: 𝑃=15.000.000 um. Al conjunto de viajes W anterior se añadieron los siguientes viajes: (6,117),(117,133),(37,133),(126,133),(24,133),(2,117),(6,119), (58,61),(84,130) y (107,138). Por lo que el conjunto total de viajes W queda de la siguiente forma: W =[(1,60), (37,107), (106,123), (124,139), (60,104), (102,139), (60,139), (1,107), (6,110), (128,139), 65 65 Desarrollo de una metodología para el diseño de una red de carriles para bicicletas considerando el nivel de satisfacción de los usuarios. (86,126), (54,60), (38,52), (91,128), (52,72), (20,38), (91,96), (6,117), (117,133), (37,133), (126,133), (24,133), (2,117), (6,119), (58,61),(84,130), (107,138)] A continuación, se muestra el resultado gráfico generado por la metodología: Ilustración 45 Red de bicicletas para la ciudad de Sevilla. Prueba 1, Caso 2. Para un presupuesto de red de 𝑃=15.000.000 u.m., se genera una red para los viajes 𝑊con las siguientes características: CASO PRÁCTICO 66 66 • La red cuenta con 22 carriles con infraestructura 0. • La red cuenta con 7 carriles con infraestructura 1. • La red cuenta con 59 carriles con infraestructura 2. • El coste de construcción fue de 14.997.760,39 u.m. lo que representa un 99,98% del presupuesto total. • El coste total de para los usuarios de esta red fue: 1535 unidades de tiempo. Tabla 24 Solución Caso 2: Presupuesto 𝑃=15.000.000 u.m. ARCOS SOLUCIÓN CAPA ARCOS SOLUCIÓN CAPA ARCOS SOLUCIÓN CAPA y(1, 2) 0 y(12, 13) 2 y(101, 103) 2 y(1, 17) 0 y(9, 10) 2 y(103, 104) 2 y(140, 38) 0 y(20, 21) 2 y(104, 105) 2 y(46, 47) 0 y(21, 22) 2 y(13, 117) 2 y(52, 53) 0 y(22, 24) 2 y(105, 106) 2 y(58, 64) 0 y(24, 29) 2 y(106, 110) 2 y(64, 65) 0 y(32, 33) 2 y(110, 113) 2 y(65, 66) 0 y(31, 32) 2 y(113, 121) 2 y(66, 68) 0 y(30, 31) 2 y(121, 122) 2 y(60, 61) 0 y(29, 30) 2 y(118, 119) 2 y(70, 72) 0 y(30, 140) 2 y(117, 118) 2 y(91, 93) 0 y(140, 36) 2 y(122, 123) 2 y(93, 95) 0 y(36, 37) 2 y(34, 133) 2 y(95, 96) 0 y(37, 40) 2 y(123, 124) 2 y(102, 103) 0 y(40, 43) 2 y(124, 126) 2 y(17, 107) 0 y(45, 46) 2 y(126, 127) 2 y(106, 107) 0 y(43, 54) 2 y(124, 125) 2 y(107, 110) 0 y(53, 54) 2 y(125, 128) 2 y(91, 112) 0 y(51, 52) 2 y(127, 129) 2 y(112, 121) 0 y(47, 50) 2 y(128, 132) 2 y(118, 127) 0 y(54, 58) 2 y(129, 130) 2 y(130, 135) 0 y(58, 59) 2 y(129, 133) 2 y(2, 5) 1 y(59, 60) 2 y(132, 136) 2 y(10, 20) 1 y(60, 81) 2 y(136, 139) 2 y(33, 34) 1 y(81, 82) 2 y(38, 45) 1 y(82, 83) 2 y(50, 51) 1 y(83, 84) 2 y(68, 70) 1 y(84, 85) 2 y(135, 138) 1 y(85, 86) 2 y(5, 6) 2 y(86, 88) 2 y(6, 9) 2 y(100, 101) 2 y(9, 12) 2 y(88, 100) 2 67 67 Desarrollo de una metodología para el diseño de una red de carriles para bicicletas considerando el nivel de satisfacción de los usuarios. 6 CONCLUSIÓN El presente Trabajo de Fin de Grado tuvo como objetivo el desarrollo de una metodología que permitiese resolver el problema de diseño de una red de carriles para bicicletas e ilustrar su aplicación utilizando la red de la ciudad de Sevilla. Para el cumplimiento del objetivo se propuso una ampliación del problema general de flujo a coste mínimo sin limitación de capacidad. La característica principal del modelo ampliado fue que además de buscar la inclusión de los arcos en la red, este seleccionase la tecnología de construcción a utilizar en el arco. De esa forma el modelo ampliado permitía la construcción de una red con diferentes tipos de carriles de bici. Otro aspecto importante que consideró en la ampliación del modelo es que debía valorar la repercusión que los usuarios podían experimentar por el cambio de tecnologías en su trayecto. Para minimizar dicha repercusión se empleó un parámetro que penalizaba los cambios de tecnologías, específicamente los cambios a peor. De esta forma se consiguió que, para un determinado viaje, la ruta fuera lo más homogénea posible en relación con las tecnologías de construcción. Como objetivo, el modelo ampliado debía maximizar la satisfacción del usuario o lo que es lo mismo minimizar el coste de viaje del usuario a través de la red. A fin de poder modelar las diferentes posibilidades de construcción, se empleó una estructura multicapa que permitía el modelado de cada arco de la red base mediante un conjunto de arcos paralelos, cada uno de ellos en una capa diferente. Para de probar la aplicación del modelo ampliado, se utilizaron diferentes escenarios con 6 y 9 nodos a los que se les fue variando el presupuesto asignado. Se observó que cuanto más alto es el presupuesto el modelo Nuestra recompensa se encuentra en el esfuerzo y no en el resultado. Un esfuerzo total es una victoria completa. -Mahatma Gandhi- CONCLUSIÓN 68 68 incorpora más arcos con la mejor tecnología esto provoca que el coste del usuario disminuya. Finalmente se realizó un caso de aplicación para la ciudad de Sevilla donde se evaluaron diferentes casos con variación de presupuestos e incrementos de viajes OD. De este caso práctico se obtuvieron las siguientes conclusiones: • Al igual que en los escenarios anteriores, se observó homogeneidad en las estructuras de los arcos para cada viaje de W. Lo cual garantiza que la satisfacción del usuario no se verá afectada por los cambios de tecnologías. • Cuanto mayor sea el presupuesto menor será el coste para el usuario o lo que es lo mismo mayor será su satisfacción. • El modelo no solo selecciona arcos para la red, sino que además selecciona el tipo de tecnología que se usará en la construcción de dicho arco. Con esto se demuestra que el modelo ampliado permite el diseño de una red para carriles bici que maximiza el nivel de servicio de los usuarios, agotando el presupuesto en la construcción de los carriles bici. De esta forma se consiguió el enrutamiento de los usuarios desde sus orígenes a sus destinos de forma que puedan realizar sus desplazamientos en el menor tiempo posible. 69 69 Desarrollo de una metodología para el diseño de una red de carriles para bicicletas considerando el nivel de satisfacción de los usuarios. REFERENCIAS [1] Liñán, R, Merino, S., Martínez, J. 2013. OPTIMIZACIÓN Y DISEÑO DE CARRILES BICI. Greencities & Sostenilidad: Inteligencia aplicada a la sostenibilidad urbana Convocatoria de Comunicaciones y 1ª Bienal de Edificación y Urbanismo Sostenible (Edición 2013) [2] Zhuang, D., Jin, J. G., Shen, Y., Jiang, W. 2021. Understanding the bike sharing travel demand and cycle lane network: The case of Shanghai. International Journal of Sustainable Transportation, 15, 111–123. [3] Ospina, J., Duque, J., Botero-Fernández, V., Montoya, A. 2022. The maximal covering bicycle network design problem. Transportation Research Part A: Policy and Practice, 159, 222–236. [4] Saltykova, K., Ma, X., Yao, L.,Kong, H. 2022 Environmental impact assessment of bike-sharing considering the modal shift from public transit. Transportation Research Part D: Transport and Environment, 105, 103238. [5] Danique, T., Dorine, D. 2021. Understanding long-term changes in commuter mode use of a pilot featuring free e-bike trials. Transport Policy, 105, 134–144. [6] Larrodé, E., Gallego, J., Fraile del Pozo, A. 2011.Optimización de redes de transporte. LYCHNOS, 6, 2011. [7] Minoux, M. 2001. Discrete Cost Multicommodity Network Optimization Problems and Exact Solution Methods. Annals of Operations Research,106,19–46. [8] Geoffrion, A. Graves, G. 1974. Multicommodity distribution system design by Benders decomposition. Management science,20, 5, 822–844. [9] Magnanti, T., Wong, R. 1984. Network design and transportation planning: Models and algorithms. Transportation science, 18, 1, 1–55. [10] Murawski, L., Church, R. 2009. Improving accessibility to rural health services: The maximal covering network improvement problem. Socio-Economic Planning Sciences,43,102–110. [12] Leblanc, L. 1975. An Algorithm for the Discrete Network Design Problem. Transportation Science, 9, 3, 183–199. [13] Boccaletti, S., Bianconi, G., Criado, R., Del Genio, C., Gómez-Gardeñes, J., Romance, M., Sendiña-Nadal, I., Wang, Z., Zanin, M. 2014. The structure and dynamics of multilayer networks. Phys Physics Reports, 544,1–122. [14] Hammoud, Z., Kramer, K. 2020. Multilayer networks: aspects, implementations, and application in biomedicine. Big Data Anal,5,2. [15] Mauttone, A., Mercadante, G., Rabaza, M., Toledo, F. 2017. Bycicle network design: model and solution algorithm. Transportation Research Procedia, 27, 969-976. ANEXO 76 76 Existencia_Infraestructura_Sujeta_a_flujo[14,17,4,6]: x[14,17,4,6]- 400 y[14,17] <= 0 Existencia_Infraestructura_Sujeta_a_flujo[15,18,1,5]: x[15,18,1,5]- 300 y[15,18] <= 0 Existencia_Infraestructura_Sujeta_a_flujo[15,18,1,3]: x[15,18,1,3]- 700 y[15,18] <= 0 Existencia_Infraestructura_Sujeta_a_flujo[15,18,2,6]: x[15,18,2,6]- 100 y[15,18] <= 0 Existencia_Infraestructura_Sujeta_a_flujo[15,18,4,6]: x[15,18,4,6]- 400 y[15,18] <= 0 Existencia_Infraestructura_Sujeta_a_flujo[500,1,1,5]: x[500,1,1,5]- 300 y[500,1] <= 0 Existencia_Infraestructura_Sujeta_a_flujo[500,1,1,3]: x[500,1,1,3]- 700 y[500,1] <= 0 Existencia_Infraestructura_Sujeta_a_flujo[500,1,2,6]: x[500,1,2,6]- 100 y[500,1] <= 0 Existencia_Infraestructura_Sujeta_a_flujo[500,1,4,6]: x[500,1,4,6]- 400 y[500,1] <= 0 Existencia_Infraestructura_Sujeta_a_flujo[501,7,1,5]: x[501,7,1,5]- 300 y[501,7] <= 0 Existencia_Infraestructura_Sujeta_a_flujo[501,7,1,3]: x[501,7,1,3]- 700 y[501,7] <= 0 Existencia_Infraestructura_Sujeta_a_flujo[501,7,2,6]: x[501,7,2,6]- 100 y[501,7] <= 0 Existencia_Infraestructura_Sujeta_a_flujo[501,7,4,6]: x[501,7,4,6]- 400 y[501,7] <= 0 Existencia_Infraestructura_Sujeta_a_flujo[502,13,1,5]: x[502,13,1,5]- 300 y[502,13] <= 0 Existencia_Infraestructura_Sujeta_a_flujo[502,13,1,3]: x[502,13,1,3]- 700 y[502,13] <= 0 Existencia_Infraestructura_Sujeta_a_flujo[502,13,2,6]: x[502,13,2,6]- 100 y[502,13] <= 0 Existencia_Infraestructura_Sujeta_a_flujo[502,13,4,6]: x[502,13,4,6]- 400 y[502,13] <= 0 Existencia_Infraestructura_Sujeta_a_flujo[503,1,1,5]: x[503,1,1,5]- 300 y[503,1] <= 0 Existencia_Infraestructura_Sujeta_a_flujo[503,1,1,3]: x[503,1,1,3]- 700 y[503,1] <= 0 Existencia_Infraestructura_Sujeta_a_flujo[503,1,2,6]: x[503,1,2,6]- 100 y[503,1] <= 0 Existencia_Infraestructura_Sujeta_a_flujo[503,1,4,6]: x[503,1,4,6]- 400 y[503,1] <= 0 Existencia_Infraestructura_Sujeta_a_flujo[504,7,1,5]: x[504,7,1,5]- 300 y[504,7] <= 0 Existencia_Infraestructura_Sujeta_a_flujo[504,7,1,3]: x[504,7,1,3]- 700 y[504,7] <= 0 Existencia_Infraestructura_Sujeta_a_flujo[504,7,2,6]: x[504,7,2,6]- 100 y[504,7] <= 0 Existencia_Infraestructura_Sujeta_a_flujo[504,7,4,6]: x[504,7,4,6]- 400 y[504,7] <= 0 Existencia_Infraestructura_Sujeta_a_flujo[505,13,1,5]: x[505,13,1,5]- 300 y[505,13] <= 0 Existencia_Infraestructura_Sujeta_a_flujo[505,13,1,3]: x[505,13,1,3]- 700 y[505,13] <= 0 Existencia_Infraestructura_Sujeta_a_flujo[505,13,2,6]: x[505,13,2,6]- 100 y[505,13] <= 0 Existencia_Infraestructura_Sujeta_a_flujo[505,13,4,6]: x[505,13,4,6]- 400 y[505,13] <= 0 Existencia_Infraestructura_Sujeta_a_flujo[506,2,1,5]: x[506,2,1,5]- 300 y[506,2] <= 0 Existencia_Infraestructura_Sujeta_a_flujo[506,2,1,3]: x[506,2,1,3]- 700 y[506,2] <= 0 Existencia_Infraestructura_Sujeta_a_flujo[506,2,2,6]: x[506,2,2,6]- 100 y[506,2] <= 0 Existencia_Infraestructura_Sujeta_a_flujo[506,2,4,6]: x[506,2,4,6]- 400 y[506,2] <= 0 Existencia_Infraestructura_Sujeta_a_flujo[507,8,1,5]: x[507,8,1,5]- 300 y[507,8] <= 0 Existencia_Infraestructura_Sujeta_a_flujo[507,8,1,3]: x[507,8,1,3]- 700 y[507,8] <= 0 Existencia_Infraestructura_Sujeta_a_flujo[507,8,2,6]: x[507,8,2,6]- 100 y[507,8] <= 0 Existencia_Infraestructura_Sujeta_a_flujo[507,8,4,6]: x[507,8,4,6]- 400 y[507,8] <= 0 Existencia_Infraestructura_Sujeta_a_flujo[508,14,1,5]: x[508,14,1,5] - 300 y[508,14] <= 0 Existencia_Infraestructura_Sujeta_a_flujo[508,14,1,3]: x[508,14,1,3]- 700 y[508,14] <= 0 Existencia_Infraestructura_Sujeta_a_flujo[508,14,2,6]: x[508,14,2,6]- 100 y[508,14] <= 0 Existencia_Infraestructura_Sujeta_a_flujo[508,14,4,6]: x[508,14,4,6]- 400 y[508,14] <= 0 77 77 Desarrollo de una metodología para el diseño de una red de carriles para bicicletas considerando el nivel de satisfacción de los usuarios. Existencia_Infraestructura_Sujeta_a_flujo[509,4,1,5]: x[509,4,1,5]- 300 y[509,4] <= 0 Existencia_Infraestructura_Sujeta_a_flujo[509,4,1,3]: x[509,4,1,3]- 700 y[509,4] <= 0 Existencia_Infraestructura_Sujeta_a_flujo[509,4,2,6]: x[509,4,2,6]- 100 y[509,4] <= 0 Existencia_Infraestructura_Sujeta_a_flujo[509,4,4,6]: x[509,4,4,6]- 400 y[509,4] <= 0 Existencia_Infraestructura_Sujeta_a_flujo[510,10,1,5]: x[510,10,1,5]- 300 y[510,10] <= 0 Existencia_Infraestructura_Sujeta_a_flujo[510,10,1,3]: x[510,10,1,3]- 700 y[510,10] <= 0 Existencia_Infraestructura_Sujeta_a_flujo[510,10,2,6]: x[510,10,2,6]- 100 y[510,10] <= 0 Existencia_Infraestructura_Sujeta_a_flujo[510,10,4,6]: x[510,10,4,6]- 400 y[510,10] <= 0 Existencia_Infraestructura_Sujeta_a_flujo[511,16,1,5]: x[511,16,1,5]- 300 y[511,16] <= 0 Existencia_Infraestructura_Sujeta_a_flujo[511,16,1,3]: x[511,16,1,3]- 700 y[511,16] <= 0 Existencia_Infraestructura_Sujeta_a_flujo[511,16,2,6]: x[511,16,2,6]- 100 y[511,16] <= 0 Existencia_Infraestructura_Sujeta_a_flujo[511,16,4,6]: x[511,16,4,6]- 400 y[511,16] <= 0 Existencia_Infraestructura_Sujeta_a_flujo[5,600,1,5]: x[5,600,1,5]- 300 y[5,600] <= 0 Existencia_Infraestructura_Sujeta_a_flujo[5,600,1,3]: x[5,600,1,3]- 700 y[5,600] <= 0 Existencia_Infraestructura_Sujeta_a_flujo[5,600,2,6]: x[5,600,2,6]- 100 y[5,600] <= 0 Existencia_Infraestructura_Sujeta_a_flujo[5,600,4,6]: x[5,600,4,6]- 400 y[5,600] <= 0 Existencia_Infraestructura_Sujeta_a_flujo[11,601,1,5]: x[11,601,1,5]- 300 y[11,601] <= 0 Existencia_Infraestructura_Sujeta_a_flujo[11,601,1,3]: x[11,601,1,3]- 700 y[11,601] <= 0 Existencia_Infraestructura_Sujeta_a_flujo[11,601,2,6]: x[11,601,2,6]- 100 y[11,601] <= 0 Existencia_Infraestructura_Sujeta_a_flujo[11,601,4,6]: x[11,601,4,6]- 400 y[11,601] <= 0 Existencia_Infraestructura_Sujeta_a_flujo[17,602,1,5]: x[17,602,1,5]- 300 y[17,602] <= 0 Existencia_Infraestructura_Sujeta_a_flujo[17,602,1,3]: x[17,602,1,3]- 700 y[17,602] <= 0 Existencia_Infraestructura_Sujeta_a_flujo[17,602,2,6]: x[17,602,2,6]- 100 y[17,602] <= 0 Existencia_Infraestructura_Sujeta_a_flujo[17,602,4,6]: x[17,602,4,6]- 400 y[17,602] <= 0 Existencia_Infraestructura_Sujeta_a_flujo[3,603,1,5]: x[3,603,1,5]- 300 y[3,603] <= 0 Existencia_Infraestructura_Sujeta_a_flujo[3,603,1,3]: x[3,603,1,3]- 700 y[3,603] <= 0 Existencia_Infraestructura_Sujeta_a_flujo[3,603,2,6]: x[3,603,2,6]- 100 y[3,603] <= 0 Existencia_Infraestructura_Sujeta_a_flujo[3,603,4,6]: x[3,603,4,6]- 400 y[3,603] <= 0 Existencia_Infraestructura_Sujeta_a_flujo[9,604,1,5]: x[9,604,1,5]- 300 y[9,604] <= 0 Existencia_Infraestructura_Sujeta_a_flujo[9,604,1,3]: x[9,604,1,3]- 700 y[9,604] <= 0 Existencia_Infraestructura_Sujeta_a_flujo[9,604,2,6]: x[9,604,2,6]- 100 y[9,604] <= 0 Existencia_Infraestructura_Sujeta_a_flujo[9,604,4,6]: x[9,604,4,6]- 400 y[9,604] <= 0 Existencia_Infraestructura_Sujeta_a_flujo[15,605,1,5]: x[15,605,1,5]- 300 y[15,605] <= 0 Existencia_Infraestructura_Sujeta_a_flujo[15,605,1,3]: x[15,605,1,3]- 700 y[15,605] <= 0 Existencia_Infraestructura_Sujeta_a_flujo[15,605,2,6]: x[15,605,2,6]- 100 y[15,605] <= 0 Existencia_Infraestructura_Sujeta_a_flujo[15,605,4,6]: x[15,605,4,6]- 400 y[15,605] <= 0 Existencia_Infraestructura_Sujeta_a_flujo[6,606,1,5]: x[6,606,1,5]- 300 y[6,606] <= 0 Existencia_Infraestructura_Sujeta_a_flujo[6,606,1,3]: x[6,606,1,3]- 700 y[6,606] <= 0 Existencia_Infraestructura_Sujeta_a_flujo[6,606,2,6]: x[6,606,2,6]- 100 y[6,606] <= 0 Existencia_Infraestructura_Sujeta_a_flujo[6,606,4,6]: x[6,606,4,6]- 400 y[6,606] <= 0 Existencia_Infraestructura_Sujeta_a_flujo[12,607,1,5]: x[12,607,1,5]- 300 y[12,607] <= 0 Existencia_Infraestructura_Sujeta_a_flujo[12,607,1,3]: x[12,607,1,3]- 700 y[12,607] <= 0 ANEXO 78 78 Existencia_Infraestructura_Sujeta_a_flujo[12,607,2,6]: x[12,607,2,6]- 100 y[12,607] <= 0 Existencia_Infraestructura_Sujeta_a_flujo[12,607,4,6]: x[12,607,4,6]- 400 y[12,607] <= 0 Existencia_Infraestructura_Sujeta_a_flujo[18,608,1,5]: x[18,608,1,5]- 300 y[18,608] <= 0 Existencia_Infraestructura_Sujeta_a_flujo[18,608,1,3]: x[18,608,1,3]- 700 y[18,608] <= 0 Existencia_Infraestructura_Sujeta_a_flujo[18,608,2,6]: x[18,608,2,6]- 100 y[18,608] <= 0 Existencia_Infraestructura_Sujeta_a_flujo[18,608,4,6]: x[18,608,4,6]- 400 y[18,608] <= 0 Existencia_Infraestructura_Sujeta_a_flujo[6,609,1,5]: x[6,609,1,5]- 300 y[6,609] <= 0 Existencia_Infraestructura_Sujeta_a_flujo[6,609,1,3]: x[6,609,1,3]- 700 y[6,609] <= 0 Existencia_Infraestructura_Sujeta_a_flujo[6,609,2,6]: x[6,609,2,6]- 100 y[6,609] <= 0 Existencia_Infraestructura_Sujeta_a_flujo[6,609,4,6]: x[6,609,4,6]- 400 y[6,609] <= 0 Existencia_Infraestructura_Sujeta_a_flujo[12,610,1,5]: x[12,610,1,5]- 300 y[12,610] <= 0 Existencia_Infraestructura_Sujeta_a_flujo[12,610,1,3]: x[12,610,1,3]- 700 y[12,610] <= 0 Existencia_Infraestructura_Sujeta_a_flujo[12,610,2,6]: x[12,610,2,6]- 100 y[12,610] <= 0 Existencia_Infraestructura_Sujeta_a_flujo[12,610,4,6]: x[12,610,4,6]- 400 y[12,610] <= 0 Existencia_Infraestructura_Sujeta_a_flujo[18,611,1,5]: x[18,611,1,5]- 300 y[18,611] <= 0 Existencia_Infraestructura_Sujeta_a_flujo[18,611,1,3]: x[18,611,1,3]- 700 y[18,611] <= 0 Existencia_Infraestructura_Sujeta_a_flujo[18,611,2,6]: x[18,611,2,6]- 100 y[18,611] <= 0 Existencia_Infraestructura_Sujeta_a_flujo[18,611,4,6]: x[18,611,4,6]- 400 y[18,611] <= 0 Finalmente, muestra el listado de las variables generadas: Variable Binaria y[1,2] y[2,3] y[4,5] y[5,6] y[1,4] y[2,5] y[3,6] y[7,8] y[8,9] y[10,11] y[11,12] y[7,10] y[8,11] y[9,12] y[13,14] y[14,15] y[16,17] y[17,18] y[13,16] y[14,17] y[15,18] y[500,1] y[501,7] y[502,13] y[503,1] y[504,7] y[505,13] y[506,2] y[507,8] y[508,14] y[509,4] y[510,10] y[511,16] y[5,600] y[11,601] y[17,602] y[3,603] y[9,604] y[15,605] y[6,606] y[12,607] y[18,608] y[6,609] y[12,610] y[18,611] Generales x[1,2,1,5] x[1,2,1,3] x[1,2,2,6] x[1,2,4,6] x[2,3,1,5] x[2,3,1,3]x[2,3,2,6] x[2,3,4,6] x[4,5,1,5] x[4,5,1,3] x[4,5,2,6] x[4,5,4,6]x[5,6,1,5] x[5,6,1,3] x[5,6,2,6] x[5,6,4,6] x[1,4,1,5] x[1,4,1,3]x[1,4,2,6] x[1,4,4,6] x[2,5,1,5] x[2,5,1,3] x[2,5,2,6] x[2,5,4,6]x[3,6,1,5] x[3,6,1,3] x[3,6,2,6] x[3,6,4,6] x[7,8,1,5] x[7,8,1,3]x[7,8,2,6] x[7,8,4,6] x[8,9,1,5] x[8,9,1,3] x[8,9,2,6] x[8,9,4,6]x[10,11,1,5] x[10,11,1,3] x[10,11,2,6] x[10,11,4,6] x[11,12,1,5]x[11,12,1,3] x[11,12,2,6] x[11,12,4,6] x[7,10,1,5] x[7,10,1,3] x[7,10,2,6]x[7,10,4,6] x[8,11,1,5] x[8,11,1,3] x[8,11,2,6] x[8,11,4,6] x[9,12,1,5]x[9,12,1,3] x[9,12,2,6] x[9,12,4,6] x[13,14,1,5] x[13,14,1,3] x[13,14,2,6]x[13,14,4,6] x[14,15,1,5] x[14,15,1,3] x[14,15,2,6] x[14,15,4,6]x[16,17,1,5] x[16,17,1,3] x[16,17,2,6] x[16,17,4,6] x[17,18,1,5]x[17,18,1,3] x[17,18,2,6] x[17,18,4,6] x[13,16,1,5] x[13,16,1,3]x[13,16,2,6] x[13,16,4,6] x[14,17,1,5] x[14,17,1,3] x[14,17,2,6]x[14,17,4,6] x[15,18,1,5] x[15,18,1,3] x[15,18,2,6] x[15,18,4,6]x[500,1,1,5] x[500,1,1,3] x[500,1,2,6] x[500,1,4,6] x[501,7,1,5]x[501,7,1,3] x[501,7,2,6] x[501,7,4,6] x[502,13,1,5] x[502,13,1,3]x[502,13,2,6] x[502,13,4,6] x[503,1,1,5] x[503,1,1,3] x[503,1,2,6]x[503,1,4,6] x[504,7,1,5] x[504,7,1,3] x[504,7,2,6] x[504,7,4,6]x[505,13,1,5] x[505,13,1,3] x[505,13,2,6] x[505,13,4,6] x[506,2,1,5]x[506,2,1,3] x[506,2,2,6] x[506,2,4,6] x[507,8,1,5] x[507,8,1,3]x[507,8,2,6] x[507,8,4,6] x[508,14,1,5] x[508,14,1,3] x[508,14,2,6]x[508,14,4,6] x[509,4,1,5] x[509,4,1,3] x[509,4,2,6] x[509,4,4,6]x[510,10,1,5] 79 79 Desarrollo de una metodología para el diseño de una red de carriles para bicicletas considerando el nivel de satisfacción de los usuarios. x[510,10,1,3] x[510,10,2,6] x[510,10,4,6] x[511,16,1,5]x[511,16,1,3] x[511,16,2,6] x[511,16,4,6] x[5,600,1,5] x[5,600,1,3]x[5,600,2,6] x[5,600,4,6] x[11,601,1,5] x[11,601,1,3] x[11,601,2,6]x[11,601,4,6] x[17,602,1,5] x[17,602,1,3] x[17,602,2,6] x[17,602,4,6]x[3,603,1,5] x[3,603,1,3] x[3,603,2,6] x[3,603,4,6] x[9,604,1,5]x[9,604,1,3] x[9,604,2,6] x[9,604,4,6] x[15,605,1,5] x[15,605,1,3]x[15,605,2,6] x[15,605,4,6] x[6,606,1,5] x[6,606,1,3] x[6,606,2,6]x[6,606,4,6] x[12,607,1,5] x[12,607,1,3] x[12,607,2,6] x[12,607,4,6]x[18,608,1,5] x[18,608,1,3] x[18,608,2,6] x[18,608,4,6] x[6,609,1,5]x[6,609,1,3] x[6,609,2,6] x[6,609,4,6] x[12,610,1,5] x[12,610,1,3]x[12,610,2,6] x[12,610,4,6] x[18,611,1,5] x[18,611,1,3] x[18,611,2,6]x[18,611,4,6] x[1,7,1,5] x[1,7,1,3] x[1,7,2,6] x[1,7,4,6] x[2,8,1,5]x[2,8,1,3] x[2,8,2,6] x[2,8,4,6] x[3,9,1,5] x[3,9,1,3] x[3,9,2,6]x[3,9,4,6] x[4,10,1,5] x[4,10,1,3] x[4,10,2,6] x[4,10,4,6] x[5,11,1,5]x[5,11,1,3] x[5,11,2,6] x[5,11,4,6] x[6,12,1,5] x[6,12,1,3] x[6,12,2,6]x[6,12,4,6] x[7,13,1,5] x[7,13,1,3] x[7,13,2,6] x[7,13,4,6] x[8,14,1,5]x[8,14,1,3] x[8,14,2,6] x[8,14,4,6] x[9,15,1,5] x[9,15,1,3] x[9,15,2,6]x[9,15,4,6] x[10,16,1,5] x[10,16,1,3] x[10,16,2,6] x[10,16,4,6]x[11,17,1,5] x[11,17,1,3] x[11,17,2,6] x[11,17,4,6] x[12,18,1,5]x[12,18,1,3] x[12,18,2,6] x[12,18,4,6] x[1,13,1,5] x[1,13,1,3] x[1,13,2,6]x[1,13,4,6] x[2,14,1,5] x[2,14,1,3] x[2,14,2,6] x[2,14,4,6] x[3,15,1,5]x[3,15,1,3] x[3,15,2,6] x[3,15,4,6] x[4,16,1,5] x[4,16,1,3] x[4,16,2,6]x[4,16,4,6] x[5,17,1,5] x[5,17,1,3] x[5,17,2,6] x[5,17,4,6] x[6,18,1,5] x[6,18,1,3] x[6,18,2,6] x[6,18,4,6] x[7,1,1,5] x[7,1,1,3] x[7,1,2,6]x[7,1,4,6] x[8,2,1,5] x[8,2,1,3] x[8,2,2,6] x[8,2,4,6] x[9,3,1,5]x[9,3,1,3] x[9,3,2,6] x[9,3,4,6] x[10,4,1,5] x[10,4,1,3] x[10,4,2,6]x[10,4,4,6] x[11,5,1,5] x[11,5,1,3] x[11,5,2,6] x[11,5,4,6] x[12,6,1,5]x[12,6,1,3] x[12,6,2,6] x[12,6,4,6] x[13,7,1,5] x[13,7,1,3] x[13,7,2,6]x[13,7,4,6] x[14,8,1,5] x[14,8,1,3] x[14,8,2,6] x[14,8,4,6] x[15,9,1,5]x[15,9,1,3] x[15,9,2,6] x[15,9,4,6] x[16,10,1,5] x[16,10,1,3] x[16,10,2,6]x[16,10,4,6] x[17,11,1,5] x[17,11,1,3] x[17,11,2,6] x[17,11,4,6] x[18,12,1,5] x[18,12,1,3] x[18,12,2,6] x[18,12,4,6] x[13,1,1,5]x[13,1,1,3] x[13,1,2,6] x[13,1,4,6] x[14,2,1,5] x[14,2,1,3] x[14,2,2,6]x[14,2,4,6] x[15,3,1,5] x[15,3,1,3] x[15,3,2,6] x[15,3,4,6] x[16,4,1,5]x[16,4,1,3] x[16,4,2,6] x[16,4,4,6] x[17,5,1,5] x[17,5,1,3] x[17,5,2,6]x[17,5,4,6] x[18,6,1,5] x[18,6,1,3] x[18,6,2,6] x[18,6,4,6] ANEXO 80 80 7.2 CÓDIGO DE LA METODOLOGÍA 1. ###############################LIBRERIAS############################################### 2. from typing import Set, Any, Tuple 3. import matplotlib.pyplot as plt 4. import networkx as nx 5. import numpy 6. import numpy as np 7. from numpy.lib import math 8. from IOfunctionsExcel5 import * 9. from MyPlotandNetworkFunctions5 import * 10. from gurobipy import * 11. from heapq import heappush, heappop 12. from itertools import count 13. import json as js 14. import io 15. import ast 16. import random 17. import gurobipy 18. #************************************************************************************* 19. # ************************************************************************************ 20. # PARTE I 21. # CARGA DE DATOS 22. # ************************************************************************************ 23. # ************************************************************************************ 24. 25. print(">>> Carga de datos segun escenario ") 26. DIBUJARED=1 #Dibuja el grafo si esta a 1 27. ESCENARIO=3#Escenario = 1 -> 6 nodos, Escenario =2-> 9 nodos y Escenario =3 -> Sevilla 28. # TECNOLOGÍAS 29. T=[1,2] # En caso de ampliar hay que actualizar más abajo#no lo he cambiado 30. if ESCENARIO==1: 31. name1 = "NODOSSEV_MT_6N.xlsx" # Red base 32. sheet1 = 'DATOSPYTHON' # Hoja de cálculo a leer con datos de red 33. ### PARAMETROS ### 34. ## COSTE DE CONSTRCCUIÓN POR TECNOLOGÍA### 35. c_T1=100 36. c_T2=250 37. ### COSTE DEL USUARIO POR TECNOLOGÍA### 38. U_T1=20 39. U_T2=5 40. U_B=50 41. ### PENALIZAR CAMBIO DE TECNOLOGÍA### 42. bT2_T1=2 43. bT1_B=1 44. bT2_B=3 45. ### PRESUPUESTO 46. P=700000 47. ##CONJUTNO OD 48. W = [(1,5),(1,3),(2,6),(4,6)] 49. 50. exp1 = { 51. 'Nodos': ['A2', 'A7'], 52. 'Coordenadas': ['A1', 'C7'], 53. 'Arcos': ['I1', 'I8'], 54. 'DArcos': ['I1', 'L8'], 55. 'Escala': ['G2'], 56. 'Nodo1': ['G4'], 57. 'Nodo2': ['G6'], 58. 'CODE': ['A1', 'A7'], 59. 'CoordenadasX': ['B2', 'B7'], 60. 'CoordenadasY': ['C2', 'C7'], 61. 62. } 63. 64. if ESCENARIO== 2: 65. 66. name1 = "NODOSSEV_MT2.xlsx" 67. sheet1 = 'DATOSPYTHON' 81 81 Desarrollo de una metodología para el diseño de una red de carriles para bicicletas considerando el nivel de satisfacción de los usuarios. 68. ### PARAMETROS ### 69. ## COSTE DE CONSTRCCUIÓN POR TECNOLOGÍA### 70. c_T1 = 3000 71. c_T2 = 6000 72. ### PRESUPUESTO 73. P=500000000 74. ### COSTE DEL USUARIO POR TECNOLOGÍA### 75. U_T1 = 20 76. U_T2 = 5 77. U_B = 50 78. ### PENALIZAR CAMBIO DE TECNOLOGÍA### 79. bT2_T1 = 2 80. bT1_B = 1 81. bT2_B = 3 82. ##CONJUTNO OD 83. W = [(2,6),(7,9),(4,6),(1,7)] 84. exp1 = { 85. 'Nodos': ['A2', 'A10'], 86. 'Coordenadas': ['A1', 'C10'], 87. 'Arcos': ['I1', 'I13'], 88. 'DArcos': ['I1', 'L13'], 89. 'Escala': ['G2'], 90. 'Nodo1': ['G4'], 91. 'Nodo2': ['G6'], 92. 'CODE': ['A1', 'A10'], 93. 'CoordenadasX': ['B2', 'B10'], 94. 'CoordenadasY': ['C2', 'C10'], 95. } 96. if ESCENARIO==3: 97. 98. name1 = "NODOSSEV_MT.xlsx" 99. sheet1 = 'DATOSPYTHON' 100. ### PARAMETROS ### 101. ## COSTE DE CONSTRCCUIÓN POR TECNOLOGÍA### 102. c_T1 = 400 103. c_T2 = 700 104. ### PRESUPUESTO 105. P=15000000 106. ### COSTE DEL USUARIO POR TECNOLOGÍA### 107. U_T1 = 20 108. U_T2 = 5 109. U_B = 50 110. ### PENALIZAR CAMBIO DE TECNOLOGÍA### 111. bT2_T1 = 2 112. bT1_B = 1 113. bT2_B = 3 114. ##CONJUTNO OD 115. #W = [(1, 60),(37,107),(106,123),(124,139),(60,104), (102,139),(60,139), 116. # (1,107),(6,110), (128,139),(86,126),(54,60),(38,52),(91,128), 117. # (52,72),(20,38),(91,96)] 118. W = [(1, 60), (37, 107), (106, 123), (124, 139), (60, 104), (102, 139), (60, 139), 119. (1, 107), (6, 110), (128, 139), (86, 126), (54, 60), (38, 52), (91, 128), 120. (52, 72), (20, 38), (91, 96), (6, 117), (117, 133), (37, 133), (126, 133), (24, 133), 121. (2,117),(6,119), (58,61),(84,130),(107,138)] 122. exp1 = { 123. 'Nodos': ['A2', 'A141'], 124. 'Coordenadas': ['A1', 'C141'], 125. 'Arcos': ['I1', 'I228'], 126. 'DArcos': ['I1', 'L228'], 127. 'Escala': ['G2'], 128. 'Nodo1': ['G5'], 129. 'Nodo2': ['G7'], 130. 'CODE': ['A1', 'A141'], 131. 'CoordenadasX': ['B2', 'B141'], 132. 'CoordenadasY': ['C2', 'C141'], 133. } 134. # ************************************************************************************ 135. # ************************************************************************************ 136. # PARTE II 137. # LECTURA DE DATOS SEGUN ESCENARIOS 138. # ************************************************************************************ ANEXO 82 82 139. # ************************************************************************************ 140. 141. ################# Lectura tecnologia 1###################### 142. Escala = 300 143. print(">>> Lectura de datos T1") 144. 145. #LEER NODOS 146. 147. L_Nodos1 = Read_Excel_to_List(name1, sheet1, exp1['Nodos'][0], exp1['Nodos'][1]) 148. 149. # LEER COORDENADAS X E Y 150. 151. D_Coordenadas1 = Read_Excel_to_NesteDic(name1, sheet1, exp1['Coordenadas'][0], exp1['Coordenadas'][1]) 152. #print(D_Coordenadas1) 153. 154. # LEER ARCOS 155. 156. D_Arcos1 = Read_Excel_to_NesteDic_TupleInt(name1, sheet1, exp1['DArcos'][0], exp1['DArcos'][1]) 157. 158. #LEER NODOS COMO DICCIONARIO 159. 160. #Necesito los nodos como un diccionario, para poder asignarle las coordenadas 161. 162. nodosXY = Read_Excel_to_NesteDic(name1, sheet1, exp1['CODE'][0], exp1['CODE'][1]) 163. 164. # LEER COORDENADAS X E Y 165. 166. #Coordenadas X e Y separadas para poder agregarla al diccionario "nodosXY" 167. 168. D_CoordenadasX = Read_Excel_to_List(name1, sheet1, exp1['CoordenadasX'][0], exp1['CoordenadasX'][1]) 169. D_CoordenadasY = Read_Excel_to_List(name1, sheet1, exp1['CoordenadasY'][0], exp1['CoordenadasY'][1]) 170. 171. #LEER ARCOS COMO DICCIONARIO 172. 173. #Necesito los ARCOS como un diccionario, para poder asignarle 174. 175. L_ArcosT1=Read_Excel_to_NesteDic_TupleInt(name1, sheet1, exp1['Arcos'][0], exp1['Arcos'][1]) 176. #print(L_ArcosT1) 177. 178. #*********************************************************************************** 179. # ************************************************************************************ 180. # ************************************************************************************ 181. # PARTE III 182. # Estructuras de datos para guardar escenarios. 183. # Duplicar arcos. Cálculo de longitudes de arcos. Conversion a unidades 184. # adecuadas aplicando factor de escala a cada red 185. # ************************************************************************************ 186. # *********************************************************************************** 187. 188. print(">>> ESTRUTURA DE DATOS") 189. 190. D_ArcosT1={} # Nivel1 D_Arcos_tecnologia 1 191. for (i,j) in D_Arcos1: 192. D_ArcosT1[(i,j)]=D_Arcos1[(i,j)] 193. D_ArcosT1[(j,i)]={} 194. 195. #Duplicate arcos (doble sentido) 196. for (i,j) in D_Arcos1: 197. D_ArcosT1[(j,i)]['ORIGEN']=D_Arcos1[(i,j)]['DESTINO'] 198. D_ArcosT1[(j, i)]['DESTINO']=D_Arcos1[(i,j)]['ORIGEN'] 199. D_ArcosT1[(j,i)]['FACTOR']=D_Arcos1[(i,j)]['FACTOR'] 200. 201. D_LongitudT1 = {} # Nivel1 D_Longitudes_Nivel1 202. for i in D_ArcosT1: 203. a = D_ArcosT1[i]['ORIGEN'] 83 83 Desarrollo de una metodología para el diseño de una red de carriles para bicicletas considerando el nivel de satisfacción de los usuarios. 204. b = D_ArcosT1[i]['DESTINO'] 205. c = D_ArcosT1[i]['FACTOR'] 206. D_LongitudT1[(a, b)] = numpy.sqrt((D_Coordenadas1[a]['X'] - D_Coordenadas1[b]['X']) ** 2 + (D_Coordenadas1[a]['Y'] - D_Coordenadas1[b]['Y']) ** 2) * c 207. #print(D_LongitudT1) 208. ############### Aplicando factor de escala a la red peatonal ********************************* 209. # Para normalizar la distancia entre los nodos, tomamos la longitud calculada anteriormente 210. # y con la distancia real calculamos el factor de escala 211. # La medida real que hemos tomado ha sido la distancia del nodo 1 al 2 (150 m) 212. 213. numerador=Read_Excel_Cell(name1,sheet1,exp1['Escala'][0]) 214. nodo1=Read_Excel_Cell(name1, sheet1,exp1['Nodo1'][0]) 215. nodo2=Read_Excel_Cell(name1, sheet1, exp1['Nodo2'][0]) 216. denominador=numpy.sqrt((D_Coordenadas1[nodo1]['X'] - D_Coordenadas1[nodo2]['X']) ** 2 + (D_Coordenadas1[nodo1]['Y'] - D_Coordenadas1[nodo2]['Y']) ** 2) 217. factorescala1 = numerador / denominador 218. 219. print("---------- Factor Escala ->", factorescala1) 220. 221. for i in D_ArcosT1: 222. a = D_ArcosT1[i]['ORIGEN'] 223. b = D_ArcosT1[i]['DESTINO'] 224. c = D_ArcosT1[i]['FACTOR'] 225. D_LongitudT1[(a, b)] = D_LongitudT1[(a, b)] *c* factorescala1 226. 227. #print( D_LongitudT1) 228. 229. # ************************************************************************************ 230. # ************************************************************************************ 231. # PARTE IV 232. # CARGA DE DATOS PARA GUROBI 233. # # ************************Lectura************************************************************ 234. # ************************************************************************************ 235. Escala1=100 236. print(">>> Cargando y revisando Matriz OD del escenario") 237. 238. #Lectura de la matriz de demanda y escalado según ESCENARIO 239. 240. if ESCENARIO==1: 241. sheet1 = 'MATOD' 242. DD_MatOD = Read_Excel_to_NesteDic(name1, sheet1, 'A1', 'G7') 243. 244. if ESCENARIO== 2: 245. sheet1 = 'MATOD' 246. DD_MatOD = Read_Excel_to_NesteDic(name1, sheet1, 'A1', 'J10') 247. 248. if ESCENARIO== 3: 249. sheet1 = 'MATOD' 250. DD_MatOD = Read_Excel_to_NesteDic(name1, sheet1, 'A1', 'EK141') 251. 252. 253. #print(DD_MatOD) 254. 255. for i in L_Nodos1: 256. for j in L_Nodos1: 257. DD_MatOD[i][j] = DD_MatOD[i][j]*Escala1 258. 259. #print (DD_MatOD) 260. 261. #************************************************************************************* 262. # ************************************************************************************ 263. # PARTE V 264. # GUROBI 265. # ************************************************************************************ 266. # ************************************************************************************ 267. print('>>INICIO GUROBI') 268. 269. ######INTRODUCCION DE LAS LIBRERIAS######################### 270. ANEXO 84 84 271. from gurobipy import GRB, quicksum, Model, multidict 272. import gurobipy as gp 273. from gurobipy import * 274. import gurobipy 275. from numpy import * 276. 277. ########################### SET ############################ 278. #Conjunto de nodos del grafo base 279. nodos=L_Nodos1.copy() 280. #Conjunto de arcos del grafo base 281. #######GRAFO BASE= GRAFO EN EL QUE SE BASARÁ LAS RÉPLICAS EN FUNCIÓN DE LAS TECNOLOGÍAS##### 282. arc={}#####CONJUNTO DE ARCOS########## 283. 284. for i,j in L_ArcosT1: 285. arc.setdefault((i,j),{}) 286. #arc.setdefault((j, i), {}) 287. #print(arc) 288. #Matriz de demanda 289. 290. D={}###########DEMANDA EN EL ARCO############ 291. for i in L_Nodos1: 292. for j in L_Nodos1: 293. if i!=j: 294. D[i,j] = DD_MatOD[i][j] 295. 296. #print(sigma) 297. 298. ##### GENERAR GRAFOS EN FUNCIÓN DE TECNOLOGÍAS ##### 299. 300. #### DEFINIMOS NODOS ##### OJO hay que definir tantas listas de diccionarios de nodos seg{un la tecnología a utilizar 301. nodosT11=[] 302. nodosT11.extend(nodos) 303. nodosT22=[] 304. nodosT22.extend(nodos) ### REPETIR TANTAS TECNOLOGÍAS SE TENGA 305. #print("Conjunto de nodos T1:",nodosT11) 306. #print("Conjunto de nodos T2:",nodosT22) 307. 308. #### EL CONJUNTO DE NODOS TOTALES= sirve para saber los nodos del grafo expandido 309. ##### sirve para saber los nodos del grafo de transferencia 310. nodosf1= nodos+ nodosT11+ nodosT22 #### OJO hay que actualizar segun listas de nodos por tecnologías se tenga 311. nodosf=list(range(1,len(nodosf1)+1)) 312. #print(nodosf) 313. #### Para poder diferenciar los nodos de las diferentes tecnologias le damos continuidad 314. # a la numeración. 315. 316. ## OJO HAY QUE REPETIR ESTE PASO DEPENDIENDO DEL NUMERO DE TENCOLOGÍAS QUE SE TENGA 317. 318. nodosT1=list(range(len(nodos)+1,(2*(len(nodos))+1))) 319. #print("Conjunto de nodos T1:",nodosT1) 320. 321. nodosf11= nodos+ nodosT1 # Replicar en caso de tener más tecnologías 322. nodosT2=list(range(len(nodosf11)+1,(3*(len(nodos))+1))) 323. #print("Conjunto de nodos T2:",nodosT2) 324. 325. 326. # #### DEFINIMOS ARCOS QUE CONECTAN GRAFOS ###### 327. ### Aqui se crea los arcos de cambio #### 328. 329. ### UNIMOS LOS NODOS DEL GRAFO BASE CON LOS NODOS DE T1 330. arcosB_T1={} 331. arcosT1_B={} 332. for i in enumerate(nodos): 333. for j in enumerate(nodosT1): 334. if i[0]==j[0]: 335. arcosB_T1[i[1],j[1]] = {} 336. arcosT1_B[j[1],i[1]] = {} 337. #print(arcosB_T1) 85 85 Desarrollo de una metodología para el diseño de una red de carriles para bicicletas considerando el nivel de satisfacción de los usuarios. 338. 339. ### UNIMOS LOS NODOS DEL GRAFO BASE CON LOS NODOS DE T2 340. arcosB_T2={} 341. arcosT2_B={} 342. for i in enumerate(nodos): 343. for j in enumerate(nodosT2): 344. if i[0]==j[0]: 345. arcosB_T2[i[1], j[1]] = {} 346. arcosT2_B[j[1], i[1]] = {} 347. #print(arcosB_T2) 348. 349. ### UNIMOS LOS NODOS DEL GRAFO T1 CON LOS NODOS DE T2 350. arcosT1_T2={} 351. arcosT2_T1={} 352. for i in enumerate(nodosT1): 353. for j in enumerate(nodosT2): 354. if i[0]==j[0]: 355. arcosT1_T2[i[1], j[1]] = {} 356. arcosT2_T1[j[1], i[1]] = {} 357. #print(arcosT1_T2) 358. 359. ### CONJUNTO DE ARCOS QUE CONECTA A LAS TECNOLOGÍAS 360. 361. arcC={} 362. arcC.update(arcosB_T1) 363. arcC.update(arcosT1_T2) 364. arcC.update(arcosB_T2) 365. arcC.update(arcosT1_B) 366. arcC.update(arcosT2_T1) 367. arcC.update(arcosT2_B) 368. arcCB={} 369. arcC.update(arcosT1_B) 370. arcC.update(arcosT2_T1) 371. arcC.update(arcosT2_B) 372. #print(arcT) 373. 374. ### Se define el conjunto de arcos de cada tecnología 375. ### en este caso las conexiones permanecen iguales para cada tecnología 376. ### lo que cambia es la nomenclatura del nodo 377. #print(L_ArcosT1) 378. 379. #### Grafo tecnología 1 380. 381. #El conjunto de nodos es nodosT1 382. arcT1_o={} 383. arcT1_d={} 384. destino1={} 385. origen1={} 386. 387. for i in arc: 388. origen1[i]=i[0] 389. arcT1_o.update(origen1) 390. destino1[i] = i[1] 391. arcT1_d.update(destino1) 392. #print(arcT1_o) 393. #print(arcT1_d) 394. 395. for i in arc: 396. for j in nodos: 397. if arcT1_o[i]==nodos[j-1]: 398. arcT1_o[i]=nodosT1[j-1] 399. if arcT1_d[i]==nodos[j-1]: 400. arcT1_d[i]=nodosT1[j-1] 401. #print(arc) 402. #print(arcT1_d) 403. #### Aqui se crea el conjunto de arcos de la tecnología 1 404. arcT1={} 405. arcT11={} 406. for i,j in arcT1_o and arcT1_d: 407. arcT11=arcT1_o[i,j],arcT1_d[i,j] 408. arcT1.setdefault(arcT11,{}) 409. #print(arcT1) ANEXO 92 92 821. k=0 822. Cont4=0 823. Cont5=0 824. Cont10=0 825. for i in arc_grafo: 826. if arc_grafo[i]==1: 827. arc_grafo_list=list(arc_grafo.keys()) 828. nx.draw_networkx_edges(G,nodosXY,[arc_grafo_list[k]],edge_color="green",arrowstyle="- |>",arrows=False) 829. Cont4=Cont4+1 830. if arc_grafo[i]==2: 831. arc_grafo_list = list(arc_grafo.keys()) 832. nx.draw_networkx_edges(G, nodosXY,[arc_grafo_list[k]], edge_color="red",arrowstyle="-|>",arrows=False) 833. Cont5=Cont5+1 834. if arc_grafo[i]==0: 835. arc_grafo_list = list(arc_grafo.keys()) 836. nx.draw_networkx_edges(G, nodosXY,[arc_grafo_list[k]], edge_color="black",arrowstyle="-|>",arrows=False) 837. Cont10=Cont10+1 838. k=k+1 839. #print(arc_grafo) 840. if DIBUJARED == 1: 841. plt.show() 842. 843. 844. 845. ######### IMPRIME RESULTADOS ############### 846. arcos_activos2=[] 847. for i,j in arcos_activos1: 848. if (i<500 ): 849. if (j<600): 850. arcos_activos2.append([i,j]) 851. 852. Cont=0 853. for i in arcos_activos2: 854. Cont=C[tuple(i)]+Cont 855. print('El presupuesto disponible ---------------------------->',P,'u.m') 856. print('Coste total de construcción de la red fue ------------>', Cont , 'u.m.') 857. #print("Coste total de viaje del usuario") 858. 859. Cont1=0 860. for i in arcos_activos2: 861. Cont1=U[tuple(i)]+Cont1 862. #print("U" + str(i) + " =" + str(U[tuple(i)])) 863. print('Coste total de viaje del usuario:--------------------->', Cont1 , 'u.m.') 864. 865. #print('Utilizacion del presupuesto') 866. Cont6=(Cont/P)*100 867. print('Se ha utilizado--------->--------------------------', Cont6, '% del presupuesto') 868. 869. 870. print('La red cuenta con', Cont10 ,'carriles con infraestrutura 0') 871. print('La red cuenta con', Cont4 ,'carriles con infraestrutura 1') 872. print('La red cuenta con', Cont5 ,'carriles con infraestrutura 2') 873.