Métodos de diseño de Algoritmos

Slides:



Advertisements
Presentaciones similares
Introducción a la Investigación de Operaciones
Advertisements

Diseño y análisis de algoritmos
Diseño y análisis de algoritmos
Diseño y análisis de algoritmos
Guia ejercicios 5: D&AA Universidad Viña del Mar 1) Calcular la factibilidad de resolver el siguiente estado del juego de 15 Resolver el juego usando el.
GRAFOS Presentado por: Oscar Leonardo Ramírez John Freddy Sandoval
Algoritmos Voraces.
Búsqueda con retroceso
TÉCNICA DE DISEÑO BACKTRACKING
Grupo 4 Matías Melgar Pablo Carbonell
PARTE II: ALGORÍTMICA Tema 7. Ramificación y poda.
Razonamiento Explícito y Experimentación en la Algoritmia
Instituto Tecnológico De Villahermosa
Métodos básicos de Búsqueda
Investigación de Operaciones II
Búsqueda Informada Heurísticas.
Inteligencia Artificial Búsqueda informada y exploración

Inteligencia Artificial Resolver problemas mediante búsqueda
Inteligencia Artificial Resolver problemas mediante búsqueda
Modelos de Programación Entera - Heurísticas
Analisis y Diseño de Algoritmos Tema: Grafos 3ra Parte
Programación Lineal Entera Antonio H. Escobar Z Universidad Tecnológica de Pereira – Colombia Posgrado en Ingeniería – Maestría/Doctorado.
GRAFOS HUGO ARAYA CARRASCO.
Grafos. Un Grafo G es un par de conjuntos (V, E), donde V es un conjunto no vacío de elementos llamados vértices o nodos y E es un conjunto formado por.
Universidad de los Andes-CODENSA
Trabajo presentado por: LUIS FERNANDO OBANDO ING
Optimización Combinatoria usando Algoritmos Evolucionistas Problemas de Optimización. Idea: Encontrar una solución "factible" y "óptima" de acuerdo a algún.
Optimización, Búsqueda Heurística
Problemas de Decisión y Optimización
Diseño y análisis de algoritmos
Programación dinámica: Introducción
Diseño y análisis de algoritmos

Complejidad de los problemas de decisión
Parte I. Estructuras de Datos.
A LGORITMO DE BÚSQUEDA POR COSTO UNIFORME Dorian López.
ALGORITMOS APROXIMADOS
Diseño y análisis de algoritmos
Parte II. Algorítmica. 3. Algoritmos voraces.
Ramificación y acotación (Branch and Bound)
Scheduling Problem ¿Cuándo y dónde debo hacer cada trabajo ?
Diseño y análisis de algoritmos
Divide y vencerás 1. Método general.
Análisis de algoritmos
METODOS DE BUSQUEDA INFORMADOS CAPITULO 5
Algoritmos de Búsqueda “Backtracking y Branch and Bound”
Backtracking 1. Método general. 2. Análisis de tiempos de ejecución.
Parte I. Estructuras de Datos.
Parte II. Algorítmica. 5. Backtracking. 1. Análisis de algoritmos.
Diseño y análisis de algoritmos
Parte II. Algorítmica. 4. Programación dinámica.
Parte I. Estructuras de Datos.
Tema 11: Programación dinámica
Tema 12. Backtracking. 1. Método general.
Parte I. Estructuras de Datos.
Tema 10: Algoritmos voraces
Parte I. Estructuras de Datos.
Tema 13: Ramificación y poda
Optimización Combinatoria y Grafos Búsqueda Tabú
Instituto Tecnológico De Villahermosa Alumno: Lázaro García Hernández.
ALGORITMO QUE ES ??.
DISEÑAR Y ELABORAR ALGORITMOS Nombre: anayeli hernandez peralta Grado y grupo: 1 “3” Materia: Informática y computación Maestro: Ángel Buendía Turno: Vespertino.
DISEÑAR Y ELABORAR ALGORITMOS NOMBRE: LAURA PAEZ GARCIA GRADO Y GRUPO: 1 “3” MATERIA: INFORMÁTICA Y COMPUTACIÓN MAESTRO: ÁNGEL BUENDÍA TURNO: VESPERTINO.
Conalep Coacalco Algoritmos Recursivos
ANALISIS DE REDES Problema de Transporte Método de la esquina Noroeste
Prof. Juan José Bravo B., M.Sc. ©
Recorridos de grafos Segunda Parte M.C. Meliza Contreras González.
La Programación Lineal es un procedimiento o algoritmo matemático mediante el cual se resuelve un problema indeterminado, formulado a través de ecuaciones.
Bloqueos Mutuos Modelo del Sistema Caracterización de Deadlock Métodos de manejo de Deadlocks Prevención de Deadlocks Evitación de Deadlocks Detección.
Transcripción de la presentación:

Métodos de diseño de Algoritmos La algoritmia consiste en identificar técnicas generales (esquemas algorítmicos) capaces de dar solución a un gran número de problemas.

Métodos general de resolución Elección del esquema. Todos los problemas pueden verse como instancias de algún esquema algorítmico Identificación del problemas con el esquema elegido. Estructuras de datos. Algoritmo completo. Estudio del coste.

Esquemas algorítmicos comunes Métodos voraces Dividir y vencer Vuelta atrás (Backtracking). Ramificación y Acotación (Branch and bound). Programación Dinámica.

Otros Esquemas Programación lineal. Programación entera. Recocido simulado (Simulated Annealing). Redes neuronales. Algoritmos Genéticos. Búsqueda Tabú.

Algoritmos voraces Se aplica a problemas de optimización. Consiste en ir seleccionando elementos de un conjunto de candidatos que se van incorporando a la solución. Nunca se deshace una decisión ya tomada: los candidatos desechados no vuelven a ser considerados y los seleccionados permanecen hasta el final Es crucial determinar la función de selección apropiada que asegure que la solución obtenida es óptima.

Algoritmos voraces funcion voraz (C: conjunto) devuelve (S:conjunto) while !solucion(S) && C  Ø x = seleccionar(C) C = C - {x} if completable(S  {x}) S = S  {x} return S

Algoritmos voraces Funciones a particularizar para cada problema: solucion(S). Decide si el conjunto S es o no solución. seleccionar(C). Selecciona el candidato más prometedor según el criterio de la función objetivo. Determina el comportamiento del algoritmo. Completable. Determina si un conjunto de elementos seleccionados puede llegar a ser una solución o no.

Algoritmos voraces Ejemplos: Problema de la mochila: Se tienen n objetos fraccionables y una mochila. El objeto i tiene peso pi , 1i  n. La mochila tiene capacidad C. Si se mete una fracción xi , 0  xi  1, del objeto i en la mochila, entonces se consigue un beneficio bi xi . El objetivo es llenar la mochila de manera que se maximice el beneficio total. Pero como la mochila tiene capacidad C, el peso total de todos los objetos metidos en ella no puede superar esa cantidad.

Algoritmos voraces Ejemplos: Búsqueda de caminos de longitud mínima: Longitud o coste de un camino: suma de los pesos de las aristas que lo componen. Cálculo de la longitud mínima de los caminos existentes entre dos vértices dados. Árboles de recubrimiento de coste mínimo. Códigos de Huffman. El problema de la selección de actividades. El problema de la minimización del tiempo de espera.

Divide y vencerás Es una técnica recursiva que consiste en dividir un problema en varios subproblemas del mismo tipo. Las soluciones a estos subproblemas se combinan para dar solución al problema. Cunado los subproblemas son más pequeños que un umbral prefijado, se resuelven mediante un algoritmo específico. Si su tamaño es mayor, se vuelven a descomponer.

Divide y Vencerás funcion divide_y_venceras (problema) if suficientemente-simple (problema) return solucion-simple (problema) else descomposicion (problema) {p1 … pk } for cada pi si = divide_y_venceras(pi) return combinacion (si… sk)

Divide y Vencerás Ejemplos: La búsqueda dicotómica La ordenación por fusión El algoritmo de ordenación rápida de Hoare Algoritmos de selección y de búsqueda de la mediana Multiplicación de enteros grandes Potenciación de enteros: Criptografía Multiplicación de matrices Calendario de un campeonato

Algoritmos de exploración en grafos Gran cantidad de problemas se pueden formular en términos de una búsqueda ciega en grafos. La solución es uno de los nodos: No hay ningún orden o procedimiento establecido para llegar directamente a ese nodo: es necesario explorar exhaustivamente el grafo hasta encontrarlo. Adicionalmente a la búsqueda sistemática en grafos (árboles) se complementa con criterios que permiten podar, o desechar antes de ser exploradas, las ramas que los satisfacen.

Algoritmos de exploración en grafos Búsqueda en profundidad. Esquema de vuelta atrás o backtracking (bt) Realiza una bp mediante un algoritmo recursivo. Por cada nodo, bt genera sus compleciones (hijos directos) y aplica de nuevo bt sobre cada uno de ellos. Si en algún punto del recorrido se dan condiciones que hacen inútil seguir el camino tomado (condiciones de poda) se abandona esa rama, retrocediendo a la última decisión.

Vuelta atrás o Backtracking funcion vuelta_atras (ensayo) if valido (ensayo) return ensayo else for hijo  compleciones (ensayo) if condiciones-de-poda(hijo) vuelta_atras (hijo)

Vuelta atrás o Backtracking Para un problema dado es necesario especificar: Qué es un ensayo, es decir, un nodo del árbol. La función válido, que determina si un nodo es solución al problema o no. La función compleciones, que genera los hijos de un nodo dado. La función condiciones-de-poda que verifica si puede descartarse una rama del árbol, aplicando los criterios de poda sobre el nodo origen de esa rama. Se hallan todas las soluciones son el esquema anterior.

Vuelta atrás o Backtracking Ejemplo: Problema de la N reinas. main() { int i; for(i=0;i<CASILLAS;i++) a[i]=TRUE; for(i=0;i<CASILLAS*2;i++) dd[i] = di[i] = TRUE; intentar(0); return(0); }

Vuelta atrás o Backtracking void intentar(int i) { int j; for(j=0;j<CASILLAS;j++) if (a[j] && dd[i+j] && di[i-j+CASILLAS]) x[i]=j; a[j] = dd[i+j] = di[i-j+CASILLAS]=FALSE; if (i<CASILLAS-1) intentar(i+1); else imprime_solucion(); a[j] = dd[i+j] = di[i-j+CASILLAS]=TRUE; }

Vuelta atrás o Backtracking Ejemplos: Coloreado de grafos Ciclos hamiltonianos Atravesar un laberinto El recorrido del caballo de ajedrez El problema de la mochila 0-1 Reconstrucción de puntos a partir de las distancias Árboles de juego

Algoritmos de exploración en grafos Búsqueda en anchura. Ramificación y poda En ocasiones se requiere que la solución alcanzada sea óptima. Para ello se calcula para cada nodo una cota inferior del posible valor de aquellas soluciones que pudieran encontrarse a partir de ese nodo del grafo. Si la cota es peor que la mejor solución de la que disponemos, no se continúa la exploración de esa parte del grafo. El cálculo de cotas se puede usar somo una condición más de poda o utilizarlo para guiar la búsqueda.

Ramificación y poda funcion ramificacion_poda_anchura (ensayo) p = Ø ; c = coste mínimo; solución = Ø encolar (ensayo, p) while !vacio(p) nodo = desencolar (p) if valido (nodo) if coste (nodo) < c solución = nodo; c = coste(nodo) else for hijo  compleciones (nodo) if condiciones-de-poda(hijo) && cota(hijo) < c encolar (hijo,p)

Ramificación y poda Ejemplos: El juego del 15 Aplicación a problemas de optimización Problema de planificación de tareas a plazo fijo El problema de la mochila 0-1 El problema del viajante de comercio

Problema de Optimización Un problema en el que debe optimizarse alguna función (minimizada o maximizada) sujeta a restricciones.