Академический Документы
Профессиональный Документы
Культура Документы
Tiene una barca de remos, y slo puede llevar con l una cosa en la barca.
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).
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
El camino que pasa por la siguiente secuencia de estados es una solucin del problema:
estado(i,i,i,i)
estado(f,i,f,i)
- cruza solo
estado(i,i,f,i)
estado(f,f,f,i)
estado(i,f,i,i)
estado(f,f,i,f)
- cruza solo
estado(i,f,i,f)
estado(f,f,f,f)
- FIN
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
}
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
}
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
}