06.04.2014 Views

4 en raya (*.pdf) - Wiphala.net

4 en raya (*.pdf) - Wiphala.net

4 en raya (*.pdf) - Wiphala.net

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

Diseño del juego de N <strong>en</strong> <strong>raya</strong><br />

– Implem<strong>en</strong>tación del 4 <strong>en</strong> <strong>raya</strong> –<br />

Universidad Nacional de Ing<strong>en</strong>iería<br />

Joseph Ramos Valdivia Aldo Mallma Granados Edith Santos Lor<strong>en</strong>zo<br />

Resum<strong>en</strong><br />

Nuestro trabajo consiste <strong>en</strong> repres<strong>en</strong>tar el juego de n <strong>en</strong><br />

<strong>raya</strong> y considerar heurísticas, que permitan a un ag<strong>en</strong>te hacer<br />

el papel del competidor.<br />

También implem<strong>en</strong>tamos <strong>en</strong> Lisp un caso particular del<br />

n <strong>en</strong> <strong>raya</strong>, el 4 <strong>en</strong> <strong>raya</strong>; que cu<strong>en</strong>ta con un esquema un poco<br />

difer<strong>en</strong>te al esquema considerado para el n <strong>en</strong> <strong>raya</strong>; aún<br />

así nuestro ag<strong>en</strong>te es efectivo. En el programa la persona<br />

debe ingresar la columna donde desea jugar a difer<strong>en</strong>cia<br />

del juego real.<br />

I. Introducción<br />

Al <strong>en</strong>tret<strong>en</strong>ernos con un juego, seguimos sus reglas y<br />

nuestra habilidad de responder ante situaciones que nos<br />

llevan a adquirir, cada vez más, experi<strong>en</strong>cia y destreza <strong>en</strong><br />

el modo de juego.<br />

Sin embargo, podemos repres<strong>en</strong>tar esa destreza <strong>en</strong> un<br />

programa y aprovechar los recursos que ti<strong>en</strong>e, para <strong>en</strong>contrar<br />

diversas soluciones a un problema de juego o darle<br />

cierta intelig<strong>en</strong>cia, para que sea capaz de competir con humanos<br />

y hacer más interesante el juego.<br />

II.<br />

Objetivos<br />

Proporcionar un esquema g<strong>en</strong>eral para la solución del<br />

juego de n <strong>en</strong> <strong>raya</strong>, considerando aspectos de diseño que<br />

proporcion<strong>en</strong> una bu<strong>en</strong>a base para su posterior implem<strong>en</strong>tación.<br />

Implem<strong>en</strong>tar el juego 1 para el caso del 4 <strong>en</strong> <strong>raya</strong>, considerando<br />

una heurística efectiva que permita al ag<strong>en</strong>te<br />

máquina un desempeño aceptable.<br />

III.<br />

Problema<br />

Al <strong>en</strong>tret<strong>en</strong>ernos con un juego, seguimos sus reglas y<br />

nuestra habilidad de responder ante situaciones que casi a<br />

m<strong>en</strong>udo, nos llevan a adquirir cada vez más, experi<strong>en</strong>cia<br />

1 Esta implem<strong>en</strong>tación <strong>en</strong> Lisp, no considera todo el análisis g<strong>en</strong>eral<br />

considerado <strong>en</strong> el n <strong>en</strong> <strong>raya</strong>, mas muestra un aspecto interesante de la<br />

utilización de heurísticas.<br />

y destreza <strong>en</strong> el modo de juego. El juego de n <strong>en</strong> <strong>raya</strong> 2 y<br />

todos sus derivados como 4 <strong>en</strong> <strong>raya</strong>.<br />

IV.<br />

IA y Lisp<br />

Marco teórico<br />

La intelig<strong>en</strong>cia artificial es un conjunto de métodos y<br />

filosofía, y por lo tanto no está atada a un l<strong>en</strong>guaje <strong>en</strong> particular.<br />

Los problemas de IA requier<strong>en</strong> que los programas<br />

manipul<strong>en</strong> conocimi<strong>en</strong>to <strong>en</strong> lugar de números. Los investigadores<br />

desarrollaron nuevos l<strong>en</strong>guajes para atacar estos<br />

problemas.<br />

Lisp, de List Processing, fue creado por McCarthy<br />

(MIT) <strong>en</strong> los 60. Es un l<strong>en</strong>guaje de propósito g<strong>en</strong>eral, procedural,<br />

basado <strong>en</strong> aritmética y manipulación de símbolos.<br />

IA y juegos<br />

Hay una gran cantidad de juegos como el ajedrez, Go;<br />

así como problemas como el de la n reynas que han sido<br />

resueltos con métodos de intelig<strong>en</strong>cia artificial, los que <strong>en</strong><br />

un inicio se basaban <strong>en</strong> algoritmos de búsqueda que no<br />

empleaban heurísticas para una solución efici<strong>en</strong>te de las<br />

búsquedas.<br />

Juego n <strong>en</strong> <strong>raya</strong><br />

Este juego consiste <strong>en</strong> un tablero que es un arreglo de m<br />

x m, donde participan dos jugadores, los que pon<strong>en</strong> sobre<br />

el tablero una marca determinada X u O 3 respectivam<strong>en</strong>te<br />

hasta formar n secu<strong>en</strong>cias con sus respectivas marcas,<br />

<strong>en</strong> forma continua, <strong>en</strong> las sigui<strong>en</strong>tes direcciones: horizontal,<br />

vertical o diagonal. El primero que forme la secu<strong>en</strong>cia<br />

seguida de n marcas (según el juego) ganará el juego.<br />

Los jugadores colocan sus marcas sobre el tablero, no<br />

permitiéndose quitarlas una vez jugadas.<br />

2 Casi siempre el más jugado<br />

3 Las marcas X u O son las más comunes de ver <strong>en</strong> un juego de n <strong>en</strong><br />

<strong>raya</strong>, sin embargo no se obliga a que deban considerase <strong>en</strong> todos lo juego,<br />

pudi<strong>en</strong>do ser otras marcas que sean difer<strong>en</strong>tes una a otra.<br />

1


Intelig<strong>en</strong>cia Artificial 2<br />

V. Metodología<br />

Para empezar definiremos el espacio <strong>en</strong> el cual se desarrollará<br />

el juego, luego las posibles jugadas para que por<br />

ultimo se defina la posición de la jugada.<br />

Para poder implem<strong>en</strong>tar el juego es necesario que se respet<strong>en</strong><br />

determinadas reglas, pero a su vez es necesario también<br />

definir una Heurística adecuada mediante la cual el<br />

jugador maquina pueda decidir donde jugar a fin de que le<br />

de mayor opción a ganar.<br />

Ahora definiremos a nuestro caso ejemplo repres<strong>en</strong>tado<br />

<strong>en</strong> el cuatro <strong>en</strong> <strong>raya</strong> <strong>en</strong> dos dim<strong>en</strong>siones.<br />

Para iniciar el juego el programa iniciara el juego para<br />

ello debe de buscar una posición adecuada donde jugar de<br />

acuerdo a la heurística planteada.<br />

Sin embargo exist<strong>en</strong> dos variables muy importantes <strong>en</strong><br />

nuestro juego, las cuales nos definirán el espacio del juego,<br />

para hacerlo mas s<strong>en</strong>cillo y que el usuario pueda jugar con<br />

tranquilidad el ingresará al programa el valor de la posición,<br />

el programa cogerá el valor y lo trasformara a un par<br />

ord<strong>en</strong>ado (i , j) el cual nos indicará <strong>en</strong> que posición esta<br />

jugando el usuario, para luego asignarle la marca correspondi<strong>en</strong>te<br />

a su juego.<br />

Para la evaluación de la posición donde la máquina efectuará<br />

la jugada se t<strong>en</strong>drá una función basada <strong>en</strong> el algoritmo<br />

MINIMAX con PODA.<br />

Basándonos <strong>en</strong> este algoritmo primero se evalúa la función<br />

para la máquina, cuyo algoritmo es como se describe<br />

a continuación:<br />

Para com<strong>en</strong>zar pres<strong>en</strong>tamos al estado inicial:<br />

A continuación, de manera análoga, evaluamos la función<br />

para las posibilidades de éxito del adversario:<br />

Una vez que se ti<strong>en</strong>e el punto de la matriz donde se efectuará<br />

la jugada, se procede a registrarlo, asignarle el valor<br />

correspondi<strong>en</strong>te para las jugadas de la máquina (1) y a imprimir<br />

la posición ordinal de la jugada para que sea visualizada<br />

por el adversario.


Intelig<strong>en</strong>cia Artificial 3<br />

Se ubica la posición <strong>en</strong> la matriz convirti<strong>en</strong>do el valor<br />

ordinal <strong>en</strong> las coord<strong>en</strong>adas cartesianas:<br />

Se asigna el valor correspondi<strong>en</strong>te <strong>en</strong> la posición de la<br />

matriz para las jugadas del adversario:<br />

Después de efectuada la jugada compararemos el estado<br />

actual con los estados meta:<br />

Nuevam<strong>en</strong>te se evalúa si se ha alcanzado alguno de los<br />

estados meta:<br />

Se evalúa si el juego ha concluido:<br />

Si no se ha alcanzado el estado meta se repite el bucle<br />

desde que juega la máquina:<br />

Caso contrario el juego habría llegado a su fin:<br />

En caso contrario se habilita al adversario para que<br />

efectúe su jugada:<br />

Se captura la posición (siempre ordinal) de su jugada:<br />

Implem<strong>en</strong>tación <strong>en</strong> Lisp del juego de cuatro<br />

<strong>en</strong> <strong>raya</strong><br />

Hemos realizado una implem<strong>en</strong>tación <strong>en</strong> Lisp para el<br />

caso del cuatro <strong>en</strong> <strong>raya</strong>. La lógica varía un poco de la descrita<br />

anteriorm<strong>en</strong>te, por ejemplo <strong>en</strong> la forma como se repres<strong>en</strong>ta<br />

la celda del tablero. En este caso se considera al


Intelig<strong>en</strong>cia Artificial 4<br />

tablero como un arreglo de 6 x 6 (figura 1) y <strong>en</strong> vez que el<br />

jugador o ag<strong>en</strong>te humano ingrese la marca respectiva a una<br />

celda definida por él mismo, sólo t<strong>en</strong>drá opción a indicar<br />

la columna donde desea colocar su respectiva marca (X) y<br />

será el programa, el que la ubique <strong>en</strong> un respectivo lugar<br />

de la columna, <strong>en</strong> el ord<strong>en</strong> de abajo hacia arriba.<br />

De haber una marca del ag<strong>en</strong>te máquina <strong>en</strong> la columna<br />

indicada por el jugador, su marca se colocará <strong>en</strong> la posición<br />

superior sigui<strong>en</strong>te a la del ag<strong>en</strong>te máquina, siempre y<br />

cuando el lugar que ocupe el ag<strong>en</strong>te máquina, interfiera el<br />

ord<strong>en</strong> dispuesto por el programa para la asignación de las<br />

marcas del humano.<br />

3. EsColumnaValida(columna)<br />

4. AveriguarPosicion(columna)<br />

5. MostrarTablero()<br />

6. LimpiarTablero()<br />

7. JuegaJugador(jugador)<br />

8. DeshacerJugada(columna)<br />

9. HacerJugada(columna jugador)<br />

10. EjecutarJugada(columna jugador)<br />

11. InmediatoMayor()<br />

12. MayorContrincante()<br />

13. GanaInmediato()<br />

14. JuegaPC()<br />

15. JuegaUsuario()<br />

16. QuedanCasillasLibres()<br />

17. Hay4EndiagonalAsc<strong>en</strong>d<strong>en</strong>te (fila colum jug)<br />

18. Hay4EndiagonalDesc<strong>en</strong>d<strong>en</strong>te (fila colum jug)<br />

Figura 1: Tablero como un arreglo de 6x6<br />

Con la función m<strong>en</strong>cionada a continuación buscamos<br />

que el PC int<strong>en</strong>te ganar el c<strong>en</strong>tro e impedir la creación de<br />

4 <strong>en</strong> <strong>raya</strong> verticales.<br />

La función devuelve 100 si la situación actual del tablero<br />

del juego es una victoria (indep<strong>en</strong>di<strong>en</strong>tem<strong>en</strong>te del jugador<br />

ganador); devuelve 1 si es un estado de tablas definitivas;<br />

<strong>en</strong> cualquier otro caso, devuelve un valor que estará<br />

compr<strong>en</strong>dido <strong>en</strong>tre 2 y 99 que será:<br />

ValorHeurístico = (16 * A0 * 0’05) + (16 * A1 * 0’15)<br />

+(16 * A2 * 0’30) +(16 * A3 *0’30) +(16 * A4 * 0’15)<br />

+(16 * A5 * 0’05)<br />

Donde A0,...,A5 son las alturas actuales de las columnas<br />

0, 1, 2, 3, 4 y 5. De este modo, ti<strong>en</strong>e más peso aquel tablero<br />

cuyas columnas sean más altas y estén más al c<strong>en</strong>tro, <strong>en</strong><br />

vez de aquellos cuyas columnas sean más bajas o estén<br />

más <strong>en</strong> los extremos. Se busca de este modo que el PC<br />

int<strong>en</strong>te ganar el c<strong>en</strong>tro e impedir la creación de 4 <strong>en</strong> <strong>raya</strong><br />

verticales.<br />

A continuación mostramos las funciones utilizadas para<br />

esta implem<strong>en</strong>tación 4 :<br />

19. Hay4EnDiagonal(jugador)<br />

20. Hay4HorizontalEnLaFila (fila jugador)<br />

21. Hay4VerticalEnLaColumna (columna jug)<br />

22. Hay4Vertical(jugador)<br />

23. Hay4Horizontal(jugador)<br />

24. HayVictoria()<br />

25. EvaluarEstado()<br />

26. M<strong>en</strong>sajeFinal(jugador estado)<br />

27. MostrarM<strong>en</strong>sajeInicial()<br />

28. Jugar()<br />

La función jugar() es la función principal que llama a<br />

las demás funciones y la que permite el juego.<br />

1. PedirQui<strong>en</strong>Juega()<br />

2. PedirTirada()<br />

4 En el código fu<strong>en</strong>te del programa se describe más detalladam<strong>en</strong>te las<br />

funciones m<strong>en</strong>cionadas.


Intelig<strong>en</strong>cia Artificial 5<br />

La PC preguntará por quién comi<strong>en</strong>za primero el juego,<br />

<strong>en</strong>tonces el jugador pondrá 1 si comi<strong>en</strong>za él o 0 <strong>en</strong> caso<br />

contrario. El jugador solo puede seleccionar la columna<br />

donde desea jugar mas no la posición exacta, la Pc lo hace<br />

por él, de abajo hacia arriba.<br />

Refer<strong>en</strong>cias<br />

[1] Russell S y Norvig P. ”Intelig<strong>en</strong>cia Artificial un <strong>en</strong>foque<br />

moderno”<br />

Pretince may Hispanoamericana SA, seguda versión.<br />

[2] Ansóstegui C y Manyá F. ”Una introducción a los<br />

algoritmos de satisfactibilidad”<br />

Departam<strong>en</strong>to de Informatica e Ing<strong>en</strong>iería Industrial<br />

Universidad de Lleida. 2003<br />

[3] Burzyn P. ”Complejidad Computacional <strong>en</strong> Problemas<br />

de Modificación de Aristas <strong>en</strong> Grafos”<br />

Facultad de Ci<strong>en</strong>cias Exactas y Naturales.<br />

Universidad de Bu<strong>en</strong>os Aires.<br />

En caso la máquina consiga los cuatro <strong>en</strong> línea aparecerá<br />

un m<strong>en</strong>saje indicando el ganador, al igual que <strong>en</strong> el<br />

caso si el jugador ganara. De haber empate aparecerá <strong>en</strong> la<br />

pantalla nil.<br />

VI.<br />

Conclusión<br />

El esquema de diseño del juego de n <strong>en</strong> <strong>raya</strong> resulta<br />

más eficaz de lograrse implem<strong>en</strong>tar; puesto que se basa<br />

<strong>en</strong> búsquedas de movimi<strong>en</strong>tos que conllev<strong>en</strong> a alcanzar un<br />

estado más v<strong>en</strong>tajoso para el ag<strong>en</strong>te máquina.<br />

Sin embargo, dado algunos contratiempos 5 de los integrantes<br />

del grupo, no se ha podido implem<strong>en</strong>tar <strong>en</strong> Lisp el<br />

primer diseño.<br />

La implem<strong>en</strong>tación del cuatro <strong>en</strong> <strong>raya</strong> pres<strong>en</strong>tada, no<br />

contempla un análisis exhaustivo como el anterior, ni considera<br />

un tipo de búsqueda <strong>en</strong> especial estudiado <strong>en</strong> clase,<br />

razón por la cual resulta s<strong>en</strong>cillo la posibilidad de ganarle<br />

a la máquina; además que no cumple con la funcionalidad<br />

completa del juego.<br />

Esperamos que este humilde aporte, <strong>en</strong> la implem<strong>en</strong>tación<br />

del juego de cuatro <strong>en</strong> <strong>raya</strong> y el análisis g<strong>en</strong>eral para<br />

un juego de n <strong>en</strong> <strong>raya</strong>, contribuya al apr<strong>en</strong>dizaje a los futuros<br />

alumnos que v<strong>en</strong>drán <strong>en</strong> el curso; así como <strong>en</strong> la mejora<br />

y perfección del esquema, diseño e implem<strong>en</strong>tación de<br />

este juego.<br />

5 La razón principal de los inconv<strong>en</strong>i<strong>en</strong>tes del grupo, para la implem<strong>en</strong>tación<br />

del juego de 4 <strong>en</strong> <strong>raya</strong>, se debió al <strong>en</strong>foque o análisis considerado,<br />

también a la dificultad <strong>en</strong> el apr<strong>en</strong>dizaje de la programación <strong>en</strong><br />

Lisp, pues la versión con la que trabajamos no cu<strong>en</strong>ta con un corrector de<br />

errores como <strong>en</strong> otros programas.

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!