48
Técnicas Algorítmicas Gonzalo Sainz-Trápaga (GomoX) Charlas PC++ 2008 www.pcmasmas.com 26 de Julio de 2008

Técnicas Algorítmicas Gonzalo Sainz-Trápaga (GomoX) Charlas PC++ 2008 26 de Julio de 2008

Embed Size (px)

Citation preview

Page 1: Técnicas Algorítmicas Gonzalo Sainz-Trápaga (GomoX) Charlas PC++ 2008  26 de Julio de 2008

Técnicas Algorítmicas

Gonzalo Sainz-Trápaga (GomoX)

Charlas PC++ 2008www.pcmasmas.com26 de Julio de 2008

Page 2: Técnicas Algorítmicas Gonzalo Sainz-Trápaga (GomoX) Charlas PC++ 2008  26 de Julio de 2008

Temas

1. Problemas2. Técnicas exactas3. Técnicas aproximadas

Page 3: Técnicas Algorítmicas Gonzalo Sainz-Trápaga (GomoX) Charlas PC++ 2008  26 de Julio de 2008

Problemas

Page 4: Técnicas Algorítmicas Gonzalo Sainz-Trápaga (GomoX) Charlas PC++ 2008  26 de Julio de 2008

De decisión

•¿183287 es primo?

•¿Cuál es el mínimo de la secuencia [7,8,32]?

Page 5: Técnicas Algorítmicas Gonzalo Sainz-Trápaga (GomoX) Charlas PC++ 2008  26 de Julio de 2008

Elegir o proponer una solución.

De optimización

• Hallar el camino más corto entre Buenos Aires y Beijing

• Ordenar la secuencia: [1,9,34,-2,6,28]

Page 6: Técnicas Algorítmicas Gonzalo Sainz-Trápaga (GomoX) Charlas PC++ 2008  26 de Julio de 2008

Técnicas Exactas

Page 7: Técnicas Algorítmicas Gonzalo Sainz-Trápaga (GomoX) Charlas PC++ 2008  26 de Julio de 2008

Fuerza Bruta

Probar todaslas opciones.

Page 8: Técnicas Algorítmicas Gonzalo Sainz-Trápaga (GomoX) Charlas PC++ 2008  26 de Julio de 2008

Fuerza Bruta

Se recorre todo el universode soluciones posibles.

for cand in generarCandidatos(): if esSolucion(cand): return cand

Page 9: Técnicas Algorítmicas Gonzalo Sainz-Trápaga (GomoX) Charlas PC++ 2008  26 de Julio de 2008

Fuerza Bruta

for p in permutaciones(secuencia): if estaOrdenado(p): return p

Ordenar por fuerza bruta:

Page 10: Técnicas Algorítmicas Gonzalo Sainz-Trápaga (GomoX) Charlas PC++ 2008  26 de Julio de 2008

Fuerza Bruta

• Limitaciones

• Usos reales

Page 11: Técnicas Algorítmicas Gonzalo Sainz-Trápaga (GomoX) Charlas PC++ 2008  26 de Julio de 2008

Backtracking

Probar todaslas opciones,

de forma más inteligente.

Page 12: Técnicas Algorítmicas Gonzalo Sainz-Trápaga (GomoX) Charlas PC++ 2008  26 de Julio de 2008

Backtracking

Orden!

Page 13: Técnicas Algorítmicas Gonzalo Sainz-Trápaga (GomoX) Charlas PC++ 2008  26 de Julio de 2008

Backtracking

Ordenar la secuencia [3,1,2]:

Page 14: Técnicas Algorítmicas Gonzalo Sainz-Trápaga (GomoX) Charlas PC++ 2008  26 de Julio de 2008

Backtracking

• Podas

• Recursión

Page 15: Técnicas Algorítmicas Gonzalo Sainz-Trápaga (GomoX) Charlas PC++ 2008  26 de Julio de 2008

Backtracking

• Limitaciones

• Usos reales

Page 16: Técnicas Algorítmicas Gonzalo Sainz-Trápaga (GomoX) Charlas PC++ 2008  26 de Julio de 2008

Divide & Conquer

“Vamos por partes”- Jack el destripador

Page 17: Técnicas Algorítmicas Gonzalo Sainz-Trápaga (GomoX) Charlas PC++ 2008  26 de Julio de 2008

Divide & Conquer

• “Dividir”• “Conquistar”• “Combinar”

Page 18: Técnicas Algorítmicas Gonzalo Sainz-Trápaga (GomoX) Charlas PC++ 2008  26 de Julio de 2008

Divide & Conquer

def mergesort(l): m1 = l[0:len(l)/2] m2 = l[len(l)/2:len(l)] return combinar(mergesort(m1), mergesort(m2))

Merge sort:

Page 19: Técnicas Algorítmicas Gonzalo Sainz-Trápaga (GomoX) Charlas PC++ 2008  26 de Julio de 2008

Divide & Conquer

• Recursión

• Paralelismo

Page 20: Técnicas Algorítmicas Gonzalo Sainz-Trápaga (GomoX) Charlas PC++ 2008  26 de Julio de 2008

Divide & Conquer

• Usos reales

• Limitaciones

Page 21: Técnicas Algorítmicas Gonzalo Sainz-Trápaga (GomoX) Charlas PC++ 2008  26 de Julio de 2008

ProgramaciónDinámica

“Usar COBOL arruina el cerebro”

- Edsger Dijkstra

Page 22: Técnicas Algorítmicas Gonzalo Sainz-Trápaga (GomoX) Charlas PC++ 2008  26 de Julio de 2008

Programación Dinámica

SubestructuraÓptima

Recursión

Page 23: Técnicas Algorítmicas Gonzalo Sainz-Trápaga (GomoX) Charlas PC++ 2008  26 de Julio de 2008

def fibo(n): if n == 1 or n == 2: return 1 else: return fibo(n-1) + fibo(n-2)

Fibonacci:

Programación Dinámica

Page 24: Técnicas Algorítmicas Gonzalo Sainz-Trápaga (GomoX) Charlas PC++ 2008  26 de Julio de 2008

Programación Dinámica

fibo(n) = fibo(n-1) + fibo(n-2)

fibo(n-2) + fibo(n-3) fibo(n-3) + fibo(n-4)

fibo(n-4) + fibo(n-5)

Page 25: Técnicas Algorítmicas Gonzalo Sainz-Trápaga (GomoX) Charlas PC++ 2008  26 de Julio de 2008

Programación Dinámica

Solapamiento

A B

Page 26: Técnicas Algorítmicas Gonzalo Sainz-Trápaga (GomoX) Charlas PC++ 2008  26 de Julio de 2008

• “Top-down”

• “Bottom-up”

Programación Dinámica

Page 27: Técnicas Algorítmicas Gonzalo Sainz-Trápaga (GomoX) Charlas PC++ 2008  26 de Julio de 2008

tabla = {}def fibo(n): if n == 1 or n == 2: return 1 else: if n in tabla: return tabla[n] else: res = fibo(n-1) + fibo(n-2) tabla[n] = res return res

Fibonacci (top down):

Programación Dinámica

Page 28: Técnicas Algorítmicas Gonzalo Sainz-Trápaga (GomoX) Charlas PC++ 2008  26 de Julio de 2008

tabla = {}def fibo(n): if n == 1 or n == 2:

return 1 else: tabla[1] = fibo(1) tabla[2] = fibo(2) for i in 3…n-1: tabla[i] = tabla[i-1] + tabla[i-2] return tabla[n-1] + tabla[n-2]

Fibonacci (bottom up):

Programación Dinámica

Page 29: Técnicas Algorítmicas Gonzalo Sainz-Trápaga (GomoX) Charlas PC++ 2008  26 de Julio de 2008

def fibo(n): if n == 1 or n == 2:

return 1 else: t1 = fibo(1) t2 = fibo(2) for i in 3…n-1: tmp = t2 t2 = t1 + t2 t1 = tmp return t1 + t2

Fibonacci (bottom up 2.0):

Programación Dinámica

Page 30: Técnicas Algorítmicas Gonzalo Sainz-Trápaga (GomoX) Charlas PC++ 2008  26 de Julio de 2008

• Usos reales

• Limitaciones

Programación Dinámica

Page 31: Técnicas Algorítmicas Gonzalo Sainz-Trápaga (GomoX) Charlas PC++ 2008  26 de Julio de 2008

ProgramaciónLineal

Page 32: Técnicas Algorítmicas Gonzalo Sainz-Trápaga (GomoX) Charlas PC++ 2008  26 de Julio de 2008

• Ecuaciones lineales

• SIMPLEX

• Programación entera

Programación Lineal

Page 33: Técnicas Algorítmicas Gonzalo Sainz-Trápaga (GomoX) Charlas PC++ 2008  26 de Julio de 2008

Técnicas Aproximadas

Page 34: Técnicas Algorítmicas Gonzalo Sainz-Trápaga (GomoX) Charlas PC++ 2008  26 de Julio de 2008

"La mayor deficiencia de la raza humana es nuestra incapacidad para comprender la función exponencial."

- Albert Bartlett

Page 35: Técnicas Algorítmicas Gonzalo Sainz-Trápaga (GomoX) Charlas PC++ 2008  26 de Julio de 2008

Heurísticas

Page 36: Técnicas Algorítmicas Gonzalo Sainz-Trápaga (GomoX) Charlas PC++ 2008  26 de Julio de 2008

Metaheurísticas

Page 37: Técnicas Algorítmicas Gonzalo Sainz-Trápaga (GomoX) Charlas PC++ 2008  26 de Julio de 2008

Algoritmos Golosos

Page 38: Técnicas Algorítmicas Gonzalo Sainz-Trápaga (GomoX) Charlas PC++ 2008  26 de Julio de 2008

• Usos

• Limitaciones

Algoritmos golosos

Page 39: Técnicas Algorítmicas Gonzalo Sainz-Trápaga (GomoX) Charlas PC++ 2008  26 de Julio de 2008

Taboo Search

Page 40: Técnicas Algorítmicas Gonzalo Sainz-Trápaga (GomoX) Charlas PC++ 2008  26 de Julio de 2008

Algoritmos Genéticos

- Charles Darwin

Page 41: Técnicas Algorítmicas Gonzalo Sainz-Trápaga (GomoX) Charlas PC++ 2008  26 de Julio de 2008

generacion = 0poblacion = generarIndividuosAleatorios()while(generacion < 5000): padres = poblacion.tomarAlgunos() poblacion.agregar(padres.procrear()) poblacion.mutarAlgunos() poblacion.matarAlgunos() generacion++

poblacion.sort(aptitud)machoAlfa = poblacion[0]return machoAlfa

Algoritmo genético:

Algoritmos Genéticos

Page 42: Técnicas Algorítmicas Gonzalo Sainz-Trápaga (GomoX) Charlas PC++ 2008  26 de Julio de 2008

• Usos

• Parametrización

Algoritmos Genéticos

Page 43: Técnicas Algorítmicas Gonzalo Sainz-Trápaga (GomoX) Charlas PC++ 2008  26 de Julio de 2008

Otras metaheurísticas

GRASPColonias de hormigasRedes neuronales

Page 44: Técnicas Algorítmicas Gonzalo Sainz-Trápaga (GomoX) Charlas PC++ 2008  26 de Julio de 2008

Problemas de lasMetaheurísticas

• Confiabilidad

• Parametrización

Page 45: Técnicas Algorítmicas Gonzalo Sainz-Trápaga (GomoX) Charlas PC++ 2008  26 de Julio de 2008

Más opciones!

• Algoritmos aproximados

• Algoritmos híbridos

Page 46: Técnicas Algorítmicas Gonzalo Sainz-Trápaga (GomoX) Charlas PC++ 2008  26 de Julio de 2008

Esta charla fue traídaa ustedes por cortesía

de Lotux Neon.

Page 47: Técnicas Algorítmicas Gonzalo Sainz-Trápaga (GomoX) Charlas PC++ 2008  26 de Julio de 2008

¿Preguntas?

Page 48: Técnicas Algorítmicas Gonzalo Sainz-Trápaga (GomoX) Charlas PC++ 2008  26 de Julio de 2008

Fin.