15
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

IO2 Word Raul FINAL

Embed Size (px)

DESCRIPTION

algoritmo

Citation preview

Page 1: IO2 Word Raul FINAL

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

Page 2: IO2 Word Raul FINAL

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:

Page 3: IO2 Word Raul FINAL

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.

Page 4: IO2 Word Raul FINAL

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.

Page 5: IO2 Word Raul FINAL

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.

Page 6: IO2 Word Raul FINAL

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.

Page 7: IO2 Word Raul FINAL

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

Page 8: IO2 Word Raul FINAL

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.

Page 9: IO2 Word Raul FINAL

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

Page 10: IO2 Word Raul FINAL

Mapa Referencial de las Tiendas a Visitar

De acuerdo a este mapa hicimos la siguiente red de nodos

Page 11: IO2 Word Raul FINAL

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 -

Page 12: IO2 Word Raul FINAL

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

Page 13: IO2 Word Raul FINAL

ITERACIÓN 2

ITERACIÓN 3

Page 14: IO2 Word Raul FINAL

ITERACIÓN 4

ITERACIÓN 5

Page 15: IO2 Word Raul FINAL

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.