Вы находитесь на странице: 1из 5

Inteligencia Artificial

Tema 1- Modelacin de un problema


mediante bsqueda en un espacio de estados
Alejandro Lpez Alarcn
15/10/2017
PROBLEMA

Un hombre tiene que cruzar un ro con un zorro, un pollo y un saco de maz.

Tiene una barca de remos, y slo puede llevar con l una cosa en la barca.

Si el zorro y el pollo quedan solos, el zorro se come al pollo.

Si el pollo y el maz quedan solos, el pollo se come el maz.

PLANTEAMIENTO DEL PROBLEMA

Hay que tener en cuenta la situacin de antes o despus de cruzar. El hombre y el resto de los
integrantes del problema tienen que estar en alguna de las dos orillas. La representacin del
estado debe entonces indicar en qu lado se encuentra cada uno de ellos. Para esto se puede
utilizar la siguiente sintaxis: estado(H, Z, P, M), en que H, Z, P, M son variables que
representan, respectivamente, la posicin del hombre, el zorro, el pollo y el maz. Las variables
pueden tomar dos valores: i y f, que simbolizan respectivamente el borde inicio y el borde fin
del ro. El estado inicial es entonces estado(i,i,i,i). El estado objetivo es estado(d,d,d,d).

GENERACIN DE ESPACIO DE ESTADOS

Movimientos
Estado
Cruza Solo Con zorro Con pollo Con maz
Estado(i, i, i, i) Problema Problema Estado(f, i, f, i) Problema
Estado(f, i, f, i) Estado(i, i, f, i) Imposible Estado(i, i, i, i) Imposible
Estado(i, i, f, i) Estado(f, i, f, i) Estado(f, f, f, i) Imposible Estado(f, i, f, f)
Estado(f, f, f, i) Problema Estado(i, i, f, i) Estado(i,d, i, i) Imposible
Estado(f, i, f, f) Problema Imposible Estado(i, i, i, f) Estado(i, i, f, i)
Estado(i, f, i, i) Problema Imposible Estado(f, f, f, i) Estado(f, f, i, f)
Estado(i, i, i, f) Problema Estado(f, f, i, f) Estado(f, i, f, f) Imposible
Estado(f, f, i, f) Estado(i, f, i, f) Estado(i, i, i, f) Imposible Estado(i, f, i, i)
Estado(i, f, i, f) Estado(f, f, i, f) Imposible Estado(f, f, f, f) Imposible
Estado(f, f, f, f) Problema Problema Estado(i, f, i, f) Problema

SOLUCIN DEL PROBLEMA

El camino que pasa por la siguiente secuencia de estados es una solucin del problema:

estado(i,i,i,i)

- cruza con el pollo

estado(f,i,f,i)

- cruza solo
estado(i,i,f,i)

- cruza con el zorro

estado(f,f,f,i)

- cruza con el pollo

estado(i,f,i,i)

- cruza con el maz

estado(f,f,i,f)

- cruza solo

estado(i,f,i,f)

- cruza con el pollo

estado(f,f,f,f)

- FIN

BSQUEDA EN ESPACIO DE ESTADOS

String Bsqueda {
open {estado_inicial}
closed {}
while (open no est vaco) {
remover un estado X del conjunto open
if (X es un estado objetivo) return xito
else {
generar el conjunto de sucesores del estado X
agregar el estado X al conjunto closed
eliminar sucesores que ya estn en open o en closed
agregar el resto de los sucesores al conjunto open
}
}
return fracaso
}

BSQUEDA EN PROFUNDIDAD

String Bsqueda_en_profundidad {
open [estado_inicial]
closed {}
while (open no est vaca) {
remover el primer estado X de la lista open
if (X es un estado objetivo) return xito
else {
generar el conjunto de sucesores del estado X
agregar el estado X al conjunto closed
eliminar sucesores que ya estn en open o en closed
agregar el resto de los sucesores al principio de open
}
}
return fracaso
}

Considerando que la cantidad promedio de sucesores de los nodos visitados es B, y


suponiendo que la profundidad mxima alcanzada es n, este algoritmo tiene una complejidad
en tiempo de O(B^n) y, si no se considera el conjunto closed, una complejidad en espacio de
O(B n).

BSQUEDA EN AMPLITUD

String Bsqueda_en_amplitud {
open [estado_inicial]
closed {}
while (open no est vaca) {
remover el primer estado X de la lista open
if (X es un estado objetivo) return xito
else {
generar el conjunto de sucesores del estado X
agregar el estado X al conjunto closed
eliminar sucesores que ya estn en open o en closed
agregar el resto de los sucesores al final de open
}
}
return fracaso
}

Si el factor de ramificacin es B y la profundidad a la cual se encuentra el estado objetivo ms


cercano es n, este algoritmo tiene una complejidad en tiempo y espacio de O(B^n).

BSQUEDA HEURSTICA

String Bsqueda_heurstica {
open [estado_inicial]
closed {}
while (open no est vaca) {
remover el primer estado X de la lista open
if (X es un estado objetivo) return camino hasta X
else {
generar el conjunto de sucesores del estado X
foreach (Y en sucesores) {
if (Y no est en open ni en closed) {
asignar a Y un valor heurstico
agregar Y en la lista open
}
elsif (Y est en open) {
if (el nuevo camino a Y es ms corto)
actualizar el camino almacenado en open
}
elsif (Y est en closed) {
if (el nuevo camino a Y es ms corto) {
remover el estado Y del conjunto closed
agregar el estado Y en la lista open
}
}
}
agregar el estado X al conjunto closed
reordenar la lista open segn valores heursticos
}
}
return fracaso
}

Вам также может понравиться