solución de problemas por búsqueda...

Post on 14-Jul-2020

12 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

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