Pract3aBusquedasCiegas06 1
Pract3aBusquedasCiegas06 1
Pract3aBusquedasCiegas06 1
3a
Mecanismos de búsqueda no informada en Common Lisp
Introducción
Uno de los primeros paradigmas de la Inteligencia Artificial fue la representación de problemas como un
espacio de estados, lo que permitió definir la solución de los mismos como la búsqueda de un estado que
represente una solución aceptable al problema partiendo de un estado que represente la situación inicial del
problema. Los algoritmos de búsqueda se clasifican en: No informados e Informados. Dentro de los
algoritmos no informados se encuentran: i) Búsqueda Primero en Profundidad y ii) Búsqueda Primero en
Amplitud. El espacio de estados puede estar representado explícitamente o implícitamente. La
representación explícita es aquella en la que se definen, previo al inicio de la búsqueda, todos los estados
posibles y las conexiones entre ellos. En la representación implícita normalmente se utiliza un sistema de
producción para generar sobre la marcha los posibles estados siguientes de un estado dado.
La estrategia general consiste en manejar una lista de trayectorias parciales desde el nodo inicial a nodos
intermedios, hasta que una de las trayectorias parciales se pueda extender lo suficientemente lejos para
llegar a ser una trayectoria completa aceptable. Para implementar la estrategia de búsqueda primero en
profundidad se utiliza una estructura de cola (una lista de listas en Lisp) para almacenar las trayectorias
parciales no exploradas. El algoritmo recursivo es el siguiente:
1.- Si la función se llama con nodo inicio y nodo final solamente, coloca el nodo inicial s en la cola
como una primera trayectoria.
2.- Si la cola está vacía, regresa nil y termina
3.- Si la primera trayectoria de la cola es una trayectoria completa, regresa esa primera trayectoria de
la cola
Sino
4.- Extiende la primera trayectoria de la cola a todos los nodos vecinos del nodo terminal de esta
trayectoria parcial, luego reemplazamos la primera trayectoria parcial con las trayectorias recién
extendidas y las colocamos al frente de la cola (en cualquier orden).
5.- Continuamos la búsqueda hasta encontrar una trayectoria completa aceptable o fracasar.
1.- Si la función se llama con nodo inicio y nodo final solamente, coloca el nodo inicial s en la cola
como una primera trayectoria.
2.- Si la cola está vacía, regresa nil y termina
3.- Si la primera trayectoria de la cola es una trayectoria completa, regresa esa primera trayectoria de
la cola
Sino
4.- Extiende la primera trayectoria de la cola a todos los nodos vecinos del nodo terminal de esta
trayectoria parcial, luego reemplazamos la primera trayectoria parcial con las trayectorias recién
extendidas y las colocamos al final de la cola (en cualquier orden).
5.- Continuamos la búsqueda hasta encontrar una trayectoria completa aceptable o fracasar.
Actividades
1.- Captura el siguiente código de Common Lisp en un archivo busquedas.lsp que implementa las
búsqedas primero en amplitud y primero en profundidad.
;; ------------------------------------------------------------------------
;; Archivo: busquedas.lsp
;; Implementa las busquedas no informadas primero en profundidad (bpp) y
;; primero en amplitud (bpa). Es una implementacion recursiva.
;; ------------------------------------------------------------------------
(defun espacio ()
(setf (get 's 'vecinos) '(a d)
(get 'a 'vecinos) '(s b d)
(get 'b 'vecinos) '(a c e)
(get 'c 'vecinos) '(b)
(get 'd 'vecinos) '(s a e)
(get 'e 'vecinos) '(b d f)
(get 'f 'vecinos) '(e) )
)
3.- Define un nuevo espacio de estados que contenga por lo menos 10 nodos y especifícalo dentro de una
nueva función espacio2(), que debes agregar al archivo busquedas.lsp para que genere el nuevo
espacio de estados, dibuja el espacio que definiste, escribe el código de la función espacio2() que lo
describe, recarga el archivo busquedas.lsp, ejecuta varias búsquedas tanto en amplitud como en
profundidad y reporta los resultados.