JESS (Java Expert System Shell)

    Nosaltres utilitzarem el JESS versió 5.0b1 i tota la informació que necessitarem es pot trobar aquí.


    COM INSTAL.LAR EL JESS:
     

    • Captura el fitxer jess50b1.zip o el  jess60a2.zip.


    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
     

    • Introducció a l'assignatura.
    • El manual de Jess.
    • Un petit exemple de Jess.
    • 3ª pràctica: planificació. Actualitzat a 15/11/99
    • Pràctica final: JavaSoccer.
    • Petit exemple de Fuzzy sobre Sistemes Experts.
    • Petit exemple de Motor Enrera.
    • Exemple de jugador amb sistema de decisió SE+Fuzzy. 

    •  

    COM UTILITZAR JESS DINS EL CODI JAVA

    Totes les classes i metodes es troben al paquet jess, per tant afegirem al fitxer java la següent línia:
     
          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++}
         {
                try
                {
                       jess_engine.addUserpackage((Userpackage) class.forName(packages[i].newInstance());
                }
                catch (Throwable t){ }
         }

    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:
     

    • public Value store(String name, Value val);

    • on name és el nom de la variable dins de JESS i val és el valor que li assignem. La funció retorna el valor antic de la variable que assignem (null si no tenia valor).
       
    • public Value store(String name, Object val);

    • on name és el nom de la variable dins de JESS i val és l'objecte que li assignem. La funció retorna el valor antic de la variable que assignem (null si no tenia valor).
       
    • public Value fetch(String name);

    • on name és el nom de la variable dins de JESS. La funció retorna el valor de la variable (null si no té valor).


    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:
     

    • (store <name> <value>)
    • (fetch <name>)


    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
     

    • Jugador del camp Est: captura el fitxer jugador_e.java.
    • Jugador del camp West: captura el fitxer jugador_w.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.