Upload
raul-daniel-rivero-aranda
View
260
Download
0
Embed Size (px)
DESCRIPTION
algoritmo
Citation preview
UNIVERSIDAD NACIONAL DE INGENIERÍA
FACULTAD DE INGENIERIA INDUSTRIAL Y DE SISTEMAS
TEMA: METODO DE FLOYD DE LA RUTA MAS CORTA APLICADO AL ÁREA DE CRM - INTERBANK CURSO: INVESTIGACION DE OPERACIONES II INTEGRANTES: RIVERO ARANDA, RAÚL DANIEL PROFESOR: ING LUIS MEDINA AQUINO ESPECIALIDAD: INGENIERIA INDUSTRIAL
MARCO TEÓRICO
El algoritmo de Floyd es más general que el de Dijkstra, ya que determina la ruta más corta
entre dos nodos cualesquiera de la red.
El algoritmo representa una red de n nodos como una matriz cuadrada de orden n, la
llamaremos matriz C. De esta forma, el valor Cij representa el coste de ir desde el nodo i al
nodo j, inicialmente en caso de no existir un arco entre ambos, el valor Cijserá infinito.
Definiremos otra matriz D, también cuadrada de orden n, cuyos elementos van a ser los
nodos predecesores en el camino hacia el nodo origen, es decir, el valor Dijrepresentará el
nodo predecesor a j en el camino mínimo desde i hasta j. Inicialmente se comienza con
caminos de longitud 1, por lo que Dij = i.
Las diagonales de ambas matrices representan el coste y el nodo predecesor para ir de un
nodo a si mismo, por lo que no sirven para nada, estarán bloqueadas.
Los pasos a dar en la aplicación del algoritmo de Floyd son los siguientes:
Formar las matrices iniciales C y D.
Se toma k=1.
Se selecciona la fila y la columna k de la matriz C y entonces, para i y j, con i≠k, j≠k ei≠j,
hacemos:
Si (Cik + Ckj) < Cij → Dij = Dkj y Cij = Cik + Ckj
En caso contrario, dejamos las matrices como están.
Si k ≤ n, aumentamos k en una unidad y repetimos el paso anterior, en caso contrario
paramos las iteraciones.
La matriz final C contiene los costes óptimos para ir de un vértice a otro, mientras que la
matriz D contiene los penúltimos vértices de los caminos óptimos que unen dos vértices, lo
cual permite reconstruir cualquier camino óptimo para ir de un vértice a otro.
Modelo matemático
Sea igual 1, si existe el camino de ir de la i a la ciudad j, y 0 en otro caso, para el
conjunto de ciudades 0,..., n.
la distancia desde la ciudad i a la ciudad j. Entonces el modelo de programación lineal
en enteros puede ser escrito como:
El primer conjunto de igualdades asegura que cada ciudad 0, ..., n de salida llegue
exactamente a una ciudad, y el segundo conjunto de igualdades aseguran que desde cada
ciudad 1, ..., n se salga exactamente hacia una ciudad (ambas restricciones también
implican que exista exactamente una salida desde la ciudad 0.) La última restricción obliga
a que un solo camino cubra todas las ciudades y no dos o más caminos disjuntos cubran
conjuntamente todas las ciudades. Para probar esto se muestra en (1) que toda solución
factible contiene solamente una secuencia cerrada de ciudades, y en (2) que para cada uno
de los recorridos que cubren todas las ciudades, hay valores para todas las variables que
satisfacen las restricciones.
Para probar que cada solución factible contiene solamente una secuencia cerrada de
ciudades, es suficiente mostrar que cada sub-ruta en una solución factible pasa a través de
la ciudad 0 (note que las igualdades aseguran que solamente pude haber un recorrido de
ese tipo). Por tanto, si sumamos todas las desigualdades correspondiente a para
cada sub-ruta de k pasos que no pasan a través de la ciudad 0,
obtenemos lo cual es una contradicción.
Ahora, mostramos que para cada recorrido que cubre todas las ciudades, hay valores de
las variables que satisfacen las restricciones.
Sin pérdida de generalidad, se define el recorrido con origen y fin en la ciudad 0.
Escoger si la ciudad i es visitada en el paso t (i, t = 1, 2, ..., n).
Entonces dado no puede ser mayor que n y no puede ser menor
que 1; por lo tanto las restricciones se satisfacen siempre que Para
se satisfacen las restricciones.
METODO DE SOLUCION
ALGORITMO DE FLOYD
El algoritmo de Floyd es más general que el de Dijkstra, ya que determina la ruta más corta entre dos nodos cualesquiera de la red.
El algoritmo representa una red de n nodos como una matriz cuadrada de orden n, la llamaremos matriz C. De esta forma, el valor Cij representa el coste de ir desde el nodo i al nodo j, inicialmente en caso de no existir un arco entre ambos, el valor Cij será infinito.
Definiremos otra matriz D, también cuadrada de orden n, cuyos elementos van a ser los nodos predecesores en el camino hacia el nodo origen, es decir, el valor Dij representará el nodo predecesor a j en el camino mínimo desde i hasta j. Inicialmente se comienza con caminos de longitud 1, por lo que Dij = i.
Las diagonales de ambas matrices representan el coste y el nodo predecesor para ir de un nodo a sí mismo, por lo que no sirven para nada, estarán bloqueadas.
Los pasos a dar en la aplicación del algoritmo de Floyd son los siguientes:
Formar las matrices iniciales C y D.
Se toma k=1.
Se selecciona la fila y la columna k de la matriz C y entonces, para i y j, con i≠k, j≠k e i≠j, hacemos:
Si (Cik + Ckj) < Cij → Dij = Dkj y Cij = Cik + Ckj
En caso contrario, dejamos las matrices como están.
Si k ≤ n, aumentamos k en una unidad y repetimos el paso anterior, en caso contrario paramos las iteraciones.
La matriz final C contiene los costes óptimos para ir de un vértice a otro, mientras que la matriz D contiene los penúltimos vértices de los caminos óptimos que unen dos vértices, lo cual permite reconstruir cualquier camino óptimo para ir de un vértice a otro.
Características generales
Obtiene la mejor ruta entre todo par de nodos.
Trabaja con la matriz D inicializada con las distancias directas entre todo par de nodos.
La iteración se produce sobre nodos intermedios, es decir, para todo elemento de la matriz se prueba si lo mejor para ir de i a j a través de un nodo intermedio elegido o como estaba anteriormente, y esto se prueba con todos los nodos de la red.
Una vez probados todos los nodos de la red como nodos intermedios, la matriz resultante da la mejor distancia entre todo par de nodos.
Matriz Sn que entrega el nodo intermedio para llegar desde un nodo i a un nodo j del grafo.
Análisis de complejidad
El algoritmo de Floyd es mucho más eficiente desde el punto de vista de almacenamiento dado que puede ser implementado una vez actualizado la distancia de la matriz con cada elección en k. En muchas aplicaciones específicas, es más rápido que cualquier versión del algoritmo de Dijkstra.
Aplicaciones y generalizaciones
El algoritmo de Floyd puede ser utilizado para resolver los siguientes problemas, entre otros:
Camino mínimo en grafos dirigidos (algoritmo de Floyd).
Cierre transitivo en grafos dirigidos (algoritmo de Warshall). Es la formulación original del algoritmo de Warshall. El grafo es un grafo no ponderado y representado por una matriz booleana de adyacencia. Entonces la operación de adición es reemplazada por la conjunción lógica (AND) y operación menor por la disyunción lógica (OR).
Encontrar una expresión regular dada por un lenguaje regular aceptado por un autómata finito (algoritmo de Kleene).
Ruta óptima. En esta aplicación es interesante encontrar el camino del flujo máximo entre 2 vértices. Esto significa que en lugar de tomar los mínimos con el pseudocódigo anterior, se coge el máximo. Los pesos de las aristas representan las limitaciones del flujo. Los pesos de los caminos representan cuellos de botella; por ello, la operación de adición anterior es reemplazada por la operación mínimo.
FUNCIONAMIENTO
Sea el grafo:
Como vemos acá, el algoritmo no permite que existan nodos que apunten a sí mismos, ya que las diagonales quedan inhabilitadas.
La matriz Do se llena con los pesos de cada camino que representa la matriz[i][j] del ejemplo, como vemos, si no existe conexión entre los nodos, se completa con el símbolo lo que reprenda que no existe la conexión entre los nodos, por lo tanto el peso que trae pasar por ahí no se puede tasar.
La matriz S0 se llena con los nodos intermedios entre un par de nodos, en este caso suponemos que no existe otro camino entre los nodos que ir directamente hacia ellos.
Luego de completar las primeras matrices, comenzamos fijando una fila y una columna pivote, para ver todos los caminos que existen entre el nodok y todos los demás, cualquier cambio que ocurra en la matriz de peso, incurrirá en un cambio en la matriz de nodos intermedios, asumiendo que localmente el nodok es el de menor peso en esa iteración.
Fijamos la fila 1, entonces k=1, y comenzamos a revisar el algoritmo preguntando si MatrizdePeso[i][k]+MatrizdePeso[k][j]<MatrizdePeso[i][j], si es menor se cambia si no se mantiene. Así obtenemos D1 y S1.
Como se puede ver en las posiciones 3,2 y 3,5 de la matriz de peso, hubo cambios y como habíamos fijado k =1, entonces en las mismas posiciones se generarán cambios en la matriz de nodos intermedios.
Ahora fijamos k =2
Como vemos en las posiciones 1,3 y 4,3 de la matriz de peso, hubo cambios y como habíamos fijado k =2, entonces en las mismas posiciones se generarán cambios en la matriz de nodos intermedios.
Ahora fijamos k =3
Como vemos en las posiciones 2,1; 2,4 y 4,1 de la matriz de peso, hubo cambios y como habíamos fijado k =3, entonces en las mismas posiciones se generarán cambios en la matriz de nodos intermedios.
Ahora fijamos k =4
Como vemos en las posiciones 1,2; 1,3 y 3,2 de la matriz de peso, hubo cambios y como habíamos fijado k =4, entonces en las mismas posiciones se generarán cambios en la matriz de nodos intermedios, y como ya completamos las 4 iteraciones, estas son las matrices con los pesos óptimos y sus respectivos caminos.
CASO REAL DE APLICACIÓN DEL ALGORITMO DE FLOYD AL
ÁREA DE CRM - INTERBANK
Luis Cubas es un analista del Área de CRM de INTERBANK. En su área se ha creado la “Campaña de
Registro y Autorización de Datos” con el fin de reunir los requisitos necesarios de cara a la
aplicación de la Ley de Protección de Datos Personales.
Durante algunas semanas el analista observo que los indicadores de la campaña no estaban dando
los resultados esperados. Es por ello que su jefa Lourdes Rojas le encomienda la tarea de brindar
capacitaciones a las tiendas INTERBANK de Miraflores, San Borja, Magdalena, Pueblo Libre, Jesús
María y La Victoria.
Para realizar esta tarea Luis desea saber cuáles serían los caminos más cortos entre tienda y tienda
para así poder desplazarse entre las seis con menor esfuerzo.
Luis Cubas Vela en Capacitación a la Tienda de Miraflores.
Luis Cubas Vela en Capacitación a la Tienda de San Isidro
Mapa Referencial de las Tiendas a Visitar
De acuerdo a este mapa hicimos la siguiente red de nodos
NODO 1: La Victoria
NODO 2: Jesús María
NODO 3: Miraflores
NODO 4: Magdalena
NODO 5: San Borja
NODO 6: Pueblo Libre
Posteriormente elaboramos la matriz de distancias en km de acuerdo a las calles que debe recorrer
la camioneta para llegar de un destino a otro, por lo que una distancia de un punto a otro de ida no
es la misma que de vuelta, la distancia entre nodos que no se conectan es infinito. Y luego la matriz
de recorrido
MATRIZ DE DISTANCIAS
1 2 3 4 5 6
1 - 1,7 1,1 00 3 2,2
2 1,3 - 00 2 3,3 1,4
3 0,85 00 - 0,85 2,5 2,7
4 00 2,3 0,1 - 00 2,2
5 2,7 3 2,7 00 - 00
6 2,2 1,3 2,4 2,5 00 -
MATRIZ DE RECORRIDO
1 2 3 4 5 6
1 - 2 3 4 5 6
2 1 - 3 4 5 6
3 1 2 - 4 5 6
4 1 2 3 - 5 6
5 1 2 3 4 - 6
6 1 2 3 4 5 -
En la primera iteración tomamos temporalmente la primera columna y fila de la matriz de distancias
y nos centramos en la submatriz que queda de 5x5, luego vemos cada número de esta submatriz y
la comparamos con la suma de las componentes de la fila 1 y columna 1 que tomamos respecto al
número que estamos analizando. Si esta suma es menor significa que ese número se puede mejorar
y se reemplaza por esta suma, si la suma es mayor se deja así. Si hay un cambio en la matriz de
distancias, en el mismo lugar en la matriz de recorrido se cambia el valor por el valor de la iteración
en la que estamos.
ITERACIÓN 1
ITERACIÓN 2
ITERACIÓN 3
ITERACIÓN 4
ITERACIÓN 5
ITERACIÓN 6
Con la tabla final de la última iteración podemos sacar las conclusiones:
Por ejemplo en la matriz de distancias nos dice la menor distancia entre un punto y otro, entre el
nodo 1 y el nodo 5 la menor distancia es 3 km y su recorrido es de frente de 1 a 5. Así podemos ver
el recorrido y la distancia mínima entre cada par de nodos.
CONCLUSIONES
El algoritmo nos permite llevar un registro y control de las rutas óptimas para
Luis a fin de que pueda recorrer las tiendas con el menor esfuerzo posible.
El algoritmo nos brinda soluciones en tiempo real para brindar decisiones
adecuados a las circunstancias ( zonas o calles ) , lo que permitirá minimizar el
tiempo que dura la trayectoria de los viajes, condicionados principalmente por
factores como el nivel de tráfico y distancia.