I. Część teoretyczna:
System ekspertowy – pojęcie z zakresu sztucznej inteligencji oznaczające system komputerowy, który emuluje proces podejmowania decyzji przez człowieka-eksperta. Systemy ekspertowe rozwiązują złożone problemy na podstawie analizy baz wiedzy, a nie realizację prostego algorytmu jak to ma miejsce w przypadku programów tradycyjnych.
Systemy ekspertowe składają się z co najmniej dwóch elementów:
„silnika” - programu umożliwiającego zadawanie pytań i szukającego odpowiedzi na zadane pytania;
„bazy danych”, na podstawie analizy której udzielane są odpowiedzi;
Podstawowe metody wnioskowania:
System typu ‘backward chaining’ – wnioskowanie wstecz, jest strategią wnioskowania, która rozpoczyna się od hipotezy ( docelowego stanu ) i działa wstecz poprzez kolejne reguły w celu stworzenia nowej hipotezy i zestawu faktów dostępnych w danym momencie. Poprzez dotarcie do początkowego zestawu faktów, udowadnia się prawdziwość hipotezy.
System typu ‘forward chaining’ – wnioskowanie w przód, jest strategią wnioskowania rozpoczynającą się od znanych faktów. Następnie odpytywany jest zestaw reguł w celu zidentyfikowania reguł odpowiadających danemu zestawowi faktów i ewentualnemu dodaniu nowych faktów do pamięci roboczej. Proces ten trwa aż do momentu kiedy nie można już uzyskać żadnych nowych faktów lub osiągnięty jest stan docelowy. System ten w skrócie jest procesem dedukcyjnym, który używa znanych faktów do przejścia przez pamięć roboczą i zestawu reguł w celu wygenerowania nowych faktów.
II. Część praktyczna:
Zadanie, którego się podjąłem ma na celu stworzenie i uruchomienie własnego systemu ekspertowego. Postanowiłem do tego celu wykorzystać problem, który analizowałem w pierwszym sprawozdaniu dotyczącym drzew decyzyjnych, a mianowicie przyznanie lub odmowa kredytu na wybrany cel w zależności od wybranych atrybutów (praca, kredyt na, płeć, żonaty/zamężna, wiek, oszczędności, kwota kredytu, liczba rat, staż pracy).
Kod stworzonej przeze mnie bazy wiedzy prezentuje się następująco:
knowledge base decyzjaKredytowa
facets
ask yes;
decyzjaKredytowa :
single no
val oneof
{
"przyznać kredyt",
"odmówić kredytu"
};
praca :
single yes
val oneof
{
"tak",
"nie"
};
kredytNa :
single yes
val oneof
{
"komputer",
"samochód",
"sprzęt rtv-agd",
"mieszkanie",
"rower",
"meble"
};
płeć :
single yes
val oneof
{
"kobieta",
"mężczyzna"
};
żonatyZamężna :
single yes
val oneof
{
"nie",
"tak"
};
wiek :
ask no
val range
< 18, 98 >;
oszczędności :
ask no
val range
< 0.1, 62.5 >;
kwotaKredytu :
ask no
val range
< 1.3, 150 >;
liczbaRat :
ask no
val range
< 4, 30 >;
stażPracy :
ask no
val range
< 0, 35 >;
end; //facets
rules
0001 : decyzjaKredytowa = "przyznać kredyt" if // (51.0)
stażPracy > 2;
0002 : decyzjaKredytowa = "odmówić kredytu" if // (7.0)
stażPracy <= 2,
kredytNa = "rower";
0003 : decyzjaKredytowa = "odmówić kredytu" if // (6.0)
stażPracy <= 2,
kredytNa = "sprzęt rtv-agd",
żonatyZamężna = "nie";
0004 : decyzjaKredytowa = "odmówić kredytu" if // (5.0)
stażPracy <= 2,
kredytNa = "samochód";
0005 : decyzjaKredytowa = "przyznać kredyt" if // (5.0)
stażPracy <= 2,
kredytNa = "mieszkanie",
wiek <= 34;
0006 : decyzjaKredytowa = "przyznać kredyt" if // (4.0)
stażPracy <= 2,
kredytNa = "komputer",
praca = "tak";
0007 : decyzjaKredytowa = "odmówić kredytu" if // (4.0)
stażPracy <= 2,
kredytNa = "sprzęt rtv-agd",
żonatyZamężna = "tak",
praca = "nie";
0008 : decyzjaKredytowa = "odmówić kredytu" if // (4.0)
stażPracy <= 2,
kredytNa = "mieszkanie",
wiek > 34;
0009 : decyzjaKredytowa = "przyznać kredyt" if // (3.0)
stażPracy <= 2,
kredytNa = "sprzęt rtv-agd",
żonatyZamężna = "tak",
praca = "tak";
0010 : decyzjaKredytowa = "odmówić kredytu" if // (2.0)
stażPracy <= 2,
kredytNa = "meble";
0011 : decyzjaKredytowa = "odmówić kredytu" if // (2.0)
stażPracy <= 2,
kredytNa = "komputer",
praca = "nie";
end; //rules
control
char Txt1, Txt2, Txt3;
run;
createAppWindow;
Txt1 := "Aplikacja 'decyzjaKredytowa'";
Txt2 := "nBaza wiedzy wygenerowana za pomocą programu DeTreex 4.0";
Txt3 := "© AITECH Artificial Intelligence Laboratory, Katowice 2015";
vignette( Txt1, Txt2, Txt3 );
float Wart[5];
char Tytuł[3], NazAtr[5];
Tytuł[0] := "Podaj wartości atrybutów...";
Tytuł[1] := "Nazwa atrybutu";
Tytuł[2] := "Wartość atrybutu";
NazAtr[0] := "wiek";
NazAtr[1] := "oszczędności";
NazAtr[2] := "kwotaKredytu";
NazAtr[3] := "liczbaRat";
NazAtr[4] := "stażPracy";
nsheetBox( 0 ,0, 5, 0, Tytuł, NazAtr, Wart );
addFacts( 5, _ , NazAtr , Wart );
goal ("decyzjaKredytowa=X");
delNewFacts;
// <- blok instrukcji i funkcji
end; //control
end; //knowledge base
III. Wnioski:
Dzięki nabytej wiedzy podczas zajęć mogłem dowiedzieć się jak zbudowane przykładowe systemy ekspertowe, przez co udało mi się samodzielnie przygotować własny system.
Dzięki użyciu systemów ekspertowych możliwe jest rozwiązywanie złożonych problemów tylko na podstawie analizy bazy wiedzy. Tym samym przy wykorzystaniu tych systemów można zmniejszyć koszty pewnych decyzji i procesów.