inteligencia en redes de comunicaciones · 2004. 1. 29. · inteligencia en redes de comunicaciones...

28
Inteligencia en Redes de Comunicaciones Práctica Obligatoria Luis Corrales Ávila María Herrero Torres Ingeniería de Telecomunicación 5º Curso – 2003/2004

Upload: others

Post on 26-Jan-2021

0 views

Category:

Documents


0 download

TRANSCRIPT

  • Inteligencia en Redes de Comunicaciones

    Práctica Obligatoria

    Luis Corrales Ávila María Herrero Torres

    Ingeniería de Telecomunicación 5º Curso – 2003/2004

  • Inteligencia en Redes de Comunicaciones Luis Corrales ÁvilaPráctica Obligatoria María Herrero TorresDominó en CLIPS

    2

    1. Índice

    1. Índice ……………………….......................................... 2

    2. Introducción ……………………………………………………….. 3

    3. Modelado de nuestro juego …………………………….. 4

    - Dominó para dos jugadores - Dominó para cuatro jugadores

    4. Realización del modelo …………………………………….. 5

    5. Conclusiones ....................................................................... 8

    • Ánexos

    A.1) Resultados de los juegos ..................................... 9

    a) Dos jugadores con un ganador (jugada1.dat) b) Dos jugadores en una situación de tablas (jugada3.dat) c) Cuatro jugadores con un ganador (jugada42.dat)

    A.2) Código fuente ………………………………………. 15

    Domino2player.clp Domino4player.clp Jugada1.dat Jugada3.dat Jugada42.dat

  • Inteligencia en Redes de Comunicaciones Luis Corrales ÁvilaPráctica Obligatoria María Herrero TorresDominó en CLIPS

    3

    2. Introducción

    Nuestra práctica consiste en la realización de un juego, el dominó. Para el de-sarrollo de la misma hemos utilizado la versión de CLIPS en java, Jess (“Java Expert System Shell”).

    CLIPS son las iniciales de “C Language Integrated Production System” y es una herramienta para la construcción de sistemas expertos. Es decir, es una herra-mienta diseñada para el desarrollo de software que requiere de conocimiento humano. Fue desarrollado por la NASA, y hoy en día está siendo utilizado en la industria, go-bierno y educación. La versión más reciente es la 6.0 que soporta los paradigmas de programación procedimental y orientado a objetos.

    En un sistema experto:

    • se analiza la actividad de un experto humano cuando resuelve problemas en un área muy concreta y se intenta emularlo o ayudarle.

    • capacidad para adquirir incrementalmente experiencia. • y, capacidad para conversar con los usuarios y explicarles sus líneas de ra-

    zonamiento.

    El conocimiento humano se implementa en CLIPS mediante: � Reglas, que se formulan a partir del conocimiento heurístico basado en la

    experiencia.

    � “Deffunction”, o funciones generalizadas, que se formulan a partir de cono-cimiento procedimental.

    � Programación orientada a objetos, que también se formula por conocimien-

    to procedimental pero formulado en términos de las 5 características (generalmente aceptadas) de la programación orientada a objetos: clases, paso de mensajes (en ingles, “message-handlers”), abstracción, encapsu-lamiento, herencia y polimorfismo.

  • Inteligencia en Redes de Comunicaciones Luis Corrales ÁvilaPráctica Obligatoria María Herrero TorresDominó en CLIPS

    4

    3. Modelado de nuestro juego

    Hemos creado dos posibles escenarios del juego del dominó. El primero de ellos (y más sencillo) consiste en la participación de dos jugadores (“María” vs “Luis”) yun segundo escenario en el cual compiten cuatro jugadores (“María”, “José”, “Luis” y “Julio”).

    � Dominó para dos jugadores:

    Consideramos para este escenario que se reparten todas las fichas, es decir, cada jugador cuenta con 14 fichas desde el comienzo. El reparto de estas fichas lo hacemos de modo estático mediante ficheros “.dat” que se cargan al inicio del juego.

    Tiene el turno inicial el jugador que posee la ficha seis doble (6-6) que la coloca y cede el turno a su oponente. Este pondrá ficha si tiene en su poder alguna que enca-je, si no es así cederá el turno a su oponente sin colocar ninguna ficha. Este proceso se repetirá hasta que algún jugador se quede sin fichas o bien ambos jugadores no puedan colocar piezas, llegando a una situación de “TABLAS”.

    � Dominó para cuatro jugadores:

    Es semejante al caso anterior, es decir, se reparten todas las piezas (cada ju-gador estará en posesión de 7 fichas inicialmente). El reparte es nuevamente estático a través de ficheros “.dat”.

    La única diferencia sustancial con respecto al dominó de dos jugadores es que aquí hay que controlar el turno de los jugadores (a que jugador le toca después de otro), siendo este orden fijo (…->“María”->”José”->”Luis”->”Julio”->”María”->…).

    Como detalle en ambos dominós, todos los jugadores están en posesión de una ficha que no existe:

    (pieza (jugador Maria) (number1 -1) (number2 -1))

    Esta ficha sirve para determinar que un jugador no puede colocar pieza sobre la mesa. Cuando un jugador tiene el turno consulta sus piezas (consulta los hechos en orden de escritura) y las compara con los extremos de las piezas de la mesa, si se lee la pieza anterior quiere decir que no puede colocar.

  • Inteligencia en Redes de Comunicaciones Luis Corrales ÁvilaPráctica Obligatoria María Herrero TorresDominó en CLIPS

    5

    4. Realización del modelo

    � Hemos modelado las piezas que tiene inicialmente cada jugador como hechos (“facts”) que cargamos en nuestro programa mediante la regla:

    (defrule initialize (not (pieza (jugador ?jugador) (number1 6) (number2 6))) => (load-facts "irc/jugada3.dat") )

    en el archivo “jugada.dat” tendremos los hechos: …….. (pieza (jugador Maria) (number1 0) (number2 2)) (pieza (jugador Maria) (number1 0) (number2 3)) ………..

    Los hechos son patrones que pueden tener un campo o varios. Si tienen varios campos, el primero suele representar una relación entre los restantes. En nuestro pro-grama además de las piezas tenemos hechos tales como: (deffacts NumerosValidos (numero (numero1 6) (numero2 6)) )

    (deffacts PoneInicial (noPone (noPoneM 0) (noPoneL 0)) )

    En el hecho NumerosValidos guardamos los dos números que se pueden colo-car en cada momento sobre la mesa.

    En esta figura el valor de numero1 sería 2 y el de numero2 es 3.

    El hecho PoneInicial nos sirve para controlar si ninguno de los dos jugadores no ha podido poner pieza en los dos últimos turnos sucesivos, lo cual les lleva a una situación de TABLAS.

    Las modificaciones sobre los hechos en la memoria de trabajo se realizan me-diante “assert” (añadir hechos a la lista) y “retract” (quitar hechos). Todos los hechos se almacenan en “fact-list” y a cada hecho se le asigna un identificador único.

  • Inteligencia en Redes de Comunicaciones Luis Corrales ÁvilaPráctica Obligatoria María Herrero TorresDominó en CLIPS

    6

    Los componentes de un patrón pueden ser de diferentes tipos, por ejemplo (numero1 6), numero1 es de tipo numérico.

    � Para el desarrollo del juego hemos elaborado diferentes reglas.

    (defrule ColocaFicha ?y

  • Inteligencia en Redes de Comunicaciones Luis Corrales ÁvilaPráctica Obligatoria María Herrero TorresDominó en CLIPS

    7

    (deffunction suma(?a) (bind ?suma (+ ?a 1)) (+ ?a 1) )

    � Para obtener un código más claro hemos creado plantillas para definir los hechos como por ejemplo:

    (deftemplate pieza (slot jugador) (slot number1) (slot number2) )

    (deftemplate numero (slot numero1) (slot numero2) )

  • Inteligencia en Redes de Comunicaciones Luis Corrales ÁvilaPráctica Obligatoria María Herrero TorresDominó en CLIPS

    8

    5. Conclusiones

    Mediante la realización de esta práctica, juego del dominó, hemos aprendido a manejarnos con esta herramienta, CLIPS. Con ello nos hemos dado cuenta de su po-tencia y también de sus limitaciones (desde el punto de vista de unas personas que saben defenderse en lenguajes como Java, Pascal, C, y un “largo etcetera”).

    Las limitaciones encontradas pueden ser debidas al desconocimiento profundo de esta herramienta, pero a primera vista nos ha resultado complicado hacer cosas tan simples como la generación de números aleatorios.

    Por otro lado nos hemos dado cuenta de los diferentes resultados que pode-mos obtener sin más que cambiar hechos (por ejemplo, entrada de las diferentes partidas), debido a las reglas genéricas que rigen todos y cada uno de los hechos. Esto nos muestra la potencia de esta herramienta, que sin más que crear unas cuan-tas reglas y darle unos determinados hechos podremos llegar a unos resultados u otros. Por todo esto pensamos que esta herramienta sería adecuada para procesos de simulación en los que intervienen procesos de evolución a partir de una población ini-cial. Y este es el motivo por el cual hemos decidido modelar nuestro juego del dominó mediante esta herramienta, ya que a través de una población inicial (piezas que tiene inicialmente cada jugador) se va evolucionando hasta una situación final (jugador se queda sin piezas y gana).

  • Inteligencia en Redes de Comunicaciones Luis Corrales ÁvilaPráctica Obligatoria María Herrero TorresDominó en CLIPS

    9

    ANEXOS

    A.1) Resultados de los juegos

    Los resultados que vamos a obtener van a ser por línea de texto. En cada línea se nos va a indicar cosas tales como: ♦ Jugador que tiene el turno ♦ Ficha que esta comparando ♦ Números de los extremos de las fichas de la mesa ♦ Número de fichas que lleva puestas cada jugador ♦ Resultado: GANADOR O TABLAS.

    a) Dos jugadores con un ganador (jugada1.dat) lcorrale@linuxa-02:~/Inteligencia/Jess60a5$ java jess.Main irc/domino2player.clp Jess, the Java Expert System Shell Copyright (C) 1998 E.J. Friedman Hill and the Sandia Corporation Jess Version 6.0a5 3/12/2001 f-0 (initial-fact) f-1 (numero (numero1 6) (numero2 6)) f-2 (noPone (noPoneM 0) (noPoneL 0)) f-3 (contador (pieM 0) (pieL 0)) For a total of 4 facts. Toca jugar a Maria Tiene la ficha 6-6 Ficha anterior 6-6. Numero Fichas colocadas 0 0 Tiene el turno Luis Toca jugar a Luis Tiene la ficha 0-0 Ficha anterior 6-6. Numero Fichas colocadas 1 0 Toca jugar a Luis Tiene la ficha 5-6 Ficha anterior 6-6. Numero Fichas colocadas 1 0 Tiene el turno Maria Toca jugar a Maria Tiene la ficha 2-2 Ficha anterior 5-6. Numero Fichas colocadas 1 1 Toca jugar a Maria Tiene la ficha 1-6 Ficha anterior 5-6. Numero Fichas colocadas 1 1 Tiene el turno Luis Toca jugar a Luis Tiene la ficha 0-0 Ficha anterior 5-1. Numero Fichas colocadas 2 1 Toca jugar a Luis Tiene la ficha 5-5 Ficha anterior 5-1. Numero Fichas colocadas 2 1 Tiene el turno Maria Toca jugar a Maria Tiene la ficha 2-2 Ficha anterior 5-1. Numero Fichas colocadas 2 2 Toca jugar a Maria Tiene la ficha 1-5 Ficha anterior 5-1. Numero Fichas colocadas 2 2 Tiene el turno Luis Toca jugar a Luis Tiene la ficha 0-0 Ficha anterior 1-1. Numero Fichas colocadas 3 2 Toca jugar a Luis Tiene la ficha 4-6 Ficha anterior 1-1. Numero Fichas colocadas 3 2 Toca jugar a Luis Tiene la ficha 4-5 Ficha anterior 1-1. Numero Fichas colocadas 3 2 Toca jugar a Luis Tiene la ficha 4-4 Ficha anterior 1-1. Numero Fichas colocadas 3 2 Toca jugar a Luis Tiene la ficha 3-6 Ficha anterior 1-1. Numero Fichas colocadas 3 2 Toca jugar a Luis Tiene la ficha 3-5 Ficha anterior 1-1. Numero Fichas colocadas 3 2 Toca jugar a Luis Tiene la ficha 3-4 Ficha anterior 1-1. Numero Fichas colocadas 3 2 Toca jugar a Luis Tiene la ficha 3-3 Ficha anterior 1-1. Numero Fichas colocadas 3 2 Toca jugar a Luis Tiene la ficha 2-6 Ficha anterior 1-1. Numero Fichas colocadas 3 2 Toca jugar a Luis Tiene la ficha 2-5 Ficha anterior 1-1. Numero Fichas colocadas 3 2

  • Inteligencia en Redes de Comunicaciones Luis Corrales ÁvilaPráctica Obligatoria María Herrero TorresDominó en CLIPS

    10

    Toca jugar a Luis Tiene la ficha 2-4 Ficha anterior 1-1. Numero Fichas colocadas 3 2 Toca jugar a Luis Tiene la ficha 2-3 Ficha anterior 1-1. Numero Fichas colocadas 3 2 Toca jugar a Luis Tiene la ficha -1--1 Ficha anterior 1-1. Numero Fichas colocadas 3 2 Jugador Luis cambia de turno y no pone ficha. Numero Fichas colocadas 3 2 Tiene el turno Maria Toca jugar a Maria Tiene la ficha 2-2 Ficha anterior 1-1. Numero Fichas colocadas 3 2 Toca jugar a Maria Tiene la ficha 1-4 Ficha anterior 1-1. Numero Fichas colocadas 3 2 Tiene el turno Luis Toca jugar a Luis Tiene la ficha 0-0 Ficha anterior 4-1. Numero Fichas colocadas 4 2 Toca jugar a Luis Tiene la ficha 4-6 Ficha anterior 4-1. Numero Fichas colocadas 4 2 Tiene el turno Maria Toca jugar a Maria Tiene la ficha 2-2 Ficha anterior 6-1. Numero Fichas colocadas 4 3 Toca jugar a Maria Tiene la ficha 1-3 Ficha anterior 6-1. Numero Fichas colocadas 4 3 Tiene el turno Luis Toca jugar a Luis Tiene la ficha 0-0 Ficha anterior 6-3. Numero Fichas colocadas 5 3 Toca jugar a Luis Tiene la ficha 4-5 Ficha anterior 6-3. Numero Fichas colocadas 5 3 Toca jugar a Luis Tiene la ficha 4-4 Ficha anterior 6-3. Numero Fichas colocadas 5 3 Toca jugar a Luis Tiene la ficha 3-6 Ficha anterior 6-3. Numero Fichas colocadas 5 3 Tiene el turno Maria Toca jugar a Maria Tiene la ficha 2-2 Ficha anterior 3-3. Numero Fichas colocadas 5 4 Toca jugar a Maria Tiene la ficha 1-2 Ficha anterior 3-3. Numero Fichas colocadas 5 4 Toca jugar a Maria Tiene la ficha 1-1 Ficha anterior 3-3. Numero Fichas colocadas 5 4 Toca jugar a Maria Tiene la ficha 0-6 Ficha anterior 3-3. Numero Fichas colocadas 5 4 Toca jugar a Maria Tiene la ficha 0-5 Ficha anterior 3-3. Numero Fichas colocadas 5 4 Toca jugar a Maria Tiene la ficha 0-4 Ficha anterior 3-3. Numero Fichas colocadas 5 4 Toca jugar a Maria Tiene la ficha 0-3 Ficha anterior 3-3. Numero Fichas colocadas 5 4 Tiene el turno Luis Toca jugar a Luis Tiene la ficha 0-0 Ficha anterior 0-3. Numero Fichas colocadas 6 4 Tiene el turno Maria Toca jugar a Maria Tiene la ficha 2-2 Ficha anterior 0-3. Numero Fichas colocadas 6 5 Toca jugar a Maria Tiene la ficha 1-2 Ficha anterior 0-3. Numero Fichas colocadas 6 5 Toca jugar a Maria Tiene la ficha 1-1 Ficha anterior 0-3. Numero Fichas colocadas 6 5 Toca jugar a Maria Tiene la ficha 0-6 Ficha anterior 0-3. Numero Fichas colocadas 6 5 Tiene el turno Luis Toca jugar a Luis Tiene la ficha 4-5 Ficha anterior 6-3. Numero Fichas colocadas 7 5 Toca jugar a Luis Tiene la ficha 4-4 Ficha anterior 6-3. Numero Fichas colocadas 7 5 Toca jugar a Luis Tiene la ficha 3-5 Ficha anterior 6-3. Numero Fichas colocadas 7 5 Tiene el turno Maria Toca jugar a Maria Tiene la ficha 2-2 Ficha anterior 6-5. Numero Fichas colocadas 7 6 Toca jugar a Maria Tiene la ficha 1-2 Ficha anterior 6-5. Numero Fichas colocadas 7 6 Toca jugar a Maria Tiene la ficha 1-1 Ficha anterior 6-5. Numero Fichas colocadas 7 6 Toca jugar a Maria Tiene la ficha 0-5 Ficha anterior 6-5. Numero Fichas colocadas 7 6 Tiene el turno Luis Toca jugar a Luis Tiene la ficha 4-5 Ficha anterior 6-0. Numero Fichas colocadas 8 6 Toca jugar a Luis Tiene la ficha 4-4 Ficha anterior 6-0. Numero Fichas colocadas 8 6 Toca jugar a Luis Tiene la ficha 3-4 Ficha anterior 6-0. Numero Fichas colocadas 8 6 Toca jugar a Luis Tiene la ficha 3-3 Ficha anterior 6-0. Numero Fichas colocadas 8 6 Toca jugar a Luis Tiene la ficha 2-6 Ficha anterior 6-0. Numero Fichas colocadas 8 6 Tiene el turno Maria Toca jugar a Maria Tiene la ficha 2-2 Ficha anterior 2-0. Numero Fichas colocadas 8 7 Tiene el turno Luis Toca jugar a Luis Tiene la ficha 4-5 Ficha anterior 2-0. Numero Fichas colocadas 9 7 Toca jugar a Luis Tiene la ficha 4-4 Ficha anterior 2-0. Numero Fichas colocadas 9 7 Toca jugar a Luis Tiene la ficha 3-4 Ficha anterior 2-0. Numero Fichas colocadas 9 7 Toca jugar a Luis Tiene la ficha 3-3 Ficha anterior 2-0. Numero Fichas colocadas 9 7 Toca jugar a Luis Tiene la ficha 2-5 Ficha anterior 2-0. Numero Fichas colocadas 9 7 Tiene el turno Maria Toca jugar a Maria Tiene la ficha 1-2 Ficha anterior 5-0. Numero Fichas colocadas 9 8

  • Inteligencia en Redes de Comunicaciones Luis Corrales ÁvilaPráctica Obligatoria María Herrero TorresDominó en CLIPS

    11

    Toca jugar a Maria Tiene la ficha 1-1 Ficha anterior 5-0. Numero Fichas colocadas 9 8 Toca jugar a Maria Tiene la ficha 0-4 Ficha anterior 5-0. Numero Fichas colocadas 9 8 Tiene el turno Luis Toca jugar a Luis Tiene la ficha 4-5 Ficha anterior 5-4. Numero Fichas colocadas 10 8 Tiene el turno Maria Toca jugar a Maria Tiene la ficha 1-2 Ficha anterior 4-4. Numero Fichas colocadas 10 9 Toca jugar a Maria Tiene la ficha 1-1 Ficha anterior 4-4. Numero Fichas colocadas 10 9 Toca jugar a Maria Tiene la ficha 0-2 Ficha anterior 4-4. Numero Fichas colocadas 10 9 Toca jugar a Maria Tiene la ficha 0-1 Ficha anterior 4-4. Numero Fichas colocadas 10 9 Toca jugar a Maria Tiene la ficha -1--1 Ficha anterior 4-4. Numero Fichas colocadas 10 9 Jugador Maria cambia de turno y no pone ficha. Numero Fichas colocadas 10 9 Tiene el turno Luis Toca jugar a Luis Tiene la ficha 4-4 Ficha anterior 4-4. Numero Fichas colocadas 10 9 Tiene el turno Maria Toca jugar a Maria Tiene la ficha 1-2 Ficha anterior 4-4. Numero Fichas colocadas 10 10 Toca jugar a Maria Tiene la ficha 1-1 Ficha anterior 4-4. Numero Fichas colocadas 10 10 Toca jugar a Maria Tiene la ficha 0-2 Ficha anterior 4-4. Numero Fichas colocadas 10 10 Toca jugar a Maria Tiene la ficha 0-1 Ficha anterior 4-4. Numero Fichas colocadas 10 10 Toca jugar a Maria Tiene la ficha -1--1 Ficha anterior 4-4. Numero Fichas colocadas 10 10 Jugador Maria cambia de turno y no pone ficha. Numero Fichas colocadas 10 10 Tiene el turno Luis Toca jugar a Luis Tiene la ficha 3-4 Ficha anterior 4-4. Numero Fichas colocadas 10 10 Tiene el turno Maria Toca jugar a Maria Tiene la ficha 1-2 Ficha anterior 3-4. Numero Fichas colocadas 10 11 Toca jugar a Maria Tiene la ficha 1-1 Ficha anterior 3-4. Numero Fichas colocadas 10 11 Toca jugar a Maria Tiene la ficha 0-2 Ficha anterior 3-4. Numero Fichas colocadas 10 11 Toca jugar a Maria Tiene la ficha 0-1 Ficha anterior 3-4. Numero Fichas colocadas 10 11 Toca jugar a Maria Tiene la ficha -1--1 Ficha anterior 3-4. Numero Fichas colocadas 10 11 Jugador Maria cambia de turno y no pone ficha. Numero Fichas colocadas 10 11 Tiene el turno Luis Toca jugar a Luis Tiene la ficha 3-3 Ficha anterior 3-4. Numero Fichas colocadas 10 11 Tiene el turno Maria Toca jugar a Maria Tiene la ficha 1-2 Ficha anterior 3-4. Numero Fichas colocadas 10 12 Toca jugar a Maria Tiene la ficha 1-1 Ficha anterior 3-4. Numero Fichas colocadas 10 12 Toca jugar a Maria Tiene la ficha 0-2 Ficha anterior 3-4. Numero Fichas colocadas 10 12 Toca jugar a Maria Tiene la ficha 0-1 Ficha anterior 3-4. Numero Fichas colocadas 10 12 Toca jugar a Maria Tiene la ficha -1--1 Ficha anterior 3-4. Numero Fichas colocadas 10 12 Jugador Maria cambia de turno y no pone ficha. Numero Fichas colocadas 10 12 Tiene el turno Luis Toca jugar a Luis Tiene la ficha 2-4 Ficha anterior 3-4. Numero Fichas colocadas 10 12 Tiene el turno Maria Toca jugar a Maria Tiene la ficha 1-2 Ficha anterior 3-2. Numero Fichas colocadas 10 13 Tiene el turno Luis Toca jugar a Luis Tiene la ficha 2-3 Ficha anterior 3-1. Numero Fichas colocadas 11 13 ¡¡¡HA GANADO EL JUGADOR: LUIS !!!

    b) Dos jugadores en una situación de tablas (jugada3.dat) lcorrale@linuxa-02:~/Inteligencia/Jess60a5$ java jess.Main irc/domino2player.clp Jess, the Java Expert System Shell Copyright (C) 1998 E.J. Friedman Hill and the Sandia Corporation Jess Version 6.0a5 3/12/2001 f-0 (initial-fact) f-1 (numero (numero1 6) (numero2 6)) f-2 (noPone (noPoneM 0) (noPoneL 0))

  • Inteligencia en Redes de Comunicaciones Luis Corrales ÁvilaPráctica Obligatoria María Herrero TorresDominó en CLIPS

    12

    f-3 (contador (pieM 0) (pieL 0)) For a total of 4 facts. Toca jugar a Luis Tiene la ficha 6-6 Ficha anterior 6-6. Numero Fichas colocadas 0 0 Tiene el turno Maria Toca jugar a Maria Tiene la ficha 0-0 Ficha anterior 6-6. Numero Fichas colocadas 0 1 Toca jugar a Maria Tiene la ficha 2-2 Ficha anterior 6-6. Numero Fichas colocadas 0 1 Toca jugar a Maria Tiene la ficha 1-6 Ficha anterior 6-6. Numero Fichas colocadas 0 1 Tiene el turno Luis Toca jugar a Luis Tiene la ficha 5-6 Ficha anterior 1-6. Numero Fichas colocadas 1 1 Tiene el turno Maria Toca jugar a Maria Tiene la ficha 0-0 Ficha anterior 1-5. Numero Fichas colocadas 1 2 Toca jugar a Maria Tiene la ficha 2-2 Ficha anterior 1-5. Numero Fichas colocadas 1 2 Toca jugar a Maria Tiene la ficha 1-5 Ficha anterior 1-5. Numero Fichas colocadas 1 2 Tiene el turno Luis Toca jugar a Luis Tiene la ficha 0-2 Ficha anterior 5-5. Numero Fichas colocadas 2 2 Toca jugar a Luis Tiene la ficha 4-6 Ficha anterior 5-5. Numero Fichas colocadas 2 2 Toca jugar a Luis Tiene la ficha 1-2 Ficha anterior 5-5. Numero Fichas colocadas 2 2 Toca jugar a Luis Tiene la ficha 4-4 Ficha anterior 5-5. Numero Fichas colocadas 2 2 Toca jugar a Luis Tiene la ficha 3-6 Ficha anterior 5-5. Numero Fichas colocadas 2 2 Toca jugar a Luis Tiene la ficha 1-3 Ficha anterior 5-5. Numero Fichas colocadas 2 2 Toca jugar a Luis Tiene la ficha 3-4 Ficha anterior 5-5. Numero Fichas colocadas 2 2 Toca jugar a Luis Tiene la ficha 0-3 Ficha anterior 5-5. Numero Fichas colocadas 2 2 Toca jugar a Luis Tiene la ficha 4-5 Ficha anterior 5-5. Numero Fichas colocadas 2 2 Tiene el turno Maria Toca jugar a Maria Tiene la ficha 0-0 Ficha anterior 4-5. Numero Fichas colocadas 2 3 Toca jugar a Maria Tiene la ficha 2-2 Ficha anterior 4-5. Numero Fichas colocadas 2 3 Toca jugar a Maria Tiene la ficha 2-5 Ficha anterior 4-5. Numero Fichas colocadas 2 3 Tiene el turno Luis Toca jugar a Luis Tiene la ficha 0-2 Ficha anterior 4-2. Numero Fichas colocadas 3 3 Tiene el turno Maria Toca jugar a Maria Tiene la ficha 0-0 Ficha anterior 4-0. Numero Fichas colocadas 3 4 Tiene el turno Luis Toca jugar a Luis Tiene la ficha 4-6 Ficha anterior 4-0. Numero Fichas colocadas 4 4 Tiene el turno Maria Toca jugar a Maria Tiene la ficha 2-2 Ficha anterior 6-0. Numero Fichas colocadas 4 5 Toca jugar a Maria Tiene la ficha 3-5 Ficha anterior 6-0. Numero Fichas colocadas 4 5 Toca jugar a Maria Tiene la ficha 0-5 Ficha anterior 6-0. Numero Fichas colocadas 4 5 Tiene el turno Luis Toca jugar a Luis Tiene la ficha 1-2 Ficha anterior 6-5. Numero Fichas colocadas 5 5 Toca jugar a Luis Tiene la ficha 4-4 Ficha anterior 6-5. Numero Fichas colocadas 5 5 Toca jugar a Luis Tiene la ficha 3-6 Ficha anterior 6-5. Numero Fichas colocadas 5 5 Tiene el turno Maria Toca jugar a Maria Tiene la ficha 2-2 Ficha anterior 3-5. Numero Fichas colocadas 5 6 Toca jugar a Maria Tiene la ficha 3-5 Ficha anterior 3-5. Numero Fichas colocadas 5 6 Tiene el turno Luis Toca jugar a Luis Tiene la ficha 1-2 Ficha anterior 5-5. Numero Fichas colocadas 6 6 Toca jugar a Luis Tiene la ficha 4-4 Ficha anterior 5-5. Numero Fichas colocadas 6 6 Toca jugar a Luis Tiene la ficha 1-3 Ficha anterior 5-5. Numero Fichas colocadas 6 6 Toca jugar a Luis Tiene la ficha 3-4 Ficha anterior 5-5. Numero Fichas colocadas 6 6 Toca jugar a Luis Tiene la ficha 0-3 Ficha anterior 5-5. Numero Fichas colocadas 6 6 Toca jugar a Luis Tiene la ficha 1-4 Ficha anterior 5-5. Numero Fichas colocadas 6 6 Toca jugar a Luis Tiene la ficha 2-4 Ficha anterior 5-5. Numero Fichas colocadas 6 6 Toca jugar a Luis Tiene la ficha 5-5 Ficha anterior 5-5. Numero Fichas colocadas 6 6 Tiene el turno Maria Toca jugar a Maria Tiene la ficha 2-2 Ficha anterior 5-5. Numero Fichas colocadas 6 7 Toca jugar a Maria Tiene la ficha 1-1 Ficha anterior 5-5. Numero Fichas colocadas 6 7 Toca jugar a Maria Tiene la ficha 0-6 Ficha anterior 5-5. Numero Fichas colocadas 6 7 Toca jugar a Maria Tiene la ficha 2-6 Ficha anterior 5-5. Numero Fichas colocadas 6 7

  • Inteligencia en Redes de Comunicaciones Luis Corrales ÁvilaPráctica Obligatoria María Herrero TorresDominó en CLIPS

    13

    Toca jugar a Maria Tiene la ficha 0-4 Ficha anterior 5-5. Numero Fichas colocadas 6 7 Toca jugar a Maria Tiene la ficha 3-3 Ficha anterior 5-5. Numero Fichas colocadas 6 7 Toca jugar a Maria Tiene la ficha 2-3 Ficha anterior 5-5. Numero Fichas colocadas 6 7 Toca jugar a Maria Tiene la ficha 0-1 Ficha anterior 5-5. Numero Fichas colocadas 6 7 Toca jugar a Maria Tiene la ficha -1--1 Ficha anterior 5-5. Numero Fichas colocadas 6 7 Jugador Maria cambia de turno y no pone ficha. Numero Fichas colocadas 6 7 Tiene el turno Luis Toca jugar a Luis Tiene la ficha 1-2 Ficha anterior 5-5. Numero Fichas colocadas 6 7 Toca jugar a Luis Tiene la ficha 4-4 Ficha anterior 5-5. Numero Fichas colocadas 6 7 Toca jugar a Luis Tiene la ficha 1-3 Ficha anterior 5-5. Numero Fichas colocadas 6 7 Toca jugar a Luis Tiene la ficha 3-4 Ficha anterior 5-5. Numero Fichas colocadas 6 7 Toca jugar a Luis Tiene la ficha 0-3 Ficha anterior 5-5. Numero Fichas colocadas 6 7 Toca jugar a Luis Tiene la ficha 1-4 Ficha anterior 5-5. Numero Fichas colocadas 6 7 Toca jugar a Luis Tiene la ficha 2-4 Ficha anterior 5-5. Numero Fichas colocadas 6 7 Toca jugar a Luis Tiene la ficha -1--1 Ficha anterior 5-5. Numero Fichas colocadas 6 7 Jugador Luis cambia de turno y no pone ficha. Numero Fichas colocadas 6 7 Tiene el turno Maria Los jugadores no pueden continuar colocando fichas !!!TABLAS¡¡¡

    c) Cuatro jugadores con un ganador (jugada42.dat) lcorrale@linuxa-02:~/Inteligencia/Jess60a5$ java jess.Main irc/domino4player.clp Jess, the Java Expert System Shell Copyright (C) 1998 E.J. Friedman Hill and the Sandia Corporation Jess Version 6.0a5 3/12/2001 f-0 (initial-fact) f-1 (numero (numero1 6) (numero2 6)) f-2 (contador (pieM 0) (pieJ 0) (pieL 0) (pieJu 0)) For a total of 3 facts. Toca jugar a Julio Tiene la ficha 6-6 Ficha anterior 6-6. Numero Fichas colocadas 0 0 0 0 Tiene el turno Maria Toca jugar a Maria Tiene la ficha 0-0 Ficha anterior 6-6. Numero Fichas colocadas 0 0 0 1 Toca jugar a Maria Tiene la ficha 2-3 Ficha anterior 6-6. Numero Fichas colocadas 0 0 0 1 Toca jugar a Maria Tiene la ficha 0-5 Ficha anterior 6-6. Numero Fichas colocadas 0 0 0 1 Toca jugar a Maria Tiene la ficha 1-5 Ficha anterior 6-6. Numero Fichas colocadas 0 0 0 1 Toca jugar a Maria Tiene la ficha 0-3 Ficha anterior 6-6. Numero Fichas colocadas 0 0 0 1 Toca jugar a Maria Tiene la ficha 4-6 Ficha anterior 6-6. Numero Fichas colocadas 0 0 0 1 Tiene el turno Jose Toca jugar a Jose Tiene la ficha 1-1 Ficha anterior 4-6. Numero Fichas colocadas 1 0 0 1 Toca jugar a Jose Tiene la ficha 2-2 Ficha anterior 4-6. Numero Fichas colocadas 1 0 0 1 Toca jugar a Jose Tiene la ficha 1-6 Ficha anterior 4-6. Numero Fichas colocadas 1 0 0 1 Tiene el turno Luis Toca jugar a Luis Tiene la ficha 0-6 Ficha anterior 4-1. Numero Fichas colocadas 1 1 0 1 Toca jugar a Luis Tiene la ficha 3-4 Ficha anterior 4-1. Numero Fichas colocadas 1 1 0 1 Tiene el turno Julio Toca jugar a Julio Tiene la ficha 3-3 Ficha anterior 3-1. Numero Fichas colocadas 1 1 1 1 Tiene el turno Maria Toca jugar a Maria Tiene la ficha 0-0 Ficha anterior 3-1. Numero Fichas colocadas 1 1 1 2 Toca jugar a Maria Tiene la ficha 2-3 Ficha anterior 3-1. Numero Fichas colocadas 1 1 1 2 Tiene el turno Jose Toca jugar a Jose Tiene la ficha 1-1 Ficha anterior 2-1. Numero Fichas colocadas 2 1 1 2 Tiene el turno Luis Toca jugar a Luis Tiene la ficha 0-6 Ficha anterior 2-1. Numero Fichas colocadas 2 2 1 2 Toca jugar a Luis Tiene la ficha 5-6 Ficha anterior 2-1. Numero Fichas colocadas 2 2 1 2 Toca jugar a Luis Tiene la ficha 2-6 Ficha anterior 2-1. Numero Fichas colocadas 2 2 1 2

  • Inteligencia en Redes de Comunicaciones Luis Corrales ÁvilaPráctica Obligatoria María Herrero TorresDominó en CLIPS

    14

    Tiene el turno Julio Toca jugar a Julio Tiene la ficha 5-5 Ficha anterior 6-1. Numero Fichas colocadas 2 2 2 2 Toca jugar a Julio Tiene la ficha 1-2 Ficha anterior 6-1. Numero Fichas colocadas 2 2 2 2 Tiene el turno Maria Toca jugar a Maria Tiene la ficha 0-0 Ficha anterior 6-2. Numero Fichas colocadas 2 2 2 3 Toca jugar a Maria Tiene la ficha 0-5 Ficha anterior 6-2. Numero Fichas colocadas 2 2 2 3 Toca jugar a Maria Tiene la ficha 1-5 Ficha anterior 6-2. Numero Fichas colocadas 2 2 2 3 Toca jugar a Maria Tiene la ficha 0-3 Ficha anterior 6-2. Numero Fichas colocadas 2 2 2 3 Toca jugar a Maria Tiene la ficha 0-1 Ficha anterior 6-2. Numero Fichas colocadas 2 2 2 3 Toca jugar a Maria Tiene la ficha -1--1 Ficha anterior 6-2. Numero Fichas colocadas 2 2 2 3 Jugador Maria cambia de turno y no pone ficha. Fichas puestas 2 2 2 3 Tiene el turno Jose Toca jugar a Jose Tiene la ficha 2-2 Ficha anterior 6-2. Numero Fichas colocadas 2 2 2 3 Tiene el turno Luis Toca jugar a Luis Tiene la ficha 0-6 Ficha anterior 6-2. Numero Fichas colocadas 2 3 2 3 Tiene el turno Julio Toca jugar a Julio Tiene la ficha 5-5 Ficha anterior 0-2. Numero Fichas colocadas 2 3 3 3 Toca jugar a Julio Tiene la ficha 4-5 Ficha anterior 0-2. Numero Fichas colocadas 2 3 3 3 Toca jugar a Julio Tiene la ficha 2-5 Ficha anterior 0-2. Numero Fichas colocadas 2 3 3 3 Tiene el turno Maria Toca jugar a Maria Tiene la ficha 0-0 Ficha anterior 0-5. Numero Fichas colocadas 2 3 3 4 Tiene el turno Jose Toca jugar a Jose Tiene la ficha 0-4 Ficha anterior 0-5. Numero Fichas colocadas 3 3 3 4 Tiene el turno Luis Toca jugar a Luis Tiene la ficha 5-6 Ficha anterior 4-5. Numero Fichas colocadas 3 4 3 4 Tiene el turno Julio Toca jugar a Julio Tiene la ficha 5-5 Ficha anterior 4-6. Numero Fichas colocadas 3 4 4 4 Toca jugar a Julio Tiene la ficha 4-5 Ficha anterior 4-6. Numero Fichas colocadas 3 4 4 4 Tiene el turno Maria Toca jugar a Maria Tiene la ficha 0-5 Ficha anterior 5-6. Numero Fichas colocadas 3 4 4 5 Tiene el turno Jose Toca jugar a Jose Tiene la ficha 1-4 Ficha anterior 0-6. Numero Fichas colocadas 4 4 4 5 Toca jugar a Jose Tiene la ficha 3-6 Ficha anterior 0-6. Numero Fichas colocadas 4 4 4 5 Tiene el turno Luis Toca jugar a Luis Tiene la ficha 4-4 Ficha anterior 0-3. Numero Fichas colocadas 4 5 4 5 Toca jugar a Luis Tiene la ficha 2-4 Ficha anterior 0-3. Numero Fichas colocadas 4 5 4 5 Toca jugar a Luis Tiene la ficha 3-5 Ficha anterior 0-3. Numero Fichas colocadas 4 5 4 5 Tiene el turno Julio Toca jugar a Julio Tiene la ficha 5-5 Ficha anterior 0-5. Numero Fichas colocadas 4 5 5 5 Tiene el turno Maria Toca jugar a Maria Tiene la ficha 1-5 Ficha anterior 0-5. Numero Fichas colocadas 4 5 5 6 Tiene el turno Jose Toca jugar a Jose Tiene la ficha 1-4 Ficha anterior 0-1. Numero Fichas colocadas 5 5 5 6 Tiene el turno Luis Toca jugar a Luis Tiene la ficha 4-4 Ficha anterior 0-4. Numero Fichas colocadas 5 6 5 6 Tiene el turno Julio Toca jugar a Julio Tiene la ficha 1-3 Ficha anterior 0-4. Numero Fichas colocadas 5 6 6 6 Toca jugar a Julio Tiene la ficha -1--1 Ficha anterior 0-4. Numero Fichas colocadas 5 6 6 6 Jugador Julio cambia de turno y no pone ficha. Fichas puestas 5 6 6 6 Tiene el turno Maria Toca jugar a Maria Tiene la ficha 0-3 Ficha anterior 0-4. Numero Fichas colocadas 5 6 6 6 Tiene el turno Jose Toca jugar a Jose Tiene la ficha 0-2 Ficha anterior 3-4. Numero Fichas colocadas 6 6 6 6 Toca jugar a Jose Tiene la ficha -1--1 Ficha anterior 3-4. Numero Fichas colocadas 6 6 6 6 Jugador Jose cambia de turno y no pone ficha. Fichas puestas 6 6 6 6 Tiene el turno Luis Toca jugar a Luis Tiene la ficha 2-4 Ficha anterior 3-4. Numero Fichas colocadas 6 6 6 6 ¡¡¡HA GANADO EL JUGADOR: LUIS !!!

  • Inteligencia en Redes de Comunicaciones Luis Corrales ÁvilaPráctica Obligatoria María Herrero TorresDominó en CLIPS

    15

    A.2) Código fuente

    Domino2player.clp

    ; JUEGO DEL DOMINO PARA 2 JUGADORES ; PLANTILLAS ; Indica piezas colocadas por cada jugador (deftemplate contador (slot pieM) (slot pieL) )

    ; Piezas, identificadas por dos numeros, que posee un jugador (deftemplate pieza (slot jugador) (slot number1) (slot number2) )

    ; Cada pieza tiene dos numeros (deftemplate numero (slot numero1) (slot numero2) )

    ; Jugador que tiene turno (deftemplate turno (slot turno_de) )

    ; Controla la colocacion de pieza por parte de cada jugador (deftemplate noPone (slot noPoneM) (slot noPoneL) )

    ; HECHOS ; Numeros a colocar en la mesa (deffacts NumerosValidos (numero (numero1 6) (numero2 6)) )

    ; Tablas => noPone = noPone =1 (los jugadores no pueden poner) (deffacts PoneInicial (noPone (noPoneM 0) (noPoneL 0)) )

    ; Piezas colocadas por cada jugador (deffacts Inicializacion (contador (pieM 0) (pieL 0)) )

  • Inteligencia en Redes de Comunicaciones Luis Corrales ÁvilaPráctica Obligatoria María Herrero TorresDominó en CLIPS

    16

    ; FUNCIONES ; Suma (deffunction suma(?a) (bind ?suma (+ ?a 1)) (+ ?a 1) )

    ; REGLAS ; Carga de un fichero .dat las piezas que tiene cada jugador (defrule initialize (not (pieza (jugador ?jugador) (number1 6) (number2 6))) => (load-facts "irc/jugada3.dat") )

    ; El jugador que tiene el turno compara las piezas en su posesion con ; los extremos de las piezas de la mesa para ver si puede colocar. Si consigue ; colocar modifica uno de los extremos de las piezas de la mesa y pasa el turno. ; Si un jugador consigue colocar todas sus piezas gana. (defrule ColocaFicha ?y

  • Inteligencia en Redes de Comunicaciones Luis Corrales ÁvilaPráctica Obligatoria María Herrero TorresDominó en CLIPS

    17

    (if (eq ?pieL 13) then (printout t "¡¡¡HA GANADO EL JUGADOR: LUIS !!!" crlf) (halt) (return) )

    (printout t "Tiene el turno Maria" crlf) (retract ?z) )

    (retract ?p) (return) )

    (if (eq ?numero1 ?number2) then (retract ?m) (assert (noPone (noPoneM 0) (noPoneL 0))) (retract ?y) (assert (numero (numero1 ?number1) (numero2 ?numero2))) (if (eq ?jugador Maria) then (retract ?x) (assert (turno (turno_de Luis))) (assert (contador (pieM (suma ?pieM)) (pieL ?pieL))) (if (eq ?pieM 13) then (printout t "¡¡¡HA GANADO EL JUGADOR: MARIA !!!" crlf) (halt) (return) )

    (printout t "Tiene el turno Luis" crlf) (retract ?z) else (retract ?x) (assert (turno (turno_de Maria))) (assert (contador (pieM ?pieM) (pieL (suma ?pieL)))) (if (eq ?pieL 13) then (printout t "¡¡¡HA GANADO EL JUGADOR: LUIS !!!" crlf) (halt) (return) )

    (printout t "Tiene el turno Maria" crlf) (retract ?z) )

    (retract ?p) (return) )

    (if (eq ?numero2 ?number1) then (retract ?m) (assert (noPone (noPoneM 0) (noPoneL 0))) (retract ?y) (assert (numero (numero1 ?numero1) (numero2 ?number2))) (if (eq ?jugador Maria) then (retract ?x)

  • Inteligencia en Redes de Comunicaciones Luis Corrales ÁvilaPráctica Obligatoria María Herrero TorresDominó en CLIPS

    18

    (assert (turno (turno_de Luis))) (assert (contador (pieM (suma ?pieM)) (pieL ?pieL))) (if (eq ?pieM 13) then (printout t "¡¡¡HA GANADO EL JUGADOR: MARIA !!!" crlf) (halt) (return) )

    (printout t "Tiene el turno Luis" crlf) (retract ?z) else (retract ?x) (assert (turno (turno_de Maria))) (assert (contador (pieM ?pieM) (pieL (suma ?pieL)))) (if (eq ?pieL 13) then (printout t "¡¡¡HA GANADO EL JUGADOR: LUIS !!!" crlf) (halt) (return) )

    (printout t "Tiene el turno Maria" crlf) (retract ?z) )

    (retract ?p) (return) )

    (if (eq ?numero2 ?number2) then (retract ?m) (assert (noPone (noPoneM 0) (noPoneL 0))) (retract ?y) (assert (numero (numero1 ?numero1) (numero2 ?number1))) (if (eq ?jugador Maria) then (retract ?x) (assert (turno (turno_de Luis))) (assert (contador (pieM (suma ?pieM)) (pieL ?pieL))) (if (eq ?pieM 13) then (printout t "¡¡¡HA GANADO EL JUGADOR: MARIA !!!" crlf) (halt) (return) )

    (printout t "Tiene el turno Luis" crlf) (retract ?z) else (retract ?x) (assert (turno (turno_de Maria))) (assert (contador (pieM ?pieM) (pieL (suma ?pieL)))) (if (eq ?pieL 13) then (printout t "¡¡¡HA GANADO EL JUGADOR: LUIS !!!" crlf) (halt) (return) )

    (printout t "Tiene el turno Maria" crlf)

  • Inteligencia en Redes de Comunicaciones Luis Corrales ÁvilaPráctica Obligatoria María Herrero TorresDominó en CLIPS

    19

    (retract ?z) )

    (retract ?p) (return) )

    ;(facts) )

    ; Se activa esta regla si un jugador no puede colocar pieza sobre la mesa. ; En ese caso pasa el turno. ; Se alcanzan tablas cuando los dos jugadores no pueden poner piezas. (defrule NoColocaFicha ?x

  • Inteligencia en Redes de Comunicaciones Luis Corrales ÁvilaPráctica Obligatoria María Herrero TorresDominó en CLIPS

    20

    Domino4player.clp

    ; JUEGO DEL DOMINO PARA 4 JUGADORES ; PLANTILLAS ; Indica piezas colocadas por cada jugador (deftemplate contador (slot pieM) (slot pieJ) (slot pieL) (slot pieJu) )

    ; Piezas, identificadas por dos numeros, que posee un jugador (deftemplate pieza (slot jugador) (slot number1) (slot number2) )

    ; Cada pieza tiene dos numeros (deftemplate numero (slot numero1) (slot numero2) )

    ; Jugador que tiene turno (deftemplate turno (slot turno_de) )

    ; HECHOS ; Numeros a colocar en la mesa (deffacts NumerosValidos (numero (numero1 6) (numero2 6)) )

    ; Piezas colocadas por cada jugador (deffacts Inicializacion (contador (pieM 0) (pieJ 0) (pieL 0) (pieJu 0)) )

    ; FUNCIONES ; Suma (deffunction suma(?a) (bind ?suma (+ ?a 1)) (+ ?a 1) )

    ; REGLAS ; Carga de un fichero .dat las piezas que tiene cada jugador (defrule initialize (not (pieza (jugador ?jugador) (number1 6) (number2 6)))

  • Inteligencia en Redes de Comunicaciones Luis Corrales ÁvilaPráctica Obligatoria María Herrero TorresDominó en CLIPS

    21

    => (load-facts "irc/jugada42.dat") )

    ; El jugador que tiene el turno compara las piezas en su posesion con ; los extremos de las piezas de la mesa para ver si puede colocar. Si consigue ; colocar modifica uno de los extremos de las piezas de la mesa y pasa el turno. ; Si un jugador consigue colocar todas sus piezas gana. (defrule ColocaFicha ?y

  • Inteligencia en Redes de Comunicaciones Luis Corrales ÁvilaPráctica Obligatoria María Herrero TorresDominó en CLIPS

    22

    then (retract ?x) (assert (turno (turno_de Julio))) (assert (contador (pieM ?pieM) (pieJ ?pieJ) (pieL (suma ?pieL)) (pieJu ?pieJu))) (if (eq ?pieL 6) then (printout t "¡¡¡HA GANADO EL JUGADOR: LUIS !!!" crlf) (halt) (return) )

    (printout t "Tiene el turno Julio" crlf) (retract ?z))

    (if (eq ?jugador Julio) then (retract ?x) (assert (turno (turno_de Maria))) (assert (contador (pieM ?pieM) (pieJ ?pieJ) (pieL ?pieL) (pieJu (suma ?pieJu)))) (if (eq ?pieJu 6) then (printout t "¡¡¡HA GANADO EL JUGADOR: JULIO !!!" crlf) (halt) (return) )

    (printout t "Tiene el turno Maria" crlf) (retract ?z))

    (retract ?p) (return) )

    (if (eq ?numero1 ?number2) then (retract ?y) (assert (numero (numero1 ?number1) (numero2 ?numero2))) (if (eq ?jugador Maria) then (retract ?x) (assert (turno (turno_de Jose))) (assert (contador (pieM (suma ?pieM)) (pieJ ?pieJ) (pieL ?pieL) (pieJu ?pieJu))) (if (eq ?pieM 6) then (printout t "¡¡¡HA GANADO EL JUGADOR: MARIA !!!" crlf) (halt) (return) )

    (printout t "Tiene el turno Jose" crlf) (retract ?z))

    (if (eq ?jugador Jose) then (retract ?x) (assert (turno (turno_de Luis)))

  • Inteligencia en Redes de Comunicaciones Luis Corrales ÁvilaPráctica Obligatoria María Herrero TorresDominó en CLIPS

    23

    (assert (contador (pieM ?pieM) (pieJ (suma ?pieJ)) (pieL ?pieL) (pieJu ?pieJu))) (if (eq ?pieJ 6) then (printout t "¡¡¡HA GANADO EL JUGADOR: JOSE !!!" crlf) (halt) (return) )

    (printout t "Tiene el turno Luis" crlf) (retract ?z))

    (if (eq ?jugador Luis) then (retract ?x) (assert (turno (turno_de Julio))) (assert (contador (pieM ?pieM) (pieJ ?pieJ) (pieL (suma ?pieL)) (pieJu ?pieJu))) (if (eq ?pieL 6) then (printout t "¡¡¡HA GANADO EL JUGADOR: LUIS !!!" crlf) (halt) (return) )

    (printout t "Tiene el turno Julio" crlf) (retract ?z))

    (if (eq ?jugador Julio) then (retract ?x) (assert (turno (turno_de Maria))) (assert (contador (pieM ?pieM) (pieJ ?pieJ) (pieL ?pieL) (pieJu (suma ?pieJu)))) (if (eq ?pieJu 6) then (printout t "¡¡¡HA GANADO EL JUGADOR: JULIO !!!" crlf) (halt) (return) )

    (printout t "Tiene el turno Maria" crlf) (retract ?z))

    (retract ?p) (return) )

    (if (eq ?numero2 ?number1) then (retract ?y) (assert (numero (numero1 ?numero1) (numero2 ?number2))) (if (eq ?jugador Maria) then (retract ?x) (assert (turno (turno_de Jose))) (assert (contador (pieM (suma ?pieM)) (pieJ ?pieJ) (pieL ?pieL) (pieJu ?pieJu))) (if (eq ?pieM 6) then

  • Inteligencia en Redes de Comunicaciones Luis Corrales ÁvilaPráctica Obligatoria María Herrero TorresDominó en CLIPS

    24

    (printout t "¡¡¡HA GANADO EL JUGADOR: MARIA !!!" crlf) (halt) (return) )

    (printout t "Tiene el turno Jose" crlf) (retract ?z))

    (if (eq ?jugador Jose) then (retract ?x) (assert (turno (turno_de Luis))) (assert (contador (pieM ?pieM) (pieJ (suma ?pieJ)) (pieL ?pieL) (pieJu ?pieJu))) (if (eq ?pieJ 6) then (printout t "¡¡¡HA GANADO EL JUGADOR: JOSE !!!" crlf) (halt) (return) )

    (printout t "Tiene el turno Luis" crlf) (retract ?z))

    (if (eq ?jugador Luis) then (retract ?x) (assert (turno (turno_de Julio))) (assert (contador (pieM ?pieM) (pieJ ?pieJ) (pieL (suma ?pieL)) (pieJu ?pieJu))) (if (eq ?pieL 6) then (printout t "¡¡¡HA GANADO EL JUGADOR: LUIS !!!" crlf) (halt) (return) )

    (printout t "Tiene el turno Julio" crlf) (retract ?z))

    (if (eq ?jugador Julio) then (retract ?x) (assert (turno (turno_de Maria))) (assert (contador (pieM ?pieM) (pieJ ?pieJ) (pieL ?pieL) (pieJu (suma ?pieJu)))) (if (eq ?pieJu 6) then (printout t "¡¡¡HA GANADO EL JUGADOR: JULIO !!!" crlf) (halt) (return) )

    (printout t "Tiene el turno Maria" crlf) (retract ?z))

    (retract ?p) (return) )

    (if (eq ?numero2 ?number2)

  • Inteligencia en Redes de Comunicaciones Luis Corrales ÁvilaPráctica Obligatoria María Herrero TorresDominó en CLIPS

    25

    then (retract ?y) (assert (numero (numero1 ?numero1) (numero2 ?number1))) (if (eq ?jugador Maria) then (retract ?x) (assert (turno (turno_de Jose))) (assert (contador (pieM (suma ?pieM)) (pieJ ?pieJ) (pieL ?pieL) (pieJu ?pieJu))) (if (eq ?pieM 6) then (printout t "¡¡¡HA GANADO EL JUGADOR: MARIA !!!" crlf) (halt) (return) )

    (printout t "Tiene el turno Jose" crlf) (retract ?z))

    (if (eq ?jugador Jose) then (retract ?x) (assert (turno (turno_de Luis))) (assert (contador (pieM ?pieM) (pieJ (suma ?pieJ)) (pieL ?pieL) (pieJu ?pieJu))) (if (eq ?pieJ 6) then (printout t "¡¡¡HA GANADO EL JUGADOR: JOSE !!!" crlf) (halt) (return) )

    (printout t "Tiene el turno Luis" crlf) (retract ?z))

    (if (eq ?jugador Luis) then (retract ?x) (assert (turno (turno_de Julio))) (assert (contador (pieM ?pieM) (pieJ ?pieJ) (pieL (suma ?pieL)) (pieJu ?pieJu))) (if (eq ?pieL 6) then (printout t "¡¡¡HA GANADO EL JUGADOR: LUIS !!!" crlf) (halt) (return) )

    (printout t "Tiene el turno Julio" crlf) (retract ?z))

    (if (eq ?jugador Julio) then (retract ?x) (assert (turno (turno_de Maria))) (assert (contador (pieM ?pieM) (pieJ ?pieJ) (pieL ?pieL) (pieJu (suma ?pieJu)))) (if (eq ?pieJu 6) then (printout t "¡¡¡HA GANADO EL JUGADOR: JULIO !!!" crlf)

  • Inteligencia en Redes de Comunicaciones Luis Corrales ÁvilaPráctica Obligatoria María Herrero TorresDominó en CLIPS

    26

    (halt) (return) )

    (printout t "Tiene el turno Maria" crlf) (retract ?z))

    (retract ?p) (return) )

    ;(facts) )

    ; Se activa esta regla si un jugador no puede colocar pieza sobre la ; ; mesa. ; En ese caso pasa el turno. (defrule NoColocaFicha ?x (printout t "Jugador "?jugador " cambia de turno y no pone fi-cha. Fichas puestas "?pieM " " ?pieJ " " ?pieL " " ?pieJu crlf) (if (eq ?jugador Maria) then (retract ?x) (assert (turno (turno_de Jose))) (printout t "Tiene el turno Jose" crlf) )

    (if (eq ?jugador Jose) then (retract ?x) (assert (turno (turno_de Luis))) (printout t "Tiene el turno Luis" crlf) )

    (if (eq ?jugador Luis) then (retract ?x) (assert (turno (turno_de Julio))) (printout t "Tiene el turno Julio" crlf) )

    (if (eq ?jugador Julio) then (retract ?x) (assert (turno (turno_de Maria))) (printout t "Tiene el turno Maria" crlf) )

    (return) )

    (reset) (facts) (run)

  • Inteligencia en Redes de Comunicaciones Luis Corrales ÁvilaPráctica Obligatoria María Herrero TorresDominó en CLIPS

    27

    Jugada1.dat(pieza (jugador Maria) (number1 -1) (number2 -1))

    (pieza (jugador Maria) (number1 0) (number2 1)) (pieza (jugador Maria) (number1 0) (number2 2)) (pieza (jugador Maria) (number1 0) (number2 3)) (pieza (jugador Maria) (number1 0) (number2 4)) (pieza (jugador Maria) (number1 0) (number2 5)) (pieza (jugador Maria) (number1 0) (number2 6)) (pieza (jugador Maria) (number1 1) (number2 1)) (pieza (jugador Maria) (number1 1) (number2 2)) (pieza (jugador Maria) (number1 1) (number2 3)) (pieza (jugador Maria) (number1 1) (number2 4)) (pieza (jugador Maria) (number1 1) (number2 5)) (pieza (jugador Maria) (number1 1) (number2 6)) (pieza (jugador Maria) (number1 2) (number2 2)) (pieza (jugador Maria) (number1 6) (number2 6))

    (pieza (jugador Luis) (number1 -1) (number2 -1)) (pieza (jugador Luis) (number1 2) (number2 3)) (pieza (jugador Luis) (number1 2) (number2 4)) (pieza (jugador Luis) (number1 2) (number2 5)) (pieza (jugador Luis) (number1 2) (number2 6)) (pieza (jugador Luis) (number1 3) (number2 3)) (pieza (jugador Luis) (number1 3) (number2 4)) (pieza (jugador Luis) (number1 3) (number2 5)) (pieza (jugador Luis) (number1 3) (number2 6)) (pieza (jugador Luis) (number1 4) (number2 4)) (pieza (jugador Luis) (number1 4) (number2 5)) (pieza (jugador Luis) (number1 4) (number2 6)) (pieza (jugador Luis) (number1 5) (number2 5)) (pieza (jugador Luis) (number1 5) (number2 6)) (pieza (jugador Luis) (number1 0) (number2 0))

    (turno (turno_de Maria))

    Jugada3.dat

    (pieza (jugador Maria) (number1 -1) (number2 -1)) (pieza (jugador Maria) (number1 0) (number2 1)) (pieza (jugador Maria) (number1 2) (number2 3)) (pieza (jugador Maria) (number1 3) (number2 3)) (pieza (jugador Maria) (number1 0) (number2 4)) (pieza (jugador Maria) (number1 2) (number2 6)) (pieza (jugador Maria) (number1 0) (number2 6)) (pieza (jugador Maria) (number1 1) (number2 1)) (pieza (jugador Maria) (number1 0) (number2 5)) (pieza (jugador Maria) (number1 3) (number2 5)) (pieza (jugador Maria) (number1 2) (number2 5)) (pieza (jugador Maria) (number1 1) (number2 5)) (pieza (jugador Maria) (number1 1) (number2 6)) (pieza (jugador Maria) (number1 2) (number2 2)) (pieza (jugador Maria) (number1 0) (number2 0))

    (pieza (jugador Luis) (number1 -1) (number2 -1)) (pieza (jugador Luis) (number1 5) (number2 5)) (pieza (jugador Luis) (number1 2) (number2 4))

  • Inteligencia en Redes de Comunicaciones Luis Corrales ÁvilaPráctica Obligatoria María Herrero TorresDominó en CLIPS

    28

    (pieza (jugador Luis) (number1 1) (number2 4)) (pieza (jugador Luis) (number1 4) (number2 5)) (pieza (jugador Luis) (number1 0) (number2 3)) (pieza (jugador Luis) (number1 3) (number2 4)) (pieza (jugador Luis) (number1 1) (number2 3)) (pieza (jugador Luis) (number1 3) (number2 6)) (pieza (jugador Luis) (number1 4) (number2 4)) (pieza (jugador Luis) (number1 1) (number2 2)) (pieza (jugador Luis) (number1 4) (number2 6)) (pieza (jugador Luis) (number1 0) (number2 2)) (pieza (jugador Luis) (number1 5) (number2 6)) (pieza (jugador Luis) (number1 6) (number2 6))

    (turno (turno_de Luis))

    Jugada42.dat

    (pieza (jugador Maria) (number1 -1) (number2 -1)) (pieza (jugador Maria) (number1 0) (number2 1)) (pieza (jugador Maria) (number1 4) (number2 6)) (pieza (jugador Maria) (number1 0) (number2 3)) (pieza (jugador Maria) (number1 1) (number2 5)) (pieza (jugador Maria) (number1 0) (number2 5)) (pieza (jugador Maria) (number1 2) (number2 3)) (pieza (jugador Maria) (number1 0) (number2 0))

    (pieza (jugador Jose) (number1 -1) (number2 -1)) (pieza (jugador Jose) (number1 0) (number2 2)) (pieza (jugador Jose) (number1 3) (number2 6)) (pieza (jugador Jose) (number1 1) (number2 4)) (pieza (jugador Jose) (number1 0) (number2 4)) (pieza (jugador Jose) (number1 1) (number2 6)) (pieza (jugador Jose) (number1 2) (number2 2)) (pieza (jugador Jose) (number1 1) (number2 1))

    (pieza (jugador Luis) (number1 -1) (number2 -1)) (pieza (jugador Luis) (number1 3) (number2 5)) (pieza (jugador Luis) (number1 2) (number2 4)) (pieza (jugador Luis) (number1 4) (number2 4)) (pieza (jugador Luis) (number1 2) (number2 6)) (pieza (jugador Luis) (number1 5) (number2 6)) (pieza (jugador Luis) (number1 3) (number2 4)) (pieza (jugador Luis) (number1 0) (number2 6))

    (pieza (jugador Julio) (number1 -1) (number2 -1)) (pieza (jugador Julio) (number1 1) (number2 3)) (pieza (jugador Julio) (number1 2) (number2 5)) (pieza (jugador Julio) (number1 4) (number2 5)) (pieza (jugador Julio) (number1 1) (number2 2)) (pieza (jugador Julio) (number1 5) (number2 5)) (pieza (jugador Julio) (number1 3) (number2 3)) (pieza (jugador Julio) (number1 6) (number2 6))

    (turno (turno_de Julio))