Spis Treści SPIS TREŚCI EXSYS CORVID PRZEGLĄD.... 3 CZYM JEST CORVID?... 3 STRUKTURA OBIEKTOWA... 3 BLOKI LOGICZNE... 3 JAVA RUNTIME APPLET DELIVERY... 4 PIERWSZE PODEJŚCIE, CZYLI JAK WYGLĄDA?... 5 OKNO GŁÓWNE PROGRAMU... 5 MENU... 5 File... 5 Windows... 6 Run... 6 PASEK NARZĘDZIOWY (TOOLBAR)... 6 CO POTRAFI CORVID?... 8 INTERPRETATOR REGUŁ... 8 ZMIENNE... 8 Typy... 9 Dodawanie... 10 Ustawianie parametrów zmiennych... 11 Właściwości i metody zmiennych.... 14 BLOKI LOGICZNE... 15 Dodawanie nowego bloku logicznego... 15 Wyrażenia i operatory... 15 Dodawanie węzłów w drzewie logicznym... 16 BLOKI KOMEND... 16 Dodawanie bloku komend... 17 Wyrażenia warunkowe oraz pętle... 17 Komendy... 17 SPRAWDZANIE I URUCHAMIANIE SYSTEMU... 18 BUDOWA PROSTEGO SYSTEMU EKSPERTOWEGO W EXSYS CORVID... 20 ZACZYNAMY ZMIENNE... 22 TWORZENIE BAZY FAKTÓW ORGANIZACJA BLOKÓW LOGICZNYCH... 25 KONTROLA DZIAŁANIA SYSTEMU PROJEKTOWANIE BLOKÓW POLECEŃ... 32 PODSUMOWANIE... BŁĄD! NIE ZDEFINIOWANO ZAKŁADKI. ZAŁĄCZNIKI... BŁĄD! NIE ZDEFINIOWANO ZAKŁADKI. 2
EXSYS Corvid przegląd. EXSYS CORVID PRZEGLĄD. Podczas pracy korzystałem z jedynego dostępnego źródła na temat produktu, mianowicie z obszernego Podręcznika użytkownika dostarczanego wraz z systemem, w pliku CORVID Manual.pdf. Kontaktowałem się też z pracownikami działu public relations firmy EXSYS Inc., którzy szybko i zwięźle odpowiadali na moje pytania i wątpliwości. Czym jest Corvid? Szkieletowy system ekspertowy EXSYS Corvid jest produktem firmy EXSYS Inc., będącej wcześniej częścią korporacji Multi Logic. Program ten powstał w wyniku zapotrzebowania na wiedzę ekspercką w Internecie. Przy tworzeniu aplikacji wykorzystano doświadczenie uzyskane podczas pisania programu EXSYS Developer oraz wcześniejszych wersji systemów szkieletowych serii EXSYS (np. EXSYS Pro. rozwijany jeszcze przez Multi Logic). EXSYS Corvid jest narzędziem przeznaczonym do szybkiego tworzenia systemów eksperckich na stronach HTML. Jego funkcjonalność jest zdeterminowana trzema nowymi rozwiązaniami, które według producenta mają zrewolucjonizować tworzenie systemów ekspertowych w sieci. Są to: struktura obiektowa (ang. object structure), bloki logiczne (ang. Logic Blocks) oraz aplety Java. Struktura obiektowa Struktura obiektowa to nic innego jak obiektowe podejście do zmiennych przy zachowaniu podejścia strukturalnego w projektowaniu systemów decyzyjnych. Corvid wykorzystuje znany z Visual Basic a model programowania. Czyli połączenie obiektowości z podejściem strukturalnym. Bloki logiczne W poprzednich wersjach EXSYS logika była reprezentowana przez drzewa logiczne i indywidualne reguły IF/THEN. Niestety dużo systemów wymaga wielu drzew decyzyjnych, co przysparza kłopotów przy organizacji logiki. Bloki logiczne wprowadzone w EXSYS Corvid mają za zadanie wspomóc projektanta systemu właśnie przy organizacji logiki. Mogą 3
EXSYS Corvid przegląd. nimi być jakiekolwiek zestawy reguł lub cała baza wiedzy. Pozwala to na uporządkowanie wiedzy w bloki, które zachowują się jak obiekty. Java Runtime Applet Delivery Corvid pozwala na przesyłanie systemu poprzez aplety Javy, natomiast komunikacja z użytkownikiem realizowana jest poprzez strony HTML. Aplikacje tworzone w Corvidzie przesyłane są w ok. 100kB apletach. Twórca systemu ekspertowego wybiera tylko pytanie i sposób jego zadania. Korzystając z możliwości HTML a wyniki wnioskowania można umieszczać w odpowiednio sformatowany sposób, dzięki czemu system staje się czytelniejszy. Aplet Corvid a zapewnia funkcjonalność dla większości systemów. Jeśli jednak zajdzie potrzeba na dodanie nowej funkcji to istnieje możliwość komunikowania się z innymi apletami na stronie. Jeśli chodzi o pobieranie lub obliczanie danych dostępnych tylko z serwera, to można wykorzystać skrypty CGI, ASP i JSP. Funkcjonalność sieciowa jest najmocniejszą stroną tego produktu wykorzystywaną przez największe firmy. 4
Pierwsze podejście, czyli jak wygląda? PIERWSZE PODEJŚCIE, CZYLI JAK WYGLĄDA? Okno główne programu Menu Toolbar Pulpit roboczy programu Bieżąca data i czas Rys. 1 Okno główne programu EXSYS Corvid. Menu Menu zawiera pięć sekcji: File, Windows, Run, Register, Help, z czego trzy pierwsze związane z kontrolą tworzonego systemu ekspertowego, zaś dwie ostatnie odnoszą się do rejestracji programu i pomocy (tymi grupami menu nie będziemy zajmować się w opisie). File Grupa File zawiera następujące polecenia: New Open Close Save Save as... Proprieties Page setup Print 5
Pierwsze podejście, czyli jak wygląda? Exit Większość opcji dla użytkowników systemu Windows jest jasna i nie wymaga wyjaśnień. Windows Grupa Windows zawiera polecenia: Logic Block otwiera okno edycji bloków logicznych Rule View określa czy przy otwieraniu okna edycji bloków logicznych ma pojawić się widok reguł. Command Block otwiera okno edycji bloków poleceń. Where otwiera okno poszukiwania zmiennych w systemie. Set RESULT Default otwiera okno, w którym możemy ustawić wygląd jaki mają przybrać wyniki. Run Grupa Run zawiera takie opcje jak: Start Run uruchamia system w przeglądarce Corvid a Set Starting Cmd Block otwiera okno, w którym określamy, od którego bloku komend ma się zacząć wykonywanie systemu. Reorder Logic Blocks otwiera okno, w którym możemy zmienić kolejność bloków logicznych. Check System sprawdza system i wypisuje ewentualne wady. Pasek narzędziowy (toolbar) Na pasku dostępnych jest dziewięć najczęściej używanych poleceń, które mają swoje odpowiedniki w menu. Kolejno od lewej mamy: Otwórz plik (File/Open) Zapisz plik (File/Save) Otwórz okno edycji bloków logicznych (Windows/Logic Block) Otwórz okno edycji bloków poleceń (Windows/Command Blocks) Otwórz okno edycji zmiennych (Windows/Variables) Uruchom system w przeglądarce Crovid a (Run/Start Run) 6
Pierwsze podejście, czyli jak wygląda? Drukuj system (File/Print) Właściwości (File/Properties) Pomoc (Help/Contents) 7
Co potrafi Corvid? CO POTRAFI CORVID? Interpretator reguł Wartościowanie zmiennych przeprowadzane jest domyślnie metodą wnioskowania wstecz, co można zmienić bez większego problemu. Jeśli chodzi o algorytm działania interpretatora to panowie z działu technicznego firmy EXSYS Inc. odpowiedzieli, iż jest on zastrzeżony i tylko do wglądu przez pracowników. Dlatego jedno z najbardziej interesujących mnie pytań pozostaje otworem. Apropo algorytmu, udało mi się jedynie dowiedzieć, iż reguła aktywna jest pierwszą wolną regułą. Mogę tylko powiedzieć, że z moich dotychczasowych wojaży z programem nie zauważyłem żadnych anomalii we wnioskowaniu. Zmienne Jak zazwyczaj w programowaniu tak i tu zmienne odgrywają zasadniczą rolę. System zarządzania zmiennymi mimo tego, że jest rozbudowany nie traci na przejrzystości. Dlatego tworzenie i edytowanie zmiennych należy do przyjemnych, jeśli ktoś lubi pracować myszką. Mnie osobiście widmo ciągłego klikania przeraziło niezmiernie, na szczęście nie jest to tak bardzo uciążliwe. Zmienne w Corvid zie używane są do: definiowania logiki w blokach logicznych przechowywania danych użytkownika w czasie działania systemu definiowania w jaki sposób system ma działać. 8
Co potrafi Corvid? Typy W Corvid zie wyróżniamy siedem typów zmiennych. Tabela 1 Typ zmiennej Typy zmiennych w EXSYS Corvid. Funkcja Static List Dynamic List Numeric String Date Collection Confidence Lista wyboru, której wartości znane są już podczas tworzenia systemu ekspertowego. Lista wyboru, której wartości ustalane są podczas działania systemu. Wartości listy mogą pochodzić ze źródeł zewnętrznych lub być ustalane przez logikę systemu. Listy dynamiczne mogą być używane w połączeniu z arkuszami kalkulacyjnymi do odpowiedniego ograniczenia wartości. Wartość liczbowa, która może być używana we wzorach lub wyrażeniach warunkowych. Jakikolwiek ciąg znaków. Data najczęściej używana do porównań. Kolekcja lista wartości. Operatory pozwalają na dodawanie, wyrzucanie elementów listy. Jakikolwiek napis lub zmienna może być dodana do kolekcji. Zmienna, której może być przypisany stopień pewności. Wszystkie zmienne w opisywanym programie mają swoje właściwości i metody, które można na nich wykonywać (patrz rozdz. Właściwości i metody zmiennych ). Natomiast kiedy i gdzie używać zmiennych danego rodzaju stanie się jaśniejsze podczas budowania bloków logicznych (patrz rozdz. Bloki logiczne oraz Tworzenie bazy faktów organizacja bloków logicznych ). 9
Co potrafi Corvid? Dodawanie Zmienne dodawane są za pomocą okna dialogowego Variables. Powyższe okno dialogowe dostępne jest w menu (Windows/Variables) lub na pasku narzędziowym. Rys. 2 Okno dialogowe Variables. Aby dodać nową zmienną klikamy New i pojawia się okno dialogowe New Variable, w którym wpisujemy nazwę zmiennej i wybieramy typ. 10
Co potrafi Corvid? Rys. 3 Okno dialogowe New Variable. Zmienne posiadają nazwę oraz powiązany ze sobą tekst (ang. prompt), który będzie użyty do pobrania danych od użytkownika. Dopuszczalnymi nazwami są te składające się tylko i wyłącznie ze znaków: a-z, A-Z, 0-9 oraz _%#$. Spacja jest niedopuszczalna w nazwie zmiennej i będzie zamieniana na _. Zmienne mogą być sortowane ze względu na nazwę bądź typ. Natomiast nazwy zmiennych mogą być zmieniane w każdym momencie tworzenia systemu. Corvid zadba o to by nazwa została zmieniona wszędzie, gdzie występuje w kodzie. Ustawianie parametrów zmiennych Opcje dla zmiennych ustawiamy w dwóch grupach zakładek dostępnych na prawo od listy zmiennych. Górny zestaw zakładek pozwala na ustawienie parametrów dostępnych we wszystkich zmiennych. Natomiast każda z dolnych pozwala na ustawienie parametrów charakterystycznych tylko dla danego typu zmiennych. Dostępne ustawienia wraz z przykładami zastosowań zmiennych opiszę pokrótce, ponieważ szczegółowy i bardzo wyczerpujący opis znaleźć można w dokumentacji do produktu. Prompt (tekst zachęty) Wszystkie zmienne posiadają tę właściwość, która stanowi o tekście wyświetlanym podczas pobierania wartości zmiennej od użytkownika i reprezentacji jej w raportach. Dostępne ustawienia dotyczą: głównego tekstu zachęty oraz alternatywnych tekstów zachęty. 11
Co potrafi Corvid? Main Prompt, czyli główny tekst zachęty, powinien opisywać zmienną. De facto może on być dowolnym tekstem jaki sobie wymyślimy ale trzymanie się zasady opisu zmiennej pozwoli nam uniknąć przykrych niespodzianek w estetyce sytemu. Np. nazwa zmiennej to [TEMP_POMPY_A], a tekst zachęty Temperatura pompy A mierzona termometrem elektronicznym w stopniach Celsjusza. Jeśli dana zmienna będzie używana tylko wewnątrz systemu to użytkownik nigdy nie zobaczy jej tekstu zachęty. Jednak gdy nastąpi potrzeba zapytania o temperaturę pompy A, to system wraz z polem tekstowym do wprowadzenia temperatury wyświetli tekst zachęty: Temperatura pompy A mierzona termometrem elektronicznym w stopniach Celsjusza. Główny tekst zachęty może być pobierany z zewnętrznej bazy danych. Istnieje także możliwość dodania tzw. Alternate Prompts, czyli dodatkowych tekstów zachęty dla systemów przeznaczonych do użytku międzynarodowego lub dla użytkowników o różnym stopniu wiedzy na dany temat. To Be Najczęściej można ustalić wartość zmiennej poprzez bardzo krótkie reguły, które mąciłyby tylko ogólny wgląd w widok logiki systemu. Dlatego dla zmiennych można wprowadzać pojedyncze reguły, które zostaną uruchomione, gdy zajdzie potrzeba ustalenia wartości zmiennej. Reguły powinny być krótkie, gdyż najprawdopodobniej, jeśli reguła jest długa to ma być zawarta w bloku logicznym. Options Jest to zakładka z różnorodnymi parametrami, które warunkują zachowanie zmiennej, kiedy jej wartość musi być wywnioskowana, pobierana, wyświetlana lub inicjalizowana. Jedne z najczęściej używanych opcji to: Maximum Number of Values that can be Assigned oraz Final Results Display Flag, które oznaczają odpowiednio: maksymalną liczbę wartości, które mogą być przypisane dla zmiennych typu List oraz czy wyświetlać zmienną na stronie wynikowej. Link Zakładka Link pozwala na wstawienie adresu URL, do którego ma się odwoływać tekst zachęty. 12
Co potrafi Corvid? Ask With Jeśli wartość zmiennej nie może być w żaden sposób ustalona w trakcie działania systemu. To trzeba się o nią zapytać użytkownika. Sposób przedstawiania pytań jest ustalany właśnie w tej zakładce. Do wyboru mamy standardowe kontrolki Windows plus Image Map, możemy także sformatować tekst i umieścić go w odpowiednim miejscu na stronie. Also Ask Czasami zachodzi potrzeba zadania pytania o kilka zmiennych na jednej stronie wystarczy tylko ustalić, które i wybrać na zakładce Also Ask. Static List Tutaj nadajemy wartości dla wszystkich możliwości wyboru z listy. Oczywiście pobranie wartości z bazy danych jest dopuszczalne oraz, podobnie jak w przypadku tekstu zachęty możemy wprowadzić wartości alternatywne dla każdego punktu listy. Dynamic List Wartości dla listy dynamicznej możemy nadać na trzy sposoby: użyć arkusza kalkulacyjnego użyć zmiennej typu Collection użyć pliku tekstowego pod adresem URL za pomocą zewnętrznego apletu Continuous Do kontrolowania zmiennych typów Date, String, Numeric służy zakładka Continous. Dla typu Numeric możemy ustawić górną i dolną granicę wprowadzonej liczby oraz nie dopuścić do wprowadzania liczb rzeczywistych. Dla typu String możemy określić maskę wprowadzania. Akceptowalne znaki w masce wprowadzania znajdują się w poniższej tabeli. 13
Co potrafi Corvid? Tabela 2 Maska Znaki możliwe do używania w maskach wprowadzania. Znaczenie? Jakikolwiek jeden znak. * Reszta napisu. Znak Ten sam znak # Cyfra 0-9. {abc} Jeden ze znaków w {}. {X-Z} Jeden ze znaków z zakresu podanego w {}. Wprowadzoną datę można kontrolować na dwa sposoby. Pozwolić na wprowadzenie daty nie starszej niż ileś dni wstecz lub/i pozwolić na wprowadzanie daty nie więcej naprzód niż ileś dni. Collection Typ Collection posiada opcje kontroli przepełnienia, inicjalizacji wartości z pliku,. Confidence Posiadamy możliwość ograniczenia wartości wprowadzanych zmiennych typu Confidence. Dostępne jest także zaokrąglanie do wartości całkowitej. Oraz obliczenie wartości stopnia pewności przez zastosowanie z góry ustalonych wzorów. Jak widać kontrola zmiennych jest ograniczona przez opcje programu i trudno nam będzie zmusić Corvid a by na przykład zmienił typ zmiennej w czasie działania systemu. Dostępne są tylko opcje z zakładek, fakt że jest ich dużo nie stanowi jeszcze o tym, że można ze zmiennymi zrobić wszystko czego dusza zapragnie. Właściwości i metody zmiennych. Wszystkie zmienne w systemie mają oprócz wartości także inne właściwości oraz metody, które można na nich wykonywać. Korzystamy z tego udogodnienia w znany, z innych języków programowania sposób, czyli: [nazwa_zmiennej.(właściwość/metoda)] Sprawne użycie tej możliwości pozwoli zaoszczędzić masę czasu podczas tworzenia systemu. Pominę tu dokładny opis, gdyż wszystko wyjaśnione jest w Podręczniku użytkownika EXSYS Corvid 1. 1 Corvid Manual.PDF 14
Co potrafi Corvid? Bloki logiczne Porządek w projektowaniu jest bardzo ważny, chyba że akurat zależy nam na zagmatwaniu np. ze względów bezpieczeństwa. Ale zazwyczaj chcemy wiedzieć, co się dzieje w projekcie. Dlatego EXSYS wprowadził pojęcie bloków logicznych, które pozwalają na lepszą kontrolę tworzonego systemu. Reguły w blokach reprezentowane są jako drzewa logiczne, co pomaga przy analizowaniu wszystkich możliwych przypadków wartości zmiennych. Bloki logiczne pomagają na etapie konstruowania reguł dla systemu. Programista sam ustala, co ma stanowić dany blok, nie ma żadnych zasad, które by określały sposób dzielenia reguł w bloki. Jednak reguły w bloku powinny być powiązane w logiczny sposób np. zawierać ten sam węzeł korzenia drzewa logicznego lub ułatwiać programiście nawigację po logice projektowanego systemu. Dodawanie nowego bloku logicznego Otwieramy okno edycji bloku logicznego (Windows/Logic Block) i od razu mamy utworzony nowy blok. Możemy, co najwyżej, zmienić jego nazwę klikając Edit Name. Wyrażenia i operatory Aby tworzyć reguły w blokach potrzebne są nam pewne zasady ich kreacji. Dlatego poniżej przedstawiam wyrażenia akceptowalne w Corvid zie: liczby (także w formie 1.2e3), trzeba tylko zwrócić uwagę, że E jest stałą matematyczną e nawiasy () operatory matematyczne w kolejności wykonywania ^, *, /, +, - operatory logiczne <, <=, >, =>,!=, =,!,, & nazwy funkcji wbudowanych z argumentami w nawiasach Operatory logiczne są tymi znanymi z C i C++ oprócz i &, które znaczą odpowiednio sumę logiczną oraz iloczyn logiczny dwóch wyrażeń. Pisząc wyrażenia musimy pamiętać o tym, iż wszelkie nazwy zmiennych umieszczamy w nawiasach kwadratowych []. Oto przykłady wyrażeń akceptowalnych przez Corvid a: [ZAMIEN] = 10 ([A]+[B] = COS([X])) & ([A]!=[B]) 15
Co potrafi Corvid? Do tworzenia wyrażeń opartych na łańcuchach znaków możemy używać operatorów logicznych podanych powyżej. Zasady działania nie odbiegają w niczym od zasad znanych z Turbo Pascal a. Z tym wyjątkiem ze operator <> jest zastąpiony przez!=. Dodawanie węzłów w drzewie logicznym Węzły IF w drzewie logicznym reprezentowane są poprzez prostokąt (lub znaki grupujące), natomiast węzły THEN poprzez strzałki. Do dodawania węzła IF służą przyciski z grupy IF. Dzięki nim możemy dodawać węzeł IF w dowolnym miejscu w drzewie. Węzły Then dodajemy za pomocą przycisków grupy Then. Klikając którykolwiek z guzików z obu grup otwieramy okno edycji węzłów, w którym kontrolujemy jak ma wyglądać każdy z węzłów drzewa. Możemy tu wybrać zmienną, której chcemy nadać wartość lub ją testować. Jeśli mamy gotowy warunek lub przypisanie, klikamy Add to List i po zatwierdzeniu mamy utworzony węzeł w drzewie. Jedną z ciekawych cech opisywanego systemu szkieletowego jest to, że w drzewie logicznym pod THEN możemy podpiąć IF. Przydaje się to w sytuacjach gdy musielibyśmy dla każdego bardziej zagłębionego IF wpisać tę samą regułę THEN. Bloki komend Same zmienne i reguły nie czynią jeszcze systemu tworzonego w EXSYS Corvid w pełni działającym. Trzeba jeszcze systemowi powiedzieć co ma z tym wszystkim robić, które bloki logiczne kiedy odpalać, czy może odpalić jeden blok logiczny kilka razy dla zmieniających się zmiennych. To można zrobić właśnie w bloku komend. Tworzymy tam programy, które wykorzystują logikę zawartą wcześniej w blokach logicznych. Dla użytkowników bez przygotowania programistycznego mam dobrą wiadomość najczęściej używaną komendą będzie DERIVE CONF, która mówi Corvid owi, że w drodze wnioskowania ma nadać wartości wszystkim zmiennym typu Confidence. Dodatkowo można określić jak mają być sformatowane wyniki. Ogólnie mogę powiedzieć, że wszystko co chcieliśmy zrobić, a nie mogliśmy tego zrobić poprzez ustawienie właściwości zmiennych lub poprzez odpowiednie zaprojektowanie bloków logicznych można zrobić tutaj. Programowanie w Corvid zie nie jest podobne do czegokolwiek co do tej pory widziałem. Program składa się z węzłów komend, podobnie jak drzewo logiczne składa się z węzłów IF i 16
Co potrafi Corvid? THEN. Jednak wygląda to przejrzyście i jest łatwe do opanowania. Dostępne są pętle, wyrażenia warunkowe oraz stos komend kontrolujących wykonanie programu. Dodawanie bloku komend Dodanie nowego bloku komend wiąże się, podobnie jak w bloku logicznym z otworzeniem okna dialogowego Logic Block poprzez wybranie z menu Windows/Logic Block. Możemy także zmienić nazwę klikając Edit Name. Wyrażenia warunkowe oraz pętle Każdy choćby najprostszy język programowania musi obsługiwać w jakikolwiek sposób wyrażenia warunkowe. Większość programistów nie wyobraża sobie programu bez instrukcji IF. W Corvid zie oczywiście nie pominięto tej instrukcji dostępna jest ona w grupie opcji Control w oknie Logic Block pod przyciskiem IF. Po kliknięciu powyższego otwiera się okno edycji Add to Block znane już z obsługi bloków logicznych. W nim możemy tworzyć wyrażenia Boolowskie. W systemie szkieletowym firmy EXSYS dostępne są także pętle typu WHILE oraz FOR. Dostępne są one podobnie jak instrukcja IF pod odpowiednimi przyciskami w grupie opcji Control. Po wybraniu While otwiera się, tak jak w przypadku IF okno Add to Block, w którym określamy warunek powtarzania pętli. Czyli dopóki warunek jest prawdziwy pętla WHILE się wykonuje. Gdy klikniemy For, otworzy się nam okienko FOR command, w którym określamy przedział działania pętli, zmienną która służy kontrolowaniu oraz krok, o który ma się zmieniać zmienna. Dodatkową możliwością jest wykonywanie pętli dla każdego elementu zmiennej typu Collection (kolekcji). Komendy Oczywiście same pętle i instrukcje warunkowe nie tworzą złożonych programów, dobrym pomysłem jest jeszcze mieć co wykonywać w pętli lub co wykonywać jeśli. Dlatego w grupie opcji Command możemy dodawać rozkazy, które trzeba wykonać, aby system działał jak należy. Po kliknięciu jednego z przycisków w tej grupie ukazuje się nam okno tworzenia komend Commands. Dodawać i edytować możemy komendy dotyczące: 17
Co potrafi Corvid? zmiennych (zakładka Variables) bloków (Blocks) czyszczenia wartości zmiennych, np. kiedy chcemy jakieś bloki logiczne uruchomić kilka razy w trakcie działania sytemu (Reset) wywoływania: zewnętrznych apletów, zapisywania do pliku, odczytywania wartości z adresu URL, wywołania skryptu CGI (External) kontrolowania wykonania systemu za pomocą: GOTO (idz do bloku), dodaj/usuń bloki z metody wnioskowania wstecz, czekaj przez określonyczas (Control) formatowania okna wyników (Results) wprowadzenia strony tytułowej (Title) tworzenia raportów na serwerze (Report) Wszystkie powyższe zakładki pozwalają na stworzenie programu bez wklepywania kodu. Oczywiście, gdy znamy nazwy komend możemy je wpisywać ręcznie. Po wybraniu któregoś z przycisków z grupy Command możemy wpisać w oknie edycji komend Commands w polu tekstowym Command: nazwę komendy. Jest jednak kilka ograniczeń. Nie możemy wpisać np. po komendzie RESULTS formatowania poszczególnych partii okna wyników. Niestety technicy z EXSYS nie obmyślili żadnego języka, ani nie przyjęli żadnego standardu, który by mógł wspomóc żmudne klikanie. No cóż pozostaje klikać. Sprawdzanie i uruchamianie systemu Jeśli ktoś uważa się za doskonałego to znaczy, że nie jest człowiekiem. Człowiek błędy popełnia i najlepiej się uczy na swoich. Dlatego system szkieletowy firmy EXSYS Inc. byłby niczym bez sprawdzania pomyłek, jakie zrobiliśmy w systemie. Ta opcja jest jedną z ciekawszych w Corvid zie. Sprawdzanie całego systemu wykonuje się poprzez wywołanie z menu opcji Run/Check System. Po wywołaniu tej opcji zostanie wyświetlone okno z ewentualnymi błędami lub ostrzeżeniami. Checker sprawdza zarówno błędy logiczne oraz syntaktyczne. Ostrzega nas np. przed zbyt dużą ilością zmiennych, czy też nie rozpatrzeniem wszystkich możliwych przypadków reguł. Dodatkowo podczas tworzenia reguł i komend sprawdzana jest ich syntaktyka, dlatego nie możemy np. przypisać zmiennej Numeric wartości tekstowej. 18
Co potrafi Corvid? Uruchamianie systemu odbywa się poprzez wybrania z menu Run/Start Run. Otwierana jest wtedy przeglądarka www z widoczną stroną startową systemu. Podczas uruchomienia tworzona jest dynamicznie strona HTML oraz plik CVR, który jest używany przez Corvid Java Runtime i powinien być przeniesiony na serwer z systemem ekspertowym. Na serwerze powinien znaleźć się także aplet Corvid Runtime Java. 19
Budowa prostego systemu ekspertowego... BUDOWA PROSTEGO SYSTEMU EKSPERTOWEGO W EXSYS CORVID Wcześniejszy suchy opis funkcji EXSYS Corvid a byłby niczym bez konkretnego przykładu. Za takowy posłuży nam problem blondynek i żarówki. Czyli co zrobić, gdy zrobi się ciemno? Założenia są proste poinformować domowniczki o przyczynach egipskich ciemności i zaproponować rozwiązanie problemu mając na uwadze to, iż blondynki muszą oszczędzać z powodu jakiejś dziury lub budżetu. Ekspert z dziedziny elektryki określił następujące warunki na przypadek zgaśnięcia żarówki: Wymieniamy żarówkę, jeśli jest przepalona. Żarówka jest przepalona, jeśli inne światła w pokoju się świecą. Jeśli inne światła w pokoju się nie świecą, to mogły wyskoczyć bezpieczniki. Jeśli wyskoczyły bezpieczniki, to trzeba je ustawić w odpowiedniej pozycji. Jeśli inne światła w domu się nie świecą, to najprawdopodobniej brak prądu. Jeśli brak prądu, to zadzwoń do elektrowni i spytaj, co się dzieje. Blondynki muszą oszczędzać na energii, więc same zakładają, iż jeśli żarówka się przepali to żarówki powyżej 75W wymieniają na żarówki 75W, a do 75W na takie, jakie były. Czyli: Jeśli wymieniamy żarówkę i żarówka ma powyżej 75W, to dodajemy do listy zakupów żarówkę 75W. Jeśli wymieniamy żarówkę i żarówka ma do 75W, to dodajemy do listy zakupów żarówkę o takiej mocy, jaka była wcześniej. Niektóre z wyżej wymienionych reguł da się pominąć. Poniżej przedstawiam wcześniej określone przez ekspertów (w dziedzinie elektryki i oszczędzania) reguły jako IF/THEN: 20
Budowa prostego systemu ekspertowego... Tabela 3 Reguły IF/THEN do przykładowego systemu dla blondynek. Niebieskim zaznaczono zmienne typu Static List, czerwonym Numeric, zielonym Confidence, fioletowym Collection, brązowym wartości, jakie przyjmują zmienne typu Static List Lp Reguła IF/THEN 1 IF: Żarówka AND: Inne światła w pokoju świecą THEN: Zmień żarówkę. Użyj żarówki o mocy nowej żarówki W.: zgasła 2 3 4 5 6 IF: Żarówka zgasła AND: Inne światła w pokoju zgasły AND: Inne światła w domu świecą THEN: Sprawdź czy nie wyskoczyły bezpieczniki IF: Żarówka zgasła AND: Inne światła w pokoju zgasły AND: Inne światła w domu zgasły THEN: Zadzwoń do elektrowni i zgłoś awarię IF: Żarówka świeci THEN: Nie rób nic IF: Zmień AND: Moc żarówki zużytej > 75 żarówkę THEN: Moc żarówki nowej = 75 Dodaj do listy zakupów żarówkę o mocy żarówki nowej IF: Zmień AND: Moc żarówki zużytej <= 75 żarówkę THEN: Moc żarówki nowej = moc żarówki zużytej Dodaj do listy zakupów żarówkę o mocy żarówki nowej 21
Budowa prostego systemu ekspertowego... Zaczynamy zmienne 1. Zaczynamy od uruchomienia systemu szkieletowego EXSYS Corvid. 2. Wybieramy z File/New, wprowadzamy nazwę dla pliku systemu i klikamy Save. Od razu wyskakuje okno Variables. 3. Klikamy w oknie Variables przycisk New. Wyskakuje okno New Variables. 4. Pierwszą zmienną będzie żarówka, o którą pytamy. Czyli w polu tekstowym wpisujemy ZAROWA. 5. Zmienna przyjmuje dwie wartości świeci i zgasła, dlatego będzie typu Static List, więc wybieramy tę opcję i klikamy OK. 4 5 6. Zmieniamy tekst zachęty na Żarówka (pojawia się, gdy pytamy o wartość zmiennej). 7. Teraz ustalamy pierwszą wartość, jaką może przyjmować zmienna. Jako Short Text wpisujemy zgasła, to samo wpisujemy w polu Full Text. 22
Budowa prostego systemu ekspertowego... 8. Klikamy przycisk > 6 8 7 9. Postępujemy analogicznie jak w punkcie 7 tylko, że wstawiamy wartość świeci. 10. ZAROWA może przyjąć na raz jedną z wartości, więc zaznaczmy na zakładce Options w grupie opcji Maximum Number of Values that can be assigned wartość SINGLE Value. 10 11. Tworzymy zmienną typu Static List o nazwie SWIATLA_W_POKOJU tekście zachęty Inne światła w pokoju i dwóch wartościach świecą oraz zgasły i zaznaczamy, iż zmienna może przyjmować tylko jedną wartość. 23
Budowa prostego systemu ekspertowego... 12. Tworzymy zmienną typu Static List o nazwie SWIATLA_W_DOMU tekście zachęty Inne światła w domu i dwóch wartościach świecą oraz zgasły i zaznaczamy, iż zmienna może przyjmować tylko jedną wartość. 13. Następnie tworzymy zmienną typu Confidence i nadajemy jej nazwę ZMIEN_ZAROWE. 14. Tekst zachęty będzie wyświetlany jako wynik, więc w zakładce Prompt zmieniamy Main Prompt na Zmień żarówkę. 15. Teraz tworzymy zmienną typu Confidence o nazwie ROB_NIC i tekście zachęty: Nie rób nic. 16. Następnie zmienną typu Confidence o nazwie SPRAWDZ_BEZPIECZNIKI i tekście zachęty: Sprawdź czy nie wyskoczyły bezpieczniki. 17. Zmienną Confidence ZADZWON_DO_ELEKTROWNI, tekst zachęty: Zadzwoń do elektrowni i zgłoś awarię. 18. Następnym krokiem będzie stworzenie zmiennych do przechowywania wartości mocy żarówek. Tworzymy zmienne typu Numeric o nazwach MOC_ZUZYTEJ, MOC_NOWEJ i tekście zachęty: Moc żarówki zużytej, Moc żarówki nowej. 19. Ostatnim krokiem w tworzeniu zmiennych będzie utworzenie zmiennej do przechowywania listy zakupów typu Collection LISTA_ZAKUPOW, tekst zachęty: Lista zakupów. W ten oto sposób wszystkie zmienne potrzebne do działania systemu wymiany żarówki są stworzone. Klikamy Done i gotowe. Pozostaje tylko jeszcze jedna uwaga na temat wartości zmiennych, mianowicie możemy odnieść się do nich praktycznie w każdym miejscu w systemie umieszczając nazwę zmiennej w [[]]. Spróbujmy na przykład do tekstu zachęty zmiennej ZMIEN_ZAROWE dodać informację o mocy żarówki, którą należy wstawić. Za istniejącym promptem dopisujemy:. Użyj żarówki o mocy [[MOC_NOWEJ]]W. To byłoby na tyle jeśli chodzi o zmienne. 24
Budowa prostego systemu ekspertowego... Tworzenie bazy faktów organizacja bloków logicznych Wymiana żarówki nie jest zbyt skomplikowaną sprawą, dlatego też nasz system podzielimy na tylko dwa bloki logiczne. Pierwszy dotyczyć będzie tego czy żarówka powinna być rzeczywiście wymieniona (reguły 1-4 z Tabeli 3). Drugi zajmie się oszczędnością energii w mieszkaniu i będzie wskazywał żarówkę odpowiedniej mocy do wstawienia. Przystąpmy do zaprojektowania tych bloków. 1. Otwieramy okno edycji bloków logicznych Windows/Logic Block. Nowy blok logiczny jest nazwany Logic Block 1, zmieńmy tę nazwę na bardziej przejrzystą. 2. Klikamy przycisk Edit Name i wpisujemy: Wymiana zarowki. 3. Klikamy Add. 2 16 3 4. W ten sposób otwiera się okno dialogowe edycji reguł. Na razie stworzymy dwa węzły: IF Żarówka zgasła, IF Żarówka świeci dla reguł 1-4 z Tabeli 3. Z listy zmiennych wybieramy zmienną ZAROWA. 5. Z listy wartości zmiennej wybieramy zgasła. 6. Klikamy Add to List. 25
Budowa prostego systemu ekspertowego... 7. Następnie z listy wartości zmiennej wybieramy świeci. 8. Klikamy Add to List. 9. Klikamy Done. 5 4 7 6 i 8 9 10. Utworzyliśmy dwa węzły dla reguł o zawierających w sobie status żarówki. Teraz musimy utworzyć w drzewie logicznym węzły IF reguł 1-3 z Tabeli 3, zawierające wszystkie wartości zmiennej SWIATLA_W_POKOJU dla ZAROWA=zgasła. Zaznaczamy w tym celu węzeł ZAROWA=zgasła. 26
Budowa prostego systemu ekspertowego... 11. W grupie Add klikamy Below. W ten sposób dodajemy węzły w drzewie logicznym pod wybranym węzłem. 10 11 12. Wybieramy zmienną SWIATLA_W_POKOJU. 27
Budowa prostego systemu ekspertowego... 13. Klikamy Add Each Individually i Done. 12 13 14. Następnym krokiem będzie utworzenie węzłów reguł zawierających wartości zmiennej SWIATLA_W_DOMU (reguły 2-3 Tabela 3). Jak widać wartość zmiennej ma być sprawdzana tylko wtedy, kiedy SWIATLA_W_POKOJU=zgasły. Dlatego zaznaczamy węzeł, w którym SWIATLA_W_POKOJU=zgasły i dla zmiennej SWIATLA_W_DOMU powtarzamy kroki 12 i 13. 15. Następnie zajmiemy się tym, co system ma robić, gdy spełnione są warunki z drzewa logicznego. Weźmy pod lupę regułę 1 z Tabeli 3. W drzewie logicznym wybieramy SWIATLA_W_POKOJU=świecą. 28
Budowa prostego systemu ekspertowego... 16. Ustawimy teraz wartość zmiennej ZMIEN_ZAROWE na 10. Tak naprawdę to mamy ją ustawić na jakąkolwiek wartość różną od 0. W grupie Then klikamy Variable. 15 16 17. Wybieramy zmienną ZMIEN_ZAROWE. 18. Na zakładce Expression w polu tekstowym po znaku = wpisujemy 10. 29
Budowa prostego systemu ekspertowego... 19. Klikamy Add to List i Done. Zauważmy, że kolor czerwonej ramki zmienił się na zielony, co oznacza, że reguła IF/THEN jest kompletna. 18 17 19 20. Skompletujmy teraz regułę 2 z Tabeli 3, czyli przypiszemy zmiennej SPRAWDZ_BEZPIECZNIKI wartość 10. Wybieramy węzeł SWIATLA_W_DOMU=świecą. 21. W oknie Add to Block wybieramy zmienną SPRAWDZ_BEZPIECZNIKI i wpisujemy po znaku = liczbę 10. Klikamy Add to List i Done. 22. Uzupełnienie reguły 3 z Tabeli 3 będzie wyglądało następująco. Zaznaczamy SWIATLA_W_DOMU=zgasły, klikamy Variable, ustawiamy wartość zmiennej ZADZWON_DO_ELEKTROWNI na 10. 23. Dochodzimy do ostatniej reguły w tym bloku logicznym, którą uzupełniamy o człon THEN w taki sposób, że wartość zmiennej ROB_NIC na 10. 24. W oknie Logic Block klikamy Done. W ten sposób blok logiczny Wymiana żarówki jest kompletny. 25. Kolejny blok to Moc żarówki. Otwieramy okno edycji bloków logicznych (Windows/Logic Block). 30
Budowa prostego systemu ekspertowego... 26. Zmieniamy nazwę (Edit Name) na Moc żarówki. 27. Moc żarówki określamy tylko wtedy, gdy chcemy ją wymienić, czyli gdy ZMIEN_ZAROWE=10. Dodajemy IF, gdzie warunkiem jest ZMIEN_ZAROWE=10. 28. Następnie dodajemy węzły dotyczące sprawdzenia mocy żarówki zużytej. Klikamy w grupie If/And przycisk Below. 29. Wybieramy zmienną MOC_ZUZYTEJ. 30. W oknie edycji wyrażenia Boolowskiego (Boolean Test Expression) wpisujemy: >75. 31. Klikamy Add to List. 32. Ponownie wybieramy zmienną MOC_ZUZYTEJ i dodajemy do wyrażenia <=75. Ponownie Add to List, a na koniec Done. 33. Zajmiemy się teraz dodawaniem podpowiadaniem jakiej mocy żarówki powinne być wkręcane. Dla żarówek o mocy większej niż 75W będzie wyglądało to tak: musimy najpierw przypisać odpowiednią wartość dla zmiennej MOC_NOWEJ. W tym celu zaznaczamy węzeł, gdzie MOC_ZUZYTEJ>75, w grupie Then klikamy Variable, wybieramy zmienną MOC_NOWEJ, w polu edycji po znaku = wpisujemy 75 i klikamy Add to List i Done. 34. Podobnie postępujemy, jeśli chodzi o tworzenie węzła THEN, dla żarówek o mocy mniejszej bądź równej 75W. Zaznaczamy węzeł MOC_ZUZYTEJ<=75, klikamy Variable, wybieramy zmienną MOC_NOWEJ. 35. Tu następuje zmiana sposobu działania. Wartość zmiennej MOC_ZUZYTEJ dla zmiennej MOC_NOWEJ możemy przypisać na dwa sposoby: albo wpisać nazwę zmiennej ręcznie, albo wybrać ją z listy. Aby wybrać zmienną z listy klikamy przycisk Variables i wybieramy zmienną MOC_ZUZYTEJ z listy. Add to List i Done. 36. Dodawanie do listy zakupów powinno być realizowane tylko w przypadku, gdy wymieniamy żarówkę. W bieżącym bloku logicznym zaznaczamy najpierw węzeł MOC_ZUZYTEJ>75. Dodajemy THEN jako operacje na zmiennych (Variable). 37. Z listy zmiennych wybieramy LISTA_ZAKUPOW. 38. Do listy zakupów chcemy dodawać elementy, dlatego zaznaczamy opcję Add Item. 31
Budowa prostego systemu ekspertowego... 39. Rozwija się nam pole tekstowe, w które wpisujemy tekst, który chcemy dodać do listy zakupów. Wpiszmy: Żarówka o mocy [[MOC_NOWEJ]]W. Klikamy Add to List i Done. 40. Kroki 36-39 powtarzamy dla węzła MOC_ZUZYTEJ<=75. Logikę systemu wymiany żarówki mamy stworzoną. Wszystko ma działać według reguł 1-6 z Tabeli 3. Kontrola działania systemu projektowanie bloków poleceń Skoro mamy zmienne i reguły, to co nas ma zatrzymać przed uruchomieniem systemu? Niestety reguły i zmienne to nie wszystko, musimy powiedzieć Corvid owi jak ma uruchamiać nasz system. Dlatego teraz zaprojektujemy blok komend. 1. Otwieramy okno edycji bloków komend (Windows/Command Block) 2. Naszym oczom ukazuje się okno z dodanym blokiem o nazwie Command Block 1. Klikamy Add, co otwiera okno budowania komend. 3. W blokach logicznych używaliśmy zmiennych Confidence (stopień pewności), dlatego żeby system używał naszych bloków logicznych do określenia stopnia pewności wszystkich zmiennych typu Confidence. W zakładce Variables ustawiamy następujące wartości: Derive a value from TO BE and Logic Blocks oraz All Confidence Variables. W polu tekstowym Command wyświetliła się nam komenda, którą zostawiamy w spokoju. 4. Klikamy OK. 5. Komenda DERIVE CONF użyje bloków logicznych do określenia wartości zmiennych typu Confidence. Zachodzi jeszcze potrzeba wyświetlenia wyników wnioskowania. W tym celu dodajemy kolejny fragment programu w bloki komend klikając Add Below. 6. Przechodzimy do zakładki Results. 7. Ustawiamy domyślny ekran wyświetlania zmiennych zaznaczając opcję Display Default Result Screen. (W tym momencie możemy uruchomić już system, jednak wygląd wyników pozostawiałby wiele do życzenia.) Ciskamy przycisk Edit znajdujący się tuż pod dużym oknem tekstowym. 32
Budowa prostego systemu ekspertowego... 8. Nie chcemy, żeby były wyświetlane wartość zmiennych typu Confidence, chcemy żeby wyświetlane były tylko teksty zachęty. W oknie Display Commands w grupie opcji Build wybieramy opcję Variables. 9. Następnie na zakładce Format wybieramy opcję Prompt only no value. 10. Nadajmy jakiś inny wygląd dla tekstów zachęty zmiennych Confidence. Zmieniamy rozmiar czcionki na 15 i pogrubiamy w polu tekstowym Size wpisujemy 15, a w polu kombi Style wybieramy Bold. Klikamy OK. 11. Tak spreparowaną komendę edycji dodajemy do listy komend wciskając przycisk Add. 12. Następnie dodamy do wyników listę zakupów. Jako nową regułę formatowania wyników dodajemy pusty wiersz. W grupie opcji Build zaznaczamy opcję Text. 13. Klikamy przycisk Add. I mamy pusty wiersz do oddzielenia listy zakupów. 14. Analogicznie jak w punktach 12 i 13 dodajemy tekst: Lista zakupów, przy czym nadajemy mu postać kursywy Edit na zakładce Format i tam zaznaczamy Style i wybieramy Italic. 15. Wreszcie wypisujemy listę poprzez zaznaczenie opcji Variables i wybranie z pola kombi zmiennej LISTA_ZAKUPÓW. Klikamy Add i OK, w nastepnym oknie też OK, a w oknie edycji bloków logicznych Done. Opracowaliśmy właśnie wygląd i działanie systemu. Działa on sprawnie, aby się o tym przekonać uruchamiamy go poleceniem Run/Start Run. Wreszcie potrzeba tylko jednej blondynki do wymiany żarówki. 33
Błąd! Nie można odnaleźć źródła odwołania. 34