solución de problemas por búsqueda...
Post on 14-Jul-2020
14 Views
Preview:
TRANSCRIPT
Solución de problemas
por búsqueda
inteligente
Ana Lilia Laureano Cruces
UAM-A
La solución de problemas
requiere dos consideraciones…
Representación del problema en un espacio organizado.
La capacidad de probar la existencia del estado objetivo en dicho espacio.
Las anteriores premisas se traducen en: la determinación del estado objetivo y la determinación del camino óptimo guiado por este objetivo a través de una o más transiciones dado un estado inicial.
El sentido común…
Qué
La llave
Dónde
El espacio de búsqueda
La búsqueda
El espacio de búsqueda
Se le conoce como una colección de estados.
En general los espacios de búsqueda en los
problemas de IA no son completamente
conocidos de forma apriori.
De lo anterior ‘resolver un problema de IA’
cuenta con dos fases: 1) la generación del
espacio de estados y la búsqueda del estado
deseado en ese espacio.
Debido a que ‘todo el espacio de
búsqueda’ de un problema es muy
grande, puede causar un bloqueo de
memoria, dejando muy poco espacio para
el proceso de búsqueda.
Para solucionar esto, se expande el
espacio paso a paso, hasta encontrar el
estado objetivo.
Propiedades de los métodos
de Búsqueda Complejidad:sirve para discutir que tan eficiente es un
método en el tiempo y el espacio. En el primer caso
depende del tiempo que tarda en encontrar un estado
meta.
El segundo caso esta realcionado con la cantidad de
memoria que el método necesita utilizar.
Es usual utilizar la notación O (bd), donde b es el factor
de ramas, y d es la profundidad del nodo objetivo.
La búsqueda en profundidad es muy
eficiente en espacio, ya que solamente
necesita almacenar la información del
caminio en curso examinado. Pero no es
eficiente en tiempo; ya puede examinar
ramas muy profundas.
La complejidad debe ser comparada con
la solución generada por el método.
Completes
Un método es completo cuando grantiza
encontrar la meta objetivo si al menos
existe una.
La búsqueda a lo ancho es completa no
así la búsqueda en profundidad (puede
encontrarse una rama infinita o muy larga)
La completes es una propiedad deseable
ya que en nada ayuda un método que
nunca encuentra solución.
Optimalidad
Un método de búsqueda es óptimo si
garantiza encontrar la mejor solución que
existe. En otras palabras encontrará el
camino al objetivo que involucre el menor
número de pasos. Lo anterior no significa
que sea eficiente ya que puede tomar
mucho tiempo para encontrar la solución
óptima. Pero una vez que la encuentra
grantiza que es la mejor.
Dependiendo de…
la metodología de expansión del espacio
de estados.
la forma de visita de ese espacio.
Espacios en forma de árboles:
• A lo ancho (visita los nodos a lo ancho)
• En profundidad (visita los nodos en profundidad)
Dichas búsquedas se conocen como
búsquedas determinísticas.
Existen otras…
Que nodo será visitado sin calcular los detalles en el algoritmo.
Es más se pueden tener varias opciones de transición con las mismas condiciones, en un instante dado.
A tales búsquedas se les conoce como no determinisiticas.
La mayoría de las búsquedas en IA son no detrminísticas.
Método de genera-prueba
Es el más simple:
BEGIN
REPEAT
• Genera un nuevo estado y lo llama estado en
curso;
UNTIL estado en curso = estado objetivo;
END
La parte más interesante en este algoritmo es la
que se refiere a la generación de nuevos
estados.
Esta parte no queda incluida en este algoritmo
pero con el fin de formalizarla necesitamos
definir la siguiente tupla:
Nodos
Arcos
Objetivo
curso
Nodos: representa el conjunto de estados en el
espacio de búsqueda.
Arcos: representa un operador que aplicado a
un estado permite la transición a otro.
Objetivo: denota el estado deseado a ser
identificado en los nodos y …
En curso: representa el estado generado y
comparado con el estado objetivo.
Grafo vs. árbol
La diferencia básica entre estas dos estructuras
de datos consiste en el número de padres de un
determinado nodo:
En el caso de un grafo, éste puede ser cualquier
entero positivo.
Para un árbol el máximo valor de éste es uno.
A continuación se presentan dos algoritmos
típicos para generar el espacio de búsqueda.
Búsqueda a lo ancho
1
23
4
8765
9 10 11 12
Profundidad
0
1
2
3
Procedure BusquALoAncho
BEGIN Elem = Obten (nodo) {del arbol}
InserCola (elem, COLA)
REPEAT• elem = ExtraeElem (COLA)
• IF elem = objetivo
Exito = Verdad (para)
• ELSE
BEGIN
• Elem = Obten (nodo) {hijos del nodo en curso del arbol}
• InsertaElem (elem, COLA)
END
UNTIL (ColaVacia OR Exito)
END;
Principio del algoritmo…
Si el nodo en curso no es el estado
objetivo, inserte en la COLA, las hojas del
nodo en curso en cualquier orden y
redefina el elemento del frente de la
COLA. El algoritmo termina cuando se
encuentra el estado objetivo.
Elementos en la COLA …
n1
n2 n3 n4
n4n3
n6n5n4
n8n7n6n5
La búsqueda a lo ancho no es buen método en
situaciones donde el árbol puede tener caminos
muy profundos y particularmente si el el nodo
objetivo se encuentra en la parte menos
profunda del árbol desafortunadamente no
cuenta con un buen desarrollo cuando el factor
de ramificación es extremadamente alto como
en el caso de los árboles de juego (ajedrez, go)
Complejidad del algoritmo
Supongamos que contamos con un árbol
balanceado, esto es de cada nodo = b (cuenta
con el mismo factor de ramificación) y se recorre
la misma profundidad d.
Si el estado objetivo no esta en d-1. Entonces
las búsquedas falsas quedan representadas
por:
1 + b + b2 + b3 + … + b d-1 = (bd - 1) / (b - 1),
b>>1
Así que con el fin …
El estado objetivo puede encontrarse en el primer nodo, o
En el último nodo, visitado del árbol
Así el promedio de nodos visitados es: (1+bd ) / 2
En consecuencia el total de nodos visitados en un caso promedio se convierte en: (bd - 1) / (b-1) + (1 + bd) / 2
bd (b + 1) / 2 (b - 1).
Debido a que la complejidad del algoritmo (tiempo) es proporcional al número de nodos visitados, la expresión anterior nos da una medida de esta complejidad.
La complejidad del espacio…
El número máximo de nodos es colocado en la COLA.
Cuando el nodo más izquierdo de la rama con profundidad d en el árbol es colocado en la COLA. La longitud de la COLA se convierte en bd.
Así la longitud en este caso se convierte en bd.
Y la complejidad del algoritmo (tiempo) depende de la longitud de la COLA, en el peor de los casos; siendo del orden bd.
Con el fin de reducir el performance del espacio de búsqueda se presenta el siguiente algoritmo.
Búsqueda en profundidad
1
23
8
10954
6 7 11 12
Profundidad
0
1
2
3
Procedure
BusqEnProfundidad BEGIN
Elem = Obten (nodo) {del arbol}
PushElem (elem, PILA)
WHILE ~ (PilaVacia) OR (éxito) DO• elem = PopPila (PILA)
• IF elem = objetivo
Exito = Verdad (para)
• ELSE
BEGIN
• Elem = Obten (nodo) {hijos del nodo en curso del arbol}
• PushElem (elem, PILA)
END
END_WHILE
END;
Principio del algoritmo
El nodo raíz es colocado en en la PILA,
para examinarlo se saca, si es el estado
objetivo el algoritmo para, en caso
contrario sus hijos son metidos en la PILA.
El proceso continúa hasta que la PILA
esta vacía o se tiene éxito.
Elementos en la PILA…
n1 n8
n3
n2
n8
n3
n8
n5
n4
n8
n5
n8
n7
n6
La complejidad del espacio…
Se utiliza el máximo de memoria cuando se vista la máxima longitud la primera vez.
Asumiendo que cada nodo cuenta con un factor de profundidad: cuando el nodo en la profundidad d es examinado, el número de nodos guardado en memoria son todos los nodos de esa profundidad que no han sido visitados (d), mas el nodo que esta examinándose.
Debido a que en cada nivel existen b-1 nodos sin vistar, el número total de memoria requerida es d (b-1) + 1.
Así en este caso la complejidad del
algoritmo (espacio) es una función lineal
de b, mientras que en el caso del
algoritmos de búsqueda a lo ancho es una
función exponencial de b. De aquí que
este sea un aspecto interesante en el
caso del algoritmo de busqueda en
profundidad.
Tiempo de complejidad
Si se encuentra el estado objetivo en la posición d más izq. El número de nodos examinados es d+ 1.
Y si encontramos el estado objetivo en el nodo mas a la der. El número de nodos examinados incluye todos los nodos del árbol.
En consecuencia el total de números visitados en un caso promedio se convierte en: (d + 1) / 2 + (bd+1 - 1 / 2 (b - 1).
b(bd + d) / 2 (b - 1).
Debido a que el tiempo requerido de corrida depende de la profundida del árbol.
Un camino alterno es reslover el problema controlando la prfundidad del árbol.
El control de esta profundidad dada por el usario da origen a la búsqueda iterativa dependiente.
Si la profundidad de corte es 1, se genera solo el nodo raíz y lo examina.
En caso de que el nodo raíz no sea el objetivo, se incrmenta el limte del nivel de profundidad a 2 utilizando el algoritmo de busqueda en profundidad.
De esta forma se desarrolla una búsqueda en la que se incrementa la profundidad dejando en cada iteración fuera a los hijos de nodo en curso.
La búsqueda iterativa
dependiente... Esta búsqueda no toma tanto tiempo
como en el caso de el algoritmo general
de búsqueda en profundidad. Es una
búsqueda exhaustiva que combina la
técnica de búsqueda a lo ancho y en
profundidad. La profundidad de búsqueda
se va incrementando de uno en uno hasta
encontrar el nodo objetivo.
Algoritmo de búsqueda
iterativa dependiente BEGIN
ProfCor = 1; Permitido = N; { lo da usuario} exito = False
REPEAT
Elem = Obten (nodo); {del arbol}
PushElem (elem, PILA)
WHILE (~ (PilaVacia) AND (ProfCor < Permitido)) DO
• BEGIN
elem = PopPila (PILA)
IF elem = objetivo
• exito = Verdad (para)
ELSE
BEGIN
• Elem = Obten (nodo) {hijos del nodo en curso del arbol}
• PushElem (elem, PILA)
END
END_IF
ProfCor = ProfCor + 1;
• END
UNTIL éxito OR ProfCor > Permitido
END
fin
top related