• Nie Znaleziono Wyników

Rozdział 6. Budowa i edycja bazy wiedzy

6.2. Reguły

Do realizacji zadań diagnostycznych zastosowano regułową strukturę odwzorowującą wiedze eksperta. Reguły przedstawione zostały w następującej postaci [20], [35], [31]:

If warunek1 AND warunek2 AND ...warunekN THEN konkluzja

Obiekty reguł w trybie edycji tworzone są według szablonu klasy ESRule, w której zadeklarowano cztery składowe:

int id;

boolean single;

ESConclusion conclusion; ESVectorConditions vConditions;

Każda reguła posiada inny numer id będący jej identyfikatorem. Jest to wartość pobrana ze zmiennej klasowej inkrementowanej podczas tworzenia nowego obiektu. Wartość przechowywana w kolejnym polu single określa czy instancja klasy reguły podczas wnioskowania będzie tworzona dla każdego warunku, od którego prowadzi relacja, czy wszystkie relacje z różnych warunków skupią się na jednym obiekcie tej reguły. Przykładem może być sytuacja, w której istnieją przesłanki różnych reguł, wykorzystujące podczas wnioskowania te same dane pobierane zawsze w taki sam sposób. Obok każdego takiego warunku możemy utworzyć oddzielną fasetę opisującą sposób organizacji tych danych. Jednakże lepszym rozwiązaniem będzie stworzenie jednej, dodatkowej reguły, której zadaniem jest wyłącznie pozyskiwanie nowych informacji.

Dwa następne pola to klasa opisująca konkluzji oraz wektor warunków.

W każdej regule występuje jedna konkluzja reprezentowana przez klasę ESConclusion zawierająca pięć pól.

ESVariableDB conclusion, otherVarFact; String cond1, cond2;

int operator;

Zmienne obiektowe conclusion oraz otherVarFact wskazują na utworzone wcześniej i zapisane na liście obiekty zmiennych. Obiekt conclusion musi zostać wskazany, ponieważ będzie on reprezentował konkluzję, będzie również traktowany podczas wnioskowania jako identyfikator faktu, gdy wszystkie warunki tej reguły zostaną uaktywnione. Drugi obiekt zmiennej otherVarFact jest opcjonalny i może zawierać informacje z obiektu faktu o tym samym identyfikatorze. Te informacje w części lub w całości mogą zostać

przypisywane jako wartości argumentów konkluzji, traktowane jak nowy fakt. Ciąg znaków zmiennej cond1, wykorzystując zapis skryptowy, wskazuje pod który indeks tablicy wartości z cond2 będą przypisane jako ostateczna wartość konkluzji. Wartością składowej „cond2” również może być zapis skryptowy generujący dane, pochodzące ze stałej value obiektu zmiennej otherVarFact lub obiektu faktu, który był wykorzystany w warunkach obecnej reguły.

Pojedynczy obiekt konkluzji może przybierać trzy stany zależnie od statusu warunków należących do tej samej reguły. Konkluzję określamy jako prawdziwą, gdy wszystkie warunki tej reguły są prawdziwe oraz fałszywą gdy przynajmniej jeden warunek jest fałszywy. Zanim reguła nie zostanie określona, status konkluzji jest nieznany. Konkluzja każdej reguły podczas wnioskowania traktowana jest jako fakt zawierający dane wykorzystywane przez warunki innych reguł połączonych relacjami. Możemy wyróżnić trzy podstawowe zapisy. Pierwszy to jedynie stwierdzeniem bez dodatkowych wartości argumentów, np.: nieprawidłowy zakres temperatury. Zapis taki może być prawdą lub fałszem. Występuje on wówczas, gdy zmienne cond1 i cond2 zostają puste.

Kolejny zapis pozwala przypisać do konkluzji wartości stałe, zależnie od statusu warunków. Wartości te mogą być później traktowane jako argumenty innych warunków. W ten sposób możemy zapisać np.: zakres temperatury = zbyt wysoki lub wartość

temperatury = 25.5‟C. W takim przypadku zmienna cond1 pozwala określić pozycję

w tablicy wynikowej dla wartości ze składowej cond2. Np. gdy cond1=*1; oraz

cond2=zbyt_wysoki dla obiektu zmiennej = „zakres temperatury”. Taki zapis staje się

faktem, gdy warunki danej reguły będą prawdziwe i oznacza przypisanie tekstu

„zbyt_wysoki” do tablicy wynikowej na pozycji pierwszej (*1). Ostatecznie konkluzja ma

następującą postać: zakres temperatury jest zbyt wysoki.

Rysunek 6.2. Zapis konkluzji z przypisaniem wartości stałej

Trzeci zapis, może zawierać dodatkowe informacje pochodzące z obiektu faktu, generowanego na podstawie informacji odebranych od fizycznych urządzeń lub operatora. Aby dane mogły być wykorzystane, obiekt faktu i otherVarFact muszą odnosić się do tego samego obiektu zmiennej, który również musi być składową jednego z warunków tej reguły.

Rysunek 6.3 przedstawia zapis konkluzji, w której przypisana zostanie wartość do pierwszego elementu tablicy cond1=*1 pochodząca z obiektu faktu, którego składową będzie obiekt zmiennej otherVarFact=DD016_51 na pozycji drugiej cond2=*2.

Rysunek 6.3. Zapis konkluzji z przypisaniem wartości pochodzącej z obiektu faktu

Istnieje również możliwość pobrania wartości stałej z obiektu zmiennej, w tym przypadku z DD016_51, poprzedzając numer elementu znakiem apostrofu np.: cond2=‟3.

Ostatnią składową klasy ESConclusion jest zmienna całkowita operator, której wartości odpowiadają kolejnym operatorom przypisania przedstawionym w tabeli poniżej:

Tabela 6.1. Operatory przypisania i porównania

Wartość (int) Operator Znaczenie

0 = równy

1 ! różny

2 < mniejszy

3 <= mniejszy lub równy

4 > większy

5 >= większy lub równy

Za pomocą tych operatorów możemy generować stwierdzenia, mówiące np., że wartość określona przez zmienna cond2 jest równa, różna, mniejsza lub większa od wskazanego argumentu. Takie stwierdzenie będzie prawdziwe wówczas, gdy wszystkie warunki danej reguły będą prawdziwe.

W jednej regule może występować wiele warunków, z których każdy jest tworzony według jednej klasy ESCondition składającej się z następujących pól:

ESVariableDB condition, otherVarFact; String cond1, cond2;

int operator; ESFaset faset; boolean nextRule, answerTrue;

int compareAmount;

boolean compareOne;

Pięć pierwszych pozycji ma bardzo podobne znaczenie, jak w przypadku konkluzji z tą różnicą, że wartości wskazane przez cond1 i cond2 są porównywane, a nie przypisywane. Zapis skryptowy cond1 odnosi się do zmiennej condition lub obiektu faktu związanego z tą

zmienną, natomiast cond2 z otherVarFact. Możemy również porównywać bezpośrednio wpisane ciągi znaków. Gdy otherVarFact nie zostanie wybrany, zapis w zmiennej cond2 będzie się odnosił do elementów związanych z zmienną condition.

Rysunek 6.4. Okno dialogowe – Edit Condition z przykładowymi parametrami.

Według zapisu przedstawionego na rysunku 6.4 wynika, iż warunek będzie prawdziwy jeżeli wartość faktu na pozycji pierwszej (*1;) będzie mniejsza lub równa 10, lub na pozycji drugiej (*2;) będzie mniejsza lub równa 20. Operator logiczny pomiędzy grupami porównywanych elementów określony jest przez pole compartOne. Gdy jego wartość jest

true, obowiązuje operatora logiczny OR, w przeciwnym razie operatora AND. Liczbę

pozycji w grupie wskazuje zmienna całkowita compareAmount.

Znaczenie składowych compareOne oraz compareAmount dokładniej opisano w rozdziale „Wnioskowanie” w części „Porównywania argumentów warunku”.

Sposób pozyskiwania faktu związanego z obiektem zmiennej condition opisany jest w klasie ESFaset. Metody i atrybuty tej klasy zostały przedstawione w oddzielnej części pracy.

Zmienna „answerTrue” reprezentowana przez pole wyboru, przedstawiona na rysunku 6.4 „Gdy jest fakt zwróć TRUE” zwraca prawdę dla warunku, gdy według fasety pobrany zostanie obiekt faktu. Gdy zawartość tej zmiennej będzie równe TRUE, wartości zwrócone przez zapis skryptowy zmiennych cond1 i cond2 nie będą już porównywane. W takim przypadku nie ma znaczenia wartość zmiennej value faktu, lecz samo zjawisko jego pojawienia się. Wartości obiektu zmiennej tego faktu musi być taki, jak obiekt condition.

Konkluzja reguły jest prawdziwa, gdy wszystkie przesłanki tej reguły są prawdziwe lub fałszywa, gdy przynajmniej jedna przesłanka jest fałszywa. Pomiędzy przesłankami w jednej regule, domyślnie obowiązuje tylko jeden operator AND. Użycie operatora OR wymaga zastosowanie dodatkowej reguły ze zmienną pomocniczą. Poniższe przykłady ukazują sposób budowy reguł, wykorzystując operatory AND oraz OR.

Podział na dodatkowe obiekty, powoduje iż każda reguła utworzona na potrzeby jednego warunku, może być użyta wielokrotnie przez inne reguły w dowolnym miejscu bazy reguł. Rozbicie wiedzy na dodatkowe bloki ma na celu zminimalizowanie powtarzających się fragmentów zapisu wiedzy oraz jego uproszczenie.

Wielokrotne użycie tej samej reguły w procesie wnioskowania dla jednego przypadku, nie powoduje jej powielania, lecz tworzone są do niej jedynie nowe relacje.

IF (DD000_2 AND DD000_3) THEN DD000_1 IF (DD000_4) THEN DD000_1 IF (DD000_2 OR DD000_3) THEN DD000_4 czyli: IF (DD000_2 OR DD000_3) THEN DD000_1 IF (DD000_4) THEN DD000_1 IF ((DD000_2 AND DD000_3) OR (DD000_5 AND DD000_6)) THEN DD000_4 Czyli: IF ((DD000_2 AND DD000_3) OR (DD000_5 AND DD000_6)) THEN DD000_1 IF (DD000_4 AND DD000_7) THEN DD000_1 IF ((DD000_2 AND DD000_3) AND (DD000_5 AND DD000_6)) THEN DD000_1 Czyli: IF ((DD000_2 AND DD000_3) AND (DD000_5 AND DD000_6)) THEN DD000_1

Rysunek 6.5. Struktura reguł ukazująca relacje logiczne

Do budowy bazy reguł odwzorowującej wiedzę eksperta wykorzystano interfejs graficzny, który daje lepszy obraz relacji pomiędzy konkluzjami i warunkami reguł w stosunku do zapisu tekstowego. Wybieranie obiektu do edycji odbywa się poprzez kliknięcie kursorem myszy w jego obszar, a następnie wybranie jednej z dostępnych opcji na pasku narzędziowym. Są to: usuwanie reguły, edycja konkluzji, edycja warunków, ukrywanie reguły, czyszczenie panelu, wybieranie reguły do wizualizacji. Dodatkowo, szczegółowe informacje o zaznaczonym obiekcie wyświetlane są w dolnej części panelu „Edit DB”. Jeżeli baza reguł była już wcześniej utworzona, możemy wybrać jedną z dostępnych na liście regułę, a następnie edytować jej składniki. Po wybraniu wskazanej reguły zostaną również wyświetlone reguły połączone z nią relacjami w postaci niebieskiej lub czerwonej linii. Kolor niebieski to relacje warunku jednej reguły z konkluzją drugiej, których obiekty zmiennych są takie same oraz spełnione są następujące warunki:

If(eSRule.conclusion.conclusin==eSCondition.condition)

if((eSRule.single && eSRule.conclusion.cond2.equals(eSCondition.cond2))||

(!eSRule.single) || (eSCondition.answerTrue) || (eSRule.conclusion.otherVarFact!=null))

Argumenty instrukcji if występujące w powyższym zapisie przedstawione były w poprzednich podrozdziałach jako składowe reguły ESRule, warunku ESCondition oraz konkluzji ESConclusion.

W pierwszej kolejności sprawdzane są identyfikatory obiektów zmiennych. Jeśli wynik jest pozytywny sprawdzany jest kolejny warunek. Relacja może być utworzona gdy reguła jest pojedyncza single=true oraz wartości zmiennych cond2 konkluzji i warunku są równe lub gdy single=false lub answerTrue= true lub jest przypisany obiekt zmiennej otherVarFac. Czerwony kolor odpowiada wartości false zmiennej nextRule, nie pozwala szukać rozwiązania w regułach spełniających warunki relacji. Natomiast kolor niebieski to wartość true nakazujące korzystanie z reguł wskazanych relacjami.

Rysunek 6.6. Graficzna reprezentacja wiedzy w trakcie projektowania bazy reguł.

Każda pojedyncza reguła przedstawiana jest w trybie graficznym w formie prostokąta, w którym wyświetlana jest lista nazw obiektów zmiennych. Nazwa składa się z trzech części identyfikujących obiekt zmiennej klasy ESVariableDB, są to kolejno: „group”, „type” oraz „id” oddzielony dolną linią poziomą np.: „DD016_52”.

Pierwsza pozycja na liście obiektu reguły przedstawia odwołanie do konkluzji, pozostałe to odwołania do warunków. Zielony kolor tekstu konkluzji informuje, iż występuje relacja z przynajmniej jednym warunkiem innej reguły, natomiast kolor niebieski jej brak. Kolor żółty warunku to informacja o połączeniu z inną regułą, brak takiego połączenia jest przedstawiany kolorem czerwonym.

Litera „F” świadczy o utworzonym obiekcie fasety, w której opisany został sposób organizacji danych dla danego warunku. Jeżeli w tej fasecie zapisano zadanie utworzenia nowego obiekt faktu, to po znaku fasety zostanie umieszczona kropka „F.”. Kolor kropki uzależniony jest od ustawień fasety NewFact, gdzie kolejne kolory: czerwony, zielony i biały odpowiadają opcjom tworzenia nowego faktu, gdy główny warunek będzie miał wartość false, true lub będzie nie określony. Wartość zmiennej id klasy ESRule jako identyfikator reguły wyświetlany jest w prawym górnym rogu poprzedzony dużą literą „R”.

Tło reguły zależy od ustawień zmiennej „single”, opisanej w części poświęconej regułom. Gdy wartością tej zmiennej jest logiczna prawda, tło wyświetlane jest w kolorze niebieskim, w przeciwnym razie w kolorze granatowym [31].

W dokumencie Index of /rozprawy2/10413 (Stron 76-82)

Powiązane dokumenty