Systemy ekspertowe

advertisement
Wnioskowanie w systemach
sztucznych
• Wnioskowanie dedukcyjne lub niezawodne
jest realizowane zgodnie z zasadami logiki
formalnej
• Wnioskowanie redukcyjne zakładające, że
przesłanka wynika z konkluzji nie jest
realizowane zgodnie z zasadami logiki
formalnej i w związku z tym jest zawodne
Zasada rezolucji
| A  B  C
| C  D  E
____________
| A  B  D  E
rezolwenta
Rachunek predykatów
(przykład)
Fakt1: część(w001,wałek)
Fakt2: część(p04,panewka)
Fakt3: twardość(w001,wysoka)
Reguła1: współpracują(X1,X2) if
część(X1,wałek) and
część(X2,panewka)
Reguła2: twardość (X2,X3) if
współpracują (X1,X2) and
twardość(X1,X3)
wniosek
Fakt: twardość(p04,wysoka)
Dedukowanie
| czesc (w001, walek ) ( A)  ( p04, panewka) ( B)
• Podstawiamy X1=w001, X2=p04
 wspolpracu ja( w001, p 04) (C )
| wspolpracu ja(w001, p04) (C )  twardosc(w001, wysoka) ( D)
 twardosc( p 04, wysoka) ( E )
__________________________
| czesc (w001, walek ) ( A)  ( p04, panewka) ( B)
 twardosc( w001, wysoka) ( D)
 twardosc( p 04, wysoka) ( E )
Klauzule
• Literał – formuła postaci ~a lub a, gdzie a jest
dowolna formułą atomową
• Literały ~a i a nazywamy literałami
komplementarnymi
• Klauzula – alternatywa dowolnej skończonej
liczby literałów (formuła bez kwantyfikatorów)
• Każdy zbiór poprawnie zbudowanych formuł
można przekształcić w zbiór klauzul
Klauzule Horna
• Klauzula Horna to klauzula , która ma jeden
literał pozytywny
• Pozytywna klauzula Horna:
1  n   , n  N
• może być w sposób równoważny przedstawiona
jako:
1    n  
Klauzule Horna
• Z rachunku kwantyfikatorów mamy, że:
| 1    n  
• wtedy i tylko wtedy
1    n | 
• Klauzula | 1    n   jest tezą w rachunku
kwantyfikatorów wtedy i tylko wtedy, gdy prawa
jej strona wynika logicznie z lewej
Klauzule Horna - zapis
informatyków
B1 if
A1 and
A2
współpracują(X1,X2) if
część(X1,wałek) and
część(X2,panewka)
Wnioskowanie dedukcyjne
• reguła modus ponens (reguła odrywania):
( A  B ), A
B
|— A  B
|— A
|— B
Wnioskowanie dedukcyjne
|— Jeżeli „X jest studentem”, to „X zdał maturę”.
|— „X jest studentem”.
|— „X zdał maturę”.
|— Jeżeli „X jest studentem”, to „X zdał maturę”.
|— „X nie jest studentem”.
|— „X nie zdał matury”.
|— Jeżeli „X jest studentem”, to „X zdał maturę”.
|— „X zdał maturę”.
|— „X jest studentem”.
Wnioskowanie dedukcyjne
• reguła modus tollens:
( A  B ), B
A
|— A  B
|— ¬B
|— ¬A
Wnioskowanie dedukcyjne
|— Jeżeli „X jest studentem”, to „X zdał maturę”.
|— „X nie zdał matury”.
|— „X nie jest studentem”.
Wnioskowanie redukcyjne
• schematy wnioskowania:
( A  B ), A
B
|— A  B
|— ¬A
|— ¬B
( A  B ), B
A
|— A  B
|— B
|— A
Wnioskowanie redukcyjne
|— Jeżeli „X jest studentem”, to „X zdał maturę”.
|— „X nie jest studentem”.
|— „X nie zdał matury”.
|— Jeżeli „X jest studentem”, to „X zdał maturę”.
|— „X zdał maturę”.
|— „X jest studentem”.
Metody wnioskowania
• Wnioskowanie progresywne („w przód”)
• Wnioskowanie regresywne („wstecz”)
• Wnioskowanie mieszane
Przykład – przewidywanie
bankructwa
• Oceniamy zagrożenie pewnej firmy
bankructwem
• Pod uwagę bierzemy jego sytuację
ekonomiczną (zadłużenie, rentowność)
oraz sytuację rynkową (atrakcyjność
oferty, zagrożenie ze strony konkurencji)
Typy i zmienne
TYPES
Ocena = "zły" , "dobry"
OcenaZagrozenia = "wysokie" , "niskie" , "brak"
VARIABLES
Zadluzenie: Ocena
Rentownosc: Ocena
OcenaEkonomiczna: Ocena
AtrakcyjnoscOferty: Ocena
SytuacjaKonkurencyjna: Ocena
OcenaRynkowa: Ocena
ZagrozenieBakructwem: OcenaZagrozenia
RULE R9
IF OcenaEkonomiczna = "zły" AND
OcenaRynkowa = "zły"
THEN
ZagrozenieBakructwem = "wysokie"
RULE R10
IF OcenaEkonomiczna = "zły" AND
OcenaRynkowa = "dobry"
THEN
ZagrozenieBakructwem = "niskie"
RULE R11
IF OcenaEkonomiczna = "dobry" AND
OcenaRynkowa = "zły"
THEN
ZagrozenieBakructwem = "niskie"
RULE R12
IF OcenaEkonomiczna = "dobry" AND
OcenaRynkowa = "dobry"
THEN
ZagrozenieBakructwem = "brak"
RULE R1
IF Zadluzenie = "zły" AND
Rentownosc = "zły"
THEN
OcenaEkonomiczna = "zły"
RULE R2
IF Zadluzenie = "zły" AND
Rentownosc = "dobry"
THEN
OcenaEkonomiczna = "zły"
RULE R3
IF Zadluzenie = "dobry" AND
Rentownosc = "zły"
THEN
OcenaEkonomiczna = "dobry"
RULE R4
IF Zadluzenie = "dobry" AND
Rentownosc = "dobry"
THEN
OcenaEkonomiczna = "dobry"
RULE R5
IF AtrakcyjnoscOferty = "zły" AND
SytuacjaKonkurencyjna = "zły"
THEN
OcenaRynkowa = "zły"
RULE R6
IF AtrakcyjnoscOferty = "zły" AND
SytuacjaKonkurencyjna = "dobry"
THEN
OcenaRynkowa = "dobry"
RULE R7
IF AtrakcyjnoscOferty = "dobry" AND
SytuacjaKonkurencyjna = "zły"
THEN
OcenaRynkowa = "zły"
RULE R8
IF AtrakcyjnoscOferty = "dobry" AND
SytuacjaKonkurencyjna = "dobry"
THEN
OcenaRynkowa = "dobry"
Wnioskowanie wprzód
Wnioskowanie wprzód
Wnioskowanie wprzód
Wnioskowanie wprzód
• Zaczynamy od faktu ‘Zadłużenie = zły’
• Szukamy odpowiednich reguł
RULE R1
IF Zadluzenie = "zły" AND
Rentownosc = "zły"
THEN
OcenaEkonomiczna = "zły"
• Sprawdzamy, czy fakt ‘Rentownosc = zły’
Wnioskowanie wprzód
• Fakt nie jest prawdziwy regułę
zaznaczamy jako wykorzystaną i szukamy
kolejnej
RULE R2
IF Zadluzenie = "zły" AND
Rentownosc = "dobry"
THEN
OcenaEkonomiczna = "zły"
• Fakt ‘Rentownosc = dobry’ jest prawdziwy
Wnioskowanie wprzód
• „Odpalamy” regułę, rejestrujemy nowy
fakt ‘OcenaEkonomiczna = zły’ i
zapisujemy do stosu faktów
• Szukamy kolejnej reguły, w przesłankach
której mamy fakt ‘Zadłużenie = zły’
• Takiej reguły już nie ma – usuwamy fakt
ze stosu faktów i pobieramy kolejny
Wnioskowanie wprzód
• Załóżmy, że jest to fakt ‘Rentowność =
dobry’
• Wśród „niewykorzystanych” reguł
poszukujemy odpowiedniej:
RULE R4
IF Zadluzenie = "dobry" AND
Rentownosc = "dobry"
THEN
OcenaEkonomiczna = "dobry"
Wnioskowanie wprzód
• Sprawdzamy czy fakt ‘Zadłużenie = dobry’
jest prawdziwy
• Ponieważ nie jest, regułę zaznaczmy jako
wykorzystaną i szukamy kolejnej
odpowiedniej
• Nie ma już żadnej takiej reguły – niczego
nowego już nie wydedukujemy
• Usuwamy fakt ze stosu i pobieramy
kolejny
Wnioskowanie wstecz
Wnioskowanie wstecz
Wnioskowanie wstecz
Wnioskowanie wstecz
Wnioskowanie wstecz
Wnioskowanie wstecz
Wnioskowanie wstecz
Wnioskowanie wstecz
Wnioskowanie wstecz
Wnioskowanie wstecz
Wnioskowanie wstecz
Wnioskowanie wstecz
Wnioskowanie wstecz
Wnioskowanie wstecz
Wnioskowanie wstecz
Wnioskowanie wstecz
Wnioskowanie wstecz
• Stawiamy hipotezę, np.
‘ZagrożenieBankructwem = brak’
• Silnik szuka reguł, w których konkluzją
jest taki fakt:
RULE R12
IF OcenaEkonomiczna = "dobry"
AND
OcenaRynkowa = "dobry"
THEN
ZagrozenieBakructwem = "brak"
Wnioskowanie wstecz
• Sprawdzamy, czy prawdziwe są przesłanki
• Pierwsza to ‘OcenaRynkowa = dobry’
• Szukamy reguły, w której występuje taka
konkluzja:
RULE R8
IF AtrakcyjnoscOferty = "dobry"
AND
SytuacjaKonkurencyjna = "dobry"
THEN
OcenaRynkowa = "dobry"
Wnioskowanie wstecz
• Sprawdzamy, czy prawdziwe są przesłanki
• Pierwsza to ‘SytuacjaKonkurencyjna =
dobry’
• Szukamy reguły, w której występuje taka
konkluzja – nie ma takiej reguły
• Silnik pyta o wartość logiczną tego faktu
• Jeżeli fakt jest prawdziwy to weryfikujemy
kolejną przesłankę, jeśli nie to szukamy
kolejnej reguły, która mogłaby
potwierdzić, że ‘OcenaRynkowa = dobry’
Wnioskowanie mieszane - przykład
Dane
jeżeli InneCechyMateriału_są_dobre
i Wytrzymałość_jest_dobra
wtedy Materiał_jest_dobry
Dane
Dane
Dane
Dane
Start i pierwsze kroki
1. Zakładamy, że wytrzymałość jest dobra
2. Szukamy wszystkich reguł, dla których
zdanie jest przesłanką
Kolejne kroki
3. Analizujemy pierwszą regułę i ustalamy,
że ustalenie jej wartości wymaga oceny
zdania: InneCechyMateriału_są_dobre
4. Sprawdzamy, czy znamy wartość zdania
5. Jeżeli nie, przeszukujemy konkluzje
wszystkich reguł poszukując zdania
6. Jeżeli nie znajdujemy reguły to po prostu
pytamy o zdanie
Kolejne kroki
7. Załóżmy, że zdanie jest fałszywe
8. Zaznaczamy regułę jako odpaloną i
powtarzamy, kroki 4, 5 i 6 dla kolejnej reguły
9. Jeżeli żadna reguła nie może być odpalona
kończymy wnioskowanie
10. Załóżmy jednak że zdanie
InneCechyMateriału_są_złe jest prawdziwe
Kolejne kroki
11. Odpalamy regułę:
jeżeli InneCechyMateriału_są_złe
i Wytrzymałość_jest_dobra
wtedy Materiał_jest_średni
•
i przyjmujemy, że zdanie
Materiał_jest_średni jest prawdziwe
Kolejne kroki
12. Szukamy wszystkich reguł, dla których
zdanie jest przesłanką
Kolejne kroki
13. Realizujemy kroki 3 do 9 dla
zaznaczonych reguł
14. Załóżmy, że zdanie
Powtarzalność_jest_dobra jest prawdziwe
15. Ustalamy, że zdanie Jakość_tak jest
prawdziwe
16. Wracamy do punktu 12
Kolejne kroki
Kolejne kroki
17. Załóżmy, że ustalamy wartość zdania
Ekonomia_jest_dobra
Kolejne kroki
18. Musimy ustalić wartość zdań:
• Cena_jest_dobra i
WarunkiPłatności_są_dobre
19. Powtarzamy kroki 3 do 6 dla obu zdań
WybranyStart = wybierz zmienną startową()
dodaj WybranyStart do StosZmiennychWprzod
while nie pusty StosZmiennychWprzod
{
AktualnaZmienna = zdejmij ze StosZmiennychWprzod
for each Wyrazenie in WyrazeniaZwiazaneZeZmienna(Aktualna
_wyrazenie = EwaluujWyrazenie(Wyrazenie)
for each Przeslanka in
PrzeslankiDlaKtorychWyrazenieJestLewaStrona(_wyrazenie)
{
{
WyrazenieZPrawejStrony =
ZnajdzWyrazenieZPrawejStrony(Przeslanka)
if (WartoscWyrazeniaZPrawejStrony == null)
{
EwaluujWyrazenie(WyrazenieZPrawejStr
}
EwaluujPrzeslanke(Przeslanka)
ZmienWartoscPrzeslanki(Przeslanka)
if (WartoscLogicznaPrzeslanki == true)
{
dodaj Przeslanka do StosPrzeslanek
}
for each Przeslanka in
PrzeslankiDlaKtorychWyrazenieJestPrawaStrona(Wyrazenie)
{
WyrazenieZLewejStrony =
ZnajdzWyrazenieZLewejStrony(Przeslanka)
if (WartoscWyrazeniaZLewejStrony == null)
{
EwaluujWyrazenie(WyrazenieZLewejStro
}
EwaluujPrzeslanke(Przeslanka)
ZmienWartoscPrzeslanki(Przeslanka)
if (WartoscLogicznaPrzeslanki == true)
{
dodaj Przeslanka do StosPrzeslanek
}
while nie pusty StosPrzeslanek
{
AktualnaPrzeslanka = zdejmij ze StosPrzeslanek
for each Regula in RegulyZwiazaneZPrzeslanka(Aktu
{
if SprawdzRegule(Regula)
{
EwaluujRegule(Regula)
}
}
}
}
EwaluujWyrazenie(X)
for each Zmienna in ZmienneZwiazaneZWyrazeniem(X)
{
if (WartoscZmiennej == null) // wartość zmiennej nie jest znana
{
WartoscZmiennej = EwaluujZmienna(Zmienna)
}
dodaj do ListaZmiennych WartoscZmiennej
}
return EwaluatorTekstuWyrazenia(X, ListaZmiennych)
EwaluujPrzeslanke(X)
Przeslanka = SzukajPrzeslanke(X) // pełny opis przesłanki
WartoscWyrazeniaZLewejStrony =
EwaluujWyrazenie(LewaStronaPrzeslanki)
WartoscWyrazeniaZPrawejStrony =
EwaluujWyrazenie(PrawaStronaPrzeslanki)
return EwaluatorLogiczny(WartoscWyrazeniaZLewejStrony,
WartoscWyrazeniaZPrawejStrony, Operator)
EwaluujZmienna(X)
Zmienna = SzukajZmienna(X)
if (KategoriaZmiennej == intermediate)
{
return WnioskujWstecz(X)
}
else
{
Wyrazenie = SzukajWyrazeniaKonkluzjiOkreslajacejZmienna(X)
Akcja = SzukajAkcjiDlaWyrazenia(Wyrazenie)
return EgzekutorAkcji(X, Akcja)
}
SprawdzRegule(X)
RegulaPrawdziwa = true
for each Przeslanka in PrzeslankiZwiazaneZRegula(X)
{
if (WartoscLogicznaPrzeslanka == null)
{
EwaluujPrzeslanke(Przeslanka)
}
if (WartoscLogicznaPrzeslanka == false)
{
return false)
break i
}
}
return true
EwaluujRegule(X)
ZmienZmienna(ZmiennaOkreslanaPrzezRegule
,EwluujWyrazenie(WyrazenieWKonkluzjiReguly(X))
dodaj ZmiennaOkreslanaPrzezRegule do StosZmiennychWprzod
WnioskujWstecz(X)
for each Reguly in WszystkieRegulyOkreslajaceWartoscZmiennejX
{
if SprawdzRegule(Regula)
{
EwaluujRegule(Regula)
}
if (RegulaPrawdziwa == true)
{
EwaluujRegule(Regula)
}
}
Download