Optimizacion-Combinatoria y Grafos

5,521 views

Published on

Published in: Education, Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
5,521
On SlideShare
0
From Embeds
0
Number of Embeds
39
Actions
Shares
0
Downloads
131
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Optimizacion-Combinatoria y Grafos

  1. 1. Optimización Combinatoria y Grafos Taller No. 6 Omar G. Rincón Pin
  2. 2. Flujo Máximo - Algoritmo de Ford-Fulkerson <ul><li>Modelo del flujo máximo : En algunas redes circula por los arcos un flujo (envío o circulación de unidades homogéneas de algún producto: automóviles en una red de carreteras, litros de petróleo en un oleoducto, bits por un cable de fibra óptica) desde el origen o fuente al destino , también denominado sumidero o vertedero . Los arcos tienen una capacidad máxima de flujo, y se trata de enviar desde la fuente al sumidero la mayor cantidad posible de flujo, de tal manera que: </li></ul><ul><ul><li>El flujo es siempre positivo y con unidades enteras. </li></ul></ul><ul><ul><li>El flujo a través de un arco es menor o igual que la capacidad. </li></ul></ul><ul><ul><li>El flujo que entra en un nodo es igual al que sale de él. </li></ul></ul><ul><li>En el caso de que el origen o el destino no existan en el problema, se añaden ficticiamente utilizando arcos unidireccionales de capacidad infinita, como en grafo mostrado a continuación: </li></ul>
  3. 3. <ul><li>Corte : Un corte define una serie de arcos cuya supresión de la red causa una interrupción completa del flujo entre el origen y el destino. La capacidad de corte es igual a la suma de las capacidades de los arcos asociados. Entre todos los cortes posibles en la red , el corte con la menor capacidad proporciona el flujo máximo en la red. </li></ul>
  4. 4. <ul><li>El siguiente grafo ilustra 3 cortes: el Corte 1 con capacidad 60, el Corte 2 con capacidad 110 y el Corte 3 con capacidad 70. Todo lo que podemos obtener de los 3 cortes es que el flujo máximo en la red no excede de 60 unidades. No podemos saber cual es el flujo máximo hasta que se hayan enumerado todos los cortes en la red </li></ul>Las capacidades se identifican como sigue: por ejemplo, para el arco (3,4) , el límite de flujo es de 10 unidades de 3 a 4 y de 5 unidades de 4 a 3 .
  5. 5. Algoritmo de Ford-Fulkerson <ul><li>El algoritmo de Ford-Fulkerson propone buscar caminos en los que se pueda aumentar el flujo, hasta que se alcance el flujo máximo. La idea es encontrar una ruta de penetración con un flujo positivo neto que una los nodos origen y destino. </li></ul><ul><li>Consideraremos las capacidades iniciales del arco que une el nodo i y el nodo j como Cij y Cji . Estas capacidades iniciales irán variando a medida que avanza el algoritmo, denominaremos capacidades residuales a las capacidades restantes del arco una vez pasa algún flujo por él, las representaremos como cij y cji . </li></ul><ul><li>Para un nodo j que recibe el flujo del nodo i , definimos una clasificación [aj,i] donde aj es el flujo del nodo i al nodo j . </li></ul>
  6. 6. <ul><li>Los pasos del algoritmo se definen como sigue: </li></ul><ul><li>Paso 1: Inicializamos las capacidades residuales a las capacidades iniciales, hacemos (cij,cji)=(Cij,Cji) para todo arco de la red. Suponiendo el nodo 1 como el nodo origen, hacemos a1=∞ y clasificamos el nodo origen con [∞,-] . Tomamos i=1 y vamos al paso 2. </li></ul><ul><li>Paso 2: Determinamos Si como un conjunto que contendrá los nodos a los que podemos acceder directamente desde i por medio de un arco con capacidad positiva, y que no formen parte del camino en curso. Si Si contiene algún nodo vamos al paso 3, en el caso de que el conjunto sea vacío saltamos al paso 4. </li></ul><ul><li>Paso 3: Obtenemos kЄSi como el nodo destino del arco de mayor capacidad que salga de i hacia un nodo perteneciente a Si . Es decir, cik = max{cij} con jЄSi . Hacemos ak=cik y clasificamos el nodo k con [ak,i] . Si k es igual al nodo destino o sumidero, entonces hemos encontrado una ruta de penetración, vamos al paso 5. En caso contrario continuamos con el camino, hacemos i=k y volvemos al paso 2. </li></ul>
  7. 7. <ul><li>Paso 4 (retroceso): Si i=1 , estamos en el nodo origen, y como Si es vacío, entonces no podemos acceder a ningún nodo, ni encontrar algún nuevo camino, hemos terminado, vamos al paso 6. En caso contrario, i≠1 , le damos al valor i el del nodo que se ha clasificado inmediatamente antes, eliminamos i del conjunto Si actual y volvemos al paso 2. </li></ul><ul><li>Paso 5: Llegados a este paso tenemos un nuevo camino: Np={1,k1,k2,...,n} , esta será la p-ésima ruta de penetración desde el nodo origen al nodo destino. El flujo máximo a lo largo de esta ruta será la capacidad mínima de las capacidades residuales de los arcos que forman el camino, es decir: fp=min{a1,ak1,ak2,...,an} . La capacidad residual de cada arco a lo largo de la ruta de penetración se disminuye por fp en dirección del flujo y se incrementa por fp en dirección inversa, es decir, para los nodos i y j en la ruta, el flujo residual se cambia de la (cij,cji) actual a (cij-fp,cji+fp) si el flujo es de i a j , o (cij+fp,cji-fp) si el flujo es de j a i Inicializamos i=1 y volvemos al paso 2 para intentar una nueva ruta de penetración. </li></ul>
  8. 8. <ul><li>Paso 6 (solución): Una vez aquí, hemos determinado m rutas de penetración. El flujo máximo en la red será la suma de los flujos máximos en cada ruta obtenida, es decir: F=f1+f2+...+fm . Teniendo en cuenta que las capacidades residuales inicial y final del arco (i, j) las dan (Cij,Cji) y (cij,cji) respectivamente, el flujo máximo para cada arco se calcula como sigue: sea (α, β)=(Cij-cij, Cji-cji) , si α>0 , el flujo óptimo de i a j es α , de lo contrario, si β>0 , el flujo óptimo de j a i es β . Es imposible lograr que tanto α como β sean positivas. </li></ul>
  9. 9. <ul><li>Ejemplo: Determinar el flujo máximo en la red siguiente: </li></ul>
  10. 10. Iteración 1 <ul><ul><ul><li>Determinamos las residuales iniciales (cij,cji) iguales a las capacidades iniciales (Cij,Cji) . </li></ul></ul></ul><ul><ul><ul><li>Paso 1: Hacemos ai=∞ , y clasificamos el nodo 1 con [a1,-] . Tomamos i=1 . </li></ul></ul></ul><ul><ul><ul><li>Paso 2: S1={2,3,4} (no vacío). </li></ul></ul></ul><ul><ul><ul><li>Paso 3: k=3 ya que c13=max{c12,c13,c14}={20,30,10}=30 . Hacemos a3=c13=30 y clasificamos el nodo 3 con [30,1] . Tomamos i=3 y repetimos el paso 2. </li></ul></ul></ul><ul><ul><ul><li>Paso 2: S3={4,5} </li></ul></ul></ul><ul><ul><ul><li>Paso 3: k=5 y a5=c35=max{10,20}=20 . Clasificamos el nodo 5 con [20,3] . Logramos la penetración, vamos al paso 5. </li></ul></ul></ul><ul><ul><ul><li>Paso 5: La ruta de la penetración se determina de las clasificaciones empezando en el nodo 5 y terminando en el nodo 1, es decir, 5 -> [20,3] -> 3 -> [30,1] -> 1 . Entonces la ruta es N1={1,3,5} y f1=min{a1,a3,a5}={∞,30,20}= 20 . Las capacidades residuales a lo largo de esta ruta son: </li></ul></ul></ul><ul><ul><ul><li>(c13,c31)= (30-20, 0+20)= (10,20) </li></ul></ul></ul><ul><ul><ul><li>(c35,c53)= (20-20, 0+20)= (0,20) </li></ul></ul></ul>
  11. 11. <ul><ul><ul><li>Paso 1: Hacemos ai=∞ , y clasificamos el nodo 1 con [a1,-] . Tomamos i=1 . </li></ul></ul></ul><ul><ul><ul><li>Paso 2: S1={2,3,4} . </li></ul></ul></ul><ul><ul><ul><li>Paso 3: k=2 y a2=c12=max{20,10,10}=20 . Clasificamos el nodo 2 con [20,1] . Tomamos i=2 y repetimos el paso 2. </li></ul></ul></ul><ul><ul><ul><li>Paso 2: S2={3,5} </li></ul></ul></ul><ul><ul><ul><li>Paso 3: k=3 y a3=c23=max{30,40}=40 . Clasificamos el nodo 3 con [40,2] . Tomamos i=3 y repetimos el paso 2. </li></ul></ul></ul><ul><ul><ul><li>Paso 2: S3={4} ( c35=0, el nodo 1 ya ha sido clasificado y el nodo 2 cumple ambas condiciones, por tanto los nodos 1, 2 y 5 no pueden ser incluidos en S3 ). </li></ul></ul></ul><ul><ul><ul><li>Paso 3: k=4 y a4=c34=10 . Clasificamos el nodo 4 con [10,3] . Tomamos i=4 y repetimos el paso 2. </li></ul></ul></ul><ul><ul><ul><li>Paso 2: S4={5} </li></ul></ul></ul><ul><ul><ul><li>Paso 3: k=5 y a5=c45=20 . Clasificamos el nodo 5 con [20,4] . Logramos la penetración, vamos al paso 5. </li></ul></ul></ul><ul><ul><ul><li>Paso 5: La ruta de la penetración es: 5 -> [20,4] -> 4 -> [10,3] -> 3 -> [40,2] -> 2 -> [20,1] -> 1 . Entonces la ruta es N2={1,2,3,4,5} y f2=min{∞,20,40,10,20}= 10 . Las capacidades residuales a lo largo de esta ruta son: </li></ul></ul></ul><ul><ul><ul><li>(c12,c21)= (20-10, 0+10)= (10,10) </li></ul></ul></ul><ul><ul><ul><li>(c23,c32)= (40-10, 0+10)= (30,10) </li></ul></ul></ul><ul><ul><ul><li>(c34,c43)= (10-10, 5+10)= (0,15) </li></ul></ul></ul><ul><ul><ul><li>(c45,c54)= (20-10, 0+10)= (10,10) </li></ul></ul></ul>Iteración 2
  12. 12. <ul><ul><ul><li>Paso 1: Hacemos ai=∞ , y clasificamos el nodo 1 con [a1,-] . Tomamos i=1 . </li></ul></ul></ul><ul><ul><ul><li>Paso 2: S1={2,3,4} . </li></ul></ul></ul><ul><ul><ul><li>Paso 3: k=2 y a2=c12=max{10,10,10}=10 , rompemos el empate arbitrariamente. Clasificamos el nodo 2 con [10,1] . Tomamos i=2 y repetimos el paso 2. </li></ul></ul></ul><ul><ul><ul><li>Paso 2: S2={3,5} </li></ul></ul></ul><ul><ul><ul><li>Paso 3: k=3 y a3=c23=max{30,30}=30 . Clasificamos el nodo 3 con [30,2] . Tomamos i=3 y repetimos el paso 2. </li></ul></ul></ul><ul><ul><ul><li>Paso 2: S3 vacío ya que c34=c35=0 . Vamos al paso 4 para retroceder. </li></ul></ul></ul><ul><ul><ul><li>Paso 4: La clasificación [30, 2 ] nos dice que el nodo inmediatamente precedente es el 2. Eliminamos el nodo 3 de una consideración posterior en esta iteración. Tomamos i=2 y repetimos el paso 2. </li></ul></ul></ul><ul><ul><ul><li>Paso 2: S2={5} </li></ul></ul></ul><ul><ul><ul><li>Paso 3: k=5 y a5=c25=30 . Clasificamos el nodo 5 con [30,2] . Logramos la penetración, vamos al paso 5. </li></ul></ul></ul><ul><ul><ul><li>Paso 5: La ruta de la penetración es: 5 -> [30,2] -> 2 -> [10,1] -> 1 . Entonces la ruta es N2={1,2,5} y f3=min{∞,10,30}= 10 . Las capacidades residuales a lo largo de esta ruta son: </li></ul></ul></ul><ul><ul><ul><li>(c12,c21)= (10-10, 10+10)= (0,20) </li></ul></ul></ul><ul><ul><ul><li>(c25,c52)= (30-10, 0+10)= (20,10) </li></ul></ul></ul>Iteración 3
  13. 13. <ul><ul><ul><li>Paso 1: Hacemos ai=∞ , y clasificamos el nodo 1 con [a1,-] . Tomamos i=1 . </li></ul></ul></ul><ul><ul><ul><li>Paso 2: S1={3,4} . </li></ul></ul></ul><ul><ul><ul><li>Paso 3: k=3 y a3=c13=max{10,10}=10 . Clasificamos el nodo 3 con [10,1] . Tomamos i=3 y repetimos el paso 2. </li></ul></ul></ul><ul><ul><ul><li>Paso 2: S3={2} </li></ul></ul></ul><ul><ul><ul><li>Paso 3: k=2 y a2=c32=10 . Clasificamos el nodo 2 con [10,3] . Tomamos i=2 y repetimos el paso 2. </li></ul></ul></ul><ul><ul><ul><li>Paso 2: S2={5} </li></ul></ul></ul><ul><ul><ul><li>Paso 3: k=5 y a5=c25=20 . Clasificamos el nodo 5 con [20,2] . Logramos la penetración, vamos al paso 5. </li></ul></ul></ul><ul><ul><ul><li>Paso 5: La ruta de la penetración es: 5 -> [20,2] -> 2 -> [10,3] -> 3 -> [10,1] -> 1 . Entonces la ruta es N4={1,3,2,5} y f4=min{∞,10,10,20}= 10 . Las capacidades residuales a lo largo de esta ruta son: </li></ul></ul></ul><ul><ul><ul><li>(c13,c31)= (10-10, 20+10)= (0,30) </li></ul></ul></ul><ul><ul><ul><li>(c32,c23)= (10-10, 30+10)= (0,40) </li></ul></ul></ul><ul><ul><ul><li>(c25,c52)= (20-10, 10+10)= (10,20) </li></ul></ul></ul>Iteración 4
  14. 14. <ul><ul><ul><li>Paso 1: Hacemos ai=∞ , y clasificamos el nodo 1 con [a1,-] . Tomamos i=1 . </li></ul></ul></ul><ul><ul><ul><li>Paso 2: S1={4} . </li></ul></ul></ul><ul><ul><ul><li>Paso 3: k=4 y a4=c14=10 . Clasificamos el nodo 4 con [10,1] . Tomamos i=4 y repetimos el paso 2. </li></ul></ul></ul><ul><ul><ul><li>Paso 2: S4={3,5} </li></ul></ul></ul><ul><ul><ul><li>Paso 3: k=3 y a3=c23=max{15,10}=15 . Clasificamos el nodo 3 con [15,4] . Tomamos i=3 y repetimos el paso 2. </li></ul></ul></ul><ul><ul><ul><li>Paso 2: S3 vacío ya que c32=c34=c35=0 . Vamos al paso 4 para retroceder. </li></ul></ul></ul><ul><ul><ul><li>Paso 4: La clasificación [15, 4 ] nos dice que el nodo inmediatamente precedente es el 4. Eliminamos el nodo 3 de una consideración posterior en esta iteración. Tomamos i=4 y repetimos el paso 2. </li></ul></ul></ul><ul><ul><ul><li>Paso 2: S4={5} </li></ul></ul></ul><ul><ul><ul><li>Paso 3: k=5 y a5=c45=10 . Clasificamos el nodo 5 con [10,4] . Logramos la penetración, vamos al paso 5. </li></ul></ul></ul><ul><ul><ul><li>Paso 5: La ruta de la penetración es: 5 -> [10,4] -> 4 -> [10,1] -> 1 . Entonces la ruta es N2={1,4,5} y f3=min{∞,10,10}= 10 . Las capacidades residuales a lo largo de esta ruta son: </li></ul></ul></ul><ul><ul><ul><li>(c14,c41)= (10-10, 0+10)= (0,10) </li></ul></ul></ul><ul><ul><ul><li>(c45,c54)= (10-10, 10+10)= (0,20) </li></ul></ul></ul>Iteración 5
  15. 15. <ul><li>No son posibles más penetraciones, debido a que todos los arcos fuera del nodo 1 tienen residuales cero. Vayamos al paso 6 para determinar la solución. </li></ul>Iteración 6
  16. 16. <ul><li>Paso 6 : El flujo máximo en la red es F= f1+f2+...+f5= 60 unidades . El flujo en los diferentes arcos se calcula restando las últimas residuales obtenidas en la última iteración de las capacidades iniciales: </li></ul>4->5 20 (20, 0) - (0, 20) = (20, -20) (4,5) 3->5 20 (20, 0) - (0, 20) = (20, -20) (3,5) 3->4 10 (10, 5) - (0, 15) = (10, -10) (3,4) 2->5 20 (30, 0) - (10, 20) = (20, -20) (2,5) - 0 (40, 0) - (40, 0) = (0, 0) (2,3) 1->4 10 (10, 0) - (0, 10) = (10, -10) (1,4) 1->3 30 (30, 0) - (0, 30) = (30, -30) (1,3) 1->2 20 (20, 0) - (0, 20) = (20, -20) (1,2) Dirección Cantidad de flujo (Cij, Cji) - (cij, cji)en it. 6 Arco
  17. 17. Grafo Bipartito <ul><li>Un Grafo bipartito se denomina en Teoría de grafos a un grafo no dirigido cuyos vértices se pueden separar en dos conjuntos disjuntos V 1 y V 2 y las aristas siempre unen vértices de un conjunto con vértices de otro: </li></ul>no existe ninguna arista e = ( x 1, x 2) ni e = ( y 1, y 2) Siendo V el conjunto que contiene todos los vértices del grafo
  18. 18. Grafo bipartito completo K 2,3 El conjunto de todos los grafos bipartitos es denominado ; en particular, un grafo bipartito uniendo dos conjuntos, de m y n elementos, respectivamente, se denota por , o, simplemente, Km , n . Un grafo bipartito en el cual todos los elementos de V 1 están unidos con todos los elementos de V 2 se denomina bipartito completo Los grafos bipartitos suelen representarse gráficamente con dos columnas (o filas) de vértices y las aristas uniendo vértices de columnas (o filas) diferentes. Un árbol. Un grafo sin ciclos de tamaño impar
  19. 19. Número cromático de un grafo bipartito
  20. 20. Función Objetivo Separada <ul><li>Concepto .- Una función objetivo que mide la efectividad de cada sistema de decisiones. </li></ul>Ejemplo .- La función objetivo puede ser: Donde: f = coeficientes son relativamente iguales a cero. ó
  21. 21. Tipos de Algoritmos y Problemas
  22. 22. Problemas NP - Completo <ul><li>En teoría de la complejidad computacional, la clase de complejidad NP-completo es el subconjunto de los problemas de decisión [1] en NP tal que todo problema en NP se puede reducir en cada uno de los problemas de NP-completo. Se puede decir que los problemas de NP-completo son los problemas más difíciles de NP y muy probablemente no formen parte de la clase de complejidad P. La razón es que de tenerse una solución polinómica para un problema de NP-completo, todos los problemas de NP tendrían también una solución en tiempo polinómico. </li></ul><ul><li>[1] Un problema de decisión es un problema en donde la respuestas posibles son SI o NO. Un ejemplo típico de problema de decisión es la pregunta: ¿Es un número entero dado primo? </li></ul>
  23. 23. Soluciones <ul><li>Actualmente, todos los algoritmos conocidos para problemas NP-completos utilizan tiempo exponencial con respecto al tamaño de la entrada. Se desconoce si hay mejores algoritmos, por la cual, para resolver un problema NP-completo de tamaño arbitrario se utiliza uno de los siguientes enfoques: </li></ul><ul><li>Aproximación: Un algoritmo que rápidamente encuentra una solución no necesariamente óptima, pero dentro de un cierto rango de error. En algunos casos, encontrar una buena aproximación es suficiente para resolver el problema, pero no todos los problemas NP-completos tienen buenos algoritmos de aproximación. </li></ul><ul><li>Probabilístico: Una algoritmo probabilístico obtiene en promedio una buena solución al problema planteado, para una distribución de los datos de entrada dada. </li></ul><ul><li>Casos particulares: Cuando se reconocen casos particulares del problema para los cuales existen soluciones rápidas. </li></ul><ul><li>Heurísticas: Un algoritmo que trabaja razonablemente bien en muchos casos. En general son rápidos, pero no existe medida de la calidad de la respuesta. </li></ul><ul><li>Los algoritmos de aproximación no garantizan la mejor solución, pero proporcionan una que es cercana a la óptima. En muchas aplicaciones, una solución aproximada es suficientemente buena, especialmente cuando el tiempo requerido para encontrar la solución óptima es considerable. No hay ganancia en encontrar la solución óptima para una organización de tareas si, por ejemplo, el tiempo computacional necesario para calcularlo excede la peor penalización que se pueda pagar. </li></ul><ul><li>Las estrategias, o heurísticas, empleadas por muchos de los algoritmos de aproximación que se han desarrollado son muy sencillas y directas, e incluso proporcionan buenos resultados para muchos problemas. </li></ul>
  24. 24. Heurística <ul><li>Una heurística es un algoritmo que abandona uno o ambos objetivos; por ejemplo, normalmente encuentran buenas soluciones, aunque no hay pruebas de que la solución no pueda ser arbitrariamente errónea en algunos casos; o se ejecuta razonablemente rápido, aunque no existe tampoco prueba de que siempre será así. Las heurísticas generalmente son usadas cuando no existe una solucion óptima bajo las restricciones dadas (tiempo,espacio,etc.), o cuando no existe del todo. </li></ul><ul><li>A menudo, pueden encontrarse instancias concretas del problema donde la heurística producirá resultados muy malos o se ejecutará muy lentamente. Aún así, estas instancias concretas pueden ser ignoradas porque no deberían ocurrir nunca en la práctica por ser de origen teórico. Por tanto, el uso de heurísticas es muy común en el mundo real. </li></ul>
  25. 25. Heurística para encontrar el camino más corto <ul><li>Para problemas de búsqueda del camino más corto el término tiene un significado más específico. En este caso una heurística es una función matemática , h ( n ) definida en los nodos de un árbol de búsqueda ( algoritmo de búsqueda ), que sirve como una estimación del coste del camino más económico de un nodo dado hasta el nodo objetivo. Las heurísticas se usan en los algoritmos de búsqueda informada como la búsqueda egoísta. La búsqueda egoísta escogerá el nodo que tiene el valor más bajo en la función heurística. A* expandirá los nodos que tienen el valor más bajo para g ( n ) + h ( n ), donde g ( n ) es el coste (exacto) del camino desde el estado inicial al nodo actual. Cuando h ( n ) es admisible , esto es si h ( n ) nunca sobrestima los costes de encontrar el objetivo; A* es probablemente óptimo . </li></ul><ul><li>Un problema clásico que usa heurísticas es el puzzle-n . Contar el número de casillas mal colocadas y encontrar la suma de la distancia Manhattan entre cada bloque y su posición al objetivo son heurísticas usadas a menudo para este problema. </li></ul>
  26. 26. Problemas de Optimización y Combinatoria <ul><li>Dado un grafo G =(V, E), u n árbol generador de G , es un subgrafo que es árbol y contiene a todos los vértices del grafo. </li></ul>Árbol Generador
  27. 27. Problema del Árbol Generador Minimal <ul><li>Supongamos que queremos generar un conjunto de nodos en el que, al menos, hay una conexión entre  cada par de nodos. Ese conjunto podrá estar sometido a distintos avatares, por ejemplo, interrupciones de líneas. Queremos ofrecer garantía de conexión entre todos los nodos en caso de fallo. Para ello, buscamos el conjunto de lineas de conexión mínimo, que mantiene todos los nodos conectados en todo momento. Este problema en general se conoce con el nombre del Problema del Arbol Generador Minimal de un Grafo. </li></ul><ul><li>Mas formalmente, supongamos un grafo conexo G donde G = (V,A) en el que hay una matriz definida de pesos L(i,j) ³ 0 (donde los pesos definen, por ejemplo, la rapidez de conexión de cada nodo). </li></ul><ul><li>Se trata de encontrar un subconjunto T Í A tal que todos los nodos permanezcan conectados cuando solo se usen aristas de T, y siendo la suma de los pesos de las aristas que hay en T tan pequeña como sea posible (distancia mínima). </li></ul><ul><li>Al grafo (V,T) se le llama Árbol Generador Minimal del grafo G, y para encontrarlo disponemos de dos metodos: El Algoritmo de   PRIM  y el Algoritmo de KRUSKAL . </li></ul>
  28. 28. Camino más Corto <ul><li>El algoritmo de Dijkstra , también llamado algoritmo de caminos mínimos , es un algoritmo para la determinación del camino más corto dado un vértice origen al resto de vértices en un grafo dirigido y con pesos en cada arista . Su nombre se refiere a Edsger Dijkstra , quien lo describió por primera vez en 1959. </li></ul><ul><li>La idea subyacente en este algoritmo consiste en ir explorando todos los caminos más cortos que parten del vértice origen y que llevan a todos los demás vértices; cuando se obtiene el camino más corto desde el vértice origen, al resto de vértices que componen el grafo, el algoritmo se detiene. El algoritmo es una especialización de la búsqueda de costo uniforme, y como tal, no funciona en grafos con aristas de costo negativo (al elegir siempre el nodo con distancia menor, pueden quedar excluidos de la búsqueda nodos que en próximas iteraciones bajarían el costo general del camino al pasar por una arista con costo negativo). </li></ul>
  29. 29. <ul><li>El problema en si es sencillo, dado una lista de Pueblos y las distancias entre ellos, encontrar el camino más corto entre dos pueblos. </li></ul><ul><li>Para resolver este problema, el planteamientos que hicimos fue el siguiente: siempre iremos al pueblo que esté más cerca. Este planteamiento no nos garantiza que encontremos el camino y que si lo encontramos este sea el más corto;pero, algún tipo de heurístico había que seleccionar así que el elegido fue el anteriormente nombrado. </li></ul><ul><li>Esquema </li></ul>Descripción del problema
  30. 30. <ul><li>Lo complicado del mismo es la resolución, pues para saber el camino mas corto deberías calcular todos los caminos y por último quedarnos con el más corto. </li></ul><ul><li>Otra limitación es la correspondiente a que el heurístico no garantiza la obtención de la solución óptima. </li></ul><ul><li>Por último destacar que la comprobación de todas las ciudades a lo largo de todos los movimientos genera unos altos tiempos de ejecución debida a una alta complejidad temporal. </li></ul>Limitaciones del problema
  31. 31. <ul><li>Para representar el mapa de pueblos y distancias utilizamos una matriz, en el que cada celda representaria la distancia entre los pueblos i y j. Si la distancia es 0 o negativa, entenderemos que esos dos pueblos no tienen camino entre ellos. </li></ul>Solución del problema
  32. 32. <ul><li>El recorrido de esta matriz desde un origen hasta un destino ambos conocidos, conlleva la obtención de los pueblos que actuan como union entre los dos.Este recorrido se realizará por aquellas distancias entre pueblos que sean más pequeñas. </li></ul><ul><li>Si nos damos cuenta en el algoritmo anteriormente planteado, a lo largo de cada iteración entre los pueblos que unen el origen y destino, estamos comprobando repetidas veces sitios ya visitados. Una opción para reducir esa complejidad seria mantener un array con el listado de las ciudades y para cada una de ellas una variable boolean. Esta variable tomará true cuando la ciudad ya haya sido visitada, lo que permitirá antes de recorrer una ciudad, plantearse si ya fue visitada, y en ese caso ignorarla. Con esto se reduciría la complejidad. </li></ul>
  33. 33. Agente Viajero <ul><li>El problema del viajante es un ejemplo que muestra y analiza la problemática que subyace tras algunos tipos de problemas matemáticos que a priori parecen tener una solución relativamente fácil, y en la práctica presentan un gran problema. </li></ul><ul><li>La respuesta al problema es conocida, es decir se conoce la forma de resolverlo, pero sólo en teoría, en la práctica la solución no es aplicable debido al tiempo que computacionalmente se precisa para obtener su resultado (Para una mayor profundidad en el tema ver el artículo NP-completos ). </li></ul><ul><li>El problema del viajante (también conocido como problema del viajante de comercio o por sus siglas en inglés: TSP ) es uno de los problemas más famosos (y quizás el mejor estudiado) en el campo de la optimización combinatoria computacional. A pesar de la aparente sencillez de su planteamiento, el TSP es uno de los más complejos de resolver y existen demostraciones que equiparan la complejidad de su solución a la de otros problemas aparentemente mucho más complejos que han retado a los matemáticos desde hace siglos. </li></ul>Bases del Problema
  34. 34. <ul><li>Sean N ciudades de un territorio. El objetivo es encontrar una ruta que, comenzando y terminando en una ciudad concreta, pase una sola vez por cada una de las ciudades y minimice la distancia recorrida por el viajante. Es decir, encontrar una permutación P = { c 0, c 2,..., cn − 1} tal que </li></ul><ul><li>sea mínimo. La distancia entre cada ciudad viene dada por la matriz D: NxN, donde d[x, y] representa la distancia que hay entre la ciudad X y la ciudad Y </li></ul>
  35. 35. <ul><li>La solución más directa es la que aplica la fuerza bruta: evaluar todas las posibles combinaciones de recorridos y quedarse con aquella cuyo trazado utiliza la menor distancia. El problema reside en el número de posibles combinaciones que viene dado por el factorial del número de ciudades (N!) y esto hace que la solución por fuerza bruta sea impracticable para valores de N incluso moderados con los medios computacionales actualmente a nuestro alcance. Por ejemplo, si un ordenador fuese capaz de calcular la longitud de cada combinación en un microsegundo, tardaría algo más 3 segundos en resolver el problema para 10 ciudades, algo más de medio minuto en resolver el problema para 11 ciudades y 77.146 años en resolver el problema para sólo 20 ciudades. </li></ul><ul><li>Por ejemplo las rutas posibles entre 12 ciudades son (479 millones) 479.001.600 combinaciones y los caminos individuales entre ciudades son el sumatorio de las 12-1 ciudades es decir 66. </li></ul><ul><li>Se puede demostrar que el requerimiento de volver a la ciudad de partida no cambia la complejidad computacional del problema. </li></ul>
  36. 36. Mochila <ul><li>Un problema típico de programación entera es el que nos ocupa, “el problema de la mochila”, que responde a la siguiente situación: imagínese hacer una excursión a la que solo podemos llevar una mochila que, lógicamente, tiene una capacidad limitada. Cada objeto que introducimos ocupa un volumen dentro de la misma y en contrapartida durante el viaje nos proporcionará un beneficio o utilidad (ejemplo: una cantimplora), el problema surge cuando debemos elegir qué objetos seleccionar para llevar en la mochila de forma que nuestro beneficio sea máximo (tengamos todo lo necesario) sin exceder su capacidad. </li></ul><ul><li>Esta situación se presenta con cierta frecuencia en los ámbitos económico e industrial, donde la mochila suele representar la restricción presupuestaria (cantidad máxima de recursos económicos de los que se dispone) y donde la utilidad de los objetos seleccionados se equipara a un beneficio económico por adquirir o llevar a cabo ciertas acciones. </li></ul><ul><li>Veamos a continuación un ejemplo de la aplicación del planteamiento de la mochila al ámbito económico. </li></ul>
  37. 37. <ul><li>Ejemplo : </li></ul><ul><li>Una empresa que fabrica lapiceros, “Escribe Bien S.A.” que en el ejercicio económico que se cierra ha obtenido un excedente de 300.000€ (su beneficio neto, una vez descontados los impuestos y retribuidos los fondos propios es de 300.000€), esto le hace replantearse una posible inversión productiva (ampliar la capacidad productiva, ampliar la fábrica, contratar más trabajadores,....) que le permita incrementar su cartera de productos (número de productos que tiene en el mercado). El gerente de la empresa, Don L, reúne a sus asesores financieros y comerciales para que determinen de forma conjunta qué productos serán los escogidos para la ampliación de cartera. </li></ul><ul><li>Los asesores comerciales sugieren los siguientes productos, basándose en estudios de mercado que han realizado para estimar la cifra de negocios que cada nuevo producto generará: </li></ul><ul><ul><li>- Lápices de colores con un beneficio de 200.000 €, esta cuantía es la que relacionamos con la utilidad que mencionábamos en la definición. </li></ul></ul><ul><ul><li>- Gomas de borrar con un beneficio de 100.000 € </li></ul></ul><ul><ul><li>- Minas para portaminas con un beneficio de 250.000 € </li></ul></ul><ul><ul><li>- Carboncillos con un beneficio de 150.000 € </li></ul></ul><ul><li>Por su parte, los asesores financieros han estudiado los costes que implica reformar las instalaciones productivas para poder incrementar la cartera de productos, estos costes se podrían equiparar al volumen que ocupan los objetos dentro de la mochila, por tanto, la suma de estos costes deberá ser menor a la capacidad de la mochila, en este caso, los recursos financieros sobrantes: 300.000€. </li></ul><ul><ul><li>- Coste de las instalaciones para fabricar lápices de colores: 75.000 € </li></ul></ul><ul><ul><li>- Coste de las instalaciones para fabricar gomas de borrar: 150.000 € </li></ul></ul><ul><ul><li>- Coste de las instalaciones para fabricar minas para portaminas: 100.000 € </li></ul></ul><ul><ul><li>- Coste de las instalaciones para fabricar carboncillos: 50.000 € </li></ul></ul><ul><li>Intuitivamente escogerá fabricar aquel producto que mayores beneficios le dé, si con la inversión en la fabricación de ese nuevo producto no consume los 300.000 € podrá plantearse aumentar aún más su cartera y así sucesivamente mientras le resten recursos. </li></ul>
  38. 38. Formulación <ul><li>Para facilitar la comprensión del lector, antes de incorporar a este escrito la formulación del problema, analizaremos las partes de las que se compone la misma. </li></ul>Datos del Problema <ul><ul><li>n: número de objetos entre los que se puede elegir. </li></ul></ul><ul><ul><li>- ci : peso del objeto “i” - se refiere el objeto “í”-ésimo que no es más que una forma de hacer referencia a un objeto cualquiera que pueda ser incluido en la mochila -, es decir, ci representa el coste de escoger un objeto, en tanto en cuanto va a ocupar un “espacio de la mochila” que dejará fuera otros objetos. </li></ul></ul><ul><ul><li>- bi: utilidad o beneficio que proporciona cada objeto, de nuevo se hace referencia al objeto i-ésimo. </li></ul></ul><ul><ul><li>- P: capacidad de la mochila, equivale al presupuesto máximo del que se dispone. </li></ul></ul>
  39. 39. Variables a tener en cuenta <ul><li>Los elementos a introducir en la mochila van a ser nuestras variables objeto de análisis, cada variable la denotaremos como xi. El rasgo más importante de nuestras xi es que se tratan de variables dicotómicas o binaria, es decir, sólo pueden tomar dos valores, en este caso, escogeremos el valor “1” (si el objeto se incluye en la mochila) ó “0” (si el objeto se excluye de la mochila) </li></ul><ul><li>La restricción vendrá marcada por la capacidad máxima de la mochila, de tal forma que la suma de todos los objetos multiplicados por el espacio que ocupan en la mochila no podrá exceder dicha capacidad máxima. Su formulación matemática es la que sigue: </li></ul>Restricciones
  40. 40. Función a Maximizar <ul><li>Tal y como se expresa en la definición, el objetivo de este problema es seleccionar aquellos objetos que introducidos en la mochila nos proporcionan una mayor utilidad. En otras palabras, lo que debemos hacer es maximizar la utilidad de nuestra mochila. </li></ul><ul><li>Si redefinimos el problema introduciendo los elementos que mencionamos en las líneas precedentes llegaremos a la siguiente formulación: </li></ul><ul><li>“ El problema de la mochila consiste en llenar una mochila con n objetos. Cada objeto i tiene un peso determinado ci siempre positivo y una utilidad o valor asociado, también positivo, bi. Se ha de considerar además que la mochila tiene una capacidad limitada P, por tanto, se han de escoger aquellos objetos xi que maximicen la utilidad de quien llena la mochila sin exceder su capacidad”. </li></ul><ul><li>Ahora procederemos a formular el problema de la mochila: </li></ul>

×