; Documentacion de sokoban.o ; ========================== ; ; Programa: Package para entorno para agente de juego a Sokoban ; ; Asignatura: Introducción a la Inteligencia Artificial ; ETSII - ULL ; Práctica: 5a (sistemas de producción) ; Profesor: Patricio García (patricio@etsii.ull.es) ; Fecha: 29/5/2005 ; Comentarios: ; Para representar el laberinto se utilizan estructuras ; tipo soko (ver (help 'soko)). ; Las funciones accesibles mas importantes son: ; inic-soko : Comienza a ejecutar el agente ; gen-soko : Devuelve estructura con estado de inicio ; vis-soko : Visualiza estructura tipo soko ; mov-val-soko: Chequea si un movimiento es válido para ; un estado ; mov-soko: Modifica un estado aplicando un movimiento ; copy-est-soko: Genera una copia de un estado ; sol-val-soko: Chequea si un estado es estado final ; version-soko: Devuelve el número de versión ; ; Ver el correspondiente help para cada una de ellas. ; ; Para poder utilizarse este paquete ha de cargarse mediante: ; (load "sokoban") ; (use-package "sokoban") ; ----------------------------------------------------------------------------- INIC-SOKO [Function] - Función: INIC-SOKO (&OPTIONAL (AGENTE #'agente-humano) &KEY VERB (NUM 1) (TIPO NIL) HOF) Package:SOKOBAN Inicia la ejecucion del agente AGENTE que juega al Sokoban. La funcion AGENTE debe encontrar una solucion y devolverla como una lista de movimientos, cada movimiento puede ser 1, 2, 3 ó 4 segun sean norte, sur, este u oeste. VERB indica si se activa el modo verbose. NUM indica el número de partidas a jugar. TIPO indica el tipo de juego, puede ser NIL, 1, 2, 3, 4, una lista de estos o bien un string que cargará el laberinto desde el/los ficheros que empareje. HOF indica si se graban los resultados en el Hall-of-Fame (/scratch/sokoban/hof.txt , ver por*.txt). Devuelve una lista con el número de partidas jugadas, una sublista con el numero acumulado de pasos de las soluciones encontradas y cuantas de ellas son del tipo push, y el tiempo de ejecucion total que han tardado las partidas. ----------------------------------------------------------------------------- > ----------------------------------------------------------------------------- GEN-SOKO [Function] - Función: GEN-SOKO (EST) Package:SOKOBAN Genera un estado inicial con un laberinto para el Sokoban, de acuerdo a las especificiaciones del argumento TIPO pasado a la función INIC-SOKO, puede cargar el laberinto desde un fichero si asi se le ha especificado en esta variable (ver (help 'INIC-SOKO). Devuelve una estructura tipo SOKO. ----------------------------------------------------------------------------- > ----------------------------------------------------------------------------- SOKO [Structure] - Estructura: SOKO (DEFSTRUCT MAT ROBOT DEST) Package:SOKOBAN Estructura que almacena un laberinto Sokoban, junto a las posiciones del robot, los bloque y los destinos. Consta de tres campos: MAT es una matriz de dos dimensiones, ROBOT y DEST son listas. La matriz MAT representa el laberinto y los bloque a mover, y tiene por lo tanto las dimensiones máximas de éste. Las paredes del laberinto (#) se representa con el símbolo contenido en la variable *OBS-SOKO*, los bloques ($) se representan con el símbolo contenido en la variable *BLQ-SOKO* (ver (help '*OBS-SOKO*) y (help '*BLQ-SOKO*))'. Los espacios vacios estan representados mediante NIL. El campo ROBOT almacena una lista con dos números, indicando la fila y columna donde esta el robot (@) actualmente. El campo DEST guarda la información de los destinos (.) donde se deberan colocar los bloques, consta de una lista con sublistas de dos elemento indicando fila y columna del destino, contendrá tantas sublistas como bloques existan en MAT. La mayoría de funciones de este paquete hace uso de este tipo de estructura. ----------------------------------------------------------------------------- > ----------------------------------------------------------------------------- *BLQ-SOKO* [Special variable] - Variable: TIPO simbolo Contiene el símbolo que representa los bloques ($) dentro de la matiz del campo MAT de la estructura tipo SOKOBAN. ----------------------------------------------------------------------------- > ----------------------------------------------------------------------------- *OBS-SOKO* [Special variable] - Variable: TIPO símbolo Contiene el símbolo que representa los obstáculos (#) dentro de la matiz del campo MAT de la estructura tipo SOKOBAN. ----------------------------------------------------------------------------- > ----------------------------------------------------------------------------- VIS-SOKO [Function] - Función: VIS-SOKO (EST) Package:SOKOBAN Visualiza el estado EST utlizando caracteres: @ para el robot, # para los objetos (paredes), $ para los bloques a mover, '.' para los destinos, '*' cuando hay un bloque sobre un destino y '+' cuando el robot esta en un destino. EST ha de ser una estructura tipo SOKO. ----------------------------------------------------------------------------- > ----------------------------------------------------------------------------- MOV-VAL-SOKO [Function] - Función: MOV-VAL-SOKO (MOV EST) Package:SOKOBAN Predicado que chequea si el movimiento MOV en el estado EST es legal. MOV ha de ser un número entre 1 y 4 y EST una estructura tipo SOKO. No tiene en cuenta que dicho movimiento genere un estado dead-lock. Devuelve T si es válido el movimiento y NIL si no lo es. ----------------------------------------------------------------------------- > ----------------------------------------------------------------------------- MOV-SOKO [Function] - Función: MOV-SOKO (MOV EST) Package:SOKOBAN Realiza movimiento MOV en el estado EST. MOV ha de ser un número entre 1 y 4 correspondiente a un movimiento legal y EST una estructura tipo SOKO. Devuelve la estructura EST modificada pertinentemente. ----------------------------------------------------------------------------- > ----------------------------------------------------------------------------- COPY-EST-SOKO [Function] - Función: COPY-EST-SOKO (EST) Package:SOKOBAN Copia el estado EST a otras posiciones de memoria, devolviendo dicha copia. EST ha de ser una estructura tipo SOKO. Utilizar para evitar efectos de borde al modificar estados. ----------------------------------------------------------------------------- > ----------------------------------------------------------------------------- SOL-VAL-SOKO [Function] - Función: SOL-VAL-SOKO (EST) Package:SOKOBAN Chequea si el estado EST constituye un estado final. EST ha de ser una estructura tipo SOKO. ----------------------------------------------------------------------------- > ----------------------------------------------------------------------------- VERSION-SOKO [Function] - Función: VERSION-SOKO () Package:SOKOBAN Imprime la versión del paquete sokoban que se ha cargado -----------------------------------------------------------------------------