Agnieszka NOWAK * Roman SIMIŃSKI ** 1. WSTĘP

Podobne dokumenty
WPŁYW INFORMACJI STATYSTYCZNEJ NA EFEKTYWNOŚĆ SYSTEMÓW WSPOMAGANIA DECYZJI

Agnieszka NOWAK * 1. WSTĘP

SYSTEMY EKSPERTOWE W INTERNECIE PROJEKT WIELOPLATFORMOWEGO MODUŁU WNIOSKOWANIA WSTECZ DLA SYSTEMU Z REGUŁOWĄ REPREZENTACJĄ WIEDZY

Systemy ekspertowe. Wnioskowanie w systemach regułowych. Część piąta. Autor Roman Simiński.

PROJEKT CZĘŚCIOWO FINANSOWANY PRZEZ UNIĘ EUROPEJSKĄ. Opis działania raportów w ClearQuest

PODSTAWY SZTUCZNEJ INTELIGENCJI

Referat pracy dyplomowej

Integracja systemu CAD/CAM Catia z bazą danych uchwytów obróbkowych MS Access za pomocą interfejsu API

MODUŁ INTERNETOWY dane statystyczne PUP

Laboratorium 03: Podstawowe konstrukcje w języku Java [2h]

Realizacja ekstensji klasy. Paulina Strzelecka, Tomasz Roszkowski

Programowanie deklaratywne

Instrukcja zarządzania kontami i prawami

Języki skryptowe w programie Plans

Wydział Fizyki i Informatyki Stosowanej, Uniwersytetu Łódzkiego Łódź. Java podstawy języka, wykład 4 1

Ćwiczenie 1. Przygotowanie środowiska JAVA

Zasady programowania Dokumentacja

SSK - Techniki Internetowe

Systemy ekspertowe. PC-Shell. Sprawozdanie z bazy wiedzy

Podstawy obsługi aplikacji Generator Wniosków Płatniczych

Zaawansowane aplikacje WWW - laboratorium

11. Blok ten jest blokiem: a. decyzyjnym b. końcowym c. operacyjnym

Programowanie obiektowe zastosowanie języka Java SE

Instrukcja zmian w wersji Vincent Office

java.util.* :Kolekcje Tomasz Borzyszkowski

Zmienne powłoki. Wywołanie wartości następuje poprzez umieszczenie przed nazwą zmiennej znaku dolara ($ZMIENNA), np. ZMIENNA=wartosc.

Laboratorium modelowania oprogramowania w języku UML. Ćwiczenie 1 Wprowadzenie do narzędzia CASE. Materiały dla nauczyciela

Programowanie obiektowe. Literatura: Autor: dr inŝ. Zofia Kruczkiewicz

WSCAD. Wykład 5 Szafy sterownicze

GEO-SYSTEM Sp. z o.o. GEO-RCiWN Rejestr Cen i Wartości Nieruchomości Podręcznik dla uŝytkowników modułu wprowadzania danych Warszawa 2007

STWORZENIE BIBLIOTEKI SŁUŻĄCEJ DO WCZYTYWANIA

Temat: Dynamiczne przydzielanie i zwalnianie pamięci. Struktura listy operacje wstawiania, wyszukiwania oraz usuwania danych.

Formularz MS Word. 1. Projektowanie formularza. 2. Formularze do wypełniania w programie Word

Programowanie obiektowe

Systemy ekspertowe i ich zastosowania. Katarzyna Karp Marek Grabowski

Cele. Definiowanie wyzwalaczy

JAVA. Java jest wszechstronnym językiem programowania, zorientowanym. apletów oraz samodzielnych aplikacji.

Projekt ZSWS. Instrukcja uŝytkowania narzędzia SAP Business Explorer Analyzer. 1 Uruchamianie programu i raportu. Tytuł: Strona: 1 z 31

Kierunek: ETI Przedmiot: Programowanie w środowisku RAD - Delphi Rok III Semestr 5. Ćwiczenie 5 Aplikacja wielo-okienkowa

Laboratorium modelowania oprogramowania w języku UML. Ćwiczenie 4 Ćwiczenia w narzędziu CASE diagram czynności. Materiały dla studenta

Aby pobrać program FotoSender naleŝy na stronę lub i kliknąć na link Program do wysyłki zdjęć Internetem.

XII. Warunek wielokrotnego wyboru switch... case

Tutorial prowadzi przez kolejne etapy tworzenia projektu począwszy od zdefiniowania przypadków użycia, a skończywszy na konfiguracji i uruchomieniu.

Laboratorium modelowania oprogramowania w języku UML. Ćwiczenie 2 Ćwiczenia w narzędziu CASE diagram klas. Materiały dla nauczyciela


Systemy Rozproszone. Spis treści. Temat projektu: Regułowy system analizujacy logi. autorzy: Rafał Sadłowski, Sebastian Falkus, Michał Różycki

DOBÓR ŚRODKÓW TRANSPORTOWYCH DLA GOSPODARSTWA PRZY POMOCY PROGRAMU AGREGAT - 2

Liczby losowe i pętla while w języku Python

System wspomagania harmonogramowania przedsięwzięć budowlanych

Usuwanie Trojana Zbot/Zeus/Panda

1. Kalkulator czterech działań. 2. Konwersja ciągu znaków do tablicy.

Instrukcja warunkowa i złoŝona.

Optimizing Programs with Intended Semantics

Zadanie polega na stworzeniu bazy danych w pamięci zapewniającej efektywny dostęp do danych baza osób.

2. Podstawy programu Microsoft Access

Aplikacje WWW - laboratorium

Systemy eksperowe. Agnieszka Nowak Brzezińska Wykład I

Programowanie obiektowe

Programowanie obiektowe

SPOSOBY POMIARU KĄTÓW W PROGRAMIE AutoCAD

Politechnika Łódzka. Instytut Systemów Inżynierii Elektrycznej. Laboratorium cyfrowej techniki pomiarowej. Ćwiczenie 4

Podstawy i języki programowania

WYKONANIE APLIKACJI OKIENKOWEJ OBLICZAJĄCEJ SUMĘ DWÓCH LICZB W ŚRODOWISKU PROGRAMISTYCZNYM. NetBeans. Wykonał: Jacek Ventzke informatyka sem.

Współpraca Integry z programami zewnętrznymi

Opis podstawowych funkcji PC- SHELLa

Programowanie Obiektowe (Java)

Współbieżność i równoległość w środowiskach obiektowych. Krzysztof Banaś Obliczenia równoległe 1

9.5 Rozliczanie zaopatrzenia w przedmioty ortopedyczne i środki pomocnicze

Wprowadzenie. Organizacja pracy i środowisko programistyczne. Mirosław Ochodek

Krzysztof T. Psurek Politechnika Śląska Wydział Organizacji i Zarządzania

Lista, Stos, Kolejka, Tablica Asocjacyjna

Extensible Markup Language (XML) Wrocław, Java - technologie zaawansowane

Trochę o plikach wsadowych (Windows)

9.5 Rozliczanie zaopatrzenia w przedmioty ortopedyczne i środki pomocnicze

PREZENTACJE MULTIMEDIALNE cz.2

Opis obsługi programu KALKULACJA

PoniŜej znajdują się pytania z egzaminów zawodowych teoretycznych. Jest to materiał poglądowy.

Technologia informacyjna

Skarbnik CE na PocketPC 2003

Laboratorium przedmiotu Technika Cyfrowa

SYSTEM EKSPERTOWY WSPOMAGAJĄCY ORGANIZACJĘ PRACY FIRMY SPEDYCYJNEJ

ForPascal Interpreter języka Pascal

INWENTARYZACJA W PROGRAMIE INTEGRA

PLAN WYNIKOWY PROGRAMOWANIE APLIKACJI INTERNETOWYCH. KL III TI 4 godziny tygodniowo (4x30 tygodni =120 godzin ),

ZMODYFIKOWANY Szczegółowy opis przedmiotu zamówienia

Programowanie obiektowe

Laboratorium nr 4. Temat: SQL część II. Polecenia DML

Instrukcja uŝytkownika

Komunikator internetowy w C#

ZAPOZNANIE SIĘ ZE SPOSOBEM PRZECHOWYWANIA

Okno logowania. Okno aplikacji. 1. Logowanie i rejestracja

Instalacja Czytnika Kart w systemie Windows 7, Windows XP, Windows Vista, Windows 2000.

Reguły i fakty zapisz za pomocą perceptów. Metodą wnioskowania w tył, sprawdzić czy mój komputer jest wyposażony w procesor PII.

Smarty PHP. Leksykon kieszonkowy

Zapis algorytmów: schematy blokowe i pseudokod 1

Użycie Visual Basic for Applications ("VBA")

EKSPLOATACJA SYSTEMÓW TECHNICZNYCH - LAB. Wprowadzenie do zajęć

Laboratorium nr 5. Temat: Funkcje agregujące, klauzule GROUP BY, HAVING

Programowanie obiektowe

Przyczyny dwustopniowego tłumaczenia

Transkrypt:

systemy ekspertowe, regułowe bazy wiedzy, struktura bazy wiedzy, wnioskowanie. Agnieszka NOWAK * Roman SIMIŃSKI ** WYBRANE ZAGADNIENIA IMPLEMENTACJI WIELOPLATFORMOWEGO MODUŁU WNIOSKOWANIA WSTECZ INFER V 2.0 DLA SYSTEMU Z REGUŁOWĄ REPREZENTACJĄ WIEDZY SCHEMAT BAZY WIEDZY I BUDOWA STRUKTUR DANYCH Treść niniejszego opracowania obejmuje zagadnienie projektu regułowej bazy wiedzy dla systemu Infer v2.0 wieloplatformowego modułu wnioskowania wstecz.[5] Obok przedstawienia struktury i formatu bazy wiedzy omawianego systemu praca prezentuje równieŝ schemat najwaŝniejszych struktur danych niezbędnych do stworzenia tego systemu. 1. WSTĘP Celem niniejszej pracy jest prezentacja wybranych aspektów praktycznej realizacji wieloplatformowego modułu wnioskowania wstecz [4][5]. Moduł ten zwany Infer v 2.0 wykorzystuje regułową reprezentację wiedzy. Reguły przyjmują postać klauzul Horna, natomiast do zapisu literałów wykorzystuje się dwójki atrybut-wartość. Podstawowym celem realizowanych prac było opracowanie takiej wersji modułu, która moŝe działać niezaleŝnie od platformy sprzętowo-systemowej, z uwzględnieniem moŝliwości osadzenia aplikacji w środowisku WWW. Moduł ten stanowi kontynuację modułu Infer v 1.0 zaimplementowanego w języku C++[3]. Do realizacji wersji drugiej wybrano język Java umoŝliwiający osiągnięcie zakładanych celów projektowych. W trakcie tworzenia modułu rozwiązywano szereg praktycznych * Uniwersytet Śląski, Instytut Informatyki, 41-200 Sosnowiec, ul. Będzińska 39, nowak@us.edu.pl ** Uniwersytet Śląski, Instytut Informatyki, 41-200 Sosnowiec, ul. Będzińska 39, siminski@us.edu.pl

problemów implementacyjnych, w tej pracy zaprezentowano pewien wybrany aspekt dotyczący zagadnień wyboru dogodnych struktur danych opisywanego modułu. 2. STRUKTURA I FORMAT BAZY WIEDZY W systemie Infer v2.0 baza wiedzy jest plikiem tekstowym (*.txt). Dla potrzeb programu przyjęto pewne załoŝenia co do sposobu zapisu danych w bazie wiedzy, a mianowicie: baza wiedzy podzielona jest na 2 bloki: blok atrybutów i wartości oraz blok reguł, blok atrybutów i wartości jest zawarty między dwoma etykietami: AttrDefBegin a AttrDefEnd, blok reguł jest zawarty między dwoma etykietami: RuleDefBegin a RuleDefEnd, kaŝda pojedyncza reguła ma postać: konkluzja if przesłanka_1;przesłanka_2;przesłanka_3..., kaŝdy pojedynczy element takiej reguły (tj. konkluzja lub przesłanka) ma postać dwójki: <atrybut = wartość>, na podstawie bazy wiedzy uzupełniane są dla potrzeb programu następujące struktury: lista atrybutów, lista wartości atrybutów, lista reguł oraz lista faktów. Elementami kaŝdej reguły są: konkluzja, licznik warunków danej reguły oraz lista tych warunków. Lista faktów powstaje w trakcie wnioskowania i zawiera dwójki <atrybut = wartość> udowodnione, na podstawie reguł, odpowiedzi uŝytkownika. Rysunek nr 1 przedstawia schemat bazy wiedzy i schemat jej przetwarzania.[3][4] Rys. 1. Schemat bazy wiedzy Fig. 1. The structure of knowledge base

3. BAZA WIEDZY W MODULE INFER v 2.0 UŜytkownik po uruchomieniu modułu i wyborze jednej z proponowanych baz wiedzy ma moŝliwość przeglądu jej struktury w wielu postaciach: (i)podgląd całego pliku z bazą wiedzy, (ii)podgląd samych reguł, (iii)podgląd samych atrybutów i ich wartości, (iv)podgląd bazy wiedzy przedstawionej w postaci drzewa, gdzie wybierając dany atrybut w dodatkowym okienku dialogowym wyświetlane są informacje o liczbie jego wartości i o tym, czy atrybut ten jest konkluzją jakieś reguły i jeśli tak to ilu reguł. Z kolei wybierając wartość któregoś z atrybutów uzyskujemy informacje o tym, jakiego atrybutu ta wartość dotyczy i czy jest konkluzją jakiejś reguły i jeŝeli tak to ilu. Drzewo stworzone zostało takŝe dla reguł, gdzie dokładnie widać poziom zagnieŝdŝenia reguł w bazie wiedzy.[4] 4. STRUKTURY DANYCH WaŜnym etapem w czasie implementacji modułu Infer v2.0 było odpowiednie zaprojektowanie struktur danych, które wypełnione byłyby danymi z wiedzą zapisaną w pliku bazy wiedzy. Okazuje się bowiem, Ŝe do stworzenia efektywnego modułu wnioskowania niezbędne jest stworzenie wielu struktur danych: tablic, list, zmiennych globalnych. NaleŜy tak przetworzyć plik tekstowy, aby wypełnione zostały: lista atrybutów, wartości atrybutów oraz lista reguł, a w trakcie pracy modułu wypełniane będą pozostałe struktury: lista faktów, lista historii wnioskowania oraz pozostałe niezbędne dane. Wybrany język implementacji Java udostępnia potrzebne elementy i środki realizacyjne. Zawiera bibliotekę klas kontenerowych wspomagających bardziej wyszukane sposoby przechowywania obiektów. Jednym z podstawowych typów wspomnianej biblioteki klas kontenerowych jest klasa List. W omawianym module została wykorzystana klasa pochodna LinkedList -- zapewniająca optymalny dostęp sekwencyjny wraz z efektywnym usuwaniem i wstawianiem w środek listy. Dzięki metodom addfirst(), addlast(), getfirst(), getlast(), removefirst() oraz removelast(), moŝna jej uŝyć jako stosu, kolejki lub kolejki dwukierunkowej. Rysunek nr 2 prezentuje zastosowane w module Infer struktury danych bazujące właśnie na klasie kontenerowej LinkedList. [1][2] 5. REALIZACJA PODSTAWOWYCH FUNKCJI W MODULE INFER v 2.0 Moduł Infer v 2.0 realizuje wiele funkcji operacji na bazie wiedzy, zarówno przed procesem wnioskowania, w trakcie dowodzenia poprawności celu wnioskowania jak i po przeprowadzonym wnioskowaniu. Przed rozpoczęciem

wnioskowania, operacje te dotyczą odczytu wiedzy z pliku tekstowego i wypełnienia odpowiednich struktur danych. SłuŜy do tego funkcja ReadFromFile(nazwa_pliku). Rys. 2. Reprezentacja struktur danych w systemie Fig. 2. Representation of the system data structures PoniŜszy fragment tekstu zawiera poglądowy pseudokod funkcja ReadFromFile(nazwa_pliku). while ((b1=in.readline())!= null) if (b1.indexof(k_a)<0) // k_a <> [ATTR_DEF_END] if (b1.indexof("-") < 0) //atrybut... attrtable.add(atrybut);... else if (b1.indexof("-") > -1)//wartosc... valtable.add(wartosc);...

else // k_a = [ATTR_DEF_END] while (((b1=in.readline())!= null)&&(b1.indexof(k_r)<0 )) //ZAPIS KAZDEJ LINII - REGUŁY DO TABLICY ATOMY[W]... String atomy[] = b1.split("= if ;");... // ZAPIS KAZDEJ REGUŁY DO LISTY REGUŁ korzystając z funkcji add() kontenera LinkedList() rules.add(reguła); Korzystając z metody split() biblioteki wyraŝeń regularnych RegExp uzyskujemy tablicę rozdzielonych elementów wczytanych z kaŝdej linijki z pliku. Parametry wskazane w metodzie split() za pomocą separatorów słuŝą do rozdzielenia analizowanego tekstu na elementy zamieszczone pomiędzy tymi właśnie elementami [=,if, ;]. PoniŜszy schemat nr 3 przedstawia sposób konwersji pliku tekstowego na reguły pamiętane w listach kontenerowych. Rys. 3. Sposób konwersji pliku tekstowego Fig. 3. The method of knowledge base file conversion Teraz proste jest zapisanie tak podzielonych elementów reguły do listy reguł w strukturze kontenerowej. Do zapamiętania wszystkich ustawień wnioskowania dotyczących wybranego trybu pracy systemu, wybranej strategii doboru reguł oraz decyzji w kwestii realizacji

nawrotów czy opcji zakładających moŝliwość pamiętania w systemie tylko jednej wartości danego atrybutu słuŝą róŝnego typu zmienne globalne, których wartością steruje uŝytkownik systemu za pośrednictwem odpowiednich elementów interfejsu.. WaŜną cechą modułu Infer v 2.0 jest funkcja PlanWnioskowania(), która sprawdza czy wskazana hipoteza główna jest faktem w bazie wiedzy lub konkluzją którejś z reguł, i jeśli tak to w zaleŝności od wybranej strategii doboru reguł pokazuje nawet kolejność odpalania reguł przez maszynę wnioskującą. Dzieje się to jeszcze przed rozpoczęciem procesu dowodzenia poprawności celu działając na tych samych zasadach co maszyna wnioskującą i interpreter reguł. W module Infer v2.0 zaimplementowo wiele funkcji operujących na pliku z bazą wiedzy, wśród których najwaŝniejsze to: 1. runinference(atrybut, wartość) funkcja przeprowadza proces dowodzenia poprawności celu wnioskowania hipotezy podanej jako parametry funkcji. 2. facts.get(f) metoda klasy kontenerowej LinkedList(), którą jest m.in. lista faktów. Metoda get() pobiera kolejny element listy. 3. MatchToGoal(f) funkcja próbująca dopasować analizowany fakt do celu wnioskowania. Zwraca wartość true w sytuacji gdy porównywane wartości są identyczne. W przeciwnym przypadku zwraca wartość false. 4. SearchConclusionOfRules(r) funkcja sprawdza czy konkluzja analizowanej reguły daje się zunifikować z celem wnioskowania. Zwraca wartość true w przypadku sukcesu, false w przypadku poraŝki. 5. FireingRule(r) funkcja odpala daną regułę, czyli dla kaŝdego z jej warunków uruchamiany jest proces wnioskowania. Funkcja zwraca wartość true gdy dowodzenie poprawności dla kaŝdej przesłanki zakończyło się sukcesem. Wartość false zwracana jest jako rezultat funkcji wówczas, gdy co najmniej jedna przesłanka nie będzie prawdziwa. 6. AskForAttrValue(atrybut, wartość) funkcja pyta uŝytkownika o wartość analizowanego atrybutu, będącego warunkiem uaktywnionej reguły. Odpowiedź uŝytkownika dodawana jest jako nowy fakt do listy faktów. 7. showwhyexplanations() funkcja objaśnia uŝytkownikowi powód zapytania go o wartość danego atrybutu i jak podana przez niego odpowiedź wpłynie na drogę rozumowania prowadzonego przez maszynę wnioskującą. 8. showinferenceresults() funkcja ma na celu przedstawić dokładną drogę wnioskowania prowadzoną przez maszynę wnioskującą. Po wybraniu celu wnioskowania uruchamiany jest proces dowodzenia jego poprawności metodą wnioskowania wstecz. Realizuje to rekurencyjna funkcja RunInference(atrybut, wartość), której fragment przedstawiony został na poniŝszym schemacie.

runinference(atrybut, wartość) // najpierw przeszukiwana jest lista faktów for (int f=0 ; f < facts.size(); f++) facts.get(f); boolean fact = MatchToGoal(f); if (fact == true) f = facts.size()-1; if (fact == false) // celu nie ma w faktach // przeszukiwane są konkluzje reguł for ( int r=0 ; r < rules.size(); r++) boolean rules = SearchConclusionOfRules(r); if (rules == true) boolean fire_result = FireingRule(r); if ((fact == false) && (rules==false)) boolean ask = AskForAttrValue(atrybut, wartość); if ((fact==true) (fire_result==true) (ask==true)) return true; else return false; boolean MatchToGoal(int f) if ((fakt.attr == a)&&(fakt.valno == w)) return true; boolean FireingRule(int r) boolean iloczyn = 1; for (int w = 0 ; w <= liczba_war ; w++)... iloczyn = iloczyn * runinference(war_atr, war_val);... if (iloczyn == 1) return true; else return false; Rezultat funkcji jest pewną maską logiczną pozwalającą na poprawne wyjście z rekurencji. Funkcja RunInference() zwraca wartość całkowitą, czyli gdy rezultat = 1 to znaczy ze wszystkie przesłanki były prawdziwe a jeŝeli 0 tzn., Ŝe co najmniej jedna przesłanka nie została potwierdzona. [3][4][5]

6. PODSUMOWANIE Praca prezentuje schemat wykorzystania klas kontenerowych Javy do organizacji struktur danych przeznaczonych do przechowywania zawartości bazy wiedzy. Przedstawiona została struktura wewnętrzna modułu, schemat organizacji struktur danych oraz szkic metody ich przetwarzania. W rozwaŝaniach uwzględniono m.in. te właściwości Javy (oraz jej bibliotek), które pozwalają unikać wielu niedogodności typowych dla języka C/ C++, który był językiem implementacji poprzedniej wersji modułu Infer. LITERATURA [1] BOONE B., Java TM dla programistów C I C++., Warszawa, WNT, 1998 [2] ECKELL B., Thinking in Java, Helion, Gliwice, 2000 [3] NOWAK A., Realizacja modułu wnioskowania wstecz dla regułowej reprezentacji wiedzy, Praca licencjacka, Uniwersytet Śląski, Sosnowiec, 2000 [4] NOWAK A., Wieloplatoformowy moduł wnioskowania dla inteligentnych aplikacji internetowych, Praca magisterska, Uniwersytet Śląski, Sosnowiec, 2002 [5] http://www.inference.engine.prv.pl/ IMPLEMENTED OF THE MULTIPLATFORMED INFERENCE ENGINE MODULE INFER v 2.0 STRUCTURE OF THE KNOWLEDGE BASE AND MODEL OF DATA STRUCTURE This paper describes the project of the knowledge rule base of system Infer v 2.0 multiplatformed inference engine module. It is also contains structure of the knowledge base and describes the main data structures used in this system. The second part presents how to use container classes in Java language which were used in this module to keep the knowledge base data.