Systemy ekspertowe

Ćwiczenie laboratoryjne 2

Budowa aplikacji pozwalającej na wybór wariantu lokaty oszczędności z wykorzystaniem Cake

Program będzie doradzał jak ulokować oszczędności (lokata w banku, obligacje, akcje, fundusz powierniczy, nieruchomości).

Decyzja o sposobie inwestowania zaleŜy od typu klienta oraz stanu majątkowego.

Typ klienta określimy na podstawie kwoty do zainwestowania i wieku.

Typ klienta

Wiek

Kwota

A

do 35 lat

do 30000

B

powyŜej 35

do 30000

C

do 35 lat

powyŜej 30000

D

powyŜej 35

powyŜej 30000

Stan majątkowy oceniany jest na podstawie dochodu na osobę i poziomu spłaty

dotychczasowych kredytów.

Ostateczna decyzja o ulokowaniu oszczędności będzie równieŜ zaleŜała od skłonności klienta do podejmowania ryzyka.

1. Budowa drzewa decyzyjnego obrazującego problem

2. Określenie atrybutów i ich wartości

3. Projektowanie struktury aplikacji w systemie Cake

z menu Plik wybrać Nowy, zaznaczyć Aplikacja bę dzie zawierać ź ródła wiedzy 4. Okno właściwości aplikacji – Zakładka OPIS

nazwa aplikacji: ćwiczenie_2

Przycisk Zmiana nazwy pliku: podać nową nazwę pliku (np. imię _nazwisko_ć w2)

opis aplikacji: Przykładowa aplikacja do wyboru lokaty oszczędności 5. Okno właściwości aplikacji – Zakładka ŹRÓDŁA

Dodać źródło wiedzy – przycisk Dodaj/Dodaj nowe ź ródło

Nowe źródło wiedzy będzie: ekspercką bazą wiedzy

Posiadać będzie nazwę: stan_mają tkowy_? (? – nr kolejny grupy np. 1)

Zostanie zapisane w pliku: stan_mają tkowy_?

Przycisk Dalej

W podobny sposób dodać pozostałe dwa Ŝródła

o nazwie: typ_klienta_? , zapisane w pliku: typ_klienta_?

o nazwie: inwestycje_? , zapisane w pliku: inwestycje_?

6. Na zakładce FASETY (okno właściwości aplikacji) utworzyć atrybut globalny (przycisk Dodaj) wybierając typ wartości: val oneof – symboliczny

Okno Edycji właściwości atrybutu:

- Zakładka Ogólne

•

nazwa atrybutu: inwestycje

1

•

Faseta Ask=True: zaznaczyć

•

Faseta Single=Yes: zaznaczyć

•

Atrybut decyzyjny: zaznaczyć

•

przycisk Dopisz źródło do listy: wybrać z listy źródło wiedzy inwestycje JeŜeli aplikacja posiada źródła wiedzy, dla atrybutów o charakterze globalnym określa się ich

"zakres widoczności", czyli listę źródeł, w których mogą występować odwołania do danego atrybutu. Atrybut lokata będzie „widoczny” w źródle wiedzy o nazwie inwestycje.

Rys. 1. Okno właś ciwoś ci atrybutu Inwestycje: Zakładka Ogólne

- Zakładka Wartości – dodać po kolei wartości (przycisk Dodaj)

•

Nazwa wartości: lokata w banku (akceptacja poprzez Wyjś cie)

•

Nazwa wartości: akcje

•

Nazwa wartości: obligacje

•

Nazwa wartości: fundusz powierniczy

•

Nazwa wartości: nieruchomości

- Zaakceptowanie zmian i zamknięcie okna Edycji właś ciwoś ci atrybutu poprzez przycisk Wyjś cie

Rys. 2. Wartoś ci atrybutu Inwestycje

7. Na zakładce FASETY (okno właściwości aplikacji) dodać pozostałe atrybuty wybierając typ wartości: val oneof – symboliczny

Okno Edycji właściwości atrybutu stan_mają tkowy:

2

- Zakładka Ogólne

•

nazwa atrybutu: stan_majątkowy

•

Faseta Ask=True: zaznaczyć

•

Faseta Single=Yes: zaznaczyć

•

Atrybut decyzyjny: zaznaczyć

•

przycisk Dopisz źródło do listy: wybrać z listy źródło wiedzy

stan_mają tkowy i inwestycje

- Zakładka Wartości – dodać po kolei wartości (przycisk Dodaj)

•

Nazwa wartości: dobry

•

Nazwa wartości: zły

Okno Edycji właściwości atrybutu typ_klienta:

- Zakładka Ogólne

•

nazwa atrybutu: typ_klienta

•

Faseta Ask=True: zaznaczyć

•

Faseta Single=Yes: zaznaczyć

•

Atrybut decyzyjny: zaznaczyć

•

przycisk Dopisz źródło do listy: wybrać z listy źródło wiedzy

typ_klienta i inwestycje

- Zakładka Wartości – dodać po kolei wartości

•

Nazwa wartości: A

•

Nazwa wartości: B

•

Nazwa wartości: C

•

Nazwa wartości: D

Okno Edycji właściwości atrybutu ryzyko:

- Zakładka Ogólne

•

nazwa atrybutu: ryzyko

•

Faseta Ask=True: zaznaczyć

•

Faseta Single=Yes: zaznaczyć

•

Atrybut decyzyjny: pozostawić nie zaznaczone

•

faseta Query: CZY KLIENT LUBI PODEJMOWAĆ RYZYKO:

Faseta query umoŜliwia zdefiniowanie przez uŜytkownika treści zapytań w odniesieniu do wybranych atrybutów lub w odniesieniu do wybranych wartości atrybutu.

•

przycisk Dopisz źródło do listy: wybrać z listy źródło wiedzy

inwestycje

- Zakładka Wartości – dodać po kolei wartości

•

Nazwa wartości: tak

•

Nazwa wartości: nie

Okno Edycji właściwości atrybutu dochód_na_osobę:

- Zakładka Ogólne

•

nazwa atrybutu: dochód_na_osobę

•

Faseta Ask=True: zaznaczyć

•

Faseta Single=Yes: zaznaczyć

•

Atrybut decyzyjny: pozostawić nie zaznaczone

•

faseta Query: OKREŚL DOCHÓD NA OSOBĘ:

•

przycisk Dopisz źródło do listy: wybrać z listy źródło wiedzy

stan_mają tkowy

- Zakładka Wartości – dodać po kolei wartości

3

•

Nazwa wartości: poniŜej_średniej_krajowej

•

Nazwa wartości: powyŜej_średniej_krajowej

Okno Edycji właściwości atrybutu dotychczasowe_kredyty:

- Zakładka Ogólne

•

nazwa atrybutu: dotychczasowe_kredyty

•

Faseta Ask=True: zaznaczyć

•

Faseta Single=Yes: zaznaczyć

•

Atrybut decyzyjny: pozostawić nie zaznaczone

•

faseta Query: PODAJ POZIOM SPŁATY DOTYCHCZASOWYCH

KREDYTÓW:

•

przycisk Dopisz źródło do listy: wybrać z listy źródło wiedzy

stan_mają tkowy

- Zakładka Wartości – dodać po kolei wartości

•

Nazwa wartości: spłacone

•

Nazwa wartości: niespłacone

8. Na zakładce Fasety w oknie właściwości aplikacji dodać po kolei dwa atrybuty (przycisk Dodaj) wybierając typ wartości: ranges – z przedziałami dozwolonymi

Okno Edycji właściwości atrybutu wiek_klienta:

- Zakładka Ogólne

•

Nazwa atrybutu: wiek_klienta

•

Faseta Ask=True: zaznaczyć

•

Faseta Single=Yes: zaznaczyć

•

Atrybut decyzyjny: pozostawić puste

•

faseta Query: PODAJ WIEK KLIENTA:

•

przycisk Dopisz źródło do listy: wybrać z listy źródło wiedzy

typ_klienta

- Zakładka Przedziały– dodać przedział (przycisk Dodaj):

• Od wartości: 18

• Do wartości: 70

Okno Edycji właściwości atrybutu kwota_do_zainwestowania:

- Zakładka Ogólne

•

Nazwa atrybutu: kwota_do_zainwestowania

•

Faseta Ask=Yes: zaznaczyć

•

Faseta Single=Yes: zaznaczyć

•

Atrybut decyzyjny: pozostawić puste

•

faseta Query: PODAJ KWOTĘ DO ZAINWESTOWANIA:

KREDYTÓW:

•

przycisk Dopisz źródło do listy: wybrać z listy źródło wiedzy

typ_klienta

- Zakładka Przedziały– dodać przedział (przycisk Dodaj):

• Od wartości: 3000

• Do wartości: 200000

4

Rys. 3. Atrybuty w oknie właś ciwoś ci aplikacji (zakładka Fasety) 9. Wyedytować źródło wiedzy inwestycje (okno właściwości aplikacji – Zakładka Ź ródła/przycisk Zmień) i na zakładce REGUŁY (w oknie właściwości eksperckiego źródła wiedzy) wprowadzić po kolei następujące reguły (przycisk Dodaj):

Reguła nr 1:

• Konkluzja: inwestycje = „akcje”

(przycisk Wstaw/przycisk Atrybut/wybór atrybutu i wartości z listy/akceptacja poprzez przycisk OK)

• Lista warunków: typ_klienta = "A", ryzyko = "tak"

(warunki dodajemy po kolei poprzez przycisk Dodaj/ Nowym warunkiem

będzie trójka Obiekt-Atrybut-Wartość/przycisk Atrybut/wybór atrybutu i wartości z listy)

W podobny sposób dodać pozostałe reguły:

2. inwestycje = "obligacje" if typ_klienta = "A", ryzyko = "nie"

3. inwestycje = "fundusz powierniczy" if typ_klienta = "B", ryzyko = "tak"

4. inwestycje = "lokata w banku" if typ_klienta = "B", ryzyko = "nie"

5. inwestycje = "akcje" if typ_klienta = "C", stan_majątkowy = "dobry", ryzyko =

"tak"

6. inwestycje = "fundusz powierniczy" if typ_klienta = "C", stan_majątkowy =

"dobry", ryzyko = "nie"

7. inwestycje = "fundusz powierniczy" if typ_klienta = "C", stan_majątkowy =

"zły"

8. inwestycje = "akcje" if typ_klienta = "D", stan_majątkowy = "dobry", ryzyko =

"tak"

9. inwestycje = "nieruchomości" if typ_klienta = "D", stan_majątkowy =

"dobry", ryzyko = "nie"

10. inwestycje = "fundusz powierniczy" if typ_klienta = "D", stan_majątkowy =

"zły"

5

Rys. 4. Reguły w eksperckim ź ródle wiedzy

10. Wyedytować źródło wiedzy stan_mają tkowy i na zakładce REGUŁY wprowadzić po kolei następujące reguły:

1.

stan_majątkowy = „dobry” if dochód_na_osobę = "powyŜej średniej

krajowej", dotychczasowe_kredyty = "spłacone"

2.

stan_majątkowy = "zły" if dochód_na_osobę = "powyŜej średniej krajowej", dotychczasowe_kredyty = "niespłacone"

3. stan_majątkowy = "zły" if dochód_na_osobę = "poniŜej średniej krajowej"

11. Wyedytować źródło wiedzy typ_klienta (okno właściwości aplikacji – Zakładka Ź ródła/przycisk Zmień) i na zakładce REGUŁY (w oknie właściwości eksperckiego źródła wiedzy) wprowadzić reguły (przycisk Dodaj):

Reguła nr 1:

typ klienta = „A” if wiek_klienta = X, X < 35, kwota_do_zainwestowania = Y, Y < 30000

Sposób wprowadzania warunku wiek_klienta = X w oknie właściwości reguły: a) przycisk Dodaj

b) nowym warunkiem będzie: trójka Obiekt-Atrybut-Wartość c) przycisk Atrybut

d) wybór atrybutu z listy – wiek_klienta

e) okno Edycji wartości numerycznej: bez wpisywania wartości Anulować f) okno Relacje: wybrać znak równości „=”

g) przycisk Zmienna: wprowadzić nazwę nowej zmiennej X

h) akceptacja poprzez przycisk OK

Sposób wprowadzania warunku X < 35 w oknie właściwości reguły:

a) przycisk Dodaj

b) nowym warunkiem będzie: wyraŜenie relacyjne

i) lewy argument – przycisk Zmienna: wybrać nazwę zmiennej X

c) prawy argument – przycisk z kalkulatorem: wpisać liczbę (np. 35) d) wybrać znak „<” z dostępnych przycisków opcji

e) akceptacja poprzez przycisk OK

6

Sposób wprowadzania warunku kwota_do_zainwestowania = Y w oknie właściwości reguły: j) przycisk Dodaj

k) nowym warunkiem będzie: trójka Obiekt-Atrybut-Wartość l) przycisk Atrybut

m) wybór atrybutu i wartości z listy – kwota_do_zainwestowania

n) okno Edycji wartości numerycznej: bez wpisywania wartości Anulować o) okno Relacje: wybrać znak równości „=”

p) przycisk Zmienna: wprowadzić nazwę nowej zmiennej Y

q) akceptacja poprzez przycisk OK.

Sposób wprowadzania warunku Y < 30000 w oknie właściwości reguły: f) przycisk Dodaj

g) nowym warunkiem będzie: wyraŜenie relacyjne

r) lewy argument – przycisk Zmienna: wybrać nazwę zmiennej Y

h) prawy argument – przycisk z kalkulatorem: wpisać liczbę (np. 30000) i) wybrać znak „<” z dostępnych przycisków opcji

j) akceptacja poprzez przycisk OK

W podobny sposób dodać pozostałe reguły:

2.

typ_klienta = "B" if wiek_klienta = X, X>35, kwota_do_zainwestowania = Y, Y<30000

3.

typ_klienta = "C" if wiek_klienta = X, X<35, kwota_do_zainwestowania = Y, Y>30000

4. typ_klienta = "D" if wiek_klienta = X, X>35, kwota_do_zainwestowania = Y, Y>30000

12. Modyfikacja bloku sterującego

na zakładce PROGRAM w oknie właściwości aplikacji wybrać przycisk Edycja bloku sterowania

z listy rozwijalnej wybrać – Okno aplikacji, winieta, pę tla główna i zaakceptować przyciskiem Zastosuj

poprawić kod bloku sterującego według przykładu poniŜej i zapisać

przyciskiem z dyskietką

sprowadzanie poprawności wprowadzanego kodu – przycisk błyskawicy

int Odp;

char S1, S2, S3;

run;

createAppWindow;

S1 := "LOKATA_OSZCZĘDNOŚCI";

S2 := "DEMONSTRACYJNY SYSTEM DO WYBORU LOKATY OSZCZĘDNOŚCI";

S3 := "POLITECHNIKA ŚWIĘTOKRZYSKA";

vignette( S1, S2, S3 );

menu "Wybór lokaty oszczędności"

1. "Wybór lokaty oszczędności"

2. "Wyjście"

case 1:

7

solutionWin ( no);

Odp := 1;

while( Odp == 1 )

begin

setSysText( problem, "Ocena stanu majątkowego" );

solve( stan_majątkowy_?, "stan_majątkowy = OCENA_STANU_MAJĄTKOWEGO" ); setSysText( problem, "Ocena typu klienta" );

solve( typ_klienta_?, "typ_klienta = WYBÓR_TYPU_KLIENTA" );

solutionWin( yes );

setSysText( problem, "Wybór lokaty oszczędności" );

solve(inwestycje_?, "inwestycje = DECYZJA_LOKATY_OSZCZĘDNOSCI" ); confirmBox( 0, 0, "Kontynuować konsultacje?", "Naciśnij 'OK' jeśli tak, 'ANULUJ' jeśli nie", Odp );

delNewFacts;

solutionWin( no );

end;

solutionWin( yes );

case 2:

exit;

end;

end

13. Zamknąć okno edycji bloku sterowania

14. W oknie właściwości aplikacji przejść do zakładki Opis i wybrać Podglą d tekstu ź ródłowego

-

opcja Zapisz ze ź ródłami wiedzy odznaczona!

-

wybrać przycisk z dyskietką i podać nową nazwę pliku (np.

imię _nazwisko_ć w2_wersja2) i zapisać

15. Edytować po kolei kaŜde źródło (przycisk Zmień) i wybrać Podglą d tekstu ź ródłowego

-

wybrać przycisk z dyskietką i podać nową nazwę źródła (np.

imię _nazwisko_nazwa_Ŝ ródła_wersja2) i zapisać

16. Sprawdzić działanie aplikacji w PC-Shell

8