Języki sztucznej inteligencji a relacyjne bazy danych

advertisement
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). PCShell 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 PCShell 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. 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. 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:
1. Wykaz faktów (fact-list) i wykaz obiektów (instance-list) w pamięci roboczej.
2. Baza wiedzy (knowledge-base) w postaci zbioru reguł oraz agenda reguł.
3. 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.)
//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");
break;
case CCLIPSWrap::BAD_LOAD_NAME :
printf("Bad Load Name\n");
break;
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,
strDeftemplateName,
TRUE);
//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";
CLIPSEng.CLIPSODBCQuery(strQuery,
strODBCInfo,
strDeftemplateName,
TRUE);
//Assert 'female' facts
strDeftemplateName = "female";
strQuery = "SELECT person FROM female";
CLIPSEng.CLIPSODBCQuery(strQuery,
strODBCInfo,
strDeftemplateName,
TRUE);
//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. 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.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;
}
}
Download