Está en la página 1de 36

Resolución de problemas

Ing. MsC. Marco Javier Suárez Barón. PhD.

1
Resolución de problemas
Misioneros y canibales

2
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’
Un ejemplo:

A 4 B 4 C
3
S 5 5
G
4 D E F 3
2 4
Red implícita

 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).
4
El árbol asociado de
caminos parciales -sin ciclos-
A 4 B 4 C
3
S 5 5
G
4 D 2 E F 3
4
3 S 4
4 A D
5 5 2
B D A E
4 5 2 4 5 4
C E E B B F
2 4 5 4 4 5 4 4 3
D F B F C E A C G
3 4 3 4
G C G F
3
G 5
Comentarios:
 Por el momento no estamos interesados en caminos
óptimos, entonces podemos omitir los costos.
Significa: S
SA A Significa: D
SDA
B D A E

C E E B B F

D F B F C E A C G

G C G F Signif.:
SDEBA
G

 Los nodos representan el camino parcial desde la raíz a


ellos!!
6
Terminología:
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
 Nodo, rama
 Progenitor, hijo, ancestro, descendiente
 Nodo raiz, nodo objetivo
 Expandir / Nodo Abierto/ Nodo cerrado/factor de ramificación
7
Métodos de búsqueda a ciegas

Métodos que no usan ningún conocimiento específico


acerca del problema:

Primero en profundidad
Primero en amplitud
Búsqueda No-determinística
Profundización Iterativa
Búsqueda Bi-direccional
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
S  Seleccionar un hijo
convención: izq.-a-
A derecha
 Repetidamente ir al hijo
B
siguiente, tanto como sea
posible.
C E
 Volver a las alternativas
D
no visitadas (nivel más
F
alto) solo cuando fuere
G necesario.

10
Algoritmo búsqueda primero
en profundidad:
1. COLA <-- camino que solo contiene la raiz;

2. WHILE COLA 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;
11
A 4 B 4 C
3
S 5 5
G
4 D 2 E F 3
4

1. COLA <-- camino que solo contiene la raiz;


2. WHILE COLA 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;
12
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
13
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 14
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 !!
15
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.


16
A 4 B 4 C
3
S 5 5
G
4 D 2 E F 3

3 S 4
4 A D
5 5 2
B D A E
4 5 2 4 5 4
C E E B B F
2 4 5 4 4 5 4 4 3
D F B F C E A C G
3 4 3 4
G C G F
3
G
17
Velocidad (depth-first)
 En el peor caso:
 el (único) nodo objet. puede estar en la rama del
extremo derecho,

d
b

 Complej. de tiempo == bd + bd-1 + … + 1 = bd+1 -1


b-1
d
 Luego: O(b )
18
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 :

...

 COLA contiene nodos . Es decir: 7.


 En General: ((b-1) * d) + 1
 Orden: O(d*b)
19
Búsqueda primero en amplitud

Expande el árbol capa por capa,


Avanzando en profundidad.
Breadth-first search:
S

A D  Moverse
hacia abajo,
B D A E nivel por
nivel, hasta
C E E B B F que el
objetivo sea
D F B F C E A C G alcanzado.

G C G F
G

21
Algoritmo prim.en amplitud:
1. COLA <-- camino que solo contiene la raiz;

2. WHILE COLA 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;
UNICA
3. SI objetivo alcanzado DIFERENCIA!
THEN éxito;
ELSE falla; 22
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

23
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.

24
Velocidad (breadth-first)
 Si un nodo objetivo es encontrado a profundidad m del árbol,
todos los nodos hasta esa profundidad son creados.

m
d
b G

 Luego: O(bm)
 nota: depth-first podría haber visitado nodos más
profundos. 25
Memoria (breadth-first)
 El mayor número de nodos en COLA se alcanza en el
nivel m del nodo objetivo.

m
b d
G

 COLA contiene nodos y G . (Es decir: 4) .

 En General: bm

26
 Esto es generalm. MUCHO peor que depth-first !!
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

27
Búsqueda No-determinística:
1. COLA <-- camino que solo contiene la raiz;

2. WHILE COLA 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;
28
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.

29
Depth-limited search:
1. DEPTH <-- <algun número natural>
COLA <-- camino que solo contiene la raiz;

2. WHILE COLA 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; 30
Algoritmo de profundización
iterativa:

1. DEPTH <-- 1

2. WHILE objetivo no alcanzado

DO ejecutar Depth-limited search;


incrementar en 1 DEPTH;

31
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?

 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
32
Búsqueda bi-direccional

 Computa el árbol tanto desde el nodo de comienzo


como desde el nodo objetivo, hasta que estos
árboles se encuentran.

33
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.

34
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


AND COLA1 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. IF COLA1 y COLA2 comparten un estado


THEN éxito;
ELSE falla;
35
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)

36

También podría gustarte