1 Wnioskowanie w systemach sztucznychWnioskowanie 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
2 Wnioskowanie dedukcyjnereguła modus ponens (reguła odrywania): |— A B |— A |— B
3 Wnioskowanie dedukcyjne|— Jeżeli „X jest studentem”, to „X zdał maturę”. |— „X jest studentem”. |— „X zdał maturę”. |— „X nie jest studentem”. |— „X nie zdał matury”.
4 Wnioskowanie dedukcyjnereguła modus tollens: |— A B |— ¬B |— ¬A
5 Wnioskowanie dedukcyjne|— Jeżeli „X jest studentem”, to „X zdał maturę”. |— „X nie zdał matury”. |— „X nie jest studentem”.
6 Wnioskowanie redukcyjneschematy wnioskowania: |— A B |— A B |— ¬A |— B |— ¬B |— A
7 Wnioskowanie redukcyjne|— Jeżeli „X jest studentem”, to „X zdał maturę”. |— „X nie jest studentem”. |— „X nie zdał matury”. |— „X zdał maturę”. |— „X jest studentem”.
8 Metody wnioskowania Wnioskowanie progresywne („w przód”)Wnioskowanie regresywne („wstecz”) Wnioskowanie mieszane
9 Przykład – przewidywanie bankructwaOceniamy 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)
10 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
11 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"
12 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"
13 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"
14 Wnioskowanie wprzód
15 Wnioskowanie wprzód
16 Wnioskowanie wprzód
17 Wnioskowanie wprzód Zaczynamy od faktu ‘Zadłużenie = zły’Szukamy odpowiednich reguł Sprawdzamy, czy fakt ‘Rentownosc = zły’ RULE R1 IF Zadluzenie = "zły" AND Rentownosc = "zły" THEN OcenaEkonomiczna = "zły"
18 Wnioskowanie wprzód Fakt nie jest prawdziwy regułę zaznaczamy jako wykorzystaną i szukamy kolejnej Fakt ‘Rentownosc = dobry’ jest prawdziwy RULE R2 IF Zadluzenie = "zły" AND Rentownosc = "dobry" THEN OcenaEkonomiczna = "zły"
19 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
20 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"
21 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
22 Wnioskowanie wstecz
23 Wnioskowanie wstecz
24 Wnioskowanie wstecz
25 Wnioskowanie wstecz
26 Wnioskowanie wstecz
27 Wnioskowanie wstecz
28 Wnioskowanie wstecz
29 Wnioskowanie wstecz
30 Wnioskowanie wstecz
31 Wnioskowanie wstecz
32 Wnioskowanie wstecz
33 Wnioskowanie wstecz
34 Wnioskowanie wstecz
35 Wnioskowanie wstecz
36 Wnioskowanie wstecz
37 Wnioskowanie wstecz
38 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"
39 Wnioskowanie wstecz Sprawdzamy, czy prawdziwe są przesłankiPierwsza to ‘OcenaRynkowa = dobry’ Szukamy reguły, w której występuje taka konkluzja: RULE R8 IF AtrakcyjnoscOferty = "dobry" AND SytuacjaKonkurencyjna = "dobry" THEN OcenaRynkowa = "dobry"
40 Wnioskowanie wstecz Sprawdzamy, czy prawdziwe są przesłankiPierwsza 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’
41 Wnioskowanie mieszane - przykład
42 Dane jeżeli InneCechyMateriału_są_dobre i Wytrzymałość_jest_dobrawtedy Materiał_jest_dobry
43 Dane
44 Dane
45 Dane
46 Dane
47 Start i pierwsze kroki Zakładamy, że wytrzymałość jest dobraSzukamy wszystkich reguł, dla których zdanie jest przesłanką
48 Kolejne kroki Analizujemy pierwszą regułę i ustalamy, że ustalenie jej wartości wymaga oceny zdania: InneCechyMateriału_są_dobre Sprawdzamy, czy znamy wartość zdania Jeżeli nie, przeszukujemy konkluzje wszystkich reguł poszukując zdania Jeżeli nie znajdujemy reguły to po prostu pytamy o zdanie
49 Kolejne kroki Załóżmy, że zdanie jest fałszyweZaznaczamy regułę jako odpaloną i powtarzamy, kroki 4, 5 i 6 dla kolejnej reguły Jeżeli żadna reguła nie może być odpalona kończymy wnioskowanie Załóżmy jednak że zdanie InneCechyMateriału_są_złe jest prawdziwe
50 Kolejne kroki 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
51 Kolejne kroki Szukamy wszystkich reguł, dla których zdanie jest przesłanką
52 Kolejne kroki Realizujemy kroki 3 do 9 dla zaznaczonych regułZałóżmy, że zdanie Powtarzalność_jest_dobra jest prawdziwe Ustalamy, że zdanie Jakość_tak jest prawdziwe Wracamy do punktu 12
53 Kolejne kroki
54 Kolejne kroki Załóżmy, że ustalamy wartość zdania Ekonomia_jest_dobra
55 Kolejne kroki Musimy ustalić wartość zdań:Cena_jest_dobra i WarunkiPłatności_są_dobre Powtarzamy kroki 3 do 6 dla obu zdań
56 WybranyStart = wybierz zmienną startową()dodaj WybranyStart do StosZmiennychWprzod while nie pusty StosZmiennychWprzod { AktualnaZmienna = zdejmij ze StosZmiennychWprzod for each Wyrazenie in WyrazeniaZwiazaneZeZmienna(AktualnaZmienna) _wyrazenie = EwaluujWyrazenie(Wyrazenie) for each Przeslanka in PrzeslankiDlaKtorychWyrazenieJestLewaStrona(_wyrazenie)
57 { WyrazenieZPrawejStrony = ZnajdzWyrazenieZPrawejStrony(Przeslanka) if (WartoscWyrazeniaZPrawejStrony == null) EwaluujWyrazenie(WyrazenieZPrawejStrony) } EwaluujPrzeslanke(Przeslanka) ZmienWartoscPrzeslanki(Przeslanka) if (WartoscLogicznaPrzeslanki == true) dodaj Przeslanka do StosPrzeslanek }
58 for each Przeslanka in PrzeslankiDlaKtorychWyrazenieJestPrawaStrona(Wyrazenie){ WyrazenieZLewejStrony = ZnajdzWyrazenieZLewejStrony(Przeslanka) if (WartoscWyrazeniaZLewejStrony == null) EwaluujWyrazenie(WyrazenieZLewejStrony) } EwaluujPrzeslanke(Przeslanka) ZmienWartoscPrzeslanki(Przeslanka) if (WartoscLogicznaPrzeslanki == true) dodaj Przeslanka do StosPrzeslanek
59 while nie pusty StosPrzeslanek{ AktualnaPrzeslanka = zdejmij ze StosPrzeslanek for each Regula in RegulyZwiazaneZPrzeslanka(AktualnaPrzeslanka) if SprawdzRegule(Regula) EwaluujRegule(Regula) }
60 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)
61 EwaluujPrzeslanke(X)Przeslanka = SzukajPrzeslanke(X) // pełny opis przesłanki WartoscWyrazeniaZLewejStrony = EwaluujWyrazenie(LewaStronaPrzeslanki) WartoscWyrazeniaZPrawejStrony = EwaluujWyrazenie(PrawaStronaPrzeslanki) return EwaluatorLogiczny(WartoscWyrazeniaZLewejStrony, WartoscWyrazeniaZPrawejStrony, Operator)
62 EwaluujZmienna(X) Zmienna = SzukajZmienna(X) if (KategoriaZmiennej == intermediate) { return WnioskujWstecz(X) } else Wyrazenie = SzukajWyrazeniaKonkluzjiOkreslajacejZmienna(X) Akcja = SzukajAkcjiDlaWyrazenia(Wyrazenie) return EgzekutorAkcji(X, Akcja)
63 SprawdzRegule(X) RegulaPrawdziwa = true for each Przeslanka in PrzeslankiZwiazaneZRegula(X) { if (WartoscLogicznaPrzeslanka == null) EwaluujPrzeslanke(Przeslanka) } if (WartoscLogicznaPrzeslanka == false) return false) break i return true
64 EwaluujRegule(X) ZmienZmienna(ZmiennaOkreslanaPrzezRegule ,EwluujWyrazenie(WyrazenieWKonkluzjiReguly(X)) dodaj ZmiennaOkreslanaPrzezRegule do StosZmiennychWprzod
65 WnioskujWstecz(X) for each Reguly in WszystkieRegulyOkreslajaceWartoscZmiennejX { if SprawdzRegule(Regula) EwaluujRegule(Regula) } if (RegulaPrawdziwa == true)