Está en la página 1de 71

ALGORITMOS

HEURÍSTICOS Y
APROXIMADOS

Análisis y diseño de algoritmos II- 2009


Problemas “difíciles”:
Definiciones, ejemplos y
propiedades

Análisis y diseño de algoritmos II- 2009


Un viaje a Ciencias de la Computación I…
Problema
“lo describe un”
Lenguaje

Clasificación de problemas
Problemas de decisión Problemas de optimización
Indecidibles Insolubles
Decidibles Solubles Soluciones
algorítmicas
Problemas de decisión:
Ejemplos
Un problema de decisión puede ser formulado de
manera tal que dada una entrada requiere una respuesta
simple: “si” o “no”.
Problemas decidibles
Ejemplo: Determinar la pertenencia de una cadena a
un lenguaje de tipo 2.
Problemas indecidibles
Ejemplo: Problema del Halting
Problemas de optimización:
Ejemplos
Informalmente, los problemas de optimización son un tipo
general de problemas en lso que se desea elegir el mejor de un
conjunto de elementos.
“Coloreo de un grafo”
Dado un grafo G = (V,E) y un conjunto finito de colores S, un
coloreo es un mapping C:V-> S, tal que si existe un arco
(v,w) ε E, luego C(v) < > C(w). Determinar el mínimo coloreo
de G.
“Problema de la mochila”
Dado un conjunto de n objetos de tamaños s1,s2, …sn y una
mochila de capacidad C (s1,s2, …sn y C son enteros positivos)
encontrar un subconjunto de objetos que maximice el uso de la
mochila.
Problemas de optimización:
Ejemplos
Problema del viajante
Dadas las distancias entre un conjunto de n
ciudades, determinar el circuito que debería
recorrer un viajante, que parte de una estas
ciudades, visita a todas las demás exactamente
una vez y vuelve al punto de partida, habiendo
recorrido la menor distancia posible.
Problemas de optimización:
Ejemplos
Ordenamiento de tareas con penalidades
Dadas n tareas a ser ejecutadas una por vez. Cada tarea Ji tiene
un tiempo de ejecución ti, un plazo de espera di medido desde el
comienzo de la ejecución, una penalidad pi por exceder el plazo
de espera. Un orden específico de tareas es una permutación S
de {1,2,...,n} donde Js(1) es la primera tarea ejecutada, Js(2) la
siguiente, etc. La penalidad total para un ordenamiento particular
es
n
P S = Σ [if (t s(1) + ....+ t s(i) ) > d s(i) then ps(i) else 0]
i=1
Se requiere encontrar un ordenamiento tal que minimice la
penalidad total
“Problemas de decisión” versus
“Problemas de Optimización”
La clasificación de problemas de decisión puede
basarse en modelos de procedimientos más simples
que los que requeriría una clasificación de problemas
de optimización. Por ejemplo, pueden basarse en
autómatas “reconocedores” como la máquina de
Turing.
Para todo problema de optimización se puede
construir una versión de un problema de decisión del
mismo “grado de dificultad”.
“Problemas de decisión” versus
“Problemas de Optimización”
“Problema del Coloreo de un grafo”
Versión de Optimización
Dado un grafo G = (V,E) y un conjuto finito de colores
S, un coloreo es un mapping C:V-> S, tal que si existe
un arco (v,w) ε E, luego C(v) < > C(w). Se requiere
colorear el grafo con la mínima cantidad de colores.

Versión de Decisión
Dado un grafo G y un entero positivo k ¿existe un
coloreo de k colores?
“Problemas de decisión” versus
“Problemas de Optimización”
Versión de optimización del “viajante”
Dadas las distancias entre un conjunto de n
ciudades, determinar el circuito que debería
recorrer un viajante, que parte de una estas
ciudades, visita a todas las demás exactamente
una vez y vuelve al punto de partida, habiendo
recorrido la menor distancia posible.
“Problemas de decisión” versus
“Problemas de Optimización”
Versión de decisión del “viajante”
Dadas las distancias entre un conjunto de n
ciudades, determinar si existe un circuito cuya
distancia total sea ≤ K y puede ser recorrido por
un viajante que parte de una estas ciudades,
visita a todas las demás exactamente una vez y
vuelve al punto de partida.
Clasificación de problemas decidibles
P-tiempo

La clase de problemas de decisión de complejidad


temporal polinomial.

La clase de lenguajes que pueden ser reconocidos por


Máquinas de Turing determinísticas de complejidad
temporal polinomial
Clasificación de problemas decidibles
NP-tiempo

La clase de lenguajes que pueden ser reconocidos


por Máquinas de Turing no-determinísticas de
complejidad temporal polinomial

Nondeterministic Polinomial
NP
Relación entre NP-tiempo y P-tiempo
Problema abierto:
¿NP-tiempo incluye a P-tiempo?

¿Qué se sabe sobre NP-tiempo?


Se ha identificado una clase de problemas de NP-tiempo.

NP-Completo
Un lenguaje Lo está en NP-Completo si todo lenguaje
L1ε NP-tiempo “se reduce” a Lo en un tiempo polinomial
Relación entre NP-tiempo y P-tiempo
Un lenguaje Lo está en NP-Completo si todo lenguaje
L1∈ NP-tiempo “se reduce” a Lo en un tiempo polinomial
w1 w2 SI
MT M1 MT M2
NO

Reconoce a L1 Reconoce a Lo

M1 y M2 son Máquinas de Turing definidas sobre un mismo


alfabeto.
M2 es una Máquina de Turing no determinística que reconoce a L0.
M1 es una Máquina de Turing determinística de complejidad
temporal polinomial, que convierte a la cadena w1 en la cadena w2
de forma tal que si w1 ε L1 luego w2 ε L2.
Relación entre NP-tiempo y P-tiempo
Los problemas NP-Completo son los “más difíciles” en
NP-tiempo dado que si existiese un algoritmo de complejidad
temporal polinomial para un problema de la clase NP-Completo,
luego existiría un algoritmo de complejidad temporal polinomial
para TODO problema perteneciente a NP-tiempo.

Informalmente, si existiese un algoritmo polinomial para un


problema NP-completo, podríamos resolver cualquier problema
en NP-tiempo en un tiempo polinomial
Relación entre NP-tiempo y P-tiempo
NP-Completo
L ε NP-Completo si
1. L ε NP-tiempo
2. Para todo L´ ε NP-tiempo , L´ “se reduce a “ L

NP_COMPLETO

NP
Relación entre NP-tiempo y P-tiempo
Si bien no se han encontrado algoritmos
acotados polinomialmente para problemas
NP-Completos, no se ha podido demostrar que
no existen!!!
NP-tiempo ? P-tiempo

SE CONJETURA NP-COMPLETO
NO DEMOSTRADO P-tiempo

NP-tiempo
Relación entre P-tiempo y NP-tiempo

SAT ( Satisfiability) es el primer problema para


el que fue demostrada su pertenencia a la clase
NP-Completo.

SAT: Evaluar una fórmula del cálculo


proposicional es un problema NP-Completo

Demostrado por Steven Cook en 1974


Relación entre P-tiempo y NP-tiempo
SAT: Evaluar una fórmula del cálculo
proposicional es un problema NP-Completo.
Bases de la demostración de Cook:
fórmula
<M,w> FM (w) SI
MTD SAT
NO

M: codificación de MT ND
w: cadena
<M,w> describe NP-tiempo, porqué?
Relación entre NP-tiempo y P-tiempo
Para probar que un problema A en NP-tiempo es
NP-completo es suficiente probar que algún otro
problema NP-completo B “se reduce a” A. Es
decir, A es polinomialmente transformable a B.
SAT

FNC-SAT
Ciclo Hamiltoniano

Viajante
Relación entre P-tiempo y NP-tiempo
Ejemplos de NP-Completos
Versión de decisión del “viajante”
Versión de decisión del “Coloreo de un grafo”

?
¿Qué sucedería si “alguien” descubriese un
algoritmo polinomialmente acotado para un
problema NP-Completo?
Problemas “difíciles”
Siempre es posible construir una versión de decisión
para un problema de optimización que tenga el mismo
grado de dificultad.

Decisión Optimización
NP-Completo NP-Hard

Ejemplos de NP-Hard
Versión de optimización del “Viajante”
Versión de optimización del “Coloreo de un grafo”
Problemas “difíciles”
Problemas computacionalmente
TRATABLES
INTRATABLES
¿Qué relaciones existen entre los problemas
tratables, intratables y las clases de problemas
P-tiempo, NP-Tiempo, NP-Completo y
NP Hard?
Problemas “difíciles”
No podemos afirmar que todo problema en P-tiempo tiene una
solución eficiente.
Para ciertas instancias y en función de restricciones al
tiempo de ejecución un problema en P-tiempo puede ser
ineficiente.
Puede estar en P-tiempo y el orden del polinomio alto

No podemos afirmar que todo problema en NP-Hard es


ineficiente
Un problema en NP-Hard puede ser “tratable” para ciertas
instancias.
Sin embargo…
Problemas “difíciles”
Sin embargo…

hay muy buenas razones para buscar soluciones


que estén en P-tiempo dado que un problema que
no está en P-tiempo será, en general, muy
costoso y probablemente intratable”.
Problemas “difíciles”
Un algoritmo para un problema complejo puede construirse
combinando algoritmos para problemas simples. Los algoritmos
simples pueden operar sobre las mismas entradas o sobre entradas
calculadas como resultados intermedios de otros problemas
simples.
Luego, la complejidad del algoritmo puede ser acotada
por suma, multiplicación y composición de complejidades de
otros algoritmos. Los polinomios son cerrados bajo estas
operaciones, luego cualquier algoritmo construido a partir de
algoritmos acotados polinomialmente será un algoritmo acotado
polinomialmente también.
Algoritmos aproximados y heurísticos
para problemas NP-Hard
Si bien no se ha podido demostrar aún que no existen
algoritmos eficientes para las clases NP-completo y
NP-Hard, desde el punto de vista práctico hay que
resolverlos eficientemente.

Si las entradas son “ pequeñas” podríamos construir algoritmos basados en


backtracking que realicen una búsqueda exhaustiva

Sino, podríamos construir soluciones aproximadas,“cercanas” a la mejor


solución, a partir de algoritmos polinomiales.
Algoritmos aproximados y heurísticos
para problemas NP-Hard
¿Cómo resolver problemas NP-HARD?
No pretendemos encontrar la “mejor” solución
sino una “buena” solución.

Algoritmos aproximados

Algoritmos heurísticos
Algoritmos heurísticos versus
algoritmos aproximados
Heurística “Hallar, inventar”
Algoritmo Heurístico
Procedimiento que puede producir una solución buena, no muy alejada de la
óptima, o incluso la óptima si somos afortunados!

Algoritmo aproximado
Procedimiento que proporciona una solución aproximada, que si bien no es la
óptima, se puede “medir” cuán cerca está de la óptima.

Los algoritmos heurísticos y los aproximados no garantizan encontrar la


solución óptima

Los algoritmos aproximados establecen una cota de error.


Algoritmos de aproximación para
problemas NP-Hard
Supongamos problemas de optimización, en los que
cada solución factible tiene un costo positivo y se
pretende obtener una solución cercana a la óptima.

Dependiendo del problema, una solución óptima puede


ser definida como el máximo o el mínimo costo de las
soluciones factibles. El problema de optimización
puede ser de maximización o minimización
Algoritmo de aproximación
Un algoritmo de aproximación está acotado por (n) si para
cualquier entrada de tamaño n, el costo de la solución del
algoritmo de aproximación, para un costo de una solución
factible c y un costo c* de una solución óptima, es:
a) si el problema es de maximización
c / c* ≤ (n) 0 < c ≤ c*
y
b) si el problema es de minimización
c* / c ≤ (n) 0 < c* ≤ c

Es decir, max ( c/c* , c*/c) ≤ (n)


Algoritmo de aproximación
max ( c/c* , c*/c) ≤ (n)

¿Qué expresa (n)=1?

¿Qué expresa (n) = 2?

¿Qué expresa (n) >> 1?


Algoritmo de aproximación
Otra medida es el error relativo definido mediante
c – c* / c
Un algoritmo de aproximación tiene un error relativo
ε(n) si c – c* / c ≤ ε(n).
Un esquema de aproximación para un problema de
optimización tiene como entradas no sólo a una
instancia de un problema sino un valor ε > 0, tal que
para un ε dado el esquema es un algoritmo de
aproximación con un error relativo acotado por ε.
Algoritmo de aproximación
Problema del viajante
Un circuito en un grafo G es una secuencia de arcos
(a1, a2), . . .,(ak−1, ak ), (ak , a1) en G tal que:
ai < > aj para cada i < > j ,
{a1, . . . , ak} es el conjunto de vértices de G.

Costo de un circuito en G:
costo ( )= Σ (costo((ai , ai+1)) + costo((ak , a1))
1 ≤ i ≤ k-1
Algoritmo de aproximación
Problema del viajante Métrico
Costo de un circuito en G:

costo ( )= Σ (costo((ai , ai+1)) + costo((ak , a1))


1 ≤ i ≤ k-1
Viajante métrico
Distancia euclideana
costo ( u,w) ≤ costo(u,v) + costo(v,w)
v

u w
Problema del viajante métrico
Algoritmo de aproximación
1. Construir un árbol de recubrimiento de
mínimo costo . Sea T

3 4
3 4
5
5
2
2
6
7 6
1 6 7 7
1
Problema del viajante métrico
Algoritmo de aproximación
2. Doblar cada arco de T para obtener un grafo
euleriano G´.
3 4
5
2

6
7
1
Problema del viajante métrico
Algoritmo de aproximación
3. Construir un circuito euleriano E sobre G’.
<3,2,1,2,3,4,5,6,5,7,5,4,3>
3 4
5
2

3 2 1 6
4 2 7
1

5
3

7 4
5 6 5
Problema del viajante métrico
Algoritmo de aproximación
4. Construir un circuito C que visite a todos los vértices
usando la desigualdad triangular
<3,2,1,4,5,6,7,3>
3 3 4 3 4
5
2

3 2
2 6
7
1 1

7
1 1 4
6
5
Problema del viajante métrico
Algoritmo de aproximación
Propuesta:
Implementar el algoritmo de aproximación

¿Cuál es la complejidad del algoritmo de


aproximación?

¿Cuál es el error? ¿Cuánto se acerca a la solución


óptima?
Problema del viajante métrico
Algoritmo de aproximación- Error
COSTO (T) ≤ OPT
COSTO (E) = 2 COSTO (T)
COSTO (C) ≤ COSTO(E)
COSTO (C) ≤ 2 OPT

Se dice que este algoritmo es FACTOR 2, indicando


que a lo sumo duplica el valor de la solución óptima
Algoritmo Heurístico
Problema del coloreo de un grafo
Dado un grafo G = (V,E) y un conjuto finito de
colores S, un coloreo es un mapping
C:V-> S, tal que si existe un arco (v,w) ε E,
luego C(v) < > C(w).

1 2 5

4
Algoritmo Heurístico
Problema del coloreo de un grafo
for ( i=2; i <= n; i++)
{c = 1;
while (g.adyacentesColoreados(i, c))
++c;
g.colorear(i, c);
}
3
1 2 5

4
Algoritmo Heurístico
Problema del coloreo de un grafo
Colorear …
a1 a2 a3 … an

b1 b2 b3 … bn
Algoritmo Heurístico
Problema del coloreo de un grafo
Secuencia de vértices <a1,a2,..an,b1,b2,..bn>
a1 a2 a3 … an

b1 b2 b3 … bn

Coloreo óptimo:2 colores


Algoritmo Heurístico
Problema del coloreo de un grafo
Secuencia de vértices <a1,b1,a2,b2,..an,bn>
a1 a2 a3 … an

b1 b2 b3 … bn

n colores!!!
Algoritmo heurístico
Problema del coloreo del grafo
Depende de la secuencia de vértices usada
la cantidad de colores del coloreo.
for ( i=2; i <= n; i++)
{c = 1;
while (g. adyacentesColoreados(i, c))
++c;
g.colorear(i, c);
}
Algoritmo heurístico
Problema del coloreo del grafo
No se conocen algoritmos de aproximación para el
coloreo de un grafo que estén acotados por un factor
constante.
Se demostró que si se descubriese un algoritmo de
aproximación que en el peor de los casos duplicara la
cantidad de colores de la solución óptima, sería posible
obtener un coloreo óptimo en tiempo polinomial.
Esto implicaría
P-tiempo = NP-tiempo. !!!!
Así, obtener una “buena” solución, no necesariamente
la óptima, para el coloreo puede ser en sí mismo un
problema NP-HARD.
Problema del viajante
Se lo conoce como TSP (Traveling Salesman
Problem).
Sea G = (V, E) un grafo orientado y rotulado.
Un ciclo hamiltoniano es un ciclo que contiene a
cada uno de los vértices de G una sóla vez.
Se desea obtener un ciclo hamiltoniano de
mínimo costo.
Problema NP-HARD
Problema del viajante

a 3 b
4 3
7 4

e 8 c

2 6
6 5
d

Una instancia de TSP


Problema NP-HARD
Problema del viajante

a 3 b
4 3
7 4

e 8 c

2 6
6 5
d

Una instancia de TSP


Problema del viajante
Algoritmo heurístico
Algoritmo heurístico basado en Prim
Inicializar T;
Inicializar S;
while ( S < > V)
{ elegir un arco (u,v) de mínimo costo/
u ε S, v ε V-S y grado-incidencia (u) < 2;
T = T U {(u,v)};
S = S U {v};
}
Problema NP-HARD
Problema del viajante

a
3 4 3
a b
4 3
7 b
4 c

8 c 5 3
e
e
2 6 d
6 5 6
d
COSTO = 21

Circuito para una instancia de TSP


Problema NP-HARD
Problema del viajante
Algoritmo heurístico basado en Prim

¿Por qué Prim y no Kruskal?

¿Por qué es heurístico y no de aproximación?


Problemas NP-Hard
Técnicas de diseño
Algunas técnicas específicas que pueden
aplicarse para resolver problemas NP-HARD
son:
Greedy heurístico
Búsqueda Local
Backtracking
Branch & Bound
Problemas NP-Hard
Técnicas de diseño
TODAS las técnicas de diseño podrían ser usadas o
combinadas para resolver problemas NP-HARD.
Por ejemplo, Sanjeev Arora propone una original
combinación de técnicas para resolver TSP euclideano.
Propone un algoritmo de aproximación que combina
divide y conquista, programación dinámica, greedy y
técnicas específicas para algoritmos geométricos.
Problemas NP-Hard
Búsqueda local
Algoritmos de búsqueda local
Comenzar con una solución al azar.
Aplicar a la solución actual una transformación de
un conjunto de transformaciones para mejorar la
solución. La solución “mejorada” pasa a ser la
solución actual.
Repetir hasta que ninguna transformación en el
conjunto de transformaciones produzca mejoras.
Problemas NP-Hard
Búsqueda local
Algoritmos de búsqueda local
Sugerencia:
1.Aplicar esta técnica para diseñar un algoritmo
para encontrar un árbol de recubrimiento de
mínimo costo.
2.Comparar este algoritmo con los algoritmos de
Prim y Kruskal.
Problemas NP-Hard
Búsqueda local
Los algoritmos de búsqueda local son efectivos como heurísticas
para la resolución de problemas cuya solución exacta requiere un
tiempo exponencial.
Comenzar con un número de soluciones y aplicar
transformaciones locales a cada una de ellas, hasta lograr
soluciones localmente óptimas, es decir que ninguna
transformación del conjunto seleccionado puede mejorarla.
Seleccionar la solución localmente óptima que tiene menor
costo. Si somos afortunados podría ser la solución
globalmente óptima
Problema del viajante
Búsqueda Local
Solución inicial para una instancia de TSP

a
3 4 7
a b
4 3
7 e
4 c

8 c 5 3
e
2 6 d b
6 5 6
d
COSTO = 25
Problema del viajante
Búsqueda Local
Generar los circuitos candidatos intercambiando
pares de arcos no adyacentes.
a b

c
d

Si el costo (a,b) + costo(d,c) > costo(a,c) + costo(b,d)


• eliminar del circuito a los arcos (a,b) y (c,d)
• agregar al circuito los arcos (a,c) y (b,d)
Problema del viajante
Búsqueda Local
Posibles transformaciones
Pares de arcos que no son adyacentes y generan
4 a 7
soluciones factibles locales
(a,e) (b,d) e
c
(a,e) (d,c)
(e,b) (d,c) 5 3

(e,b) (c,a) b
d
(b,d) (c,a)
6

Cantidad de transformaciones para circuitos de COSTO = 25


tamaño N es
N (N-3) / 2
Problema del viajante
Búsqueda Local
Posibles transformaciones
7
a e
4 a 7
3 6
c e

Costo = 21 3
d 6 b 5

d b
7
a e
6
7 8

COSTO = 25
Costo = 22
c 5 d
Problema del viajante
Búsqueda Local
Posibles transformaciones
3 b
e
4 a 7
6 4
c e

Costo = 25 3
c d 5
5
d b
3
e b

8 3 6
COSTO = 25

Costo = 25
a 4 c
Problema del viajante
Búsqueda Local
Posibles transformaciones
6
b d
a 7
4
4 7
c e

Costo = 25
5 3
a c
4
d b
3
4 a
b
6
c
3 COSTO = 25

5 Costo = 21
d e
6
Problema del viajante
Búsqueda Local
Repetir para la solución localmente óptima
3
4 a
b

c
3

5 e
d
Posibles transformaciones 6
(a,b) (e,d)
(a,b) (d,c)
(b,e) (d,c)
(b,e) (c,a)
(e,d) (c,a)
Problema del viajante
Búsqueda Local
¿Qué cantidad de transformaciones?
Para que sea “tratable” la cantidad de
transformaciones debe ser de orden polinomial.
Transformar solamente soluciones localmente
óptimas y acotar las transformaciones a un
orden polinomial no nos garantiza llegar a la
solución óptima.
Problema del viajante
Búsqueda Local
Nuestra estrategia sólo transforma si “mejora”.
La solución óptima puede llegar a partir de
transformaciones que “empeoran” el costo!!
Pero buscaremos una buena solución en
promedio…
Problema del viajante
Búsqueda Local
3 4
a 7 a
7 c
b
4
e 4 e

6 4
6 6 b
d c d
5 “empeora” 6
Costo = 25 Costo = 27

a
4 …
2 “HACIA LA
c
ÓPTIMA”
d 4

Costo = 19
6 b
e
3
Problema del viajante
Búsqueda Local
Consideraciones
Los algoritmos heurísticos basados en esta
técnica deben ser de complejidad temporal
polinomial
No se pueden generar todas las transformaciones
posibles!! La complejidad sería exponencial.
Los algoritmos que transforman soluciones factibles
deben ser polinomiales, de orden bajo.

También podría gustarte