Opis

Projekt zakończony

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

Poszczegule reguły czyli opiekty klasy Regula sa umieszczone w liście typu Regula

Przykłady implementacji:

Sprawozdanie

Sposób reprezentacji

Ogólna Forma reprezentacji reguł w XTT:

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

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[0]=precondition;
	}
	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]){
 
			if(this.asert!=null)
			{
			return this.asert;
			}
			else
			{
			return this.decision;
			}
		}	
 
		}
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]){
					if(this.asert!=null)
					{
					return this.asert;
					}
					else
					{
					return this.decision;
					}
				}
			}
		}
	}
return null;
}
public String toString(){
return "numer :"+this.CtrlN;
}
}

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

Przykład Termostatu

Termostat jest wzorcowym przykładem do prezentacji działania systemów regulowych, mozna go znaleźć na wiki:xtt+

Diagram ARD+ termostatu: :pl:miw:miw08_xtt_serialization:xtt-structure-therm.png

Dla przykładu termostatu tablica XTT wygląda tak:

:pl:miw:miw08_xtt_serialization:tabela_termostat.png

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"));
}

Inne przykłady zastosowania XTT

Cennik biletów na wyciąg narciarski

Buduję tablicę XTT dla problemu dotyczacego spisu cen biletów do wyciagu narciarskiego w różnych porach dnia, róznych dniach i porach roku.

Oto diagram ARD+ który prezentuje wzajemne powiazania miedzy elementami dla szukanego problemu:

:pl:miw:miw08_xtt_serialization:diagram1.png

Na tej podtawie łatwo zbudowac tablicę XTT, oraz reguły:

:pl:miw:miw08_xtt_serialization:xtt_wyciag_narciarski.png

Utworzenie takiej tablicy w java prezentuje ponizszy kod:

public class WyciagNarciarski{
 
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 out[]={"june","july","august","september"};
String in_the_middle[]={"december","january","february"};
String before[]={"october","november"};
String after[]={"march","april","may"};
Integer before12[]={8,9,10,11,12};
Integer between_12_16[]={12,13,14,15};
Integer after16[]={16,17,18,19,20};
Integer ANY[]={8,9,10,11,12,13,14,15,16,17,18,19,20};
Integer All[]={8,9,10,11,12,13,14,15,16,17,18,19,20};
String grup_All_season[]={"out","before","in_the_middle","after"};
String para_near_season[]={"before","after"};
String morning[]={"morning_weekend","morning_workd"};
String midday[]={"midday_weekend","midday_workd"};
String evening[]={"evening_workd","evening_weekend"};
String allday[]={"All_weekend","All_workd"};
// deklaracja regul
list.add(new Regula(2,1,dniprac,null,"workday",null));			//regula1
list.add(new Regula(7,0,dniwolne,null,"weekend",null));		        //regula2
list.add(new Regula(12,3,"workday" ,before12,"morning_workd",null));    //regula3
list.add(new Regula(12,4,"workday",between_12_16,"midday_workd",null)); //regula4
list.add(new Regula(12,5,"workday",after16,"evening_workd",null));	//regula5
list.add(new Regula(12,6,"workday",All,"All_workd",null));		//regula6
list.add(new Regula(12,7,"workday",ANY,"single",null));		        //regula7
list.add(new Regula(12,8,"weekend",before12,"morning_weekend",null));   //regula8
list.add(new Regula(12,9,"weekend",between_12_16,"midday_weekend",null));//regula9
list.add(new Regula(12,10,"weekend",after16,"evening_weekend",null));   //regula10
list.add(new Regula(12,11,"weekend",All,"All_weekend",null));		//regula11
list.add(new Regula(12,2,"weekend",ANY,"single",null));		        //regula12
list.add(new Regula(16,13,out,null,"out",null));			//regula13
list.add(new Regula(16,14,before,null,"before",null));			//regula14
list.add(new Regula(16,15,in_the_middle,null,"in the middle",null));	//regula15
list.add(new Regula(16,12,after,null,"after",null));			//regula16
list.add(new Regula(0,17,grup_All_season,"single",null,5));		//regula17
list.add(new Regula(0,18,para_near_season,morning,null,20));		//regula18
list.add(new Regula(0,19,para_near_season,midday,null,25));		//regula19
list.add(new Regula(0,20,para_near_season,evening,null,15));		//regula20
list.add(new Regula(0,21,para_near_season,allday,null,35));		//regula21
list.add(new Regula(0,22,"in_the_middle","morning_workd",null,28));	//regula22
list.add(new Regula(0,23,"in_the_middle","midday_workd",null,35));	//regula23
list.add(new Regula(0,24,"in_the_middle","evening_workd",null,28));	//regula24
list.add(new Regula(0,25,"in_the_middle","All_workd",null,60));	        //regula25
list.add(new Regula(0,26,"in_the_middle","morning_weekend",null,35));   //regula26
list.add(new Regula(0,27,"in_the_middle","midday_weekend",null,40));	//regula22
list.add(new Regula(0,28,"in_the_middle","evening_weekend",null,30));   //regula27
list.add(new Regula(0,0,"in_the_middle","All_weekend",null,80));	//regula28
 
// przykladowe uzycie metody
System.out.println(list.get(0).Sprawdz("tuesday")); 
System.out.println(list.get(21).Sprawdz("in_the_middle","morning_workd"));
}
}

Ceny biletów na pociąg

Buduję tablicę XTT dla problemu dotyczacego spisu cen biletów na pociagi na trasie Kraków-Przemyś,biorąc pod uwagę klasę, rodzaj pociagu i ilośc przejechanych kilometrów Oto diagram ARD+ który prezentuje wzajemne powiazania miedzy elementami dla szukanego problemu:

:pl:miw:miw08_xtt_serialization:diagram1d.png

Na tej podtawie łatwo zbudowac tablicę XTT, oraz reguły:

:pl:miw:miw08_xtt_serialization:ceny_biletow_pociagow.png

Utworzenie takiej tablicy w java prezentuje ponizszy kod:

public class RozkladPociagow{
 
public static void main(String args[]){
// incjalizacja listy
List<Regula> list= new ArrayList<Regula>();
// deklaracja regul
list.add(new Regula(2,1,"rzeszowianin",null,"osobowy",null));	//regula1
list.add(new Regula(3,0,"przemyslanin",null,"pospieszny",null));//regula2
list.add(new Regula(5,3,"osobowy",2,"osob2",null));		//regula3
list.add(new Regula(5,4,"pospieszny",1,"posp1",null));		//regula4
list.add(new Regula(5,2,"pospieszny",2,"posp2",null));		//regula5
list.add(new Regula(10,6,"Krakow-Bochnia",null,50,null));	//regula6
list.add(new Regula(13,7,"Krakow-Tarnow",null,100,null));	//regula7
list.add(new Regula(16,8,"Krakow-Debica",null,150,null));	//regula8
list.add(new Regula(19,9,"Krakow-Rzeszow",null,200,null));	//regula9
list.add(new Regula(22,5,"Krakow-Przemysl",null,300,null));	//regula10
list.add(new Regula(0,11,"osob2",50,null,5));			//regula11
list.add(new Regula(0,12,"posp1",50,null,10));			//regula12
list.add(new Regula(0,13,"posp2",50,null,7));			//regula13
list.add(new Regula(0,14,"osob2",100,null,8));			//regula14
list.add(new Regula(0,15,"posp1",100,null,16));			//regula15
list.add(new Regula(0,16,"posp2",100,null,9));			//regula16
list.add(new Regula(0,17,"osob2",150,null,11));			//regula17
list.add(new Regula(0,18,"posp1",150,null,25));			//regula18
list.add(new Regula(0,19,"posp2",150,null,20));			//regula19
list.add(new Regula(0,20,"osob2",200,null,15));			//regula20
list.add(new Regula(0,21,"posp1",200,null,32));			//regula21
list.add(new Regula(0,22,"posp2",200,null,25));			//regula22
list.add(new Regula(0,23,"osob2",300,null,20));			//regula23
list.add(new Regula(0,24,"posp1",300,null,40));			//regula24
list.add(new Regula(0,0,"posp2",300,null,30));			//regula25
// przykladowe uzycie metody
System.out.println(list.get(0).Sprawdz("rzeszowianin"));
System.out.println(list.get(10).Sprawdz("osob2",50)); 
}
}

Inne Podejście

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)

Reprezentacja Reguł w języku SQL

Należy na wstępie zbudować tablice reprezentujące wzajemne powiązania pomiędzy regułami :

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)

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.Wzorując się na budowie schematów ARD+ zbudowałem powiazania miedzy tablicami.

Tablice SQL dla pozostałych przykładów(Cennik biletów pociagow oraz Cennik biletów na wyciag narciarski)

Ponizej ilustruje szablon reliacji tablic w sql zrealizowany w DBdesigner dla przykładow:

termostat

:pl:miw:miw08_xtt_serialization:wyciag.png

:pl:miw:miw08_xtt_serialization:pociag.png

Materiały

Literatura

  • Antoni Ligęza,„Logical Foundations for Rule-Based System”,Uczelniane Wydawnictwa Naukowo-dydaktyczne AGH Kraków 2005.
pl/miw/miw08_xtt_serialization.txt · ostatnio zmienione: 2017/07/17 08:08 (edycja zewnętrzna)
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0