Spis treści

LAB: Regułowe systemy ekspertowe

Celem ćwiczenia jest zapoznanie się z regułową reprezentacją wiedzy i systemami ekspertowymi, które je wykorzystują.

1 Do przygotowania

2 Wstęp

W systemie ekspertowym można wyróżnić następujące elementy:

Rysunek 1: Struktura Systemu Ekspertowego.

3 CLIPS

Rodzina

  1. Ściągnij plik family1.clp.zip
  2. Po ściągnięciu pliku należy zawartą w nich wiedzę wczytać do bazy wiedzy a następnie uruchomić wnioskowanie przy pomocy komendy:
    clips -f family1.clp
  3. Po poprawnym załadowaniu na ekranie powinna ukazać się lista zdefiniowanych faktów.
  4. Tutaj także warto zwrócić uwagę czy nie wystąpiły jakieś błędy.

W CLIPS-ie mamy dostępne wnioskowanie w przód, a więc na podstawie istniejących faktów sprawdzane będą warunki reguł i te reguły, których warunki są spełnione zostaną uruchomione. Cykl ten powtarza się aż do momentu kiedy żadna reguła nie zostanie uruchomiona. Informacją wejściową dla algorytmu wnioskowania w przód jest zbiór faktów w bazie wiedzy.

Aby reguła opisująca dziecko mogła zostać uruchomiona należy zdefiniować regułę dodającą do bazy wiedzy fakt mówiący kto jest rodzicem kogo (zmiana bazy wiedzy spowoduje uruchomienie kolejnego cyklu wnioskowania):

(defrule rodzic
 (or (mama ?x ?y) (tata ?x ?y))
=>
 (assert (rodzic ?x ?y))
)

Uruchom wnioskowanie ponownie i odpowedz na pytania:

Zadanie 1
Rozbuduj bazę reguł dodając do niej reguły definiujące relacje rodzinne takie jak

Truth maintenance

Truth Maintenance System w systemach regułowych jest odpowiedzialny za utrzymanie spójności wiedzy w nich zawartych. Niespójność może być różna: niespójność logiczna wiedzy, niespójność materialna (w odniesieniu do interpretacji wiedzy w przyjętym świecie).

  1. Ściągnij plik family2.clp.zip
  2. Otwórz i zapoznaj się z jego zawartością. Zwróć uwagę na:
    • Definicję faktów wiek określających wiek danej osoby.
    • Definicję modułów defmodule - jaką rolę odgrywają moduły :?:
    • Dwie reguły zdefiniowane w pliku:
      • przyznaj-bilet::bilet-uczen która dla każdej niepełnoletniej osoby w dodaje fakt mówiący, że należy się jej bilet dziecięcy. Następnie reguła ta wyświetla kompletną listę faktów znajdujących się w bazie wiedzy.
      • zwieksz-wiek::zwieksz która zwiększa wiek dla danej osoby.
  3. Uruchom ściągnięty plik. Aby łatwiej było przeglądać rezultaty wyświetlane podczas uruchomienia, można użyć następującej komendy
    clips -f family2.clp | less

    Zaobserwuj jak zwiększany jest wiek poszczególnych osób oraz zidentyfikuj moment kiedy dodawany jest fakt typu bilet. Jakiego typu i dla kogo ten bilet jest dodawany :?:

Zadanie 1
Zdefiniuj regułę przyznaj-bilet::bilet-dorosly w analogiczny sposób jak zdefiniowana została reguła przyznaj-bilet::bilet-uczen. Uruchom otrzymany model i zaobserwuj jakie bilety istnieją w bazie wiedzy na końcu procesu wnioskowania.

Zadanie 2
Popraw otrzymany model poprzez zastosowanie mechanizmu Truth Maintenance System

4 Drools (dla zainteresowanych)

Model systemu PLOC

Celem systemu jest określenie wysokości składki ubezpieczenia na podstawie danych wejściowych. Danymi wejściowymi dla systemu są dane na temat kierowcy: wiek, okres posiadania prawo jazdy, liczba wypadków w ostatnim roku, dotychczasowa klasa ubezpie- czeniowa. Kolejnym elementem istotnym przy wyliczaniu składki ubezpieczenia są dane na temat pojazdu: pojemność silnika, wiek samochodu, liczba miejsc, badanie techniczne. Ostatnim elementem są zniżki oraz zwyżki za: liczbę rat, inne ubezpieczenia, ciągłość ubezpieczenia, liczbę samochodów ubezpieczonych. Wyliczenie składki ubezpieczenia przebiega w trzech etapach. Pierwszym etapem jest ustalenie stawki podstawowej na podstawie pojemności samochodu. Dane o wysoko- ści składki podstawowej są podane dla rejestracji w Szczecinie. Drugim etapem jest tzw. tabela bonus malus. Zawarte w niej są zniżki i zwyżki wynikające z bezszkodowego prze- biegu ubezpieczenia. Towarzystwa ubezpieczeniowe udzielają maksymalnie 60 % zniżki z tego tytułu. Za każdy bezszkodowy 12 miesięczny okres ubezpieczenia, klient przesuwa się o jedną klasę w dół tabeli. Trzecim etapem jest uwzględnienie pozostałych zniżek i zwyżek m.in. za wiek, dodatkowe ubezpieczenia itp.

Kompletna lista reguł: pl-oc.pdf

Uruchomienie modelu

  1. Ściągnij plik ploc-drools.drl.zip
  2. W celu uruchomienia bazy wiedzy zapisanej w ściągniętym pliku, uruchamiamy narzędzie Eclipse i tworzymy nowy projekt:
    1. Tworzymy nowy projekt FileNewProject….
      1. Na liście odnajdujemy pozycję Drools i ją rozwijamy.
      2. Wybieramy Drools Project
      3. Klikamy Next >
      4. W kolejnym korku kreatora podajemy nazwę projektu np. DroolsTest.
      5. Klikamy Next >
      6. W kolejnym kroku pozostawiamy zaznaczone tylko dwie pierwsze opcje.
      7. Klikamy Next >
      8. W kroku Drools Runtime z listy Generate code compatible with: wybieramy Drools 5.1 or above.
      9. Klikamy Finish
    2. W worksspace pojawia się nam nowy projekt do którego dodajemy klasy pozwalające na uruchomienie projektu:
      1. Rozwijamy drzewo projektu DroolsTestsrcmainjavacomsample.
      2. Klikamy na plik *.java. W tym pliku:
        • Usuwamy definicję klasy Message
        • Usuwamy w funkcji main wszystkie linie, które korzystają z instancji tej klasy.
        • Zmieniamy nazwę pliku z regułami z Sample.drl na ploc-drools.drl.
        • Do głównej klasy dodajemy definicję typu enumerowanego:
          public enum PaymentType {
              	single, instalments
              }
      3. Rozwijamy drzewo projektu DroolsTestsrcmainrules.
      4. Usuwamy plik Sample.drl.
      5. W miejsce usuniętego pliku dodajemy wcześniej ściągnięty plik ploc-drools.drl:
        1. Klikamy prawym przyciskiem na pobrany plik i wybieramy Kopiuj.
        2. Klikamy prawym przyciskiem na katalog rules i menu kontekstowego wybieramy opcję Wklej.
    3. Wybieramy polecenie Run asJava application.
    4. Jeżeli wszystko przebiegło pomyślnie to w konsoli środowiska Eclipse powinny pojawić się komunikaty generowane przez reguły.

Zadania

Zadanie 1
Wśród uruchamianych reguł można zauważyć, że atrybut DriverClass klasy Driver jest zwiększany wielokrotnie:

Zadanie 2
Model bazy wiedzy jest niekompletny i zawiera tylko część reguł z modułu base-charge-modifiers (agenda-group „base-charge-modifiers”). Na podstawie definicji innych reguł dopisz 4 ostatnie reguły podwyższające cenę ubezpieczenia zawarte w pliku pl-oc.pdf tzn.:

  1. liczba miejsc pojazdu (6-9): +20%,
  2. brak wałnego badania technicznego: +20%,
  3. opłata na 2 raty: +10%,
  4. brak zaświadczenia o przebiegu ubezpieczenia: +60%.

Zadanie 3
Dopisz regułę, która po przyznaniu wszystkich zniżek i zwyżek obliczy wartość końcową polisy ubezpieczenia.

Zadanie 4*
Spróbuj zdefiniować powyższą regułę bez użycia accumulate.