Both sides previous revision
Poprzednia wersja
Nowa wersja
|
Poprzednia wersja
|
pl:miw:miw08_xtt_serialization [2008/05/23 21:47] miw |
pl:miw:miw08_xtt_serialization [2008/06/14 10:42] gjn |
====== Opis ====== | |
Karol, Gorlach, <Karol.gorlach@gmail.com> | |
| |
Try to propose an effective encoding of XTT with UML and Java. | |
| |
====== Spotkania ====== | |
| |
===== 08.02.26 ===== | |
| |
===== 080318 ===== | |
| |
===== 080408 ===== | |
* xtt w java... | |
| |
| |
===== 080422 ===== | |
* opis alg dla javy i sql | |
| |
| |
===== 080527 ===== | |
* sprawozdanie | |
| |
====== Projekt ====== | |
**realizacja tablic XTT w javie** | |
| |
Model tabic XTT zrealizowalem w jave za pomocą klas Reguł, w której sładowymi są: | |
| |
-atrybuty XTT tablicy-precondition atributes | |
| |
-assert atributes | |
| |
-decision atributes | |
| |
* napisany przez mnie kod dla przykładu termostatu: | |
| |
| |
* kod jest dostępny {{:pl:miw:miw08_xtt_serialization:xtt5.java.txt|kopia}} | |
| |
**alternatywne rozwiązanie:** | |
| |
realizacja XTT za pomocą SQL. | |
| |
>Ze wzgledu na to że reprezentacja danych jest w tablicach, oraz wystepuja powiązania w łatwy sposób mozna zbudowac tablicę i powiązania miedzy nimi. Ponizej ilustruje szablon reliacji tablic w sql zrealizowany w DBdesigner dla przykładu który można znaleźć na stronie wiki: | |
| |
[[https://ai.ia.agh.edu.pl/wiki/_detail/hekate:xtt-structure-therm.png?id=hekate%3Ahekate_concepts&cache=cache|tabela xtt]] | |
| |
oto schemat: | |
| |
{{:pl:miw:miw08_xtt_serialization:termostat.png|termostat}} | |
| |
| |
| |
| |
| |
====== Sprawozdanie ====== | |
| |
| |
| |
| |
| |
| |
| |
| |
==== data 080408 ==== | |
| |
Ogólna Forma reprezentacji reguł w XTT: | |
| |
{{:pl:miw:miw08_xtt_serialization:xtt1.jpg|:pl:miw:miw08_xtt_serialization:xtt1.jpg}} | |
| |
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: | |
| |
<code java> | |
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; | |
} | |
} | |
</code> | |
| |
Dla przykładu termostatu tablica XTT wygląda tak: | |
| |
{{:pl:miw:miw08_xtt_serialization:xtt2.jpg|:pl:miw:miw08_xtt_serialization:xtt2.jpg}} | |
| |
napisany przezemnie kod w javie dla tablicy XTT za pomocą reguł- przykład termostatu | |
| |
<code> | |
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")); | |
} | |
</code> | |
| |
| |
| |
| |
==== data 080422 ==== | |
| |
Reprezentacja tablic xtt w języku SQL | |
| |
Należy na wstępie zbudować tablice reprezentujące wzajemne powiązania pomiędzy regułami w xtt: | |
| |
Zapis ten można interpretować w ten sposób że: | |
-Tablice SQL reprezentują reguły w xtt | |
-indeks tablicy (klucz) – są to warunki określające w tablicy xtt | |
-klucze obce są to –warunki wstępne w tablicy xtt | |
| |
Dopiero po zbudowaniu wzajemnych zależności pomiędzy tablicami: wprowadzamy dane do tablic (reprezentacje reguł w xtt) | |
| |
| |
Sposób tworzenia tablic xtt w Javie: | |
| |
Klasy reprezentują reguły, Każda reguła składa się z | |
| |
Atrybutów: | |
| |
- warunki wstępne np.: pojedyncze elementy lub zbiory elementów | |
-warunków modyfikujących np.: za pomocą których możemy zmieniać warunki określające reguł | |
-warunki określające | |
-warunki decyzyjne | |
| |
Poszczególne reguły są umieszczone w tablicy, a więc każda regułę identyfikuje jednoznacznie położenie w tablicy. | |
Istnieje możliwość odwoływania się z jednej reguły do drugiej, w ten sposób że każda reguła posiada pole określające inną regułę reprezentującą ten sam typ atrybutów , i warunków określających (np. poszukiwana reguła nie posiada szukanych przez nas atrybutów) | |
Każda reguła zawiera również informacje o regule wyższego poziomu, lub niższego (pole klasy). Co wiąże się z poszukiwaniem warunków decyzyjnych. | |
Do odwoływania się pomiędzy regułami służą metody (wykorzystujące informacje znajdującą się w polach obiektów-reguł ) | |
| |
| |
| |
| |
| |
==== Inne przykłady zastosowania XTT ==== | |
| |
| |
====== Materiały ====== | |
[[hekate:hekate_concepts#xtt+]] | |
| |
====== Literatura ====== | |
| |
* Antoni Ligęza,"Logical Foundations for Rule-Based System",Uczelniane Wydawnictwa Naukowo-dydaktyczne AGH Kraków 2005. | |
| |