04 Systemy ekspertowe, politechnika infa 2 st, Projektowanie Systemów Informatycznych


Programowanie i Systemy ekspertowe

  1. Pojęcie programu komputerowego. Klasyfikacja języków programowania.

Program komputerowy to ciąg instrukcji, które wykonywane są na komputerze.

Klasyfikacja języków programowania:

j. ogólnego przeznaczenia: Algol, Fortran, Modula, Ada, Java.

j. specjalne: Prolog, Smaltalk, Lisp

j. bazowodanowe: SQL, dBase, Snobol, Cobol.

  1. Cechy programowania strukturalnego.

- Wykorzystanie bloków funkcyjnych z zainstalowanych bibliotek.

- Tworzenie funkcji użytkownika i bloków funkcyjnych. Powtórne wykorzystanie

programowania jest niezależne od urządzeń i adresów

- rekordy ( we wcześniejszych wersjach programowania nie było ich )

  1. Dane alokowane statycznie a dynamicznie.

Dane alokowane statycznie dołączane są do programów. Oznacza to że w czasie wykonywania programu kopia wszystkich danych wykorzystanych w programie przebywa w pamięci komputera.

Dane alokowane dynamicznie mogą być tworzone i usuwane z pamięci komputera.

  1. Pojęcie i cechy typu oraz zmiennej.

Przez zmienną rozumie się obszar pamięci wraz z zapisaną w niej informacją. Informacji można nadawać różne znaczenia, nazywane wartością zmiennej. Funkcję przyporządkowującą wartość konkretnemu obszarowi pamięci (informacji) czyli sposób zinterpretowania ciągu bitów nazywamy typem zmiennej. Każda zmienna ma w każdej chwili dokładnie jeden typ, ustalany podczas procesu obliczeniowego.

  1. Metody przekazywania parametrów do podprogramów.

np. -przez wartość

void test1(double xx, double yy, int ii)

{

xx=xx+1.5;

yy=2.5*yy;

}

np. -przez referencję (dokładniej o co chodzi z referencją)

void main()

{ int actualint = 123;

int &otherint = actualint;

cout<< actualint; //123

cout<< otherint; //123

otherint++;

cout<< actualint; //124;

cout<< otherint; //124

actualint++;

cout<<actualint; //125

cout<< otherint; //125

}

Czasami w kontekście języka C mówi się o przekazywaniu parametrów przez referencje, mając na myśli wskaźniki. Jest to nieścisłe nazewnictwo. Przesyłanie przez referencję stosuje się w przypadku, gdy argumentami funkcji są duże obiekty, do przesyłania których przez wartość konieczne było rezerwowanie na stosie setek bajtów.

  1. Metody translacji programów.

Języki wysokiego poziomu dzielą się one w zależności od metody translacji (tłumaczenia kodu) na kompilatory (możliwość przedstawienia programu w postaci skompilowanej czyli przetłumaczonej dla maszyny) i interpretery (tłumaczenia "w locie", znacznie wolniejsze i wymagające każdorazowej translacji po uruchomieniu programu). Do tych pierwszych zalicza się popularny Pascal, do tych drugich Logo.

TRANSLACJA to tłumaczenie programu na język wewnętrzny komputera, wykonywane za pomocą wyspecjalizowanego programu, tzw. translatora. Wyróżniamy dwa typy translacji: kompilację i interpretację.

Po napisaniu ciągu instrukcji w wybranym języku programowania należy zapisać program w pliku na nośniku pamięci zewnętrznej, np. dysku twardym, oraz wykonać jego kompilację, czyli uruchomić proces tłumaczący instrukcje na język zrozumiały dla procesora. Po poprawnym przeprowadzeniu kompilacji można program uruchomić.

W zależności od języka programowania i wersji programu służącego do pisania programów plik utworzony w takim programie może mieć różne rozszerzenia, np. programy pisane w Turbo Pascalu mają rozszerzenie pas.

Pisanie programów w języku programowania RAM umożliwia program edukacyjny EI - moduł COMPUTER systemu DISC-MATH. Korzystając z niego można nie tylko napisać program, ale także przeprowadzić jego kompilację, a następnie uruchomić. W dokumentacji do programu opisano zasady korzystania z całego modułu komputer.

KOMPILACJA - przetłumaczenie napisanego przez nas programu w całości, tak by mógł on być wykonany przez komputer przy każdorazowym uruchomieniu. Raz skompilowany program nie wymaga już powtórnej operacji tłumaczenia. Do wykonania kompilacji służą programy narzędziowe - kompilatory.

INTERPRETACJA - tłumaczenie programu tworzonego w jednym z języków programowania instrukcja po instrukcji, tak by każda wywołana instrukcja była wykonana przez komputer. Tłumaczenie następuje każdorazowo przy uruchomieniu programu.

  1. Pojęcie tablicy w językach programowania. Tablice o zmiennej liczbie elementów.

Tablica składa się z ustalonej liczby elementów tego samego typu, zwanego typem składowym, który może być zarówno typem prostym lub łańcuchowym, jak i typem strukturalnym. Za pomocą tablic reprezentowane są regularne układy danych, np. wektory i macierze. Dostęp do tablic uzyskuje się za pomocą indeksowania. Indeksem może być dowolne wyrażenie, którego wartość jest zgodna w sensie przypisania z typem indeksowym.

index

0

1

2

3

4

5

6

7

8

9

wartość

0

0

0

0

0

0

0

0

0

0

Pascal: Tablica: array[0..9] of integer; tablica statyczna

Tablica: ^typ_elementow_tablicy; tablica dynamiczna

lub

type wskaznik_tablicy = ^char;

var tablica: wskaznik_tablicy;

Funkcje i procedury modułu system wykorzystywane przy dynamicznej obsłudze pamięci:

Getmem Procedura ta tworzy zmienną dynamiczną o nazwie zmienna wskaźnikowa i rozmiarze rozmiar podanym w bajtach, rozmiar to wyrażenie typu Word.

Freemem Procedura ta zwalnia pamięć uprzednio przydzieloną zmiennej zmienna wskaźnikowa procedurą GetMem.

Move Procedura ta kopiuje kolejne bajty począwszy od pierwszego a skończywszy na osiągnięciu wartości podanej w licznik ze zmiennej źródłowej do zmiennej docelowej.

MaxAvail Funkcja ta podaje w bajtach rozmiar największego wolnego bloku w segmencie przeznaczonym na zmienne dynamiczne.

MemAvail Funkcja ta podaje w bajtach sumę rozmiarów wszystkich wolnych bloków w segmencie przeznaczonym na zmienne dynamiczne.

SizeOf Funkcja ta zwraca w bajtach rozmiar identyfikatora.

FillChar Procedura ta wypełnia pamięć zajmowaną (wskazywaną) przez zmienną zmienna elementami znak wypełnienia.

C++: int Tablica[9]; tablica statyczna

wsk = new typ[wymiar]; tablica dynamiczna

np.

w= new char [10];

delete [ ] w;

  1. Moduły dołączane statycznie a biblioteki DLL.

Moduły dołączane statycznie: oznacza to że w czasie kompilacji kopia kodu wszystkich modułów wykorzystywanych prze program umieszczana jest w pliku programu z rozszerzeniem EXE. Zatem każdy program który korzysta z danego modułu posiada oddzielną jego kopię w pliku EXE.

Dwa powody aby nie używać modułów statycznie dołączanych:

Moduły dołączane dynamicznie: Zamiast dołączać kopię kodu modułu głównego do głównego pliku EXE aplikacji, DLL umożliwia umieszczenie wielokrotne wykorzystywanego kodu w oddzielnym pliku bibliotecznym, który ładowany jest w razie potrzeby w fazie wykonania. Jeśli z funkcji znajdujących się w bibliotece DLL musi skorzystać 5 różnych programów, na dysku jest wciąż jedna kopia programu a co najważniejsze, tylko jedna kopia w pamięci. I to jest właśnie elastyczność.

  1. Pojęcie i struktura bloku w językach Pascal i C.

Pascal

C++

Blok DD (deklaracyjno definicyjny)

Definicje stałych, typów, zmiennych, podprogramów (funkcji, procedur)

0x08 graphic
0x08 graphic
Część wykonawcza (blok)

Begin

Instrukcje;

End;

{

Instrukcje;

}

  1. Funkcje przeciążone w wybranych językach programowania. Zastosowanie.

Przeciążanie funkcji (ang. overloading), to tworzenie w programie kilku funkcji o tych samych nazwach. Każda z funkcji musi mieć inną liczbę lub typy przyjmowanych argumentów. Kompilator rozpoznaje właściwą funkcję na podstawie typów i ilości argumentów w miejscu wywołania.

Przeciążanie funkcji jest stosowane tam, gdzie przeprowadzane są takie same obliczenia na różnych typach danych.

Np.

Pascal

C++

function Podziel(x, y: Real): Real; overload;

begin

Result := x / y;

end;

function Podziel(x, y: Integer): Integer; overload;

begin

Result := x div y;

end;

Int polePowierzchni(int bokX,int bokY);

Double polePowierzchni(double bokX,double bokY);

int main()

{ int a=5,b=4; double c=5.8,d=3.2;

cout<<" arg. całkowitymi " << polePowierzchni(a,b) <<'\n';

cout<<"arg. rzeczywistymi " <<polePowierzchni(c,d)<<endl;

return 0;

} //definicja funkcji

int polePowierzchni(int bokX,int bokY)

{ return bokX*bokY; }

double polePowierzchni(double bokX,double bokY)

{ return bokX*bokY; }

  1. Rodzaje plików w wybranych językach programowania.

Rodzaje plików:

Jest to zbiór składający się ze znaków ASCII. Poszczególne informacje zwykle znajdują się w kolejnych wierszach. Każdy wiersz zakończony jest dwoma znakami (CR/LF).

Nie są zwykle przeznaczone do bezpośredniego oglądania, zawierają binarne informacje, które zrozumiałe są jedynie dla określonych programów.

Określamy tutaj strukturę elementów, z których składać się będzie informacja zawarta w pliku. Struktura ta jest zwykle rekordem zawierającym pola różnego typu.

Pliki niezdefiniowane pozwalają na bardziej elastyczną pracę. Możemy skoczyć w dowolne miejsce takiego pliku, zmienić lub odczytać pojedynczy bajt czy cały blok. Nie mamy obowiązku tworzenia na sztywno jakiejś konkretnej struktury związanej z plikiem. Musimy jednak wiedzieć dokładnie jaki element nas interesuje i w którym miejscu się on znajduje.

  1. Podział instrukcji w wybranych językach programowania.

0x08 graphic
Pascal:

0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic

0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic

0x08 graphic
0x08 graphic

0x08 graphic

0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic

0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic

0x08 graphic
0x08 graphic

0x08 graphic
0x08 graphic

0x08 graphic
0x08 graphic

0x08 graphic
C++:

0x08 graphic
0x08 graphic

0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic

0x08 graphic

0x08 graphic
0x08 graphic
0x08 graphic

0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic

0x08 graphic
0x08 graphic

0x08 graphic

  1. Instrukcje warunkowe.

Pascal

C++

  • Instrukcja IF

if (i=15) then

coś tam

else

coś tam innego;

=

  • Instrukcja IF

if (i==15)

{ coś tam }

else

{ coś tam innego}

  • Instrukcja CASE

Case i of

1: coś tam;

2: coś tam innego;

end;

=

  • Instrukcja SWITCH - CASE - BREAK

Switch{

Case 1: co stam; break;

Case 2: co stam innego;

break;

Default: co stam innego;

break;}

  • Pętla FOR

For i=0 to 9 do

coś tam;

=

  • Pętla FOR

for(i=0;i<10;i++)

{

}

  • Pętla WHILE

while (i <= 10)

coś tam;

=

  • Pętla WHILE

while (i <= 10)

{ coś tam }

lub

do

{ coś tam }

while (i <= 10);

  • Petla REPEAT

Repeat

coś tam

Until i <>10;

=

  1. Programowanie proceduralne a obiektowe.

Programowanie proceduralne polega na stosowaniu procedur operujących danymi. Dane mogą być reprezentowane przez ciąg znaków, tablice, liczby lub dowolne inne struktury.

W programowaniu obiektowym dane i kod są połączone. Razem tworzą obiekt. Tak zorganizowane programowanie jest dla nas bardziej naturalne.

Programowanie proceduralne

Programowanie obiektowe

Zmienna

Wartość zmiennej

Typ

Funkcja/Procedura

Wywołanie funkcji/procedury

Hierarchia typów

Obiekt

Stan

Klasa

Metoda

Komunikat

Hierarchia klas

0x01 graphic

  1. Procedury a funkcje w językach programowania.

Ogólna składnia procedury jest następująca:

procedure Nazwa_procedury (Parametry); dyrektywa;

blok_danych; {opcjonalnie}

blok_kodu;

Nazwa_procedury jest identyfikatorem, za pomocą którego będziemy się do niej zwracać. Jako parametry możemy podawać różne wartości przyjmowane przez procedurę. Jeśli w danej procedurze zostaje wywołana ta sama procedura, to nazywamy to rekurencją. Podczas wywoływania procedury rekurencyjnie na stosie zapamiętywany jest aktualny adres oraz wartości wszystkich zmiennych lokalnych, dzięki temu po zakończeniu wykonywania się procedury, następuje powrót do miejsca, z którego wywołanie nastąpiło oraz wszystkie zmienne przywracają swoje pierwotne wartości.

Ogólna składnia funkcji jest następująca:

function Nazwa_funkcji (Parametry) : Typ_rezultatu; dyrektywa;

blok;

Każda funkcja zwraca jakąś wartość. W bloku funkcji musimy więc zamieścić zapis: Nazwa_funkcji:=wartość;

  1. Instrukcje iteracyjne w wybranych językach programowania.

Odp. Pyt 13 (część)

  1. Cechy programowania obiektowego.

  1. Kolejki a stosy.

Stos jest strukturą danych składającą się z liniowo uporządkowanych zbiorów składników (elementów), z których tylko „największy” jest w danej chwili dostępny. Miejsce dostępu nazywa się wierzchołkiem stosu. Jest to jedyne miejsce, do którego można dołączyć lub z którego można usuwać elementy. Schemat organizacji stosu jest przedstawiony poniżej. Każdy składnik stosu posiada wyróżniony element (wskaźnik), który wskazuje składnik następujący po nim (dokładniej: adres tego składnika). Wskaźnik ostatniego składnika stosu wskazuje na adres pusty - nil.

0x08 graphic

0x08 graphic
0x08 graphic
0x08 graphic

Dane

Wskaźnik

Składnik 1

Dane

Wskaźnik

Składnik 3

Dane

Wskaźnik

Składnik 2

Dane

Wskaźnik

Składnik n

0x08 graphic
0x08 graphic
Wejście

Wyjście

Kolejka jest strukturą liniowo uporządkowanych danych w której dołączać nowe dane można jedynie na koniec kolejki a usuwać z początku. Procedura usunięcia danych z końca kolejki jest taka sama, jak w przypadku stosu, z tą różnicą, że usuwamy dane od początku a nie od końca. Pierwszy element (a dokładniej wskaźnik do jego miejsca w pamięci) musi zostać zapamiętany, by możliwe było usuwanie pierwszego elementu w czasie stałym O(1). Gdybyśmy tego nie zrobili, aby dotrzeć do pierwszego elementu należałoby przejść wszystkie od elementu aktualnego (czyli ostatniego), co wymaga czasu O(n). Działanie na kolejce jest intuicyjnie jasne, gdy skojarzymy ją z kolejką ludzi np. w sklepie. Każdy nowy klient staje na jej końcu, obsługa odbywa się jedynie na początku.

0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic

Dane

Wskaźnik

Składnik 1

Dane

Wskaźnik

Składnik 2

Dane

Wskaźnik

Składnik 3

Dane

Wskaźnik

Składnik n

0x08 graphic

0x08 graphic
Wyjście

  1. Podział typów danych w wybranych językach programowania.

0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
Pascal:

0x08 graphic

0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic

0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic

0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic

0x08 graphic
0x08 graphic
0x08 graphic

0x08 graphic
0x08 graphic
0x08 graphic

0x08 graphic
0x08 graphic
0x08 graphic

0x08 graphic
0x08 graphic

0x08 graphic

0x08 graphic
0x08 graphic
0x08 graphic
C++:

0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic

0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic

0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic

0x08 graphic

0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic
0x08 graphic

0x08 graphic

0x08 graphic

  1. Czym różni się system ekspertowy od typowego systemu informacyjnego.

Systemy ekspertowe poprzez pewne techniki naśladujące ludzkie rozumowanie, wykorzystują zgromadzoną wiedzę do rozwiązania konkretnego problemu. Każdy system ekspertowy posiada następujące cechy:

  1. Metody reprezentacji wiedzy w bazach wiedzy systemów ekspertowych.

Wiedza

Wiedza oraz wnioskowanie to kluczowe elementy każdego systemu ekspertowego. Pod pojęciem wiedzy kryje się zbiór wiadomości z określonej dziedziny - konkretny wynik procesu uczenia się oraz bagaż doświadczeń. Wiedza z danej dziedziny przenoszona jest w określony język reprezentacji, a także zapisywana w bazach wiedzy .

Metody reprezentacji wiedzy

Za pomocą metod reprezentacji wiedzy można generować świat rzeczywisty i panujące w nim zależności, oddziaływania. Odbywa się to naturalnie z wykorzystaniem komputerów. Oto najpopularniejsze metody reprezentowania wiedzy (zwane też technikami organizowania baz wiedzy):

Powyżej zostały zaprezentowane metody reprezentacji wiedzy, które są najbardziej rozpowszechnione. Istnieje także inna gałąź w tej dziedzinie, zwana reprezentacjami niesymbolicznymi. Do tego grona należą między innymi sieci neuronowe, które symulują działanie komórek nerwowych oraz algorytmy genetyczne, wykorzystujące tak zwane geny, jako podstawowe źródło informacji.

Regułowa reprezentacja wiedzy

Jedną z najważniejszych metod reprezentacji wiedzy są metody oparte o regułach. By określić dane środowisko, należy zdefiniować panujące w nim reguły. Zapis samych stwierdzeń jest stanowczo niewystarczający. Reguły zapisujemy w następujący sposób:

IF przesłanka THEN konkluzja

oraz

IF przesłanka THEN działanie (produkcja)

W zapisie formalnym, regułowa reprezentacja wiedzy obejmuje:

Wszystkie te sposoby zaliczają się do reprezentacji regułowej. Ich końcowa forma stanowi zazwyczaj deklarację reguły, choć różnie zapisanej w zależności od sposobu zapisu.

Regułowa baza wiedzy składa się zawsze z dwóch części:

W ten sposób można wygenerować pewną rzeczywistość opartą o wymienione struktury zdaniowe. "Zdecydowana większość powstałych do tej pory systemów ekspertowych jest oparta na regułach. Podejście to umożliwia uzyskanie dużej modularności bazy wiedzy".

Rodzaje reguł

Rozpatrując sposób uzyskiwania ostatecznych konkluzji w procesie wnioskowania, wyszczególnia się dwa rodzaje reguł:

Jeśli chodzi o reguły proste, to nie posiadają one zbyt rozbudowanych przesłanek. "Niezbędne jest przeprowadzenie rozumowania polegającego na uszczegółowieniu wniosków pośrednich". Proces ten kończy się w momencie uzyskania konkluzji. Udowodnione wnioski pośrednie stanowią łańcuch obrazujący proces wnioskowania. Łatwość weryfikacji zbioru reguł, a także ograniczenie ich redundancji, to cechy charakterystyczne reguł prostych. Ich największą wadą jest złożoność wnioskowania i dłuższy czas udowadniania hipotezy. Reguły złożone nie wymagają skomplikowanych modułów wnioskowania o skomplikowanym sposobie działania. Bardzo ważne jest to, że "każda z reguł w konkluzji zawiera jakiś wniosek końcowy". By osiągnąć wynik, niejednokrotnie wystarczy uaktywnić tylko jedną regułę. Niestety trudno tutaj sformułować odpowiedni zbiór reguł. Wadą reguł złożonych jest także skomplikowany sposób weryfikacji i uzupełniania bazy reguł .

Wady i zalety regułowej reprezentacji wiedzy

Zapis informacji z danej dziedziny wiedzy powinien być prosty, wyczerpujący oraz zwięzły. Nie może zawierać elementów domyślnych, niezrozumiałych bądź wieloznacznych. Niestety w chwili obecnej ciężko o jakąkolwiek standaryzację i formalizację sposobów zapisywania wiedzy. Największy problem stanowi zapis informacji warunkowych, sprzecznych, a także wyjątków. Kłopot stanowi także ocena prawdziwości informacji - zwłaszcza w przypadku, gdy pośród specjalistów z danej dziedziny panują skrajnie różne opinie na dany temat. Istnieje także ryzyko w stosunku do reguł prawdziwych z dużym prawdopodobieństwem w większości przypadków, iż zapis może prowadzić do sprzeczności. Oto powszechnie znany przykład:

Zalety regułowej reprezentacji wiedzy:

Wady regułowej reprezentacji wiedzy:

Mimo tych wszystkich wad i ograniczeń, regułowa reprezentacja wiedzy nadal pozostaje najpopularniejszą metodą zapisu wiedzy. Naturalność zapisu i znaczna niezależność reguł, to cechy stanowiące o wyższości tej metody nad pozostałymi.

Systemy ekspertowe należą do dziedziny systemów sztucznej inteligencji. Zajmuje się ona poznaniem ludzkiego rozumowania w celu odwzorowania tego procesu poprzez systemy komputerowe. System ekspertowy jest programem umożliwiającym rozwiązanie danego problemu w sposób przypominający postępowanie eksperta lub specjalisty z pewnej wąsko określonej dziedziny [8]. Mianem eksperta określa się osobę posiadającą szeroką wiedzę oraz umiejętności zdobyte przez doświadczenie. Ekspert nabył bardzo szczegółową wiedzę teoretyczną oraz praktyczną z danej specjalizacji. Ponadto jest on obdarzony intuicją oraz cechami takimi jak: profesjonalizm czy umiejętność uczenia się przez doświadczenie.

  1. Struktura systemu ekspertowego - właściwości jego elementów.

Kompletny system ekspertowy składa się z wielu elementów. Oto one:

Uwzględniając wszystkie elementy systemu ekspertowego wymienione przed chwilą, jego strukturę można przedstawić tak jak na rysunku:

0x01 graphic

  1. Jak jest różnica pomiędzy bazą danych a bazą wiedzy.

  1. Jakie klasy systemów informatycznych obejmuje dziedzina o nazwie sztuczna inteligencja.

  1. Jakie podstawowe metody wnioskowania są wykorzystywane w systemach ekspertowych

Dochodzenie do jakiegoś wniosku poprzez zaakceptowanie pewnych przesłanek nazywamy wnioskowaniem. Systemy ekspertowe oparte są na wnioskowaniu, które to wywodzi się z logiki matematycznej. Pozwala ona w jednoznaczny sposób stwierdzić "czy z założeń wynikają konkluzje, niezależnie o d ich prawdziwości lub fałszywości i niezależnie od tego, jakich spraw dotyczą".

W systemach ekspertowych najczęściej występują trzy podstawowe strategie wnioskowania:

Oprócz tych najpopularniejszych metod, spotyka się także wnioskowanie rozmyte stosowane w sytuacjach, w których mamy do czynienia z wiedzą niepewną

Wnioskowanie w przód

Wnioskowanie w przód niekiedy określa się terminem "sterowane danymi" (ang. data driven). Wynika to z tego, że na początku dostępne są tylko znane fakty oraz reguły, które stanowią bazę wnioskowania [7]. Mechanizm wnioskowania jest dosyć prosty. Otóż generujemy nowe fakty, aż do chwili, gdy pośród wygenerowanych faktów znajdzie się zadany cel (hipoteza) lub gdy w bazie wiedzy nie znajduje się już żadna reguła do uaktualnienia. Cechą charakterystyczną wnioskowania progresywnego jest stale zwiększająca się liczba faktów. Niekiedy postrzega się jako jedną z największych wad tego wnioskowania. W skrajnym wypadku generowanie dużej ilości faktów może prowadzić do całkowitego zapełnienia pamięci [6]. Algorytm wnioskowania w przód można przedstawić w postaci następujących kroków:

Krok 1: Sprawdzamy, czy przesłanki którejś z reguł można dopasować do faktów w bazie wiedzy. Jeżeli odpowiedź jest pozytywna, wówczas dana reguła zostaje uaktywniana. W tym celu należy użyć odpowiedniej (zadeklarowanej wcześniej) strategii sterowania wnioskowaniem.

Krok 2: Z wybranej w ten sposób reguły, odczytujemy konkluzję, która następnie umieszczana jest w bazie wiedzy jako nowy fakt. By algorytm wnioskowania nie wpadł w niekończącą się pętlę, zapisujemy, że dana reguła została już wykorzystana.

Krok 3: W sytuacji, gdy cel wnioskowania nie został osiągnięty i gdy nie wszystkie reguły zostały jeszcze użyte - wracamy do Kroku 1, czyli do początku wnioskowania [7].

W celu lepszej ilustracji mechanizmu wnioskowania, konieczna jest przykładowa baza wiedzy, zawierająca reguły oraz fakty

Reguła 1: IF a AND b THEN c

Reguła 2: IF d AND e THEN a

Reguła 3: IF c AND f THEN g

Fakty: b, d, e, f .

0x01 graphic

Przebieg wnioskowania w przód w takiej bazie wiedzy:

  1. Patrzymy na Krok 1 algorytmu wnioskowania, Gdy dopasowujemy przesłanki reguł do faktów zauważamy, że Regułę 2 należy uaktywnić i wtedy na tej podstawie dopisać konkluzję wspomnianej reguły do bazy wiedzy. W tej sytuacji stan bazy wiedzy wygląda następująco: b, d, e, f, a (dopisany ostatnio).

  2. Ponownie rozpatrujemy dopasowanie przesłanek reguł do faktów. Widzimy, że Reguła 1 może z ostać uaktywniona. Dopisujemy zatem fakt c do bazy wiedzy. Odnotowujemy także, że Reguła 1 została już wykorzystana. Oto zawartość listy faktów: b, d, e, f, a, c.

  3. Pozostało nam już tylko i wyłącznie uaktywnić Regułę 3. Do bazy wiedzy zostaje dodany fakt g. W tym momencie proces wnioskowania skończył się. Wszystkie reguły zostały wykorzystane. Wygenerowaliśmy także wszystkie nowe fakty.

Wnioskowanie wstecz

Nie trudno się domyślić, że wnioskowanie wstecz przebiega w odwrotną stronę niż wspomniane wcześniej wnioskowanie w przód. Wnioskowanie regresywne określa się także mianem "sterowane celem" (ang. goal driven). Związane jest to z tym, że proces wnioskowania zaczyna się od postawienia hipotezy, która może zostać potwierdzona lub nie (poprzez szukanie odpowiednich dowodów) [7]. Inaczej mówiąc, polega na "wykazaniu prawdziwości hipotezy głównej na podstawie prawdziwości przesłanek"[6]. Wnioskowanie wstecz zwane też wnioskowaniem regresywnym, oparte jest na regule modus toluens [7].

Wnioskowanie wstecz znacznie różnie się od wnioskowania w przód. Przede wszystkim liczba generowanych faktów jest mniejsza oraz nie można dowodzić w tym samym czasie kilku hipotez (jak to miało miejsce w procesie wnioskowania w przód). "Ogólnie w typowych zastosowaniach wnioskowanie wstecz jest efektywniejsze i bardziej rozpowszechnione. Należy również podkreślić, że przy wnioskowaniu wstecz czas oczekiwania na osiągnięcie rozwiązania postawionej hipotezy jest w wielu przypadkach dużo krótszy niż przy wnioskowaniu w przód".

Oto kroki algorytmu wnioskowania wstecz:

Krok 1: Na początku sprawdzamy, czy wybrana hipoteza jest faktem w bazie wiedzy. Jeśli odpowiedź jest negatywna, przechodzimy do następnych kroków, w których należy wykazać jej prawdziwość.

Krok 2: Kolejnym etapem jest sprawdzenie czy główna hipoteza, którą chcemy udowodnić jest konkluzją jakiejś reguły. Jeśli taka sytuacja ma miejsce, wówczas konkluzja tej reguły jest automatycznie uznawana za prawdziwą. W momencie, gdy któraś z przesłanek nie jest faktem w bazie wiedzy, wtedy jest ona postulowana i udowadniana zgodnie z algorytmem.
Krok 3: Dopóki hipoteza główna nie zostanie potwierdzona lub obalona, powtarzamy cały algorytm. Jeśli zostanie potwierdzona lub obalona - wówczas kończymy cały algorytm [7].

W celu lepszej ilustracji mechanizmu wnioskowania wstecz, konieczna jest przykładowa baza wiedzy zawierająca reguły oraz fakty.

Reguła 1: IF a AND b THEN c

Reguła 2: IF d AND e THEN a

Reguła 3: IF c AND f THEN g

Fakty: b, d, e, f

0x01 graphic

Załóżmy, że chcemy udowodnić hipotezę g. Proces ten będzie wyglądał następująco:

  1. Sprawdzamy czy baza wiedzy zawiera fakt w postaci hipotezy głównej g. Jeśli g nie jest faktem, to przechodzimy do następnego kroku.

  2. Zgodnie z Krokiem 2 algorytmu wnioskowania, sprawdzamy czy g jest konkluzją jakiejś reguły. Okazuje się, że g jest konkluzją Reguły3. Następnie sprawdzamy czy przesłanki tej reguły są faktami w bazie wiedzy. Jak widać, pierwsza przesłanka Reguły 3 - c, nie jest faktem. Jest ona postulowana i zostanie udowodniona w następnym kroku.

  3. Przyglądamy się bliżej przesłance c i sprawdzamy, czy jest konkluzją jakiejś innej reguły. Okazuje się, że tak - przesłanka c, to wniosek Reguły 1. Przechodzimy do wykazywania tejże reguły. Pierwsza przesłanka Reguły 1 (czyli a), nie jest faktem w bazie wiedzy. Widzimy, że a jest wnioskiem Reguły 2, którą teraz się zajmiemy.

  4. By udowodnić prawdziwość Reguły 2, należy wykazać czy jej przesłanki są faktami w bazie wiedzy. Stwierdzamy, że fakt a jest prawdziwy, ponieważ d i e są faktami w bazie wiedzy.

  5. Następnie powracamy do Reguły 1. Sprawdzamy czy druga przesłanka reguły (przesłanka b) jest prawdziwa. By była prawdziwa musi być faktem w bazie wiedzy. Konkluzja Reguły 1 okazuje się prawdziwa, gdyż b jest faktem w bazie.

  6. Ponownie zajmujemy się Regułą 3 wracając tym samym do Kroku 2 wnioskowania. Sprawdzamy prawdziwość przesłanki f. Ponieważ jest ona faktem w bazie wiedzy, konkluzja Reguły 3 jest prawdziwa. Hipoteza główna g została wykazana poprzez prawdziwość przesłanek c i f. To kończy proces wnioskowania [7].

11

Instrukcje

Proste

Strukturalne

Przypisania

Procedury

Skoku

Pusta

Złożone

Warunkowe

Jeżeli

Wyboru

Pętle

Dopóki

Wiążąca

Powtarzaj

Dla

Elementarne

Instrukcje

Bezpostaciowe

Tekstowe

Bezpostaciowe

Typowe

Rekordy

Zbiory

Łańcuchy

Tablica

Rzeczywiste

Porządkowe

Wskaźnikowe

Strukturalne

Skalarne

Typy danych

Dla

Powtarzaj

Dopóki

Iteracyjne

Wyboru

Jeżeli

Warunkowe

Wyrażeniowa

Proste

Continue

Proste

Break

goto

Sterujące

return

złożone

proste

Typy danych

Arytmetyczne

Wskaźnikowe

Referencyjne

Tablice

Struktury

Unie

Klasy

Bezpostaciowe

Typowe

Całkowite

Rzeczywiste

Wierzchołek stosu

NIL

Początek kolejki

NIL Wejście



Wyszukiwarka

Podobne podstrony:
Wykład VII, politechnika infa 2 st, Projektowanie Systemów Informatycznych
Wykład XI, politechnika infa 2 st, Projektowanie Systemów Informatycznych
Wykład VII, politechnika infa 2 st, Projektowanie Systemów Informatycznych
Wykład XII, politechnika infa 2 st, Projektowanie Systemów Informatycznych
WYKŁAD XIII, politechnika infa 2 st, Projektowanie Systemów Informatycznych
ExamZero, politechnika infa 2 st, Projektowanie Systemów Informatycznych
PSI - wszystkie wykłady, politechnika infa 2 st, Projektowanie Systemów Informatycznych
PSI - wszystkie wykłady2, politechnika infa 2 st, Projektowanie Systemów Informatycznych
PSI - wszystkie wykłady3, politechnika infa 2 st, Projektowanie Systemów Informatycznych
Wykład IX, politechnika infa 2 st, Projektowanie Systemów Informatycznych
02 PSI, politechnika infa 2 st, Projektowanie Systemów Informatycznych
Wykład VIII, politechnika infa 2 st, Projektowanie Systemów Informatycznych
Wykład X, politechnika infa 2 st, Projektowanie Systemów Informatycznych
01 BD, politechnika infa 2 st, Projektowanie Systemów Informatycznych
Wykład VII, politechnika infa 2 st, Projektowanie Systemów Informatycznych
RSTANU, politechnika infa 2 st, Modelowanie cyfrowe
SPRAWKO W 3, politechnika infa 2 st, Mikroprocesory
SPRAWKO W 8, politechnika infa 2 st, Mikroprocesory
Egzamin 04, System Informacji Terenowych SIT

więcej podobnych podstron