340 likes | 602 Views
Métodos básicos de Búsqueda. ¿Cómo resolver el problema de control en sistemas de reglas de producción? Técnicas básicas para encontrar caminos en redes de estados. Por el momento: - no se intenta encontrar la solución óptima - desarrollo de ‘árbol de búsqueda’. 4. 4. 3. 5. 5. 4.
E N D
Métodos básicos de Búsqueda ¿Cómo resolver el problema de control en sistemas de reglas de producción? Técnicas básicas para encontrar caminos en redes de estados. Por el momento: - no se intenta encontrar la solución óptima - desarrollo de ‘árbol de búsqueda’
4 4 3 5 5 4 3 2 4 Red implícita A B C S G D E F Un ejemplo: • Dos tareas posibles: • 1. ENCONTRAR un (el) camino. = costo computacional • 2. RECORRER el camino. = costo de recorrido • 2. Encontrar caminos óptimos (próximo capítulo).
El árbol asociado de caminos parciales -sin ciclos- 4 4 3 5 5 4 3 2 4 4 3 S 4 A D 2 5 5 A B C B D A E 4 5 S 5 2 4 4 G C E E B B F 2 4 5 4 4 5 4 4 D E F 3 D F B F C E A C G 3 4 3 4 G C G F 3 G
Significa: SA S A Significa: SDA D B D A E C E E B B F D F B F C E A C G Signif.: SDEBA G C G F G Comentarios: • Por el momento no estamos interesados en caminos óptimos, entonces podemos omitir los costos. • Los nodos representan el camino parcial desde la raíz a ellos!!
S A D B D A E C E E B B F D F B F C E A C G G C G F G Terminología: • Nodo, rama • Progenitor, hijo, ancestro, descendiente • Nodo raiz, nodo objetivo • Expandir / Nodo Abierto/ Nodo cerrado/factor de ramificación
Métodos de búsqueda a ciegas Primero en profundidad Primero en amplitud Búsqueda No-determinística Profundización Iterativa Búsqueda Bi-direccional Métodos que no usan ningún conocimiento específico acerca del problema:
Búsqueda primero en profundidad Expandir el árbol tan profundamente como sea posible, retornando a niveles superiores cuando sea necesario.
Búsqueda primero en profundidad= seguim. Cronológ.hacia atrás • Seleccionar un hijo • convención: izq.-a-derecha • Repetidamente ir al hijo siguiente, tanto como sea posible. • Volver a las alternativas no visitadas (nivel más alto) solo cuando fuere necesario. S A B C E F D G
Algoritmo búsqueda primero en profundidad: 1. COLA <-- camino que solo contiene la raiz; 2. WHILECOLA no vacía AND objetivo no alcanzado DO remover el primer camino de la COLA; crear nuevos caminos (a todos los hijos); rechazar los nuevos caminos con ciclos; agregar al frente de COLA los nuevos caminos; 3. IF objetivo alcanzado THEN éxito; ELSE falla;
4 4 A B C 3 5 S 5 G 4 3 D E F 2 4 1. COLA <-- camino que solo contiene la raiz; 2. WHILECOLA no vacía AND objetivo no alcanzado DO remover el primer camino de la COLA; crear nuevos caminos (a todos los hijos); rechazar los nuevos caminos con ciclos; agregar al frente de COLA los nuevos caminos; 3. IF objetivo alcanzado THEN éxito; ELSE falla;
Traza de depth-first para el ejemplo: • (S) S removido, (SA,SD) computados y agregados • (SA, SD) SA removido, (SAB,SAD,SAS) computados, (SAB,SAD) agregados • (SAB,SAD,SD) SAB removido, (SABA,SABC,SABE) comput., (SABC,SABE) agregados • (SABC,SABE,SAD,SD) SABC removido, (SABCB) computados, nada agragado • (SABE,SAD,SD) SABE removido, (SABEB,SABED,SABEF) computados, (SABED,SABEF)agragados • (SABED,SABEF,SAD,SD) SABED removido, (SABEDS,SABEDA.SABEDE) computados, nada agregado • (SABEF,SAD,SD) SABEF removido, (SABEFE,SABEFG) computados, (SABEFG) agregado • (SABEFG,SAD,SD) objetivo alcanzado: reportar éxito
Criterios de evaluación: • Completitud: • ¿El algoritmo siempre encuentra un camino? • (para toda RED en que al menos un camino exista) • Velocidad(complejidad de tiempo en las peores cond.): • ¿Cuál es el máximo número de nodos que puede ser necesario que sean creados? • Memoria(complejidad de espacio en las peores cond.): • ¿Cuál es la máxima cantidad de nodos que puede ser necesario almacenar? • Expresado en términos de: • d = profundidad del árbol • b = factor de ramific. (promedio) del árbol • m = profundidad de la solución menos profunda
Nota: aproximaciones !! • En nuestro análisis de complejidad, no tenemos en cuenta la detección de ciclos . • Los resultados solo se aplican ‘formalmente’ a las variantes de nuestros algoritmos SIN verificación de ciclos. • Estudiar el efecto de la detección de ciclos en la complejidad es dificultoso: • la recarga que implica esta verificación PUEDE o NO ser compensada por la reducción de tamaño del árbol. • Además: nuestro análisis NO toma en cuenta la longitud (espacio) de representación de caminos !!
Completitud (depth-first) • Completo para REDES FINITAS. • (= REDES con número finito de nodos) • IMPORTANTE: • Esto is debido a la integración de LOOP-checking en esta versión de Depth-First (y en todos los otros algoritmos que se presentarán) ! • SI no removemos caminos con ciclos, entonces Depth-First no es completo (puede quedar atrapado en loops de una red finita) • Nota: NO necesar. encuentra el camino más corto.
4 4 3 5 5 4 3 2 4 3 S 4 A D 2 5 5 A B C B D A E 4 5 S 5 2 4 4 G C E E B B F 2 4 5 4 4 5 4 4 D E F 3 D F B F C E A C G 3 4 3 4 G C G F 3 G
Complej. de tiempo == bd +bd-1 + … + 1 = bd+1 -1 • Luego: O(bd) b - 1 Velocidad (depth-first) • En el peor caso: • el (único) nodo objet. puede estar en la rama del extremo derecho, d b G
... • COLA contiene nodos . Es decir: 7. • En General: ((b-1) * d) + 1 • Orden: O(d*b) Memoria (depth-first) • El número máximo de nodos en COLA se alcanza en el nodo del extremo izquierdo inferior. • Ejemplo: d = 3, b = 3 :
Búsqueda primero en amplitud Expande el árbol capa por capa, Avanzando en profundidad.
S A D B A D E C B B F E E B F F C A C D E G C F G G G Breadth-first search: • Moverse hacia abajo, nivel por nivel, hasta que el objetivo sea alcanzado.
Algoritmo prim.en amplitud: 1. COLA <-- camino que solo contiene la raiz; 2. WHILECOLA no vacía AND objetivo no alcanzado DO remover el primer camino de la COLA; crear nuevos caminos (a todos los hijos); rechazar los caminos nuevos con ciclos; agregar los nuevos caminos al final de COLA; 3. SI objetivo alcanzado THEN éxito; ELSE falla; UNICA DIFERENCIA!
Traza de breadth-first en el ejemplo: • (S) S removido, (SA,SD) computados y agregados • (SA, SD) SA removido, (SAB,SAD,SAS) computados, (SAB,SAD) agregados • (SD,SAB,SAD) SD removido, (SDA,SDE,SDS) computados, (SDA,SDE) agregados • (SAB,SAD,SDA,SDE) SAB removido, (SABA,SABE,SABC) computados, (SABE,SABC) agregados • (SAD,SDA,SDE,SABE,SABC) SAD removido, (SADS,SADA, SADE) computados, (SADE) agregados • etc, hasta que COLA contiene: • (SABED,SABEF,SADEB,SADEF,SDABC,SDABE,SDEBA,SDEBC, SDEFG) el objetivo es alcanzado: reportar éxito
Completitud (breadth-first) • COMPLETA • aún para REDES implícitamente infinitas! • Permanecería completa aún sin nuestro loop-checking. • Nota: SIEMPRE encuentra el camino más corto.
m d b G Velocidad (breadth-first) • Si un nodo objetivo es encontrado a profundidad m del árbol, todos los nodos hasta esa profundidad son creados. • Luego: O(bm) • nota: depth-first podría haber visitado nodos más profundos.
m d b G • COLA contiene nodos y . (Es decir: 4) . • En General: bm • Esto es generalm. MUCHO peor que depth-first !! G Memoria (breadth-first) • El mayor número de nodos en COLA se alcanza en el nivel m del nodo objetivo.
Evaluación práctica: • Depth-first: • SI el espacio de búsqueda contiene ramas muy profundas sin solución, ENTONCES Depth-first puede desperdiciar mucho tiempo en ellas. • Breadth-first: • Demanda MUCHA memoria ! • ¿ Soluciones ? • Búsqueda No-determinística • Profundización iterativa
Búsqueda No-determinística: 1. COLA <-- camino que solo contiene la raiz; 2. WHILECOLA no vacía AND objetivo no alcanzado DO remover el primer camino de la COLA; crear nuevos caminos (a todos los hijos); rechazar los nuevos caminos con ciclos; agregar los nuevos cam. en lug. al azar en COLA; 3. IF objetivo alcanzado THEN exito; ELSE falla;
Búsqueda por profundización iterativa • Restringe una búsqueda depth-first a una profundidad fija. • Si no se encontró ningún camino, incrementar la profundidad y recomenzar la búsqueda.
1. DEPTH <-- <algun número natural> COLA <-- camino que solo contiene la raiz; 2. WHILECOLA no vacía AND objetivo no alcanzado DO remover el primer camino de la COLA; IF el camino tiene long.menor que DEPTH crear nuevos caminos(a todos los hijos); rechazar los nuevos caminos con ciclos; agregar los nuevos caminos al frente de COLA; 3. IF objetivo alcanzado THEN exito; ELSE falla; Depth-limited search:
1. DEPTH <-- 1 2. WHILE objetivo no alcanzado DO ejecutar Depth-limited search; incrementar en 1 DEPTH; Algoritmo de profundización iterativa:
bm-1+bm-2+ … + 1 = bm-1 = O(bm-1) b - 1 • El trabajo realizado en DEPTH = m is O(bm) En general: MUY buen trade-off Profundización iterativa:la mejor búsqueda ‘a ciegas’. • Completa: si - incluso encuentra el camino más corto (como primero en amplitud) . • Memoria: b*m (combina ventajas de depth- y breadth-first) • Velocidad: • Si se halla el camino a Depth = m, ¿cuánto tiempo se desperdició en la construcc.de los árboles más pequeños?
Búsqueda bi-direccional • Computa el árbol tanto desde el nodo de comienzo como desde el nodo objetivo, hasta que estos árboles se encuentran.
Búsqueda bi-direccional • SI podemos describir EXPLíCITAMENTE el estado OBJETIVO, Y • Contamos con reglas para razonamiento HACIA ADELANTE Y HACIA ATRAS: Inicio Objet.
Algoritmo bi-direccional: 1. COLA1 <-- camino que solo contiene la raiz; COLA2 <-- camino que solo contiene el objetivo; 2. WHILE ambas COLAi no estén vacías ANDCOLA1 y COLA2 NO compartan un estado DO remover sus primeros caminos; crear sus nuevos caminos (a todos los hijos); rechazar sus nuevos caminos con ciclos; agregar sus nuevos caminos al final; 3. IFCOLA1 y COLA2 comparten un estado THEN éxito; ELSE falla;
Propiedades (Bi-direccional): • Completa: Si. • Velocidad: Si la verificación de estado común se puede realizar en tiempo constante (hashing): • 2 * O(bm/2) = O(bm/2) • Memoria: similar: O(bm/2)