I ÍNDICE · 2017-04-25 · Dijkstra dinámico implementado por Shan Lan, y los algoritmos ACO. ......
Transcript of I ÍNDICE · 2017-04-25 · Dijkstra dinámico implementado por Shan Lan, y los algoritmos ACO. ......
Mg. Wilbert Chávez Irazábal -1-
I ÍNDICE
I ÍNDICE ..................................................................................................... Pág. 01
II RESUMEN ………………………………………………………………... Pág. 02
III INTRODUCCIÓN…………………………………………………………… Pág. 03
IV PARTE TEÓRICA O MARCO TEÓRICO ………………………..…….. Pág. 05
1. Algoritmos más rápidos sobre redes reales de Carreteras…………… Pág. 06
1.1. Algoritmo A* ………………………………………………….. Pág. 08
1.2. Algoritmos ACO ………………………………..………. Pág. 09
2. El método del etiquetado (the labeling method) …..……………. Pág. 10
3. Algoritmo Dijkstra……………………………………………… Pág. 12
4. El algoritmo Dijkstra con cubos dobles y cubos Aproximados………. Pág. 16
V MATERIALES Y MÉTODOS……………………………………………….. Pág. 20
VI RESULTADOS ………………………………………………………………. Pág. 20
6.1. Algoritmo Dijkstra con parámetros de optimización dinámicos……. Pág. 20
6.2. El Algoritmo Dijkstra implementado en comparación con cubosdobles y aproximados ………………………………………………. Pág. 24
VII DISCUSIÓN………………………………………………………………….. Pág. 25
7.1 Conclusiones………………………………………………………… Pag.29
7.2 Recomendaciones……………………………………………………… Pag.29
VIII REFERENCIAS ……………………………………………………………… Pág. 29
IX APÉNDICE…………………………………………………………………… Pág. 31
Mg. Wilbert Chávez Irazábal -2-
II RESUMEN
En este trabajo se plantea la optimización y adaptación de un módulo de
cálculo de rutas teniendo en cuenta las condiciones dinámicas del tráfico con el
objetivo de gestionar eficientemente los recursos que posee una empresa de
transporte. La lógica de la aplicación encargada del cálculo de rutas que se
desarrollo está basada en el algoritmo Dijkstra pero con adaptaciones y
mejoras para el caso que nos ocupa.
El trabajo esta subdividió en dos subtareas, siendo la primera subtarea el de la
asignación óptima de recursos, para posteriormente abordar la solución
mediante el cálculo de rutas de mínimo tiempo con el objetivo tanto de
optimizar los procesos de asignación de recursos como de tiempo de recorrido.
En el diseño de la aplicación se implemento utilizando el lenguaje de
programaciones C++, dotadas de capas de comunicaciones y utilizando para
ello sockets, capacitándola para recibir peticiones de optimización por parte del
cliente.
Asimismo, con los resultados obtenidos se realizo el estudio comparativo con
otras metodologías como Dijkstra estático implementado con cubos dobles,
Dijkstra dinámico implementado por Shan Lan, y los algoritmos ACO.
Obteniéndose una buena performance.
Mg. Wilbert Chávez Irazábal -3-
III INTRODUCCIÓN
En este proyecto se investiga la optimización de rutas de transporte vehiculares
con factor de coste variable. Es bien sabido que el entorno de transporte no es
estático, es decir, posee ciertas variables que se encuentran en continuo
cambio tales como distancia, estado de las carreteras, climatología, estado del
tráfico. Cada vez resulta más necesario ofrecer a las empresas de transporte,
en especial a las de mercancías, una aplicación útil y eficiente en la que
confluyan todos los parámetros dinámicos de la carretera y apunte las rutas
más óptimas en cada momento, gracias al análisis del entorno.
Se trata de un tema de gran importancia actualmente, ya que en los últimos
años ha aumentado en gran medida el número de vehículos y el precio del
combustible, mientras que el número de infraestructuras disponibles no lo ha
hecho del mismo modo, por lo que una aplicación eficiente, capaz de
solucionar los problemas del enrutamiento de vehículos puede proporcionar a
una empresa importantes beneficios gracias al ahorro de tiempo y dinero, y es
que, actualmente, las aplicaciones comerciales destinadas a este fin
únicamente proporcionan rutas válidas sin tener en cuenta los cambios en la
red viaria, es decir, con parámetros estáticos tales como la longitud de los
tramos de carretera y velocidad media en atravesarlos.
El presente trabajo muestra un modelo que representa parte de las condiciones
reales en las cuales se llevan a cabo los aspectos prácticos del transporte.
Una de estas condiciones es la dependencia temporal de los tiempos de
recorrido de acuerdo con el momento o fecha en el que se realicen y de la
evolución de la previsión de las variables de tráfico. Poder tener en cuenta toda
esta información dinámica a la hora de proceder en la estimación de la mejor
ruta entre un origen y un destino es un avance que puede darse gracias a los
datos que recogen todos los días los Centros de Gestión de Tráfico utilizando
múltiples sensores de carretera.
Otro de los aspectos clave ha sido el estudio de los algoritmos que resuelven el
problema de encontrar el camino más corto entre dos puntos en aras de elegir
el más eficiente para resolver el problema. Se realiza un estudio comparativo
entre diversas metodologías mostrando especial interés en parámetros como la
eficiencia, tiempo de ejecución y validez de los resultados para terminar
Mg. Wilbert Chávez Irazábal -4-
justificando la elección que se ha realizado, que en este caso se trata de la
implementación de una variante del algoritmo Dijkstra optimizado para un
entorno cuyos pesos o factores sean variables con el tiempo.
Para llegar al algoritmo definitivo que resuelva los requisitos impuestos por el
entorno se ha realizado un estudio previo de esta metodología, repasando las
optimizaciones realizadas por otros autores tales como la implementación
mediante cubos dobles y sacos de desbordamiento [Noto00], o la optimización
que presentaba Yusuke Fujita [Fuji03] ejecutando el algoritmo Dijkstra
simultáneamente desde el origen y el destino.
El algoritmo elegido tiene múltiples y grandes ventajas frente a otras
metodologías. La primera de ellas se trata de que el algoritmo siempre es
capaz de proporcionar la solución óptima al problema en un tiempo razonable,
mientras que en otras metodologías la resolución se realiza mediante pruebas
por lo que no siempre se puede asegurar el haber llegado a la solución más
óptima del problema. Otra de las ventajas es que no necesita una configuración
previa de parámetros para conseguir resolver el problema puesto que la
configuración del algoritmo Dijkstra no varía dependiendo de la red en la que se
utilice. Todo ello, además, se encuentra encuadrado en una situación de
entorno variable, es decir, el algoritmo es capaz de considerar los costes
dinámicos de cada uno de los arcos de la red, devolviendo, a cada instante, las
rutas más óptimas. Para conseguir estos avances se ha partido de la definición
tradicional del algoritmo Dijkstra para resolver el problema del camino más
corto y se ha ajustado adecuadamente el código para solventar las
necesidades impuestas por el tráfico variables en las redes reales de
carreteras.
Mg. Wilbert Chávez Irazábal -5-
IV PARTE TEÓRICA O MARCO TEÓRICO
El problema de resolver el camino más corto es un área clásica de
investigación dentro del mundo de la informática y los sistemas GIS, se lleva
estudiando desde 1950. Este problema se aplica en campos tan diversos como
puede ser el transporte o las redes de comunicaciones.
Hoy en día existen muchos métodos para determinar la ruta más corta en
función del tipo de red y las especificaciones del problema. A pesar de que en
la literatura existen muchos documentos describiendo métodos y
comparándolos entre sí en términos de rendimiento, la verdad es que no existe
un método mejor para todos los problemas, sino que dependiendo de las
características de este se trata de buscar un algoritmo que se ajuste a los
requerimientos del problema debido a que cada problema tiene sus
condiciones y se aplica a redes de distinto tipo.
Una red se define como un grafo orientado G = (N, A), el cual consiste en un
conjunto de N nodos y un conjunto de A arcos y lleva asociados una serie de
valores numéricos, tales como el número de nodos n = | N |, el número de
arcos m = | A | y la longitud de cada arco, que denotaremos con l (vi,vj). En un
grafo orientado cada arco tiene también una dirección por lo que los arcos (vi,vj)
y (vj, vi) con i j son distintos.
Un camino del vértice vi al vértice vj es una secuencia de arcos de la forma
(vi,vk), (vk, vl), …, (vm, vj) pertenecientes a A, en la que cada vértice aparece
únicamente en una ocasión.
Aunque en el problema general se utiliza un grafo orientado, el cual es muy útil
por ejemplo en el plano de una ciudad donde existen caminos de un solo
sentido, en el caso que se está estudiando se utiliza un grafo que posee tanto
arcos orientados como arcos no orientados, puesto que el problema está
enfocado a redes de transporte de larga distancia, en las que las carreteras en
general son de doble sentido pero como es lógico también existen carreteras
de sentido único.
La formulación del problema del camino más corto se da de la siguiente
manera: dada una red, encontrar los caminos más cortos (de menor coste)
Mg. Wilbert Chávez Irazábal -6-
desde un nodo origen hasta el resto de los nodos de la red o bien hasta un
subconjunto de los mismos.
Estos caminos más cortos forman un árbol orientado T cuya raíz es el nodo
origen s y que cumple la propiedad de que el único camino desde s hasta un
nodo i de la red corresponde al camino más cortó hasta ese nodo. Este árbol
orientado recibe el nombre de árbol de camino más corto (shortest path tree) y
en una red de n nodos existen n árboles diferentes.
Los caminos más cortos desde un nodo origen hasta el resto de nodos de una
red se conocen como one-to-all shortest paths. Por otra parte, los caminos más
cortos desde un nodo origen hasta un subconjunto del resto de nodos de una
red, se conocen como one-to-some shortest paths. Por último, los caminos más
cortos desde cada nodo hasta cualquier otro de una red se conocen como all-
to-all shortest paths.
1. Algoritmos más rápidos sobre redes reales de Carreteras
Aunque en la literatura existen numerosos estudios empíricos sobre la
eficiencia de diversos algoritmos que resuelvan el SPP [Cher93] [Gold93],
todavía no existe una respuesta clara acerca de qué algoritmo se ejecuta más
rápido sobre redes reales de carreteras. En un estudio realizado por Zhan y
Noon [Zhan96], se identificaron los tres algoritmos más rápidos, los cuales en
orden más a menos son: el algoritmo de crecimiento de grafo (the graph growth
algorithm) implementado con dos colas, el algoritmo de Dijkstra implementado
con cubos aproximados (approximate buckets) y por último el algoritmo de
Dijkstra implementado con cubos dobles (double buckets).
Zhan y Noon probaron con redes reales de carreteras 15 de los 17 algoritmos
estudiados por Cherkassky [Cher93], adaptándolos para que resolviesen
automáticamente la variante all-pairs SPP. No consideraron el algoritmo
específico para redes acíclicas debido a que los arcos de las redes reales de
carreteras son bidireccionales y por tanto estas redes contienen ciclos. Del
mismo modo tampoco consideraron una implementación basada en el uso de
una pila para mantener los nodos etiquetados ya que en las pruebas
Mg. Wilbert Chávez Irazábal -7-
preliminares con redes reales de carreteras esta implementación demostró ser
mucho más lenta que el resto de las implementaciones.
Los 15 algoritmos se recogen en la siguiente tabla, mientras que una
descripción detallada de los mismo puede encontrarse en [Cher93] y en las
referencias que contiene.
Tabla 1. Resumen de las 15 implementaciones estudiadas por [Zhan96]
En su estudio, Zhan y Noon usaron 21 redes reales de carreteras para evaluar
los algoritmos. Una característica importante de las redes reales de carreteras
es su bajo grado de conectividad, medido como la relación entre el número de
arcos y el número de nodos. Los grados de conectividad de las redes reales de
carreteras, en general, son parecidos entre sí y difirieren notablemente de los
de las redes simuladas [Gall88]. Esta diferencia es importante debido a que el
número de iteraciones para construir un árbol del camino más corto está
directamente relacionado con el grado de conectividad de la red.
Mg. Wilbert Chávez Irazábal -8-
Del trabajo de Zhan y Noon se desprende que el algoritmo que resuelve de
manera más eficiente el one-to-all SPP es el algoritmo de crecimiento de grafo
de Pallottino implementado con dos colas. Sin embargo, cuando lo que se
pretende es resolver el one-to-one SPP o el one-to-some SPP, el algoritmo
Dijkstra ofrece ventajas, ya que el algoritmo puede terminar tan pronto como se
obtenga la mínima distancia hasta el nodo destino.
En concreto, Zhan y Noon recomendaban dos implementaciones del algoritmo
Dijkstra: la implementación basada en cubos aproximados y la implementación
basada en cubos dobles. La elección entre una u otra implementación se hacía
dependiendo de la longitud máxima de los arcos de la red. Si los arcos de la
red tenían una longitud menor que 1500, Zhan y Noon recomendaban la
implementación del algoritmo de Dijkstra con cubos aproximados para resolver
el one-to-some SPP y viceversa si las redes tenían arcos de longitud mayor
que 1500.
Otro estudio [Chab02] describe el comportamiento del algoritmo A* en redes
con una conectividad más alta que las redes reales de carreteras pero en el
que se tienen en cuenta las condiciones dinámicas del entorno.
1.1. Algoritmo A*El algoritmo A* es un algoritmo de búsqueda para grafos que encuentra el
camino de menor coste entre un nodo inicial y un nodo final. Usa una función
heurística (denotada por f'(x), es una aproximación a f(x), función quien
proporciona la verdadera evaluación de un nodo) para determinar el orden en
que la búsqueda visita nodos en el árbol. La mencionada función es la suma de
otras dos funciones:
Una función que indica el coste del camino seguido hasta un cierto nodo
(denotada g(x)).
Una estimación admisible de la distancia hasta la meta (h'(x)).
La función de evaluación resulta entonces f0(x) = g(x) + h0(x).
Empezando en un nodo inicial dado, el algoritmo expande el nodo con el menor
valor de f'(x). A* mantiene un conjunto de soluciones parciales almacenadas en
una cola de prioridad. La prioridad asignada a un camino x viene determinada
por la función f'(x). El proceso continua hasta que una meta tiene un valor f'(x)
Mg. Wilbert Chávez Irazábal -9-
menor que cualquier otro nodo en la cola (o hasta que el árbol ha sido
completamente recorrido).
1.2. Algoritmos ACOLos algoritmos ACO se basan en el comportamiento de algunas colonias de
hormigas a la hora de buscar caminos óptimos hacia el alimento. Su
funcionamiento se basa esencialmente en el uso de colonias de hormigas
artificiales (población de agentes), siendo por tanto un algoritmo distribuido. Las
hormigas artificiales cooperan entre sí mediante un sistema de comunicación
inspirado en la feromona.
Se trata de algoritmos esencialmente constructivos: en cada iteración del
algoritmo, cada hormiga construye una solución al problema recorriendo un
grafo de construcción.
Cada arista del grafo, que representa los posibles pasos que la hormiga puede
dar, tiene asociada dos tipos de información que guían el movimiento de la
hormiga:
Información heurística, que mide la preferencia heurística de moverse
desde el nodo r hasta el nodo s, o sea, de recorrer la arista Ars. Las
hormigas no modifican esta información durante la ejecución del
algoritmo.
Información de los rastros de feromona artificiales, que mide lo
aprendido por otras hormigas del movimiento de r a s. Imita a la
feromona real que depositan las hormigas naturales. Esta información se
modifica durante la ejecución del algoritmo dependiendo de las
soluciones encontradas por las hormigas.
Los problemas que se pueden resolver mediantes estos algoritmos se tratan de
grafos ponderados G = (X,A), siendo A el conjunto de aristas que unen el
conjunto de componentes X. Al grafo G se le denomina grafo de construcción.
Las hormigas artificiales buscarán soluciones óptimas, de coste mínimo, en el
grafo de construcción, y el movimiento estará basado en la información
heurística de cada arista y la feromona depositada en la misma. Además, se la
dotará de una memoria para poder recordar el camino seguido, que le será de
utilidad en el momento de actualizar el rastro de feromona.
Mg. Wilbert Chávez Irazábal -10-
El modo de operación básico de un algoritmo de ACO es como sigue:
Las M hormigas de la colonia se mueven, concurrentemente y de
manera asíncrona, a través de los estados adyacentes del problema, el
cual se representa en forma de grafo con pesos. Este movimiento se
realiza siguiendo una regla de transición que está basada en la
información local disponible en las aristas del grafo. Esta información
local incluye la información heurística y memorística (rastros de
feromona) para guiar la búsqueda. Al moverse por el grafo de
construcción, las hormigas construyen incrementalmente soluciones.
Una vez que cada hormiga ha generado una solución, se evalúa y
deposita una cantidad de feromona a lo largo de las aristas que es
función de la calidad de su solución. Esta información guiará la
búsqueda de las otras hormigas de la colonia en el futuro.
Además, el modo de operación genérico de un algoritmo ACO incluye
procedimientos adicionales globales tal como la evaporación de la feromona, la
valoración extra de las mejores soluciones depositando una cantidad de
feromona adicional sólo en las transiciones/componentes asociadas a dichas
soluciones (simulando hormigas elitistas o de mayor rango) [Pozo07].
2. El método del etiquetado (the labeling method)
El método del etiquetado es la base de muchos algoritmos que resuelven el
SPP [Gall88] [Ahuj93], tal es el caso del algoritmo Dijkstra. La salida que
proporciona este método consiste en un árbol que parte de un nodo s y termina
en un conjunto de nodos.
Este árbol se construye iterativamente, de forma que al final se obtienen los
caminos más cortos desde el nodo origen hasta el resto de nodos.
El método del etiquetado mantiene tres variables para cada nodo i mientras
construye el árbol del camino más corto: la etiqueta de distancia f(i), el nodo
padre, p(i), y el estado del nodo, S(i). La etiqueta de distancia p(i), contiene la
distancia del camino más corto desde s hasta i que se ha encontrado en un
momento dado, cuando el algoritmo ha finalizado esta variable almacena la
Mg. Wilbert Chávez Irazábal -11-
mínima distancia desde s hasta i. El nodo padre p(i) almacena el identificador
del nodo que precede inmediatamente al nodo i en el árbol. Por último, la
variable del estado del nodo, S(i), almacena uno de los siguientes valores: no
alcanzado, etiquetado temporalmente o etiquetado permanentemente
Cuando el valor es no alcanzado se trata de un nodo que no ha sido
examinado durante la ejecución del algoritmo. Normalmente, la etiqueta de
distancia de un nodo no alcanzado se fija a un valor positivo muy alto (suele ser
+). Una vez que ya se conoce el camino más cortó desde el nodo s hasta el
nodo i, el nodo i esta etiquetado permanentemente. Por último, el estado de
etiquetado temporalmente se da cuando se conoce un camino desde s hasta el
nodo i pero este aún puede ser mejorado. Por tanto, mientras se encuentre
etiquetado temporalmente f(i) es sólo una cota superior de la distancia mínima
entre el nodo s y hasta el nodo i. Una vez que el nodo i pasa a estar etiquetado
permanentemente, f(i) contiene finalmente la distancia mínima entre el nodo s y
el nodo i.
Cuando el algoritmo comienza, se crea un árbol inicial y se inicializan
convenientemente las variables f(i), p(i) y S(i) de cada nodo. Durante la etapa
de búsqueda, cuando un nodo i es examinado, se comprueba la etiqueta de
distancia de cada nodo sucesor j para ver si es posible reducirla yendo al nodo
j desde el nodo i. Si es ese el caso, el árbol se actualiza cambiando el nodo
padre de j a i, es decir, se hace p(j) = i. Como las etiquetas de distancia f(j) se
van haciendo más pequeñas cada vez, llega un momento en el que los nodos j
pasar a estar etiquetados permanentemente.
El algoritmo continúa hasta que todos los nodos están etiquetados
permanentemente. Cuando el algoritmo termina el árbol solución es un árbol de
camino más corto.
Formalmente, el método que se acaba de describir sobre un nodo i se puede
representarse como se muestran en la figura 1.
Mg. Wilbert Chávez Irazábal -12-
Figura 1. Pseudocódigo del método del etiquetado
3. Algoritmo Dijkstra
Una vez estudiadas las bases para entender el funcionamiento del algoritmo se
va a pasar a detallar el método Dijkstra, el cual sigue las especificaciones
[Drey63] en su capítulo 2, utilizado para implementar la solución al problema
que se plantea en este proyecto.
El algoritmo Dijkstra es uno de los algoritmos más representativos para la
resolución del SPP. Este obtiene todos los caminos más cortos desde un
origen s (es decir, resuelve el one-to-all SPP), sin embardo también puede
servir para resolver el all pairs SPP en el cual haya los árboles de camino más
corto de todos los nodos de la red simplemente aplicándolo a cada nodo que
componga el grafo.
Primeramente exponemos el fundamento sobre el que se asienta, que se trata
del principio de optimalidad: si el camino más corto entre los vértices u y v pasa
por el vértice w, entonces la parte del camino que va de w a v debe ser el
camino más corto entre todos los caminos que van de w a v. De esta manera,
se van construyendo sucesivamente los caminos de coste mínimo desde un
vértice inicial hasta cada uno de los vértices del grafo, y se utilizan los caminos
conseguidos como parte de los nuevos caminos.
Mg. Wilbert Chávez Irazábal -13-
Figura 2. Explicación del principio de optimalidad del algoritmo Dijkstra
La exposición del algoritmo es la siguiente:
Dado un conjunto de N nodos, numerados arbitrariamente desde 1 hasta N, y
la matriz NxN denominada D, no necesariamente simétrica y cuyos elementos
del tipo dij representan la longitud del arco que conecta directamente el nodo i
con el nodo j. Se asume que dii=0 y dij 0. Si el nodo i no se encuentra
directamente conectado al nodo j, entonces dij =.
Una vez definido el grafo el algoritmo Dijkstra asigna a los nodos etiquetas de
tentativa, las cuales representan la distancia más corta desde el nodo origen a
todos los demás nodos. El paso que se describe a continuación es repetido
exactamente una vez por cada nodo y una vez concluido las etiquetas de
tentativa pasan a ser etiquetas permanentes y cada una de ellas representa la
distancia más corta desde cada nodo al nodo origen.
Inicialmente la etiqueta del nodo origen es permanente y posee el valor 0,
mientras que las etiquetas del resto de nodos (en total N-1) son tentativas con
distancia infinito. Después, uno por uno, se compara cada etiqueta de tentativa
con la suma de la etiqueta del nodo origen y el coste de atravesar el arco que
une el nodo origen con el nodo en análisis. El valor más pequeño entre estos
dos es la nueva etiqueta de tentativa del nodo.
A continuación se elije, entre el conjunto de N-1 nodos con etiqueta de
tentativa, el que posea la mínima distancia al origen y se declara dicha etiqueta
como etiqueta permanente. Supongamos que dicho nodo es el nodo k.
Mg. Wilbert Chávez Irazábal -14-
Entonces se compara uno por uno cada nodo del conjunto N-2 que poseen
etiquetas de tentativa con la suma de la etiqueta del nodo k y el coste del arco
que les une, la más pequeña entre estas dos distancias pasa a ser la nueva
etiqueta de tentativa. Una vez realizado este paso N-2 veces, el nodo con la
mínima distancia del conjunto N-2 pasa a poseer etiqueta permanente y este
último paso se repite hasta que el número de elementos en el conjunto de
nodos con etiqueta tentativa es 0 o bien hasta que el nodo considerado destino
es etiquetado permanentemente.
Los caminos óptimos pueden ser fácilmente reconstruidos si se adopta una
política correcta sobre los datos que tienen que almacenar las etiquetas. La
política más común guarda la distancia al origen y el número del nodo que une
el arco al nodo que se esté analizando si atravesando dicho arco la distancia al
origen es menor de la que poseía, este nodo es llamado nodo padre.
Formalmente, el algoritmo Dijkstra se puede representar de la manera que
sigue:
Dado G = (N, E) donde N es el conjunto de nodos y E el conjunto de arcos y s
un elemento del conjunto N:
Mg. Wilbert Chávez Irazábal -15-
Figura 3. Pseudocódigo algoritmo Dijkstra
Al implementar el algoritmo Dijkstra en un sistema digital mediante el lenguaje
C++ no se puede realizar la iniciación a infinito por motivos obvios, por lo que
se acordó inicializar al valor -1 para ese fin.
Pasamos ahora a estudiar su eficiencia. Si N es el número total de nodos que
componen el grafo y E el número total de arcos, el tiempo total de ejecución del
algoritmo Dijkstra es O(N2 + E) = O(N2), donde la igualdad resulta del hecho de
que siempre es posible encontrar constantes c1, c2 y c3 que satisfagan la
Mg. Wilbert Chávez Irazábal -16-
igualdad c1·N2 + c2·N2 c3·N2, y por tanto el tiempo de ejecución del algoritmo
varía cuadráticamente con el número de nodos de la red.
Por otra parte es importante recalcar que el algoritmo no funciona cuando los
pesos de los arcos pueden tener una magnitud negativa. Por ejemplo, si se
considera el siguiente grafo:
Figura 4. Ejemplo de pesos negativos en el algoritmo Dijkstra
Si se declara el nodo A como nodo origen, el algoritmo seleccionará el arco
(A, X) que minimiza la expresión f(A) + l(A, X) y que en este caso será el arco
(A, B).
Entonces se fijará f (B) = 2 y se buscará el arco (B, Y) que minimice la
expresión f(B) + l(B, Y). Como este arco no existe, pueden ocurrir dos cosas:
que el algoritmo termine sin descubrir la mínima distancia hasta el nodo C, o
que se vuelva a examinar el nodo A, se seleccione el nodo (A, C) y se fije la
distancia f(C) = 3. Ninguno de las dos posibles soluciones es la correcta puesto
que en el segundo caso el algoritmo no encuentra el camino más corto a C que
es A – B – C, sino que lo considera inmediato de coste 3.
4. El algoritmo Dijkstra con cubos dobles y cubos Aproximados
En el algoritmo original de Dijkstra, los nodos con etiqueta de tentativa son
tratados como una lista no ordenada, lo cual es equivalente a implementar con
una lista no ordenada la cola de prioridad Q del procedimiento general para la
construcción de un árbol de camino más corto. Esto supone una limitación, ya
que en cada iteración hay que recorrer todos los nodos almacenados en Q para
seleccionar aquel con la mínima etiqueta de distancia.
Mg. Wilbert Chávez Irazábal -17-
Una mejora del algoritmo consiste en mantener los nodos etiquetados en una
estructura de datos de forma que se encuentre ordenador por sus etiquetas de
distancia.
Una estructura de datos formada por cubos (buckets) es un ejemplo de tales
estructuras.
Los cubos se encuentran dispuestos de una manera ordenada como se
muestra en la siguiente figura 5. [Ahuj93]
Figura 5. Ejemplo de una estructura de datos basada en cubos
El cubo k almacena todos los nodos etiquetados temporalmente cuyas
etiquetas de distancia están dentro de un cierto rango. Los nodos contenidos
en un cubo pueden almacenarse en una lista doblemente enlazada. Una lista
doblemente enlazada únicamente requiere un tiempo O(1) para completar cada
una de las operaciones para actualizar una distancia en la estructura de cubos.
Entre estas operaciones están el comprobar si un cubo está vacío, añadir un
elemento a un cubo y borrar un elemento de un cubo.
Dial en 1969 fue el primero en implementar el algoritmo Dijkstra utilizando
cubos [Dial69]. En la implementación de Dial, el cubo k contiene todos los
nodos etiquetados temporalmente cuyas etiquetas de distancia son iguales a k.
Los cubos se recorren de una manera secuencial (0, 1, 2,3,…) hasta que se
encuentra un cubo que no está vacío. Por definición, todos los nodos del primer
cubo no vacío tienen la mínima etiqueta de distancia. Uno a uno, estos nodos
Mg. Wilbert Chávez Irazábal -18-
con la mínima etiqueta de distancia son examinados, etiquetados
permanentemente y eliminados del cubo.
La posición dentro de la estructura de cubos de un nodo etiquetado
temporalmente se actualiza cuando su etiqueta de distancia cambia. Por
ejemplo, si la etiqueta de distancia de un nodo etiquetado temporalmente
cambia de f1 a f2, el nodo pasa del cubo f1 al cubo f2. Este proceso se repite
hasta que todos los nodos son etiquetados permanentemente o cuando se
etiqueta el nodo declarado como destino.
La implementación de Dial sobre el algoritmo Dijkstra requiere (n · C) + 1 cubos
en el peor de los casos, donde C es la longitud máxima de los arcos de la red.
Sin embargo, se ha demostrado que en una red con una longitud máxima de
arco igual a C sólo se necesitan C + 1 cubos para almacenar todos los nodos
con etiqueta de tentativa.
Como puede observarse, en la implementación básica con cubos del algoritmo
Dijkstra, los requerimientos de memoria pueden ser prohibitivos cuando C y n
son grandes. Estos requerimientos de memoria pueden reducirse usando otras
implementaciones con cubos del algoritmo Dijkstra, tales como la
implementación con saco de desbordamiento (overflow bag) o la
implementación con cubos aproximados (approximate buckets) [Cher93].
La implementación con saco de desbordamiento utiliza solo a < (C +1) cubos,
siendo a un parámetro de entrada. En la etapa i del algoritmo, únicamente se
encuentran almacenados en cubos los nodos etiquetados temporalmente cuyas
etiquetas de distancia están dentro del intervalo [a(i), a(i) + (a – 1)]. Los otros
nodos se almacenan en una estructura aparte denominada saco de
desbordamiento. Inicialmente los valores de i y de a(i) se fijan a 0. Cuando no
queda ningún nodo en el intervalo antes mencionado, i se incrementa en una
unidad y de a(i) se fija al valor de la mínima etiqueta de distancia de los nodos
etiquetados temporalmente. Entonces, los nodos cuyas etiquetas de distancia
quedan dentro del nuevo intervalo [a(i), a(i) + a-1] se mueven desde el saco de
desbordamiento hasta los cubos correspondientes y comienza un nuevo ciclo
de comprobación.
Mg. Wilbert Chávez Irazábal -19-
En la implementación con cubos aproximados del algoritmo Dijkstra, el cubo i
contiene aquellos nodos etiquetados temporalmente cuyas etiquetas de
distancia están dentro del intervalos [i · b, (i + 1) · (b-1)], donde b es una
constante que se puede elegir.
Aquí, el término de aproximados se refiere al hecho de que las etiquetas de
distancia de los nodos contenidos en un mismo cubo no son exactamente
iguales, como ocurría en el caso de la implementación básica con cubos, sino
que están dentro de un determinado rango de valores. Cada cubo está
implementado mediante una cola FIFO (first in first, out).
La implementación con cubos aproximados requiere un total de número de
cubos especificados por la ecuación: EnteroMasGrande · (C/b) +1, siendo la
complejidad temporal en el peor de los casos de O (m · b + n (b + C / b)). Como
se puede observar, este algoritmo reduce los requerimientos de memoria a
costa de aumentar el tiempo de ejecución. Cada nodo puede que sea
examinado más de una vez, aunque no más de b veces.
Finalmente, la implementación del algoritmo de Dijkstra con cubos dobles
combina ideas de las dos implementaciones anteriores. Esta implementación
mantiene dos niveles de cubos: un nivel superior y otro inferior.
En el nivel inferior, son usados un total de d cubos. Un cubo i del nivel superior
contiene todos aquellos nodos cuyas etiquetas de distancia están dentro del
intervalo [i · d, (i + 1) · d -1]. Además, en el nivel superior existe un cubo no
vacío que contiene el valor del índice más bajo de L. Un cubo f(j) – (L · d) del
nivel inferior contiene los nodos cuyas etiquetas de distancia están en el
intervalo [L · d, (L +1) · d -1]. Precisamente son los nodos contenidos en los
cubos del nivel inferior los que son examinados durante el proceso de
comprobación. Una vez que todos los nodos del nivel inferior han sido
examinados, el valor de L se incrementa y entonces, los nodos contenidos en
los cubos no vacíos del nivel superior se mueven hasta los cubos
correspondientes del nivel inferior para que comience un nuevo ciclo de
comprobación [Vara03].
Mg. Wilbert Chávez Irazábal -20-
V. MATERIALES Y MÉTODOS
Se siguió el esquema de principio establecido en la Metodología de la
Investigación y como el presente trabajo es aplicado, se presenta la
fundamentación teórica y las aplicaciones que se pueden hacer con nuestro
diseño.
Los resultados obtenidos en nuestra simulación han sido comparados con los
valores obtenidos por otros algoritmos. Para la realización nuestro trabajo
hemos hecho uso de las bibliografías que se muestra en el ítem VIII de
referencias. Asimismo, para la implementación de la aplicación informática, se
cuenta con un equipo INTEL Core i7, 3.4GHZ Seis Núcleos, Disco Duro Sata
500 GB, Memoria RAM 4 GB 4000 DDR III, Windows SEVEN 7, equipado con
Microsoft® Visual Studio 2008 para la edición de código en lenguaje C/C++.
Del mismo modo se conto con el acceso al programa servidor de información
de cartográfica digital comercial Geobis.
VI.RESULTADOS
Antes de darles los resultados de las medidas realizadas le describiremos el
algoritmo optimizado y el algoritmo montado.
6.1. Algoritmo Dijkstra con parámetros de optimización dinámicos
En los algoritmos descritos anteriormente no cambian sustancialmente en lo
referente a programación cuando el coste de atravesar cierto arco no es
siempre el mismo, si no que varía dependiendo del instante de tiempo en el
que se vaya a atravesar, pero sí que cambia de forma importante el resultado.
A continuación se va a formular la variante del algoritmo Dijkstra que tiene en
cuenta la variabilidad de los costes en función del momento del viaje en el que
se planea atravesar cierto arco. Esta variante será la que posteriormente se ha
implementado en el proyecto, siguiendo las indicaciones de la referencia
[Drey69].
En un entorno variable el SPP de una fuente al resto de nodos puede que no
proporcione la misma solución en cada ejecución del algoritmo, esto dependerá
Mg. Wilbert Chávez Irazábal -21-
de los pesos variables de los arcos en un cierto momento y de la predicción de
los instantes sucesivos.
[Cook66] estudió el problema de encontrar el camino más rápido entre
ciudades en las cuales el tiempo de viaje entre la ciudad i y la ciudad j
dependía del momento de salida de la ciudad i. A partir de ello [Drey69] formuló
el siguiente algoritmo: Si t es el momento de salida de la ciudad i hacia la
ciudad j, dij (t) denota el tiempo de viaje. Si los horarios de viaje son tales que
un retraso en la salida disminuye el tiempo de llegada, dij (t) representa el
desfase de tiempo entre el instante t y el momento más temprano de llegada
posible.
Según esto, se define fi (t) como el mínimo tiempo de viaje hasta N, partiendo
de la ciudad i en el instante t, y se establece la siguiente fórmula:
N
min( ) ( ( ))
f (t)=0
i ij j ijf d t f t d tj i
Ecuación N°01
Se asume que todas las distancias dij (t) están definidas y que toman valores
enteros positivos. Por otra parte se define T como el máximo tiempo de viaje
que se puede dar entre cualquier ciudad y N, tomando como partida i en el
instante 0 y asumiendo que todos los nodos están conectados en cualquier
instante (puede que por enlaces de coste ), el procedimiento requiere como
mucho N2 · T2 sumas y comparaciones.
Se va a describir un procedimiento iterativo para encontrar el camino más corto
desde la ciudad i hasta la N en el instante 0. Este procedimiento es el método
Dijkstra, el cual se ha demostrado que es tan eficiente como cuando resuelve el
problema estático, asegurando el encontrar el árbol de los caminos más cortos
en cada ejecución.
Al igual que ocurría en el método estático, al principio únicamente se encuentra
etiquetado permanentemente el nodo origen, io, con una distancia igual a 0 y el
resto de nodos de la red poseen una etiqueta de tentativa igual a . En el
segundo paso se examinan las etiquetas de tentativa de todos los nodos
adyacente a i y se compara entre la distancia de la etiqueta actual, fj, y la suma
de fi y dij (fi). Una vez actualizadas las etiquetas de todos los nodos adyacentes
Mg. Wilbert Chávez Irazábal -22-
al origen se elige el nodo con etiqueta de tentativa cuya distancia f sea la
mínima, por ejemplo k, y se declara permanente. (fk representa el mínimo
tiempo posible de viaje saliendo del nodo io en el instante 0) Ahora el nodo k es
usado para intentar reducir las etiquetas de tentativa de sus adyacentes,
usando la comparación de fk + dkj (fk) con la etiqueta actual y una vez realizado
se volverá a elegir el nodo con mínima distancia como permanente. El
algoritmo terminará cuando los N nodos de la red posean una etiqueta
permanente o se encuentre la mínima distancia a un nodo declarado como
destino.
Después de cómo máximo N2 comparaciones y N2 / 2 sumas, el nodo N será
etiquetada y, partiendo del nodo io en el instante 0, el árbol de caminos más
cortos quedará definido incluyendo el último nodo N.
Como esta variante del método Dijkstra guarda grandes semejanzas con el
primero, se puede concluir que el método necesitará N2 / 2 sumas y 2N2
comparaciones si el método distingue entre las dos clases de nodos
(temporales y permanentes).
A continuación se muestra el pseudocódigo de esta variante:
Dado G = (N, E) donde N es el conjunto de nodos y E el conjunto de arcos y s
un elemento del conjunto N:
Mg. Wilbert Chávez Irazábal -23-
Figura 6. Pseudocódigo Dijkstra con parámetros dinámicos dependientes del tiempo
Mg. Wilbert Chávez Irazábal -24-
6.2. El Algoritmo Dijkstra implementado en comparación con cubosdobles y aproximados.
Las implementaciones con cubos dobles y cubos aproximados son de la
implementación realizada en el proyecto pero con una variación sustancial
sobre las otras dos. En este caso se ha decidido implementar dos listas
enlazadas separadas, una que contiene los nodos con etiquetas de tentativa y
la segunda con los nodos con etiqueta permanente.
La primera de ellas se trata de una lista ordenada por el campo del tiempo, que
es en nuestro caso el que se va a desear optimizar. Durante la ejecución,
cuando cada nodo de la red es etiquetado temporalmente se inserta en la lista
de manera ordenada y cuando la distancia a cierto nodo que ya posee una
etiqueta cambia este simplemente se reordena en la lista. De esta forma al
acabar cada iteración no es necesario buscar en ella cuál es el nodo de mínimo
coste, sino que el primero de la lista de tentativas será el nodo solución en
cada una de las iteraciones. De esta manera se ahorra tiempo de búsqueda
con respecto a las implementaciones antes vistas.
En cada iteración el nodo con mínimo coste (el primero de la lista de tentativas)
se sacará de esta y se insertará en primer lugar en la lista de nodos
permanentes, de esta manera cuando se etiquete el nodo destino únicamente
se deberá recorrer una vez la lista de nodos permanentes para encontrar el
camino de nodos hasta el origen.
Esta implementación proporciona resultados óptimos de rendimiento en las
pruebas realizadas sobre la red de carreteras siendo uno de los motivos la
conectividad de la red utilizada. Es decir, en una red con alta conectividad en
cada iteración del algoritmo se etiquetan varios nodos con etiquetas de
tentativa pero sin embargo solo uno de ellos sale de la lista (el que va a ser
etiquetado permanentemente), por lo que la lista enlazada en pocas iteraciones
crecerá de manera notable y el coste de procesamiento de insertar los nodos
ordenadamente será mayor. Sin embargo, cuando la conectividad de la red es
baja, como ocurre en las redes reales de carreteras, la lista de nodos tentativa
apenas crece por lo que las operaciones de insertar y ordenar un nodo tienen
Mg. Wilbert Chávez Irazábal -25-
un coste de procesamiento menor que en la implementación por cubos, donde
es necesario hacer búsquedas iterativas en dos listas diferentes para insertar
un nodo.
VII DISCUSIÓN
La comparación del rendimiento del módulo de cálculo de rutas frente a otras
metodologías que resuelven el mismo problema se presentan a continuacion.
Tabla 2. Tabla que muestra la comparación de tiempos entre la implementación de Dijkstraconvencional y el Dijkstra implementado en el proyecto (Fuente Propia).
Según se muestra en la Tabla 2 las mejoras implementadas respecto al
algoritmo convencional suponen una mejora importantísima del tiempo de
procesamiento, con ellas el algoritmo se convierte en una aplicación con
utilidad para solventar problemas de manera inmediata. Sin embargo, si no se
hubieran aplicado estas mejoras el algoritmo seguiría produciendo soluciones
igualmente óptimas pero la validez de los resultados ya no sería la misma,
puesto que la lentitud en encontrar la solución a una ruta que se quiere llevar a
cabo de manera inmediata le resta eficiencia en el procesamiento de la
información.
Tabla 3. Tiempos de ejecución del módulo de rutas implementado(Fuente Propia)
Mg. Wilbert Chávez Irazábal -26-
En la Tabla 3 se pueden observar los tiempos de ejecución del algoritmo, para
el cálculo de rutas dependiendo de la distancia desde el nodo origen al nodo
destino. Para estimar los tiempos medios se han realizado 4 ejecuciones de
cada ruta en las cuales el nodo origen y el nodo destino son siempre los
mismos. Por otra parte los tiempos se encuentran expresados en milisegundos
de lo que se desprende que la aplicación posee buena calidad de resultados en
referencia al tiempo necesario para obtenerlos. Por otra parte, es importante
notar que el tiempo de procesamiento de un nodo siempre es el mismo, pero
los tiempos de ejecución aumentan directamente con la distancia porque el
número de nodos que deben ser examinados también lo hace.
A continuación se va a realizar un estudio de los tiempos medios de
procesamiento por nodo, para ello se han realizado pruebas en las que se
comprueba el número de nodos etiquetados permanentemente frente al tiempo
que el algoritmo ha necesitado para ello. Asimismo se han realizado pruebas
resolviendo el one-to-all SPP con el objetivo de que el algoritmo resolviera el
SPP a los 123705 nodos que posee la red para comprobar el tiempo de
ejecución. Los resultados obtenidos se muestran a continuación:
Tabla 4. Tiempos medios de procesamiento por nodo (Fuente Propia)
A la vista de los resultados el módulo de cálculo de rutas resuelve un nodo
cada 0,021069 ms, lo cual es un tiempo bastante bueno y más teniendo en
cuenta las condiciones dinámicas del algoritmo.
En la tabla 5 se observa la comparación del rendimiento con la implementación
de Dijkstra mediante cubos dobles hecha por [Vara03]. En la prueba realizada
Mg. Wilbert Chávez Irazábal -27-
se toman 100 nodos orígenes junto con 300 nodos destino y se hallan todas las
posibles rutas de cada punto origen a cada punto destino (en total 30000 rutas
halladas), en este caso se trabajó sobre un grafo de 3636 y 4574, mucho
menor que nuestro grafo de trabajo.
También es importante notar que la implementación con cubos dobles que
realizó no tenía en cuenta las condiciones dinámicas de la carretera, situación
que nuestro módulo si contempla.
Con los tiempos totales de ejecución de cada una de las 30000 rutas que
obtuvo halló el tiempo medio de procesamiento por nodo de cada una de las
rutas y con ello obtuvo una estimación media del tiempo de procesamiento por
nodo de la implementación de Dijkstra con cubos dobles. Los resultados son
los siguientes:
Tabla 5. Comparación de los tiempos de procesamiento por nodo entre la implementaciónestática de Dijkstra de [Vara03] y la implementación dinámica de Dijkstra optimizada (fuente
propia)
[Chab02] realizó una implementación del algoritmo A* teniendo en cuenta los
pesos variables en los arcos de la red de pruebas y realizó estudios de
rendimiento sobre ella, la cual constaba de 3000 nodos y 10000 arcos. La
conectividad de esta red difiere bastante con las redes reales de carreteras
donde la conectividad es baja, mientras que el grafo donde se han realizado las
pruebas del trabajo posee una relación arco/nodo de 1,0826 la conectividad de
la red de [Chab02] es de 3,33.
Tabla 6. Comparación del tiempo de procesamiento entre el algoritmo A* implementado por[Chab02] y el algoritmo Dijkstra implementado en el proyecto (Fuente Propia)
Mg. Wilbert Chávez Irazábal -28-
En la tabla 7 se refleja que el algoritmo implementado en el proyecto es
ligeramente más rápido que el implementado por [Chab02].
Tabla 7. Comparación entre los tiempos de procesamiento entre el algoritmo Dijkstraimplementado por [Chab02] y el implementado en este proyecto (Fuente propia)
Se realiza las pruebas sobre una red de 4698 enlaces y 3631 nodos, por lo que
la conectividad de la red es de 1,2938, dato que revela que el grafo es bastante
semejante al que conforman las redes reales de carreteras. Del mismo modo,
es importante notar que la máquina sobre la que se realizaron las pruebas es la
misma que la que se ha utilizado para probar la aplicación desarrollada en este
proyecto.
Para los algoritmos ACO el tiempo medio de ejecución se encuentra en
relación con el tamaño de la colonia de hormigas, de lo que se desprende que
la calidad de las soluciones obtenidas depende del tiempo de ejecución.
La colonia se encuentra en torno a 145 hormigas:
Tabla 8. Comparación el tiempo de ejecución en el entorno de costes dinámicos entre elalgoritmo ACO y el algoritmo Dijkstra implementado en el proyecto(Fuente propia).
Mg. Wilbert Chávez Irazábal -29-
7.1 Conclusiones
1. Con el algoritmo implementado se ha obtenido una mejora importante,
en el tiempo de procesamiento de la información, tal como se puede
observar en las tablas mostradas en el presente trabajo de investigación.
2. La aplicación del algoritmo implementado, en el optimizador hace que
podamos procesar una gran cantidad de información de tráfico en
tiempo real.
3. La utilización de Algoritmos dinámicos son los más recomendables para
realizar la optimización de rutas, puesto que la velocidad de las
variaciones de las condiciones no perjudica la performance de los
resultados que nos brinda el algoritmo implementado.
7.2 Recomendaciones
1. El diseño del optimizador de rutas debe de desarrollarse utilizando
algoritmos dinámicos, modulables.
2. Incrementar el número vías con sensores para mejorar el mapa de
tráfico de las ciudades.
Mg. Wilbert Chávez Irazábal -30-
VIII REFERENCIAS
[Affa08] Affabili Vicenten, P. Estimación de tiempos dinámicos de recorridoen vías de tráfico ininterrumpido con tramos sensorizados. Proyectofin de carrera. Escuela superior de ingenieros de telecomunicación.2008-UVA.
[Ahuj93] Ahuja R.K., Mehlorm K, Orlin J.B. Faster Algorithms for ShortestPath Problem. Journal of Association of Computing Machinery, 1993Pagina 213-223
[Chab02] Chabini Ismail, Lan Shan. Adaptations of the A* Algorithm for thecomputation of fastest paths in deterministic discrete-time dynamicnetworks. IEEE Transactions on Intelligent transportation systems2002, Vol. 3, Pagina 60-74
[Cher93] Cherkassky B.V, Goldberg, A.V., Radzik ,T. Shortest PathsAlgorithms: Theory and Experimental Evaluation. Technical report,Computer science Department, Stanford University 1993, Pagina93-1480.
[Cook66] Cooke K., Halsey L. The Shortest Route through a Network withTime-Dependent Internodal Transit Time, Journal of MathematicalAnalysis and Application, 1966, Vol. 14. Paginas 493-498.
[Dial69] Shortest Path Forest with Topological Ordering, Communications ofthe ACM, 1969 Vol 12, Paginas 632-633.
[Drey69] Dreyfus S. E. An appraisal of some shortest-path algorithms.Operations Research 1969, Vol. 17, Pagina 395-412.
[Fuji03] Fujita Yusuke, Nakamura, Yoshihiko, Shiller Zvi. Dual Dijkstrasearch for paths with different topologies. IEEE InternationalConference on Robotics and Automation 2003, Vol 3, Pages: 3359-3364
[Gall88] Gallo, G, Pallotino, S. Shortest Paths Algorithms. Annals ofoperations research, 1988 Vol. 13 Pagina 3-79.
[Gold93] Goldberg A.V, Radzik T. A Heuristic Improvement of TheBellman-Ford Algorithm. Applied mathematics letter,1993 Vol. 6,Pagina 3–6
[Noto00] Noto Masato, Sato Hiroaki. A method for the shortest path search byextended Dijkstra algorithm, IEEE International Conference onSystems Man and Cybernetics 2000, Vol. 3, Pagina 2316 - 2320
Mg. Wilbert Chávez Irazábal -31-
[Pozo07] Pozo Barberá, J. Algoritmos meta-heurísticos aplicados al guiado encarreteras en mal estado. Implementación del algoritmo Ant-Px enJava. Doctorado en Electrónica, Universidad de Alcalá. 2007
[Vara03] J.V. Vara Rodríguez. Desarrollo de algoritmos de optimizaciónaplicados a redes de transporte ITS-UPM 2003
[Zhan96] Zhan F,B, Noon C.E. Shortest Path Algorithms: An EvaluationUsing Real Road Networks. Institute for Operations Research andthe Management Sciences,Transportation Sciencie, 1996. Vol. 32,
Mg. Wilbert Chávez Irazábal -32-
IX APÉNDICE
En la gráfica de la figura 7, se aprecia como al ir aumentando la densidad del
tráfico, la velocidad de los vehículos que transitan por dicho tramo disminuye
según una función polinómica descrita en [Affa08] Hasta un cierto nivel en el
que se mantiene prácticamente constante (estado de saturación de la vía).
Figura 7. Relación entra la velocidad y el coste con los datos de un día de tráfico intenso
Del mismo modo se puede esperar una relación entre la densidad en las
carreteras y el factor de coste estimado por la aplicación de información de
tráfico. Este factor de coste afecta de modo multiplicativo al tiempo de recorrido
en el tramo donde se encuentra el sensor. En la figura 8, se muestra como el
coste aumenta con la densidad en las carreteras.
Figura 8. Relación entre el coste y la densidad