Celem ćwiczenia jest zapoznanie się z regułową reprezentacją wiedzy i systemami ekspertowymi, które je wykorzystują.
W systemie ekspertowym można wyróżnić następujące elementy:
Rysunek 1: Struktura Systemu Ekspertowego.
clips -f family1.clp
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:
(agenda)
)?
Zadanie 1
Rozbuduj bazę reguł dodając do niej reguły definiujące relacje rodzinne takie jak
syn
, corka
malzenstwo
rodzenstwo
dziadkowie
, dziadek
, babcia
wnuk
, wnuczka
, wnuczek
kuzynostwo
ciocia
, wujek
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).
wiek
określających wiek danej osoby.defmodule
- jaką rolę odgrywają moduły 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. 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
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
File
⇒ New
⇒ Project…
.Drools
i ją rozwijamy.Drools Project
Next >
DroolsTest
.Next >
Next >
Drools Runtime
z listy Generate code compatible with:
wybieramy Drools 5.1 or above
.Finish
DroolsTest
⇒ src
⇒ main
⇒ java
⇒ com
⇒ sample
.*.java
. W tym pliku:Message
main
wszystkie linie, które korzystają z instancji tej klasy.Sample.drl
na ploc-drools.drl
.public enum PaymentType { single, instalments }
DroolsTest
⇒ src
⇒ main
⇒ rules
.Sample.drl
.ploc-drools.drl
:Kopiuj
.rules
i menu kontekstowego wybieramy opcję Wklej
.Run as
⇒ Java application
.
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.:
Zadanie 3
Dopisz regułę, która po przyznaniu wszystkich zniżek i zwyżek obliczy wartość końcową polisy ubezpieczenia.
calculation
(agenda-group „calculation”). accumulate
.Value
obiektu typu Result
.865.95
.
Zadanie 4*
Spróbuj zdefiniować powyższą regułę bez użycia accumulate
.