Różnice

Różnice między wybraną wersją a wersją aktualną.

Odnośnik do tego porównania

Both sides previous revision Poprzednia wersja
Nowa wersja
Poprzednia wersja
pl:dydaktyka:piw:2010:systemy_ekspertowe:hekate_iii [2011/04/05 14:04]
kkr
pl:dydaktyka:piw:2010:systemy_ekspertowe:hekate_iii [2019/06/27 15:50] (aktualna)
Linia 49: Linia 49:
 {{:​pl:​dydaktyka:​piw:​2010:​systemy_ekspertowe:​thermostat-xtt.png|}} {{:​pl:​dydaktyka:​piw:​2010:​systemy_ekspertowe:​thermostat-xtt.png|}}
  
-====== Callbacks ​HMR ====== +====== Callbacks ​in HMR ====== 
-Callbacki to funkcje wywoływane podczas przetwarzania tabel XTT w celu pobrania danych spoza systemu lub do zaprezentowania tych danychPrzykładową funkcję callbacków przedstawia rysunek poniżejW systemie symulującym zachowanie bankomatu callbacki będą wykorzystywane do wyświetlenia okna pobierającego ​PIN i do wyświetlania komunikatów dla użytkownika+Callbacks are the functions that are executed during the XTT tables evaluation in order to get a value or to present a value. 
 +The example of the callbacks execution results are showed ​ in the picture below. 
 +In the cashpoint system, the callbacks are used for calling a enter PIN dialog as well as for displaying messages to the user.
  
 {{:​pl:​dydaktyka:​piw:​2010:​systemy_ekspertowe:​callbacks.png|}} {{:​pl:​dydaktyka:​piw:​2010:​systemy_ekspertowe:​callbacks.png|}}
  
 +There are two types of callbacks:
 +  * //in// - are executed before (or during) inference process in order to get attributes value.
 +  * //out// - are executed for values of attributes presentation,​ when the inference process is finished. ​
 +The type of a callback is determined by value of the attribute //comm// property.
  
-Wyróżnia się dwa typy callbacków:​ +HMR syntax provides a **callback** ​property of the XTT attribute that indicates which callback ​function should be called. 
-  ​//in// - wywołują się one przed rozpoczęciem (lub w trakcie działania) wnioskowania w celu pobrania wartości atrybutów wymaganych do przeprowadzenia inferencji. +The property has a list structurewhere the first element ​is the name of the callback function and the second is a list of parameters.
-  ​//out// - wywołują się już po zakończeniu wnioskowania w celu prezentacji wartości atrybutów. +
- +
-Typ callbacku zależy od wartości elementu //comm// w definicji atrybutu w języku HMR. +
- +
-Elementem określającym jaki callback ​ma być wywołany dla danego atrybutu, jest pole **callback**Jets ono postaci listyktórej pierwszy ​element ​jest nazwą callbaku do wywołania ​drugi jest listą parametrów jakie chcemy przekazać callbackowi:​+
 <​code>​ <​code>​
 xattr [name: day, xattr [name: day,
Linia 71: Linia 72:
       ].       ].
 </​code>​ </​code>​
-Powyższy kod oznacza, że dla atrybutu w którym się on pojawi będzie wywołany callback typu //in// o nazwie ​//ask_symbolic_GUI//, pobierający jako parametr jedną wartość //day//.+The above example defines an attribute ​//day//
 +The value of the property ​//comm// of this attribute is **in** what defines the type of the callback to be **in**. 
 +For this attribute the **ask_console** callback function will be calledwhich will get the value of the attribute **day**.
  
-==== Atrybuty a callbacki ​==== +==== Callbacks and attributes ​==== 
-Callbacki związane są z atrybutami w języku ​HMR - każdy atrybut ma dwa pola niezbędne do ustalenia jeśli chcemy korzystać z callbacków+In HMR, callbacks are related to attributes. For each attribute two properties must be defined in order to use callbacks
-  * //comm// - określające kiedy callback ​zostanie wywołany ​(//​in// ​albo //out//) +  * //comm// - defines when the callback ​is executed ​(possible values: ​//​in// ​or //out//) 
-  * //​callback//​ - nazwa i lista parametrów do wywołania  +  * //​callback//​ - the name and the list of parameters of the required callback
- +
-Za definicję callbacku odpowiedni jest predykat //xcall// umieszczany w pliku HMR. Na poniższym przykładzie pokazano wykorzystanie mechanizmu JPL do utworzenia callbacku napisanego w Javie.+
  
 +HMR provides //xcall// predicate that allows for callback definition.
 +The following example shows the JPL mechnism, which is used to create a callback written in Java.
 <​code>​ <​code>​
 xcall ask_symbolic_GUI : [AttName] >>>​ (jpl_new('​skeleton.RequestInterface',​[],​T),​ xcall ask_symbolic_GUI : [AttName] >>>​ (jpl_new('​skeleton.RequestInterface',​[],​T),​
Linia 90: Linia 93:
 </​code>​ </​code>​
  
-==== Języki programowania ​==== +==== Programming languages ​==== 
-Callbacki dla interpretera ​HeaRT mogą być zaimplementowane w jednym z następujących języków:+HeaRT supports the callbacks written in:
   * Prolog   * Prolog
   * XPCE   * XPCE
   * Java   * Java
 === Prolog === === Prolog ===
-Są to zwykłe predykaty w języku ​Prolog:+Prolog-based callbacks are an ordinary Prolog predicates.
 <​code>​ <​code>​
 xcall ask_console : [AttName] >>>​ (write('​Type value for attribute: ​ '), xcall ask_console : [AttName] >>>​ (write('​Type value for attribute: ​ '),
Linia 104: Linia 107:
 </​code>​ </​code>​
  
-**Ćwiczenie** +**Exercise** \\ 
-Aby uruchomić wnioskowanie bezpośrednio z interpretera ​HeaRT, należy pobrać kod interpretera: {{:​hekate:​heart-m3.tar.gz}} ​i uruchomić go poleceniem ​//heart//. W celu skompilowania modelu ​XTT zapisanego w pliku HMR należy po uruchomieniu HeaRT wpisać w konsoli Prologa ​//[nazwa-pliku-hmr]// ​- zwyczajnie skompilować ten plik tak jak każdy inny kod Prologu. Następnie w celu uruchomienia wnioskowania należy wpisać polecenie ​<​code>​gox(current, ​ListaTabelDoPrzetworzenia, ddi)</​code>​. +In order to run inference process directly from HeaRT interpreter you must: 
-Uruchom wnioskowanie dla poniższego modelu: {{:​pl:​dydaktyka:​piw:​2010:​systemy_ekspertowe:​thermostat-clb-pl.pl|}}+  * download the source code of HeaRT {{:​hekate:​heart-m3.tar.gz}}
 +  * run it by typing ​//heart//
 +  * in order to complie ​XTT model in the form of HMR type in console: ​//[name-of-hmr-file]//
 +  * run the //gox// command:<​code>​gox(current, ​ListOfProcessedTables, ddi)</​code>​ 
 +Run the inference for the following model: {{:​pl:​dydaktyka:​piw:​2010:​systemy_ekspertowe:​thermostat-clb-pl.pl|}}
  
 === XPCE === === XPCE ===
-Są to predykaty w języku ​Prolog ​wzbogacone o funkcje ​XPCE. Aby zapewnić jednak oprawne działanie interpretera HeaRT nalezy korzystać z tego szkieletu: +The XPCE-based callbacks consist of the ordinary ​Prolog ​predicates that are enriched by XPCE functions
 +In order to assure the correct integration with HaeRT, the following schema must be used:
 <​code>​ <​code>​
 xcall xpce_ask_numeric:​ [AttName] >>>​ ( xcall xpce_ask_numeric:​ [AttName] >>>​ (
  dynamic(end),​  dynamic(end),​
- Ciało callbacku przygotowujace okienko do wyświetlenia i wyświetlające je+        ​The body of the callback, which prepares a dialog to appear.
  repeat,  repeat,
-     %Oczekiwanie na wciśnięcie przez użytkownika przycisku ​OK+     % Waiting for OK button
  send(@display,​dispatch),​  send(@display,​dispatch),​
  end,!,  end,!,
Linia 122: Linia 129:
 </​code>​ </​code>​
  
-Przykład callbacku wczytującego liczbę z określonego zakresu pokazany jest poniżej: 
  
 +The example of the callback that reads a value from the range [Min; Max] is presented below:
 <​code>​ <​code>​
 xcall xpce_ask_numeric:​ [AttName] >>>​ (alsv_domain(AttName,​[Min to Max],​numeric),​ xcall xpce_ask_numeric:​ [AttName] >>>​ (alsv_domain(AttName,​[Min to Max],​numeric),​
Linia 138: Linia 145:
 </​code>​ </​code>​
  
-**Ćwiczenie** +**Exercise** \\ 
-Uruchom wnioskowanie dla przykładu z bankomatem i prześledź działanie callbacków:+Run the inference mechanism for the ATM example and trace the callback mechanism:
   * {{:​pl:​dydaktyka:​piw:​2010:​systemy_ekspertowe:​cashpoint-clb-xpce.pl|}}   * {{:​pl:​dydaktyka:​piw:​2010:​systemy_ekspertowe:​cashpoint-clb-xpce.pl|}}
  
 === Java === === Java ===
-Są to programy napisane w języku ​Java uruchamiane przez prolog ​przy użyciu ​JPL. Aby wykorzystać ten mechanizm należy korzystać ze specjalnie przygotowanych do tego klasy+The Java-based callbacks are the Java programs that are executed by prolog ​with the help of JPL. 
-  * DataFetcher.java - klasa abstrakcyjna którą muszą rozszerzać wszystkie callbacki +To exploit this mechanism, the following classes mysu be used
-  * RequestInterface.java - Kontroler +  * DataFetcher.java - an abstract class that must be inherited by all the callbacks 
-  * Response.java - klasa przechowująca dane odebrane od użytkownika.+  * RequestInterface.java - controller 
 +  * Response.java - class that stores a data retrieved from a user.
   ​   ​
-W celu ulatwienia implementacji niektórych callbackówprzygotowano zbiór podstawowych komponentów do pobierania danych od użytkownika:​ +The set of basic componentswhich can be used to the retrieval data from a user, is prepared to facilitate the callbacks implementation. 
-  * ComboBoxFetcher.java - przyjmuje ​listę wartości z jakich można wybieraćZwraca jedną wybraną wartość +  ​* **ComboBoxFetcher.java** creates a list of selectable values. It returns one (selected) value
-  * SliderFetcher.java - przyjmuje przedział wartości numerycznych między którymi można wybieraćZwraca jedna wybraną wartość+  ​* **SliderFetcher.java** allowf for selecting a value from a given range of valuesIt returns one (selected) value
-  * TwoListsFetcher.java - przyjmuje ​listę wartości ​ jakich można wybierać i zwraca również ​listę wybranych wartości+  ​* **TwoListsFetcher.java** creates a list of selectable values. It returns ​list of all selected values
-  * ComboGUI.java - GUI dla ComboBoxFetcher +  ​* **ComboGUI.java** - GUI for ComboBoxFetcher 
-  * SliderGUI.java - GUI dla SliderFetcher +  ​* **SliderGUI.java** - GUI for SliderFetcher 
-  * TwoListsGUI.java - GUI dla TwoListsFetcher +  ​* **TwoListsGUI.java** - GUI for TwoListsFetcher 
- +Download a source code {{:​hekate:​callbackslibrary.zip|here}}. 
-Kod źródłowy klas do pobrania ​{{:​hekate:​callbackslibrary.zip|tutaj}}. +
  
-==Przykład== +== Example ​== 
-Aby wykorzystać któryś z komponentów Java do napisania callbackunależy wykonać następujące kroki+In order to use some of the above components to create callbackyou must go through the following steps
-  - Skompilować kod źródłowy ​<​code>​javac callbacks/​input/​*.java skeleton/​*.java</​code> ​i umieścić go w katalogu z plikiem ​HMR +  - Compile the source code <​code>​javac callbacks/​input/​*.java skeleton/​*.java</​code> ​and move it to the HMR file directory. 
-  - Odpowiednio zmodyfikować plik HMR dopisując atrybutom pole //​callback// ​i uzupełniając go nazwą i listą parametrów jakie callback ​przyjmuje, np. <​code>​callback:​ [ask_symbolic_GUI,​[day]]</​code>​ +  - Modify the HMR file by adding the //​callback// ​filed to the appropriate attributes. 
-  - Dopisać predykaty ​//​xcall// ​do pliku HMR, definiujące wywołanie callbacka, np.:<​code>​+  - Define the value of this filed by entering the name of the callback ​as well as a list of parameters i.e. <​code>​callback:​ [ask_symbolic_GUI,​[day]]</​code>​ 
 +  - Add the //​xcall// ​predicates to the HMR filewhich execute a given callback:<​code>​
   xcall ask_symbolic_GUI : [AttName] >>>​ (   xcall ask_symbolic_GUI : [AttName] >>>​ (
-     %Tworzymy obiekt kontrolera:+     ​% ​Creating controller
  jpl_new('​skeleton.RequestInterface',​[],​T),​  jpl_new('​skeleton.RequestInterface',​[],​T),​
- %Przygotowujemy ​listę parametrów+Creating a list of params
  alsv_domain(AttName,​Domain,​symbolic),​  alsv_domain(AttName,​Domain,​symbolic),​
  Params = [AttName|Domain],​  Params = [AttName|Domain],​
  term_to_atom(Params,​ AtomParams),​  term_to_atom(Params,​ AtomParams),​
-  %Wywołujemy ​callback ​i podajemu my listę parametrów znajdującą sie +         Execute the callback ​with the params contained by AtomPArams ​term
- %w termie ​AtomPArams. ​Wartosc zwrócona przez callback znajdzie się +         ​The result will be stored in Answer ​term.
-  %w termie ​Answer.+
  jpl_call(T,​request,​['​callbacks.input.ComboBoxFetcher',​AtomParams],​Answer),​  jpl_call(T,​request,​['​callbacks.input.ComboBoxFetcher',​AtomParams],​Answer),​
-  %Zamieniamy zwróconą wartość na term i dodajemy go do bazy faktów+         Map the returned value into term and add it the the factbase
  atom_to_term(Answer,​Answer2,​_),​  atom_to_term(Answer,​Answer2,​_),​
  alsv_new_val(AttName,​Answer2)).  alsv_new_val(AttName,​Answer2)).
   </​code>​   </​code>​
-  - Uruchomić ​HeaRT w katalogu z plikiem ​HMR, skompilować ten plik i uruchomić wnioskowanieCallbacki powinny zostać uruchomione.+  - Go to HMR file directory. 
 +  - Run HeaRT tool. 
 +  - Compile ​HMR file. 
 +  - Run the inference mechanism. 
 +  - The callback should be executed.
  
-**Ćwiczenie**  +**Exercise 1** \\ 
-Pobierz poniższy kod {{:​pl:​dydaktyka:​piw:​2010:​systemy_ekspertowe:​kardio.zip|}}. I dla pliku HMR znajdującego się w archiwum uruchom wnioskowanie.+Download the file {{:​pl:​dydaktyka:​piw:​2010:​systemy_ekspertowe:​kardio.zip|}} ​and run the inference for the HMR file.
  
-=== Ćwiczenie === +**Exercise 2** \\ 
-  - Uruchom interpreter ​HeaRT, wczytaj ​{{:​pl:​dydaktyka:​piw:​2010:​systemy_ekspertowe:​cashpoint-clb-xpce.pl|plik}} HMR i uruchom wnioskowanie predykatem ​(//​gox/​3//​). ​Dopisz callback wyświetlający wynik wnioskowania w XPCE. +  - Run HeaRT and load HMR {{:​pl:​dydaktyka:​piw:​2010:​systemy_ekspertowe:​cashpoint-clb-xpce.pl|file}}.  
-  - Pobierz ten {{:​pl:​dydaktyka:​piw:​2010:​systemy_ekspertowe:​thermostat-clb-pl.pl|plik}} HMR i dopisz ​(zmodyfikuj istniejące wersje prologowedo niego callbacki w Javie bazując na przykładzie z poprzedniej sekcji.+  - Then run the infenrence mechnism using predicate ​(//​gox/​3//​). 
 +  - Add a new XPCE-based callback, which would present the results of the inference
 +  - Download HMR {{:​pl:​dydaktyka:​piw:​2010:​systemy_ekspertowe:​thermostat-clb-pl.pl|file}}
 +  - Add (modify an existing Prolog-baseda new JAVA-based callbacks in the same way as in the previous section.
  
  
pl/dydaktyka/piw/2010/systemy_ekspertowe/hekate_iii.1302005073.txt.gz · ostatnio zmienione: 2019/06/27 15:54 (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