Técnicas de diseño de algoritmos Algoritmos de aproximación Dra. Elisa Schaeffer elisa.schaeffer@gmail.com PISIS / FIME / UANL Algoritmos de aproximación p. 1
Soluciones no-óptimas En situaciones donde todos los algoritmos conocidos son lentos, vale la pena considerar la posilibidad de usar una solución aproximada, o sea, una solución que tiene un valor de la función objetivo cerca del valor óptimo, pero no necesariamente el óptimo mismo. Depende del área de aplicación sí o no se puede hacer esto eficientemente. En muchos casos es posible llegar a una solución aproximada muy rápidamente mientras encontrar la solución óptima puede ser imposiblemente lento. Algoritmos de aproximación p. 2
Determinismo Un algoritmo de aproximación puede ser determinista o no determinista. Si el algoritmo de aproximación no es determinista y ejecuta muy rápidamente, es común ejecutarlo varias veces y elegir el mejor de las soluciones aproximadas así producidas. Algoritmos de aproximación p. 3
Factor de aproximación Un algoritmo de aproximación bien diseñado cuenta con un análisis formal que muestra que la diferencia entre su solución y la solución óptima es de un factor constante. Este factor se llama el factor de aproximación. < 1 para maximización > 1 para minimización Depende de la aplicación qué tan cerca debería ser la solución aproximada a la solución óptima. Algoritmos de aproximación p. 4
Tasa de aproximación El valor extremo del factor sobre el conjunto de todas las instancias del problema es la tasa o índice de aproximación (inglés: approximation ratio). Un algoritmo de aproximación tiene tasa constante si el valor de la solución encontrada es por máximo un múltiple constante del valor óptimo. Algoritmos de aproximación p. 5
Eficiencia También habrá que mostrar formalmente que el algoritmo de aproximación tiene complejidad polinomial. En el caso de algoritmos de aproximación probabilistas, basta con mostrar que sea polinomial con alta probabilidad. Algoritmos de aproximación p. 6
Esquemas de aproximación Si existe un método sistemático para aproximar la solución a factores arbitrarios, ese método se llama una esquema de aproximación (de tiempo polinomial) (inglés: (polynomial-time) approximation scheme). Tiempo polinomial: PTAS. Un libro de texto recomendable sobre algoritmos de aproximación es lo de Vazirani. Algoritmos de aproximación p. 7
Bin packing El problema de empaquetear a cajas: Dado: un conjunto finito de objetos Φ = {ϕ 1,ϕ 2...,ϕ N }, cada uno con un tamaño definido t(ϕ i ) R. Pregunta: Cómo empaquetear en cajas de tamaño fijo T los objetos así que T máx{t(ϕ i ) ϕ i Φ} y que el número de cajas utilizadas sea mínima. Este problema también es NP-completo. Algoritmos de aproximación p. 8
Algoritmo de aproximación 1. Ordenar las cajas en una fila. 2. Procesamos los objetos en orden. 3. Primero intentamos poner el objecto actualmente procesado en la primera caja de la fila. 4. Si cabe, lo ponemos allí, y si no, intentamos en la siguiente caja. 5. Iterando así obtenemos alguna asignación de objetos a cajas. Algoritmos de aproximación p. 9
Calidad de la solución Denotamos con OPT(Φ) el número de cajas que contienen por lo menos un objeto en la asignación óptima. Se puede mostrar que el algoritmo de aproximación simple utiliza al máximo 17 OPT(Φ)+2 cajas. 10 Esto significa que nunca alejamos a más de 70 % de la solución óptima. Algoritmos de aproximación p. 10
Mejora Podemos mejorar aún por ordenar los objetos así que intentamos primero el más grande y después el segundo más grande. Para este caso se puede mostrar que llegamos a utilizar al máximo 11 OPT(Φ)+4 cajas, que nos da una distancia 9 máxima de unos 22 % del óptimo. Algoritmos de aproximación p. 11
Problema del viajante Una versión los pesos un grafo completo ponderado son distancias entre los vértices d(v, w) que cumplen con la desigualdad de triángulo d(v,u) d(v,w)+d(w,u). También es un problema NP-completo. Algoritmos de aproximación p. 12
Algoritmo de aproximación 1. Construye un árbol de expansión mínimo en tiempo O(mlogn). 2. Elige un vértice de inicio cualquiera v. 3. Recorre el árbol con DFS en tiempo O(m+n) e imprime cada vértice a la primera visita (o sea, en preorden). 4. Imprime v en tiempo O(1). Algoritmos de aproximación p. 13
Análisis El DFS recorre cada arista del árbol 2 veces; podemos pensar en el recorrido como una ruta larga R que visita cada vértice por lo menos una vez, pero varias vértices más de una vez. Cortamos de la ruta larga R cualquier visita a un vértice que ya ha sido visitado, así logrando el mismo efecto de imprimir los vértices en preorder. Por la desigualdad de triángulo, sabemos que la ruta cortada R no puede ser más cara que la ruta larga R. Algoritmos de aproximación p. 14
Óptimos y árboles El costo total de R es dos veces el costo del árbol cubriente mínimo. Para lograr a comparar el resultado con el óptimo, hay que analizar el óptimo en términos de árboles cubrientes. Si eliminamos cualquier arista de la ruta óptima R OPT, obtenemos un árbol cubriente. Algoritmos de aproximación p. 15
La tasa El peso de este árbol es por lo menos el mismo que el peso de un árbol cubriente mínimo C. Entonces, si marcamos el costo de la ruta R con c(r), hemos mostrado que necesariamente c(r) c(r ) = 2C 2c(R OPT ). Algoritmos de aproximación p. 16
Búsqueda local Cuando hemos obtenido una solución heurística y aproximada de manera cualquiera a un problema de optimización, podemos intentar mejorarla por búsqueda local. Aplicamos operaciones pequeñas y rápidamente realizadas para causar cambios pequeños en la solución así que la solución mantiene factible y puede ser que mejora. Libros buenos de búsqueda local incluyen el libro de de Aarts y Lenstra y el libro de Hoos y Stützle. Algoritmos de aproximación p. 17
Un ejemplo: 2-opt Aplicada en el problema del viajante en un grafo ponderado no dirigido G = (V,E). El costo de una arista {v,w} es c(v,w) > 0. Elegimos (al azar) 2 aristas de la ruta R: {s,t} y {u,v}. Algoritmos de aproximación p. 18
Notaciones Marcamos el segmento de la ruta entre t y u por A y el otro segmento entre v y s por B así que A = [tr 1 r 2...r k u] B = [vw 1 w 2...w l s] R = [tr 1 r 2...r k uvw 1 w 2...w l st] Algoritmos de aproximación p. 19
Candidato a intercambio Si el grafo G también contiene las aristas {v,t} y {s,u}, evaluamos si c(s,t)+c(u,v) > c(s,u)+c(v,t). Si es así, podemos llegar a un costo total menor por reemplazar las aristas originales por las aristas más baratas {v,t} y {s,u}: R = [tr 1 r x 2...r k usw l w l 1...w 2 w 1 vt]. Algoritmos de aproximación p. 20
Ilustración...... Algoritmos de aproximación p. 21