Anda di halaman 1dari 28

Inteligencia en Redes de

Comunicaciones

Prctica Obligatoria

Luis Corrales vila


Mara Herrero Torres
Ingeniera de Telecomunicacin
5 Curso 2003/2004
Inteligencia en Redes de Comunicaciones Luis Corrales vila
Prctica Obligatoria Mara Herrero Torres
Domin en CLIPS

1. ndice

1. ndice .......................................... 2

2. Introduccin .. 3

3. Modelado de nuestro juego .. 4

- Domin para dos jugadores


- Domin para cuatro jugadores

4. Realizacin 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 situacin de tablas (jugada3.dat)
c) Cuatro jugadores con un ganador (jugada42.dat)

A.2) Cdigo fuente . 15

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

2
Inteligencia en Redes de Comunicaciones Luis Corrales vila
Prctica Obligatoria Mara Herrero Torres
Domin en CLIPS

2. Introduccin
Nuestra prctica consiste en la realizacin de un juego, el domin. Para el de-
sarrollo de la misma hemos utilizado la versin 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 construccin de sistemas expertos. Es decir, es una herra-
mienta diseada para el desarrollo de software que requiere de conocimiento humano.
Fue desarrollado por la NASA, y hoy en da est siendo utilizado en la industria, go-
bierno y educacin. La versin ms reciente es la 6.0 que soporta los paradigmas de
programacin 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 lneas de ra-
zonamiento.

El conocimiento humano se implementa en CLIPS mediante:

Reglas, que se formulan a partir del conocimiento heurstico basado en la


experiencia.

Deffunction, o funciones generalizadas, que se formulan a partir de cono-


cimiento procedimental.

Programacin orientada a objetos, que tambin se formula por conocimien-


to procedimental pero formulado en trminos de las 5 caractersticas
(generalmente aceptadas) de la programacin orientada a objetos: clases,
paso de mensajes (en ingles, message-handlers), abstraccin, encapsu-
lamiento, herencia y polimorfismo.

3
Inteligencia en Redes de Comunicaciones Luis Corrales vila
Prctica Obligatoria Mara Herrero Torres
Domin en CLIPS

3. Modelado de nuestro juego


Hemos creado dos posibles escenarios del juego del domin. El primero de
ellos (y ms sencillo) consiste en la participacin de dos jugadores (Mara vs Luis) y
un segundo escenario en el cual compiten cuatro jugadores (Mara, 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 esttico 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 algn jugador se quede sin fichas o bien ambos jugadores no
puedan colocar piezas, llegando a una situacin de TABLAS.

Domin para cuatro jugadores:


Es semejante al caso anterior, es decir, se reparten todas las piezas (cada ju-
gador estar en posesin de 7 fichas inicialmente). El reparte es nuevamente esttico
a travs 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 despus de
otro), siendo este orden fijo (->Mara->Jos->Luis->Julio->Mara->).

Como detalle en ambos domins, todos los jugadores estn en posesin 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.

4
Inteligencia en Redes de Comunicaciones Luis Corrales vila
Prctica Obligatoria Mara Herrero Torres
Domin en CLIPS

4. Realizacin 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 relacin entre los restantes. En nuestro pro-
grama adems 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 nmeros que se pueden colo-


car en cada momento sobre la mesa.

En esta figura el valor de numero1 sera 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
situacin de TABLAS.

Las modificaciones sobre los hechos en la memoria de trabajo se realizan me-


diante assert (aadir 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.

5
Inteligencia en Redes de Comunicaciones Luis Corrales vila
Prctica Obligatoria Mara Herrero Torres
Domin en CLIPS

Los componentes de un patrn pueden ser de diferentes tipos, por ejemplo


(numero1 6), numero1 es de tipo numrico.

Para el desarrollo del juego hemos elaborado diferentes reglas.

(defrule ColocaFicha
?y<-(numero (numero1 ?numero1)(numero2 ?numero2))
?x<-(turno (turno_de ?jugador))
?p<-(pieza (jugador ?jugador) (number1 ?number1) (number2 ?num-
ber2))
?z<-(contador (pieM ?pieM) (pieL ?pieL))
?m<-(noPone (noPoneM ?noPoneM) (noPoneL ?noPoneL))
=>
(printout t "Toca jugar a "?jugador " Tiene la ficha " ?number1
"-" ?number2 " Ficha anterior " ?numero1 "-" ?numero2 ". Numero Fichas
colocadas "?pieM " " ?pieL crlf)
(if (eq ?numero1 ?number1)
.)

(defrule NoColocaFicha
?x<-(turno (turno_de ?jugador))
?y<-(noPone (noPoneM ?noPoneM) (noPoneL ?noPoneL))
(pieza (jugador ?jugador) (number1 -1) (number2 -1))
(contador (pieM ?pieM) (pieL ?pieL))
=>
(printout t "Jugador "?jugador " cambia de turno y no pone fi-
cha. Numero Fichas colocadas "?pieM " " ?pieL crlf)
.)

La regla ColocaFicha nos sirve para comprobar si alguna de las fichas que tie-
ne el jugador que posee el turno puede ser colocada.

La regla NoColocaFicha nos sirve para comprobar si el jugador en posesin del


turno no puede colocar ficha y entonces debe ceder el turno al siguiente jugador sin
haber puesto ficha.

En los patrones de la parte izquierda de las reglas se han utilizado variables. El


identificador de una variable comienza por ?. Se pueden almacenar las direcciones de
los hechos en una variable con el operador <-.Por ejemplo:

?x<-(turno (turno_de ?jugador))

El motor de inferencias trata de emparejar la lista de hechos con los patrones


de las reglas. Si todos los patrones de una regla estn emparejados se dice que dicha
regla est activada.

Tambin hemos realizado una funcin que nos devuelve el resultado de una ac-
cin (incrementar una unidad un nmero).

6
Inteligencia en Redes de Comunicaciones Luis Corrales vila
Prctica Obligatoria Mara Herrero Torres
Domin en CLIPS

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

Para obtener un cdigo ms 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)
)

7
Inteligencia en Redes de Comunicaciones Luis Corrales vila
Prctica Obligatoria Mara Herrero Torres
Domin en CLIPS

5. Conclusiones
Mediante la realizacin de esta prctica, juego del domin, hemos aprendido a
manejarnos con esta herramienta, CLIPS. Con ello nos hemos dado cuenta de su po-
tencia y tambin 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 generacin de nmeros aleatorios.

Por otro lado nos hemos dado cuenta de los diferentes resultados que pode-
mos obtener sin ms que cambiar hechos (por ejemplo, entrada de las diferentes
partidas), debido a las reglas genricas que rigen todos y cada uno de los hechos.
Esto nos muestra la potencia de esta herramienta, que sin ms 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 sera adecuada para procesos de
simulacin en los que intervienen procesos de evolucin a partir de una poblacin ini-
cial. Y este es el motivo por el cual hemos decidido modelar nuestro juego del domin
mediante esta herramienta, ya que a travs de una poblacin inicial (piezas que tiene
inicialmente cada jugador) se va evolucionando hasta una situacin final (jugador se
queda sin piezas y gana).

8
Inteligencia en Redes de Comunicaciones Luis Corrales vila
Prctica Obligatoria Mara Herrero Torres
Domin en CLIPS

ANEXOS

A.1) Resultados de los juegos


Los resultados que vamos a obtener van a ser por lnea de texto. En cada lnea
se nos va a indicar cosas tales como:

Jugador que tiene el turno


Ficha que esta comparando
Nmeros de los extremos de las fichas de la mesa
Nmero 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

9
Inteligencia en Redes de Comunicaciones Luis Corrales vila
Prctica Obligatoria Mara Herrero Torres
Domin en CLIPS

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

10
Inteligencia en Redes de Comunicaciones Luis Corrales vila
Prctica Obligatoria Mara Herrero Torres
Domin en CLIPS

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 situacin 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))

11
Inteligencia en Redes de Comunicaciones Luis Corrales vila
Prctica Obligatoria Mara Herrero Torres
Domin en CLIPS

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

12
Inteligencia en Redes de Comunicaciones Luis Corrales vila
Prctica Obligatoria Mara Herrero Torres
Domin en CLIPS

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

13
Inteligencia en Redes de Comunicaciones Luis Corrales vila
Prctica Obligatoria Mara Herrero Torres
Domin en CLIPS

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 !!!

14
Inteligencia en Redes de Comunicaciones Luis Corrales vila
Prctica Obligatoria Mara Herrero Torres
Domin en CLIPS

A.2) Cdigo 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))
)

15
Inteligencia en Redes de Comunicaciones Luis Corrales vila
Prctica Obligatoria Mara Herrero Torres
Domin en CLIPS

; 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<-(numero (numero1 ?numero1)(numero2 ?numero2))
?x<-(turno (turno_de ?jugador))
?p<-(pieza (jugador ?jugador) (number1 ?number1) (number2 ?num-
ber2))
?z<-(contador (pieM ?pieM) (pieL ?pieL))
?m<-(noPone (noPoneM ?noPoneM) (noPoneL ?noPoneL))
=>
(printout t "Toca jugar a "?jugador " Tiene la ficha " ?number1
"-" ?number2 " Ficha anterior " ?numero1 "-" ?numero2 ". Numero Fichas
colocadas "?pieM " " ?pieL crlf)
(if (eq ?numero1 ?number1)
then
(retract ?m)
(assert (noPone (noPoneM 0) (noPoneL 0)))
(retract ?y)
(assert (numero (numero1 ?number2) (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))))

16
Inteligencia en Redes de Comunicaciones Luis Corrales vila
Prctica Obligatoria Mara Herrero Torres
Domin en CLIPS

(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)

17
Inteligencia en Redes de Comunicaciones Luis Corrales vila
Prctica Obligatoria Mara Herrero Torres
Domin en CLIPS

(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)

18
Inteligencia en Redes de Comunicaciones Luis Corrales vila
Prctica Obligatoria Mara Herrero Torres
Domin en CLIPS

(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<-(turno (turno_de ?jugador))
?y<-(noPone (noPoneM ?noPoneM) (noPoneL ?noPoneL))
(pieza (jugador ?jugador) (number1 -1) (number2 -1))
(contador (pieM ?pieM) (pieL ?pieL))
=>
(printout t "Jugador "?jugador " cambia de turno y no pone fi-
cha. Numero Fichas colocadas "?pieM " " ?pieL crlf)
(if (eq ?jugador Maria)
then
(retract ?x)
(assert (turno (turno_de Luis)))
(printout t "Tiene el turno Luis" crlf)
(retract ?y)
(assert (noPone (noPoneM 1) (noPoneL ?noPoneL)))
(if (eq ?noPoneL 1)
then
(printout t "Los jugadores no pueden continuar colo-
cando fichas !!!TABLAS" crlf)
(halt)
(return)
)
else
(retract ?x)
(assert (turno (turno_de Maria)))
(printout t "Tiene el turno Maria" crlf)
(retract ?y)
(assert (noPone (noPoneM ?noPoneM) (noPoneL 1)))
(if (eq ?noPoneM 1)
then
(printout t "Los jugadores no pueden continuar colo-
cando fichas !!!TABLAS" crlf)
(halt)
(return)
)
)
(return)
)

(reset)
(facts)
(run)

19
Inteligencia en Redes de Comunicaciones Luis Corrales vila
Prctica Obligatoria Mara Herrero Torres
Domin en CLIPS

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)))

20
Inteligencia en Redes de Comunicaciones Luis Corrales vila
Prctica Obligatoria Mara Herrero Torres
Domin en CLIPS

=>
(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<-(numero (numero1 ?numero1)(numero2 ?numero2))
?x<-(turno (turno_de ?jugador))
?p<-(pieza (jugador ?jugador) (number1 ?number1) (number2 ?num-
ber2))
?z<-(contador (pieM ?pieM) (pieJ ?pieJ) (pieL ?pieL) (pieJu
?pieJu))
=>
(printout t "Toca jugar a "?jugador " Tiene la ficha " ?number1
"-" ?number2 " Ficha anterior " ?numero1 "-" ?numero2 ". Numero Fichas
colocadas "?pieM " " ?pieJ " " ?pieL " " ?pieJu crlf)
(if (eq ?numero1 ?number1)
then
(retract ?y)
(assert (numero (numero1 ?number2) (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)))
(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)

21
Inteligencia en Redes de Comunicaciones Luis Corrales vila
Prctica Obligatoria Mara Herrero Torres
Domin en CLIPS

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)))

22
Inteligencia en Redes de Comunicaciones Luis Corrales vila
Prctica Obligatoria Mara Herrero Torres
Domin en CLIPS

(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

23
Inteligencia en Redes de Comunicaciones Luis Corrales vila
Prctica Obligatoria Mara Herrero Torres
Domin en CLIPS

(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)

24
Inteligencia en Redes de Comunicaciones Luis Corrales vila
Prctica Obligatoria Mara Herrero Torres
Domin en CLIPS

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)

25
Inteligencia en Redes de Comunicaciones Luis Corrales vila
Prctica Obligatoria Mara Herrero Torres
Domin en CLIPS

(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<-(turno (turno_de ?jugador))
(pieza (jugador ?jugador) (number1 -1) (number2 -1))
(contador (pieM ?pieM) (pieJ ?pieJ) (pieL ?pieL) (pieJu ?pieJu))
=>
(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)

26
Inteligencia en Redes de Comunicaciones Luis Corrales vila
Prctica Obligatoria Mara Herrero Torres
Domin en CLIPS

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))

27
Inteligencia en Redes de Comunicaciones Luis Corrales vila
Prctica Obligatoria Mara Herrero Torres
Domin en CLIPS

(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))

28

Anda mungkin juga menyukai