Nosaltres utilitzarem el JESS versió 5.0b1 i tota la informació que necessitarem es pot trobar aquí.
COM INSTAL.LAR EL JESS:
Descomprimeixes el fitxer jess50b1.zip dins d'un directori qualsevol
(ex: C:\JESS). Aporta totes les classes i fitxers necessaris per utilitzar-lo.
Tot seguit afegeix al fitxer Autoexec.bat les següents línies:
CLASSPATH = %CLASSPATH%; C:\JESS
DOCUMENTACIÓ
Assignatura: Intel·ligència Artificial
Curs: 4rt Enginyeria Informàtica
COM UTILITZAR JESS DINS EL CODI JAVA
import jess.*; |
Els fitxers que contindran les regles de JESS es guardaran amb extensió
.CLP,
i per utilitzar aquest fitxer des del codi JAVA escriurem les següents
instruccions:
try
{ jess_engine=new Rete(); jess_engine.executeCommand("(batch fitxer.clp)"); jess_engine.executeCommand("(reset)"); } catch (JessException e) { System.out.println(e); } |
Si volem carregar algunes de les funcions de les classes definides als
paquets jess utilitzarem la instrucció addUserpackage. Aquest
mètode evita que es produeixin errors quan es crida un paquet i
aquest no existeix. Dins del codi seguirem la següent estructura:
String [] packages =
{"jess.StringFunctions",
"jess.PredFunctions", "jess.MultiFunctions", "jess.MiscFunctions", "jess.MathFunctions", "jess.BagFunctions", "jess.reflect.ReflectFunctions", "jess.view.ViewFunctions" }; for (int i=0; i<packages.length;
i++}
|
Per tal de que hi hagi interacció entre el JAVA i el JESS realitzarem
un pas de paràmetres mitjançant les instruccions store
(per
assignar un valor a una variable de JESS) i fetch (per recuperar
un valor d'una variable de JESS). Les funcions disponibles des de JAVA
es troben a la classe jess.Rete i són els següents:
per exemple:
jess_engine.store("x_pilota",new
Value(ball.x, RU.FLOAT));
Value x = jess_engine.fetch("coordx"); |
Els mètodes disponibles en JESS que corresponen als anteriors
són els següents:
Llavors, per executar les regles buidarem la base de fets mitjançant
la comanda (reset), insertarem el fet inicial amb la comanda (assert
fet)
i, finalment, engegarem el motor amb la comanda
(run).
jess_engine.executeCommand("(reset)");
jess_engine.executeCommand("(assert (fet_inicial))"); jess_engine.executeCommand("(run)"); |
Les classes jess.Value i jess.ValueVector. Un Value es un objecte. Cada
dada de jess esta continguda en un Value. Una vegada cridat al constructor
de la dada, el seu tipus i continguts on poden ser modificats. Un Value
suporta una funcion Type() que retorna una d'aquestes constants definides
a la class jess.RU
final public
static int NONE = 0; ; an empty value (not NIL)
final public static int ATOM = 1; ; a symbol final public static int STRING = 2; ; a string final public static int INTEGER = 4; ; an integer final public static int VARIABLE = 8; ; a variable final public static int FACT_ID = 16; ; a fact index final public static int FLOAT = 32; ; a double float final public static int FUNCALL = 64; ; a function call final public static int ORDERED_FACT = 128; ; an ordered fact final public static int UNORDERED_FACT = 256; ; a deftemplate fact final public static int LIST = 512; ; a multifield final public static int DESCRIPTOR = 1024; ; (internal use) final public static int EXTERNAL_ADDRESS = 2048; ; a Java object final public static int INTARRAY = 4096; ; (internal use) final public static int MULTIVARIABLE = 8192; ; a multivariable final public static int SLOT = 16384; ; (internal use) final public static int MULTISLOT = 32768; ; (internal use) |
Els objecte Value es construeixen especifican la variable i el tipus.
Els constructors son:
public Value(Object
o, int type) throws ReteException
public Value(String s, int type) throws ReteException public Value(Value v) public Value(ValueVector f, int type) throws ReteException public Value(double d, int type) throws ReteException public Value(int value, int type) throws ReteException public Value(int[] a, int type) throws ReteException |
Existeixen un conjunt de funcions per obtenir informacio del Value
public Object
externalAddressValue() throws ReteException
public String stringValue() throws ReteException public ValueVector factValue() throws ReteException public ValueVector funcallValue() throws ReteException public ValueVector listValue() throws ReteException public double floatValue() throws ReteException public double numericValue() throws ReteException public int descriptorValue() throws ReteException public int factIDValue() throws ReteException public int intValue() throws ReteException public int[] intArrayValue() throws ReteException |
EXEMPLE D'UTILITZACIÓ DE JESS DINS DE JAVA
Aquest exemple es pot agafar com a plantilla per a la implementació
dels jugadors.
exercici: Crea el teu propi fitxer CLP que controli un equip de tres jugadors.