Algoritmos Voraces
Algoritmos Voraces
Algoritmos Voraces
Algoritmos voraces
MTODO GENERAL
Los algoritmos voraces, vidos o de avance rpido (en ingls greedy) se utilizan normalmente en problemas de optimizacin. El problema se interpreta como: tomar algunos elementos de entre un conjunto de candidatos. El orden en que se cogen puede ser importante o no. Un algoritmo voraz funciona por pasos: Inicialmente partimos de una solucin vaca. En cada paso se escoge el siguiente elemento para aadir a la solucin, entre los candidatos. Una vez tomada esta decisin no se podr deshacer. El algoritmo acabar cuando el conjunto de elementos seleccionados constituya una solucin.
MTODO GENERAL
Ejemplo:
el viejo algoritmo de comprar papas en el mercado.
Se puede generalizar el proceso intuitivo a un esquema algortmico general. El esquema trabaja con los siguientes conjuntos de elementos: C: Conjunto de elementos candidatos, pendientes de seleccionar (inicialmente todos). S: Candidatos seleccionados para la solucin. R: Candidatos seleccionados pero rechazados despus. Cul o cules son los candidatos? Depende de cada problema.
MTODO GENERAL
Esquema general de un algoritmo voraz
C S R
Conjunto de elementos candidatos, pendientes de seleccionar (inicialmente todos). Candidatos seleccionados para la solucin Candidatos seleccionados pero rechazados despus
MTODO GENERAL
Funciones genricas
solucin (S). Comprueba si un conjunto de candidatos es una solucin (independientemente de que sea ptima o no). seleccionar (C). Devuelve el elemento ms prometedor del conjunto de candidatos pendientes (no seleccionados ni rechazados). factible (S, x). Indica si a partir del conjunto S y aadiendo x, es posible construir una solucin (posiblemente aadiendo otros elementos). insertar (S, x). Aade el elemento x al conjunto solucin. Adems, puede ser necesario hacer otras cosas. Funcin objetivo (S). Dada una solucin devuelve el coste asociado a la misma (resultado del problema de optimizacin).
MTODO GENERAL
Algunos algoritmos ya estudiados usan la tcnica de avance rpido...
Ejemplo 1. Algoritmo de Dijkstra:
Conjunto. de candidatos: todos los nodos del grafo. Funcin de seleccin: escoger el nodo candidato con camino especial ms corto. Funcin factible: recalcular los caminos especiales. Solucin: cuando se acaben los candidatos.
Caso 2. El mtodo intuitivo se puede entender como un algoritmo voraz: en cada paso aadir una moneda nueva a la solucin actual, hasta llegar a P.
Solucin:
conjunto de monedas que sumen P.
Funcin objetivo:
Minimizar el nmero de monedas.
x
i =1
Sujeto a
xc
i =1
i i
= P, xi 0
xc
i =1
i i
= P, xi 0
seleccionar. Qu moneda se elige en cada paso de entre los candidatos? Respuesta: elegir en cada paso la moneda de valor ms alto posible, pero sin sobrepasar la cantidad que queda por devolver. factible. Valdr siempre verdad. En lugar de seleccionar monedas de una en una, usamos la divisin entera y cogemos todas las monedas posibles de mayor valor.
Repetir, como mximo n veces y como mnimo m: Funcin solucin: f(m). Normalmente O(1) u O(m). Funcin de seleccin: g(n). Entre O(1) y O(n). Funcin factible (parecida a solucin, pero con una solucin parcial): h(m). Insercin de un elemento: j(n, m).
El anlisis depende de cada algoritmo concreto. En la prctica los algoritmos voraces suelen ser bastante rpidos, encontrndose dentro de rdenes de complejidad polinomiales.
20 Kg.
Tenemos: n objetos, cada uno con un peso (pi) y un beneficio (bi) Una mochila en la que podemos meter objetos, con una capacidad de peso mximo M. Objetivo: llenar la mochila, maximizando el beneficio de los objetos transportados, y respetando la limitacin de capacidad mxima M. Los objetos se pueden partir en trozos.
x b Sujeto a la restriccin x p
i =1 i
M ,0 xi 1
PROBLEMA DE LA MOCHILA
20 Kg.
18 kg
V= 25
15 kg
V= 24
10 kg
V= 15
18 kg
V= 25
2 kg
V= 24
10 kg
PVP 24
10 kg
PVP 15
3. El objeto con mejor proporcin bi/pi (coste por unidad de peso): max bi/pi
i= 1, ..., n
Los criterios 1 y 2 pueden dar soluciones no muy buenas. El criterio 3 garantiza siempre una solucin ptima.
HEURSTICAS VORACES
Hay algoritmos que no se conocen solucin de forma eficiente, debido a que la solucin exacta puede requerir un orden factorial o exponencial Objetivo: obtener buenas soluciones en un tiempo de ejecucin corto (razonable). Algoritmos de aproximacin: garantizan una solucin ms o menos buena (o una cierta aproximacin respecto al ptimo). Un tipo son los algoritmos heursticos1: algoritmo basado en el conocimiento intuitivo o experto del programador sobre determinado problema.
HEURSTICAS VORACES
La estructura de algoritmos voraces se puede utilizar para construir procedimientos heursticos: hablamos de heursticas voraces. La clave: disear buenas funciones de seleccin.
1
40
10
2
55
45
20
25
25
5
50
30
15
1
40
10
2
55
45
20
25
25
5
50
30
15
1
45
40
10
2
55
20
25
25
5
50
30
15
1
45
40
10
2
55
20
25
25
5
50
30
15
1
45
40
10
2
55
20
25
25
5
50
30
15
COLORACIN DE GRAFOS
Coloracin de un grafo: asignacin de un color a cada nodo, de forma que dos nodos unidos con un arco tengan siempre distinto color. Problema de coloracin: dado un grafo no dirigido, realizar una coloracin utilizando el nmero mnimo de colores.
4 3 5 2
COLORACIN DE GRAFOS
Representacin de la solucin: una solucin tiene la forma (c1, c2, ..., cn), donde ci es el color asignado al nodo i. S = (1, 2, 2, 1, 1), Total: 2 colores
4 1 3 5 2
COLORACIN DE GRAFOS
Podemos usar una heurstica voraz para obtener una solucin:
Inicialmente ningn nodo tiene color asignado. Tomamos un color colorActual=1. Para cada uno de los nodos sin colorear: Comprobar si es posible asignarle el color actual. Si se puede, se asigna. En otro caso, se deja sin colorear. Si quedan nodos sin colorear, escoger otro color (colorActual= colorActual + 1) y volver al paso anterior.
COLORACIN DE GRAFOS
La estructura bsica del esquema voraz se repite varias veces, una por cada color, hasta que todos los nodos estn coloreados. Funcin de seleccin: cualquier candidato restante. Factible(x): se puede asignar un color a x si ninguno de sus adyacentes tiene ese mismo color.
COLORACIN DE GRAFOS
Ejemplo.
Resultado: se necesitan 3 colores. Recordar que el ptimo es 2 colores. Conclusin: el algoritmo no es ptimo.
4 1 3 5 2
c1
c2
c3
c4
c5
ALGORITMOS VORACES
pasos claves:
Primera cuestin: cules son los candidatos?, cmo se representa una solucin al problema? Cuestin clave: disear una funcin de seleccin adecuada. Algunas pueden garantizar la solucin ptima. Otras pueden ser ms heursticas... Funcin factible: garantizar las restricciones del problema. En general los algoritmos voraces son la solucin rpida a muchos problemas (a veces ptimas, otras no).
ALGORITMOS VORACES
Conclusiones:
Empezamos con una solucin vaca, y la construimos paso a paso. En cada paso se selecciona un candidato (el ms prometedor) y se decide si se mete o no (funcin factible). Una vez tomada una decisin, no se vuelve a deshacer. Acabamos cuando tenemos una solucin o cuando no queden candidatos.
LABORATORIO
Implemente el problema de la mochila en java o C++.
1.Coloque usted sus propios valores a las caractersticas del problema 2.Pruebe los tres criterios 3.Luego de probar n veces cada criterio determine cual criterio garantiza la mayor cantidad de soluciones optimas.