ZAGADNIENIA: Pakiet SPHINX System PS-Shell System CLIPS System JESS.

Slides:



Advertisements
Podobne prezentacje
Programowanie obiektowe
Advertisements

Zaawansowane metody programowania – Wykład V
REGUŁOWO-MODELOWE SKORUPOWE SYSTEMY EKSPERTOWE Część 1
Wprowadzenie do C++ Zajęcia 2.
PROGRAMOWANIE STRUKTURALNE
przetwarzaniu informacji
Platforma .Net i Vs.Net.
Co UML może zrobić dla Twojego projektu?
Języki sztucznej inteligencji, a relacyjne bazy danych. Zastosowania.
Systemy operacyjne.
Systemy operacyjne Bibliografia:
Wykład 8 Wojciech Pieprzyca
Programowanie wizualne PW – LAB5 Wojciech Pieprzyca.
Wstęp do programowania obiektowego
Project made by Bartosz Rumiński Kl. III i rok 2007/2008.
Java – programowanie obiektowe
Typy systemów informacyjnych
Wykład 2 Cykl życia systemu informacyjnego
Pakiety w Javie Łukasz Smyczyński (132834). Czym są pakiety? Klasy w Javie są grupowane w pewne zbiory zwane pakietami. Pakiety są więc pewnym podzbiorem.
Podstawy programowania II
Podstawy programowania II Wykład 2: Biblioteka stdio.h Zachodniopomorska Szkoła Biznesu.
Rozwój aplikacji przy wykorzystaniu ASP.NET
Programowanie obiektowe – zastosowanie języka Java SE
JAVA c.d.. Instrukcji wyboru SWITCH używamy, jeśli chcemy w zależności od wartości pewnego wyrażenia wykonać jeden z kilku fragmentów kodu. Jest to w.
JAVA.
Programowanie obiektowe Wykład 6 dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/14 Dariusz Wardowski.
XML – eXtensible Markup Language
Narzędzia administracyjne
POŚREDNIK Jak reprezentowana jest informacja w komputerze? liczby – komputer został wymyślony jako zaawansowane urządzenie służące do wykonywania.
Rozwiązanie zadań do zaliczenia I0G1S4 // indeks
Wybrane zagadnienia relacyjnych baz danych
Programowanie obiektowe – język C++
Programowanie obiektowe 2013/2014
dr Łukasz Murowaniecki T-109
1 Każdy obiekt jest scharakteryzowany poprzez: tożsamość – daje się jednoznacznie wyróżnić; stan; zachowanie. W analizie obiektowej podstawową strukturą
Bazy danych, sieci i systemy komputerowe
SPECJALNOŚĆ: Oprogramowanie Systemowe
1. Współczesne generacje technologii
Programowanie w języku C++
Systemy rozproszone  Rozdzielenie obliczeń między wiele fizycznych procesorów.  Systemy luźno powiązane – każdy procesor ma lokalną pamięć; procesory.
Podstawy programowania
UML W V ISUAL S TUDIO Mateusz Lamparski. UML D EFINICJA Unified Modeling Language (UML) to graficzny język do obrazowania, specyfikowania, tworzenia i.
PRZYGOTOWALI Bartosz Pawlik Daniel Sawa Marcin Turbiński.
Programowanie strukturalne i obiektowe C++
Modelowanie Kognitywne
Technologie internetowe Wykład 5 Wprowadzenie do skrytpów serwerowych.
Zbiór danych zapisanych zgodnie z określonymi regułami. W węższym znaczeniu obejmuje dane cyfrowe gromadzone zgodnie z zasadami przyjętymi dla danego.
Podstawy języka skryptów
Informatyka Stosowana – ROK II / III
Projektowanie obiektowe. Przykład: Punktem wyjścia w obiektowym tworzeniu systemu informacyjnego jest zawsze pewien model biznesowy. Przykład: Diagram.
Waldemar Bartyna 1 Programowanie zaawansowane LINQ to XML.
Platforma .Net.
Podstawy programowania
Object-relational mapping (aka O/RM, ORM, and O/R mapping)
Seminarium Dyplomowe: Metodyka i Techniki Programowania Autor: Bartłomiej Fornal.
Dokumentacja programu komputerowego i etapy tworzenia programów.
Temat: Porównanie technologii php,c# oraz javascript na przykładzie webaplikacji typu społecznościowy agregator treści Autor: Wojciech Ślawski.
Architektura Rafał Hryniów. Architektura Wizja projektu systemu, którą dzielą twórcy Struktura komponentów systemu, ich powiązań oraz zasad i reguł określających.
GeneracjeTechnologia Architektura przetwarzania 0. Przekaźniki elektromechaniczne 1. Lampy elektronowe 2. Tranzystory 3. Układy scalone 3.5.Układy dużej.
Testy jednostkowe. „Test jednostkowy (unit test) to fragment kodu, który sprawdza inny fragment kodu”
Programowanie strukturalne i obiektowe Klasa I. Podstawowe pojęcia dotyczące programowania 1. Problem 2. Algorytm 3. Komputer 4. Program komputerowy 5.
Inżynieria systemów informacyjnych
Programowanie Obiektowe – Wykład 6
Programowanie obiektowe – zastosowanie języka Java SE
Aplikacje i usługi internetowe
JavaBeans by Paweł Wąsala
PGO Dziedziczenie Michail Mokkas.
Programowanie w Javie 1 Dr Robert Kowalczyk
Zapis prezentacji:

Języki sztucznej inteligencji a relacyjne bazy danych Opracowali: Marcin Kras Jacek Dołęga

ZAGADNIENIA: Pakiet SPHINX System PS-Shell System CLIPS System JESS

SPHINX SPHINX jest dobrze zintegrowanym pakietem oprogramowania narzędziowego z zakresu sztucznej inteligencji. W jego skład wchodzą następujące komponenty: system PC-Shell – szkieletowy system ekspertowy, system Neuronix – symulator sieci neuronowej, system CAKE – system komputerowego wspomagania inżynierii wiedzy, system HybRex – system do budowy inteligentnych aplikacji SWD i analizy danych, system Predyktor – system prognostyczny, system DeTreex – indukcyjny system pozyskiwania wiedzym, system dialogEditor – system wspomagający tworzenie interfejsu użytkownika, system demoViewer – system do prezentacji aplikacji pakietu SPHINX, aplikacje demonstracyjne, obszerna dokumentacja z dużą liczbą przykładów.

Wykorzystywany jest w dydaktyce i badaniach naukowych na wielu polskich uczelniach. Znajduje również zastosowanie w przedsięwzięciach i instytucjach komercyjnych, zaczynając od techniki, a na finansach i bankowości kończąc. Pakiet posiada własny język reprezentacji wiedzy oraz programowania, co niezwykle zwiększa elastyczność tworzonych w jego środowisku aplikacji. http://www.aitech.com.pl/sphinx.htm

PC-Shell PC-Shell jest pierwszym polskim - w pełni komercyjnym - szkieletowym systemem ekspertowym. PC-Shell powstał jako rezultat wcześniejszych doświadczeń uzyskanych podczas budowy systemu PC-Expert (1985-87) oraz Diagnosta MC 14007 (1988). PC-Shell otrzymał dwa wyróżnienia na Międzynarodowych Targach Oprogramowania SOFTARG w roku 1994 oraz 1996. W roku 1997 system otrzymał nagrodę II-go stopnia w konkursie na najlepszy program targów SOFTARG. System był wielokrotnie prezentowany na konferencjach i seminariach, zarówno w kraju jak i za granicą (Holandia, Singapur, Irlandia).

Zastosowanie PC-Shell jest dziedzinowo-niezależnym narzędziem służącym do budowy systemów ekspertowych. Może być zastosowany w dowolnej dziedzinie: począwszy od bankowości i finansów a na zastosowaniach technicznych kończąc. Typowe obszary zastosowań systemu PC-Shell to: systemy doradcze i wpomagania decyzji, dydaktyka (wyższe uczelnie i szkoły średnie). System może być między innymi wykorzystywany w takich dziedzinach jak: analizy finansowe (ekonomiczne), analizy wniosków kredytowych w bankach, doradztwo podatkowe, dzięki otwartej architekturze może być łatwo zintegrowany z Systemami Informowania Kierownictwa, służąc np. do automatycznej analizy wskaźników ekonomicznych, technika, np. do analizy danych pomiarowych. System nadaje się do budowy zarówno małych, średnich jak i dużych aplikacji.

Klasy problemów Dziedzinowa niezależność systemu PC-Shell oznacza, że nie dziedzina a raczej klasa problemów decyduje o powodzeniu zastosowania tego systemu. System PC-Shell jest szczególnie predysponowany do rozwiązywania następujących klas problemów : analiza (interpretacja) danych klasyfikacja, diagnostyka, finanse i bankowość, inwestycje, marketing, technika, dydaktyka, komponent dla systemów SIK, analizatorów, arkuszy kalkulacyjnych, komponent programów edukacyjnych. PC-Shell jest dziedzinowo niezależny, stąd zakres jego zastosowań jest bardzo szeroki. Bowiem nie dziedzina a klasa problemów decyduje o powodzeniu zastosowania systemu PC-Shell. Architektura Jak już wspomniano, system PC-Shell jest systemem o architekturze hybrydowej, tj. łączącej w sobie różne metody rozwiązywania problemów i reprezentacji wiedzy. Interesującą właściwością systemu PC- Shell jest między innymi wbudowany, w pełni zintegrowany, symulator sieci neuronowej. Inną istotną cechą systemu PC-Shell jest jego struktura tablicowa, co umożliwia podzielenie dużej bazy wiedzy na mniejsze moduły - zorientowane tematycznie, tzw. źródła wiedzy.

Interfejs do baz danych Wraz z wersją 2.1 systemu PC-Shell został wprowadzony mechanizm dostępu do konwencjonalnych baz danych. Zastosowane w systemie rozwiązanie opiera się o mechanizm ODBC. Udostępnia on dostęp do dowolnego systemu zarządzania bazą danych (DBSM) pod warunkiem posiadania odpowiednich interfejsów (drivers) dostarczanych przez producentów systemów zarządzania bazami danych. W systemie PC-Shell dostęp do baz danych został zaimplementowany poprzez dodanie szeregu nowych instrukcji. Można obecnie realizować następujące operacje: inicjalizacja dostępu do baz danych przesłanie dowolnego zapytania SQL w tzw. trybie bezpośrednim wraz z możliwością pozyskania wyniku działania zapytania sterowanie transakcjami za pomocą odpowiednich instrukcji programowania Proces komunikacji z bazą musi być obramowany etapem inicjacji dostępu oraz na końcu etapem zakończenia dostępu. Do tego celu służą funkcje sqlInit i sqlDone. Instrukcją do przesyłania zapytań jest instrukcja sqlQuery, natomiast instrukcjami służącymi do pobrania danych po wykonaniu zapytania są instrukcje sqlInitBinding, sqlBind, sqlFetch. Ostatnią instrukcją związaną z dostępem do baz danych jest instrukcja sterowania transakcjami sqlTransact. ZASTOSOWANIE PRAKTYCZNE:

System PC-Shell przeznaczony jest dla systemów Windows 9x/NT/2000 lub nowszy. Wymagania sprzętowe: Komputer 486 lub nowszy, pamięć RAM 8MB lub więcej. Sposób instalacji – standardowy Więcej informacji: http://www.aitech.com.pl/tech.htm

CLIPS C Language Integrated Production System – w pełni zintegrowane środowisko służące do tworzenia systemów ekspertowych. Korzenie języka CLIPS sięgają roku 1984, gdy oddział Artificial Intelligence Section w NASA Johnson Space Center opracował jego prototyp. Oparta o język C wersja 1.0 była pomyślana jako narzędzie dla oprogramowania ówczesnych systemów ekspertowych (tj. programów przeznaczonych do modelowania ludzkiego doświadczenia i wiedzy). Początkowo język służył głównie do celów treningowych; jednak już po roku, gdy poprawiono przenośność programów, ich wydajność i funkcjonalność oraz uporządkowano dokumentację, udostępniono wersję 3.0 dla grup spoza NASA. Dalsze rozszerzenia i ulepszenia, w szczególności dodanie możliwości pisania programów proceduralnych i obiektowych, przekształciły CLIPS w wersjii 6.1 z narzędzia treningowego w pełnowartościowe narzędzie dla projektowania i oprogramowania systemów ekspertowych. Następujące cechy zdecydowały o sukcesie języka:

Możliwość reprezentowania wiedzy Możliwość reprezentowania wiedzy. CLIPS stanowi spójne narzędzie dla przetwarzania wiedzy, wspierając trzy różne paradygmaty: regułowy, obiektowy i proceduralny. Programowanie oparte o reguły pozwala reprezentować wiedzę jako heurystyki lub ogólne zasady (reguły) oparte na doświadczeniu, które podają zbiór działań, jakie należy wykonać w danej sytuacji. Programowanie obiektowe pozwala modelować złożone systemy jako modularne komponenty (które można łatwo użyć ponownie do modelowania innych systemów lub do tworzenia nowych komponentów). Możliwości programowania proceduralnego są podobne, jak w językach C, Pascal, Ada i LISP. Przenośność. CLIPS, dla osiągnięcia przenośności i szybkości, jest napisany w C i został zainstalowany na wielu różnych komputerach bez zmian kodu (IBM PC, Macintosh, VAX11/780, Sun 3/260). Może być przenoszony na dowolny system posiadający kompilator języka ANSI C; przenośność zapewnia dostarczany z systemem CLIPS kod źródłowy, który może być modyfikowany stosownie do potrzeb użytkownika. Integracja/Rozszerzalność. Kod w języku CLIPS można wbudować wewnątrz kodu proceduralnego, wywoływanego jako podprogram, i zintegrowanego z takimi językami, jak C, C++, FORTRAN i ADA. Istnieją również ściśle zdefiniowane zasady tworzenia rozszerzeń jezyka. Interakcja z użytkownikiem. Standardowa wersja języka CLIPS zawiera interakcyjne środowisko opracowywania programu, obejmujące zintegrowany edytor, narzędzia dla uruchamiania oraz natychmiastową pomoc. Dla środowisk Macintosh, Windows 3.1 i X Window opracowano rozwijalne menu, zintegrowane edytory i system wielookienkowy.

Weryfikacja/Walidacja Weryfikacja/Walidacja. CLIPS zawiera szereg cech dla wsparcia weryfikacji i walidacji systemów ekspertowych: modularne projektowanie i podział bazy wiedzy, statyczną i dynamiczną kontrolę atrybutów pól i argumentów funkcji oraz analizę semantyczną wzorcowych reguł dla ustalenia, czy niespójności mogłyby przeszkodzić w odpaleniu reguły lub wygenerować błąd. Pełna dokumentacja. W pakiecie języka CLIPS znajdziemy obszerną dokumentację, w tym źródłowy podręcznik języka i przewodnik użytkownika. Program napisany w języku CLIPS składa się z reguł, faktów i obiektów. W terminologii języka słowem shell (powłoka) określa się tę jego część, która zawiera podstawowe elementy systemu ekspertowego: Wykaz faktów (fact-list) i wykaz obiektów (instance-list) w pamięci roboczej. Baza wiedzy (knowledge-base) w postaci zbioru reguł oraz agenda reguł. Maszyna wnioskująca (inference-engine).

Maszyna wnioskująca decyduje, które reguły powinny być wykonane i kiedy. Regułowy system ekspertowy zakodowany w języku CLIPS oparty jest o koncepcję wnioskowania wstępującego (forward chaining, data-driven inference). Oznacza to, że zadaje się pewne dane, które po dopasowaniu do przesłanek pozwalają na sformułowanie wniosków. Można zatem powiedzieć, że system ekspertowy napisany w języku CLIPS jest programem sterowanym danymi, ponieważ fakty i obiekty są tymi danymi, które stymulują wykonanie poprzez maszynę wnioskującą. Zauważmy, że w językach proceduralnych (np. C, BASIC, FORTRAN, Pascal) oraz hybrydowych (np. C++) wystarczy mieć sekwencję instrukcji, które mogą być wykonane bez dostarczenia im jakichkolwiek danych. Dokumentacja, kody źródłowe i binarne języka CLIPS dostępne są bez opłat na wielu serwerach sieci Internet. Podstawowe adresy URL, pod którymi można znaleźć odpowiednie pliki, są następujące: http://www.ghgcorp.com/clips/ oraz http://www.ghg.net/clips/CLIPS.html; publicznie dostępne repozytorium napisanych w języku CLIPS systemów ekspertowych znajduje się pod adresem http://www.cs.cmu.edu/afs/cs/project/ai-repository/.

Okno dialogowe programu CLIPSE

Dostęp do baz danych przy pomocy ODBC oraz wykorzystaniu CLIPS Win32 DLL - http://eppe.tamu.edu/~xuxj/prog/download/dll/CLIPSDLL05.doc Fragment pliku napisanego w CLIPS ;;;************* ;;;* TEMPLATES * (deftemplate father-of (slot father) (slot child)) (deftemplate mother-of (slot mother) (slot child)) (deftemplate wife-of (slot wife) (slot husband)) (deftemplate male (slot person)) (deftemplate female (slot person)) (deftemplate Print-Phase (slot phase))

int main(int argc, char *argv[]) { CCLIPSWrap CLIPSEng(1); //Create an instance of CLIPS CString strCLIPSScript; // nazwa systemu stworzonego w języku clips CString strAssert, strODBCInfo; CString strQuery, strDeftemplateName, strOutFile = „plik_wynikowy.txt"; int iErrCode; //Initialize the CLIPS Engine -- DLL Loaded here! //If Initialization fails, display message to browser. if(!CLIPSEng.CLIPSInit()) printf("CLIPS failed during initialization. Make sure the DLL is either in the current directory or somewhere in your PATH\n"); return(0); }

//Load the CLIPS script(facts/rules etc //Load the CLIPS script(facts/rules etc.) //If Load fails, display message. iErrCode = CLIPSEng.CLIPSLoad(strCLIPSScript); if(iErrCode != CCLIPSWrap::READ_OK) { printf("CLIPS failed while loading the script %s\n", LPCSTR(strCLIPSScript)); switch (iErrCode) case CCLIPSWrap::READ_FAIL : printf("Read Failure\n"); break; case CCLIPSWrap::PARSE_FAIL : printf("Parse Failure\n"); case CCLIPSWrap::BAD_LOAD_NAME : printf("Bad Load Name\n"); case CCLIPSWrap::READ_NOT_INIT : printf("Read Not Initialized\n"); }

CLIPSEng.CLIPSExit(0); return(0); } //Issue CLIPS 'reset' Command CLIPSEng.CLIPSReset(); //Assert 'father-of' facts strDeftemplateName = "father-of"; strQuery = "SELECT father, child FROM FATHEROF"; CLIPSEng.CLIPSODBCQuery(strQuery, strODBCInfo, strDeftemplateName, TRUE); //Assert 'mother-of' facts strDeftemplateName = "mother-of"; strQuery = "SELECT mother, child FROM MOTHEROF"; CLIPSEng.CLIPSODBCQuery(strQuery, strODBCInfo,

//Assert 'wife-of' facts strDeftemplateName = "wife-of"; strQuery = "SELECT wife, husband FROM WIFEOF"; CLIPSEng.CLIPSODBCQuery(strQuery, strODBCInfo, strDeftemplateName, TRUE); //Assert 'male' facts strDeftemplateName = "male"; strQuery = "SELECT person FROM male"; //Assert 'female' facts strDeftemplateName = "female"; strQuery = "SELECT person FROM female";

//Assert Print-Phase fact strAssert = "(Print-Phase (phase Print-Brother))"; if(!CLIPSEng.CLIPSAssert(strAssert)) { return(-255); } //Dribble the output to a file to be displayed later CLIPSEng.CLIPSDribble(strOutFile, TRUE); //Run the CLIPS Engine CLIPSEng.CLIPSRun(); //Close dribble output CLIPSEng.CLIPSDribble(strOutFile, FALSE); //Exit CLIPS and close any open files CLIPSEng.CLIPSExit(0);

JESS Jest to w pełni zintegrowane środowisko do tworzenia systemów ekspertowych. Zostało stworzone przez Sun w języku JAVA. Początkowo inspiracją do stworzenia tego środowiska był system ekspertowy CLIPS. Język którym posługuje się system JESS jest w pełni kompatybilny z językiem CLIPS, wiele skryptów napisanych w JESS jest poprawnych dla języka CLIPS i odwrotnie. Z poziomu języka JESS można korzystać z języka JAVA: tworzyć obiekty oraz wywoływać metody bez kompilowania kodu; tworzyć programy jak w JAVIE. System JESS jest więc środowiskiem bardzo podobnym do omówionego wcześniej systemu CLIPS. JESS jest kompatybilny z wszystkimi wersjami JAVY zaczynajac od JAVA 1.2. Innymi słowy mówiac JESS jest "biblioteka programisty".

Język systemu JESS można również wykorzystać w kodzię JAVY Język systemu JESS można również wykorzystać w kodzię JAVY. Umożliwia to pakiet jess. Poniżej przedstawiony jest przykład użycia pakietu jess. import jess.*; public class ExSquare { public static void main(String[] unused) { try { Rete r = new Rete(); //mechanizm wnioskujący z włąsną bazą wiedzy itp. r.executeCommand("(deffunction square (?n) (return (* ?n ?n)))"); Value v = r.executeCommand("(square 3)"); // Prints '9‘ System.out.println(v.intValue(r.getGlobalContext())); } catch (JessException ex) { System.err.println(ex); } C:\> java ExSquare 9

Strona systemu ekspertowego JESS: http://herzberg. ca. sandia Strona systemu ekspertowego JESS: http://herzberg.ca.sandia.gov/jess/ Manual: http://www.cs.vu.nl/~ksprac/2002/doc/Jess60/table_of_contents.html Dostęp do baz danych Dostęp taki możemy uzyskać z poziomu programu wykorzystując pakiet jess oraz Sterowniki JDBC. Zarówno Java jak i JESS posiadają funkcje służące do transferu zmiennych pomiędzy środowiskami. JAVA: public Value store(String name, Value val); public Value store(String name, Object val); public Value fetch(String name); public void clearStorage();

JESS: store <name> <value>) (fetch <name>) (clear-storage) import jess.*; public class ExFetch { public static void main(String[] unused) throws JessException { Rete r = new Rete(); r.store("DIMENSION", new java.awt.Dimension(10, 10)); r.executeCommand("(defclass dimension java.awt.Dimension)"); r.executeCommand("(definstance dimension (fetch DIMENSION) static)"); r.executeCommand("(facts)"); }

public class EmployeeDAO { public static Employee [] getEmployeeList(){ try { String url = "jdbc:mySubprotocol:myDataSource"; Connection con = DriverManager.getConnection( url, "myLogin", "myPassword"); Statement s = con.createStatement() ; ResultSet rs = s.executeQuery("SELECT ENAME,EMPNO FROM SCOTT.EMP"); Employee tmp = new Employee(); tmp.empno=rs.getString("EMPNO"); tmp.ename=rs.getString("ENAME"); con.close(); return tmp; } catch (SQLException e) { return null; }