Este trabajo ser desarrollado para el curso de Inteligencia Artificial, el tema de investigacin es el juego: NINE MEN, la idea bsica es la de un tres en lnea, pero ms complejo; aqu el tablero est conformado por tres cuadrados concntricos, uno dentro del otro, unidos por lneas que parten desde los lados y juntan el cuadrado ms pequeo con el ms grande, desde la mitad de cada lado y desde los vrtices. Se inicia la partida con el tablero vaco. Cada jugador posee en sus manos un total de 9 piezas (generalmente canicas, bolitas o fichas chatas) que deber ir colocando dentro de cada una de los 24 puntos de interseccin marcadas en el tablero. Esto lo realizan por turnos intercalados, siempre con el objetivo ltimo de lograr un tres en lnea. Para la solucin de este juego se desarrollar un programa utilizando el lenguaje LISP.
1.- INTRODUCCION
Este es el Nine Mens Morris, tambin conocido como el Juego del Molino, Mill, o simplemente "el Morris". El juego moderno es de origen britnico, pero sus races son muy antiguas y quizs puedan hallarse antecesores directos provenientes de Persia o de Egipto.
1.1. El Problema
El problema se basa en la capacidad para la realizacin de bsquedas por la cantidad de niveles que se encuentran en el rbol de estados lo cual implica mayor capacidad de RAM, es decir, restringe la cantidad de niveles para la realizacin de bsquedas al ser mucho mayor de la que tiene la PC por consiguiente no permite culminar el juego.
1.2. Objetivos.
El objetivo general de este trabajo es:
Minimizar el nmero de movimientos de las piezas que contiene el juego hasta llegar a una solucin.
Los objetivos particulares a cumplir en este trabajo de investigacin son los siguientes:
a. Reducir el tiempo de solucin del juego. b. Sincronizar los movimientos de las piezas en juego. c. Encontrar el camino mas corto para la solucin del juego.
1.3. Modelo de solucin.
1. Creacin de la matriz defun Muestra (tablero)
2. Ingreso de ficha aleatorio del operador ser cualquiera de los 24 espacios en blanco.
3. El ingreso de fichas contina hasta colocar cada jugador sus nueve fichas.
4. Seleccionamos una ficha del tablero.
5. Verificacin si la ficha puede moverse hacia la derecha, izquierda arriba o abajo, segn eleccin.
6. Se elige otra ficha a mover. Ir al paso 4 para poder mover la ficha.
7. Verificar si el jugador formo un molino (un tres en lnea) si se diera el caso se selecciona una ficha del oponente para sacarla del tablero, si no lo est. Ir al paso 4.
8. Verificamos si el jugador puede realizar mas movimientos o si se a quedado sin fichas para mover, en caso q se cumpla la verificacin se acabara el juego.
2.- PROBLEMA DE BUSQUEDA:
En nuestra primera aproximacin de la solucin del problema planteado representamos inicialmente nuestro estado inicial y final de nuestro juego.
2.1. Planteamiento de la solucin.
En nuestra primera aproximacin de la solucin del problema planteado representamos inicialmente nuestro estado inicial y final de nuestro juego.
ESTADO INICIAL
Una vez que hemos identificado nuestro estado inicial y fin comenzamos a identificar operadores los cual nos permitirn ejecutar diferentes acciones.
El juego comienza cuando con un tablero vaci (9 piezas para cada jugador sin colocar) y se desarrolla en 2 fases:
Durante la primera fase cada jugador en su turno coloca una de su nueve fichas sobre cualquiera de los puntos del tablero que estn libres (intersecciones vacas). Si un jugador es capaz de formar una fila de 3 piezas a lo largo de la lnea del tablero, consigue un molino y puede eliminar una de las piezas de su oponente en el tablero; las piezas quitadas no podrn ser colocadas de nuevo. Durante esta fase no es posible mover las fichas ya situadas en el tablero. En la segunda, colocada las 18 piezas del tablero, cada jugador en su turno mueve una de sus fichas a lo largo de una lnea en el tablero a una interseccin vaca adyacente (a un punto adyacente libre a travs de alguna de las lneas del tablero)
ESTADO FINAL
En consideracin que puede existir un nmero grande de posibles estados metas, definiremos una condicin necesaria y suficiente para un estado meta. El juego acaba cuando a un jugador le quedan menos de 3 fichas (no puede formar molinos) o se encuentra bloqueado (no puede mover sus fichas)
2.2. Desarrollo experimental.
En nuestro desarrollo experimental identificamos los operadores y una vez teniendo el estado inicial comenzamos a validar si se poda mover, de ser as realizamos los operadores, hasta legar a la ubicacin o estado final.
Para el desarrollo en cdigo de nuestros operadores realizamos ejemplos en papel para as poder identificar y sernos ms fcil la descripcin del cdigo. Al tomar nosotros nuestro tablero como un arreglo manejamos tanto i como j lo cual validbamos como se movan a travs de nuestro ejemplos hechos a mano.
3.- IMPLEMENTACION
En este punto explicaremos a grandes rasgos el modelo de implementacin de nuestro programa.
Para el cual detallamos 4 de los movimientos mas importantes de la ficha:
mover-H- derecha-ficha
mover-V- abajo-ficha
mover-V- arriba-ficha
mover-H- izquierda-ficha
MOVIMIENTO DE LA FICHA
Primero se define la funcin para la ficha que tiene como parmetros i, j, x, y.
Donde: i: punto horizontal actual j: punto vertical actual x: nueva posicin en la horizontal y: nueva posicin en la vertical
Estos mtodos nos permiten conocer si la posicin en la cual estoy haciendo el movimiento corresponde al tablero, devuelve un valor de verdad.
MOVER_V_ARRIBA
No se cumple si la ficha esta en cualquier punto con j=0.
MOVER_V_ABAJO No se cumple si la ficha esta en cualquier punto con j=0.
MOVER_H_DER No se cumple si la ficha esta en cualquier punto con i=0.
MOVER_H_IZQ No se cumple si la ficha esta en cualquier punto con i=0. MOVER_CENTRAL_V_ARRIBA Se cumple si la ficha esta en un punto con j=0.
MOVER_CENTRAL_V_ABAJO Se cumple si la ficha esta en un punto con j=0.
MOVER_CENTRAL_H_DER Se cumple si la ficha esta en un punto con i=0.
MOVER_CENTRAL_H_IZQ Se cumple si la ficha esta en un punto con i=0.
METODOS PARA LOS MOLINOS
Primero se define la funcin para los molinos que tiene como parmetros i, j, jugador, tablero.
Donde: i: punto horizontal donde se encuentra la ficha j: punto vertical donde se encuentra la ficha Jugador: para saber que fichas deben formar el molino Tablero: tablero actual del juego
Estos mtodos nos permiten conocer si la posicin en la cual estoy haciendo el movimiento formo un molino (un 3 en raya).
MOLINO_V_ARRIBA
Se verifica el molino si la ficha esta en cualquier punto que se muestra.
MOLINO_V_CENTRO
Se verifica el molino si la ficha esta en cualquier punto que se muestra.
MOLINO_V_ABAJO
Se verifica el molino si la ficha esta en cualquier punto que se muestra.
MOLINO_V_CENTRO_ARRIBA
Se verifica el molino si la ficha esta en cualquier punto con j=3 y la ficha esta como se muestra.
MOLINO_V_CENTRO_MEDIO
Se verifica el molino si la ficha esta en la posicin pintada.
MOLINO_V_CENTRO_ABAJO
Se verifica el molino si la ficha esta en la posicin pintada.
MOLINO_H_DER
Se verifica el molino si la ficha esta en cualquier punto que se muestra.
MOLINO_H_CENTRO
Se verifica el molino si la ficha esta en cualquier punto que se muestra.
MOLINO_H_IZQ
Se verifica el molino si la ficha esta en cualquier punto que se muestra.
MOLINO_H_CENTRO_DER
Se verifica el molino si la ficha esta en cualquier punto que se muestra.
MOLINO_H_CENTRO_MEDIO
Se verifica el molino si la ficha esta en cualquier punto que se muestra.
MOLINO_H_CENTRO_IZQ
Se verifica el molino si la ficha esta en cualquier punto que se muestra.
METODOS DEL PROGRAMA
GESTORPRINCIPAL
Crea el tablero de juego y tambin nos permite ingresar al men principal del programa:
INICIALIZAJUGADOR
Funcin que inicializa a los jugadores y inicializa el juego. MUESTRA
Funcin que permite mostrar el tablero del juego.
MOVIMIENTOLEGAL
Funcin que comprueba que las coordenadas ingresadas por el humano pertenezcan al tablero.
EXISTEFICHA
Verifica si en posicin que se desea colocar o mover una ficha se encuentra otra, devuelve un valor de verdad o falsedad.
COLOCAFICHA
Simplemente se encarga de colocar una ficha en el tablero.
ELIMINAR_FICHA
Funcin utilizada cuando se forma un molino y se pasa a eliminar una ficha de la maquina.
ELIMINAR_FICHA2
Funcin utilizada cuando se forma un molino y se pasa a eliminar una ficha del humano.
VERIFICAR_MOLINO
Funcin que te indica si es que al realizar un movimiento o al colocar una ficha haz formado un molino en el tablero.
TODOS_MOLINO
Funcin general donde se indica como parmetros al jugador y el tablero, para poder verificar si hay un molino creado.
COLOCAR_HUMANO
Esta funcin llama a las funciones movimientolegal, existeficha y colocaficha; para poder realizar la colocacin o movimiento de la ficha hecho por el humano.
PUEDEMOVER
Te indica si la ficha que deseo mover en la posicin ingresada es correcto en otras palabras si es valido el movimiento que estoy realizando.
MOVERFICHA
Esta funcin primero llama a la funcin puedomover para poder realizar el movimiento satisfactoriamente a las reglas.
REALIZARMOVIMIENTO
Funcin controladora, llama a todas las funciones para poder realizar el movimiento de la ficha del humano adems te indica si en la posicin ingresada ya se encuentra una ficha.
MOVER_HUMANO
Funcin que llama a realizar movimiento y le ingresa como parmetros la posicin inicial y la posicin en la que quiero colocar la ficha.
TURNOBLANCAS y TURNONEGRAS
Estas 2 funciones se utilizan cuando un jugador realiza un molino, y se le indica que ingrese la posicin donde se encuentra la ficha a eliminar del oponente.
FUNCIONES PARA CONOCER SI YA TERMINO EL JUEGO
Todas estas funciones indican si una ficha puede realizar un movimiento, devuelven verdad (T) o nill.
Llama a las funciones anteriores para conocer si todava puede haber movimientos en el tablero.
COMPROBARVICTORIA
Funcin que verifica si en el tablero ya no existen ms movimientos posibles, si se da esta verificacin entonces el jugador pierde y se acaba el juego.
COLOCAR_MAQUINA
Funcin utilizada al comienzo del juego, donde se colocan las 9 fichas de la maquina.
MOVER_MAQUINA
Funcin que permite que la maquina realice un movimiento, llama a los mtodos puedemover y realizamovimiento.
ENCONTRAR_MAYOR
Esta funcin tiene como parmetro a la tabla auxiliar, aqu se trata de encontrar y guardar en la tabla auxiliar la mejor opcin de tabla con mayor heurstica.
MOVIMIENTOLEGAL2
Funcin que comprueba que las coordenadas de movimiento nuevas para la maquina sean legales.
FUNCION_EVALUACION
La funcin que nos permite conocer el valor de la heurstica de cada posible tablero optimo que se de cmo parmetro
INICIALIZA_TABLERO_AUX
Funcin que crea un tablero para no alterar el tablero principal.
Lenguaje de programacin: LispWorks Personal Edition 5.0.1 Sistema Operativo: Microsoft Windows
4.2 Dificultades
El lenguaje de programacin utilizado para este juego no cuenta con herramientas necesarias para realizar una aplicacin en la cual el usuario interactu de manera directa con el programa, no podemos crear interfaces graficas para un mejor diseo del juego; por lo cual optamos por realizar mens que puedan ayudar al entendimiento de la aplicacin.
4.3 Resultados obtenidos
El juego comienza con el estado inicial presentado en los mtodos al inicio de la explicacin y el jugador o humano puede indicar los movimientos necesarios para continuar con el juego; para realizar un movimiento de ficha este debe indicar no solo la ubicacin de la ficha que desea desplazar sino tambin la nueva ubicacin donde desea colocarla, para lo cual se representa un formato del como debe ingresar estos datos de manera escrita. Una vez terminado el movimiento se realiza automticamente el turno del computador mostrando al jugador (humano) el nuevo tablero luego de que el computador realizo un movimiento.
5.- CONCLUSIONES
Las bsquedas a realizar por el trabajo son primero el mejor con ayuda del algoritmo MINIMAX el cual nos permite conocer cual es la mejor opcin para el computador.
Una vez revisado los resultados obtenidos al ejecutar nuestro programa realizado verificamos que si obtenemos el resultado deseado es decir que lleguemos a obtener que el computador genere una respuesta al movimiento hecho por el humano, donde dicha respuesta es resultado de los diferentes movimientos accesibles para el computador escogiendo el mejor de ellos como movimiento optimo.
En un inicio solo realizamos los movimientos pero despus de correcciones pusimos una funcin que nos permita obtener el mejor movimiento, esta funcin nos devolver el tablero mas optimo posible para el computador.
6.- BIBLIOGRAFIA
http://www.lisp.org/alu/home Powered by AllegroServe and Allegro WebActions Copyright 2009, Association of Lisp Users