Ogólna Forma reprezentacji reguł w XTT:
Kolumny są określone następująco:
I-identyfikator reguły(numer elementu w tablicy)
Ctx-(ang. Contex) opis reguły
A1 ..An - warunki wstępne
B1 ..Bn - warunki modyfikujące
C1 ..Cn - warunek określany
H1 ..Hn – warunki decyzyjne
N- atrybut kontrolny określający nastepującą regułę
E- atrybut kontrolny określający opcjonalną, inną regułę
Aby określić rolę musimy podąć następujące parametry wejściowe:
Roles={Info,Preconditions,Assert,Retract,Decision,Ctrl}
Przypadek ogólny reguły-klasy w javie:
import java.io.*;
import java.lang.*;
import java.util.*;
class Regula{
Object precondition[];
Object precondition1[];
Object decision;
Object asert;
int CtrlN;
int CtrlL;
//konstruktory
public Regula(int CtrlN,int CtrlL,Object precondition,Object precondition1,Object asert,Object decision)
{
if(precondition==null)
{
this.precondition=null;
}
else
{
this.precondition=new Object[1];
this.precondition[0]=precondition;
}
if(precondition1==null)
{
this.precondition1=null;
}
else
{
this.precondition1=new Object[1];
this.precondition1[0]=precondition1;
}
this.decision=decision;
this.asert=asert;
this.CtrlN=CtrlN;
this.CtrlL=CtrlL;
}
public Regula(int CtrlN,int CtrlL,Object precondition[],Object precondition1[],Object asert,Object decision)
{
if(precondition==null)
{
this.precondition=null;
}
else
{
this.precondition=new Object[precondition.length];
System.arraycopy(precondition,0,this.precondition,0,precondition.length);
}
if(precondition1==null)
{
this.precondition1=null;
}
else
{
this.precondition1=new Object[precondition1.length];
System.arraycopy(precondition1,0,this.precondition1,0,precondition1.length);
}
this.decision=decision;
this.asert=asert;
this.CtrlN=CtrlN;
this.CtrlL=CtrlL;
}
public Regula(int CtrlN,int CtrlL,Object precondition[],Object precondition1,Object asert,Object decision)
{
if(precondition==null)
{
this.precondition=null;
}
else
{
this.precondition=new Object[precondition.length];
System.arraycopy(precondition,0,this.precondition,0,precondition.length);
}
this.precondition1=new Object[1];
this.precondition1[0]=precondition1;
this.decision=decision;
this.asert=asert;
this.CtrlN=CtrlN;
this.CtrlL=CtrlL;
}
public Regula(int CtrlN,int CtrlL,Object precondition,Object precondition1[],Object asert,Object decision)
{
if(precondition1==null)
{
this.precondition1=null;
}
else
{
this.precondition1=new Object[precondition1.length];
System.arraycopy(precondition1,0,this.precondition1,0,precondition1.length);
}
if(precondition==null)
{
this.precondition=null;
}
else
{
this.precondition=new Object[1];
this.precondition=precondition1;
}
this.decision=decision;
this.asert=asert;
this.CtrlN=CtrlN;
this.CtrlL=CtrlL;
}
// metody
public Object Sprawdz(Object object){
for(int i=0;i<this.precondition.length;i++){
if(object==this.precondition[i]){
return this.asert;
}
}
return null;
}
public Object Sprawdz(Object object,Object object1){
for(int i=0;i<this.precondition.length;i++){
if(object==this.precondition[i]){
for(int j=0;i<this.precondition1.length;j++){
if(object1==this.precondition1[j]){
return this.asert;
}
}
}
}
return null;
}
public String toString(){
return "numer :"+this.CtrlN;
}
}
Dla przykładu termostatu tablica XTT wygląda tak:
napisany przezemnie kod w javie dla tablicy XTT za pomocą reguł- przykład termostatu
public class Termostat{
public static void main(String args[]){
// incjalizacja listy
List<Regula> list= new ArrayList<Regula>();
// deklaracja atrybutow
String dniprac[]={"monday","tuesday","wednesday","thurstday","friday"};
String dniwolne[]={"saturday","sunday"};
String winter[]={"december","january","february"};
String spring[]={"march","april","may"};
String summer[]={"june","july","august"};
String fall[]={"september","october","november"};
Integer before17[]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16};
Integer ANY[]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24};
Integer after9[]={10,11,12,13,14,15,16,17,18,19,20,21,22,23,24};
Integer in9and17[]={9,17};
// deklaracja regul
list.add(new Regula(2,1,dniprac,null,"workday",null)); //regula1
list.add(new Regula(2,0,dniwolne,null,"weekend",null)); //regula2
list.add(new Regula(6,3,"workday",before17,"dbh",null));//regula3
list.add(new Regula(6,4,"workday",ANY,"ndbh",null)); //regula4
list.add(new Regula(6,5,"workday",after9,"ndbh",null)); //regula5
list.add(new Regula(6,2,"weekend",in9and17,"ndbh",null));//regula6
list.add(new Regula(12,7,winter,null,"winter",null)); //regula7
list.add(new Regula(14,8,spring,null,"spring",null)); //regula8
list.add(new Regula(16,9,summer,null,"summer",null)); //regula9
list.add(new Regula(10,6,fall,null,"fall",null)); //regula10
list.add(new Regula(0,11,"ndbh","summer",null,27)); //regula11
list.add(new Regula(0,12,"dbh","summer",null,24)); //regula12
list.add(new Regula(0,13,"ndbh","spring",null,15)); //regula13
list.add(new Regula(0,14,"dbh","spring",null,20)); //regula14
list.add(new Regula(0,15,"ndbh","winter",null,14)); //regula15
list.add(new Regula(0,16,"dbh","winter",null,18)); //regula16
list.add(new Regula(0,17,"ndbh","fall",null,16)); //regula17
list.add(new Regula(0,0,"dbh","fall",null,20)); //regula18
// przykladowe uzycie metody
System.out.println(list.get(0).Sprawdz("tuesday"));
System.out.println(list.get(17).Sprawdz("dbh","fall"));
}