sobota, 14 września 2013

Dokumentacja Programowa

No to zaczynamy zabawę ;)

Budowę aplikacji zaczynamy poprzez określenie i zapasanie wiedzy w formie reguł. Po uruchomieniu  programu PC-Shell , klikamy men Edycja w oknie generatora nowej bazy  zaczynamy pola Blok Facet , Blok Reguł, podajemy nazwę pliku i klikamy OK. Zapisujemy do Pliku.

Tworzona przez nas baza wiedzy zapisuje się w pliku BW w PC-Shell. Bazę wiedzy umieszczamy w bloku instrukcji " knowledge base stanowisko...end",w ramach ,której zapisujemy najpierw definicje wszystkich używanych zmiennych( blok facet...end).
Fasetami określamy zbiór deklaracji odnoszących się do wybranych atrybutów .Blok Faset zawiera wykaz wszystkich atrybutów użytych w bazie wiedzy .Nie wszystkie atrybuty musza być opisane fasetami , lecz wszystkie muszą być zadeklarowane w bloku faset , Ogólna struktura bloku faset wygląda następująco :


Fasets

Opis Faset

End;

Opis faset składa się z deklaracji globalnych, ask, single oraz zbioru atrybutów i związanych z nimi faset.

Deklaracja ask określa , czy system może zadawać pytania o poprawność reguł . Jeśli wybrana zostaje opcja "yes" , to system będzie zadawał pytania o prawdziwość warunków , które nie mogą być potwierdzone w oparciu o wiedzę zawartą w bazie wiedzy w postaci faktów i reguł. Opcja "no" oznacza , ze system nie może zadawać pytań użytkownikowi w celu potwierdzenia warunków . Może jedynie wykorzystywać wiedzę zawarta w bazie wiedzy. 

 Od tych ogólnych reguł można określić wyjątki, stosując deklaracje ask  w deklaracji faset.
System przyjmuje domyślnie ask yes  oraz  single no.

Struktura opisu faset:

[ ask{yes  no\ };]
[ single {yes no \} ; ]

atrybut _1 [ deklaracja _faset_1 ];

...

atrybut _n [ deklaracja _faset_n];



Fragment bloku faset z aplikacji:

single yes ;

decyzja :
ask no
val oneof {

" zatrudniony and szycie",
"zatrudniony and pracownik_biura",
" zatrudniony and pracownik_ochrony",
" zatrudniony and informatyk",
" zatrudniony and pracownik_dzialu_obslugi_z_klientem",
" zatrudniony and pracownik_gospodarczy",
" brak_podstaw_do zatrudnienia" };

rodzaj_pomocy_socjalnej:

ask no
val oneof {
"rehabilitacja and turnusy_rehabilitacjne and dofinansowanie_pelne",
"rehabilitacja and turnusy_rehabilitacjne and dofinansowanie_czesciowe",
"rehabilitacja and turnusy_rehabilitacjne and dofinansowanie_pelne and dofinasowanie_dla_opiekuna",
"rehabilitacja and turnusy_rehabilitacjne and dofinansowanie_polowa_kosztow";
}

typy_umowy_wynagrodzenia:
ask no
val oneof {
"umowa_zlecenie",
"okres_probny",
" umowa_o_prace",
"pensja";
}
(...) end;

Następnie zapisujemy  same reguły (blok rules....end).


Blok reguł pełni główną role z punktu widzenia reprezentacji wiedzy ekspertowej . Opis reguł składa się ze zbioru reguł poprzedzonych słowem  rules oraz zakończonych słowem end.

Składnia definicji i reguł jest następująca:

jeśli chcemy określić regułę według której uzyskanie odpowiedzi tak dla zmiennych
warunek 1 i warunek 2 ma zwracać na temat wyniku wynik informacje o treści wystepuje to odpowiedni blok reguł może wyglądać następująco :

wynik =" zatrudniony and szycie" if warunek 1 ="tak",
warunek2= "tak";

fragment bloku rules z aplikacji "ZPCHR"

stanowisko="brak_podstaw_do_zatrudnienia" if grupa ="nie";

stanowisko = "zatrudniony and pracownik_biura " if

grupa= "tak",
stopien =" lekki ",
okres=" tak",
wzrok=" tak",
sluch=" dobry",
poruszanie =" samodzielnie",
wyksztalcenie =" wyższe",
jezyki =" angielski or niemiecki or francuski or inne ",
komputer="slaba";

(...)

/niektóre wersje programów czytają polskie znaki niektóre nie i wychodzi błąd w programie /

Do pobierania danych używamy operatora zapytania query, zadającego użytkownikowi podane pytanie oraz dwóch operatorów ograniczających zakres dopuszczalnych odpowiedzi :
 val oneof (...), akceptującego wyłącznie jedna z możliwości podanych w nawiasach oraz  val range (...) akceptujące tylko wartości liczbowe. Tak przygotowana baza jest już sama w sobie gotową aplikacją.

Aby uruchomić z menu Plik wybieramy Otwórz i wskazujemy plik zapisanej uprzednio bazy. Teraz wybieramy Wnioskowanie- do tyłu , co spowoduje otwarcie okna dialogowego Hipoteza.
W tym oknie formułujemy hipotezę , która ma być sprawdzona na podstawie informacji zawartych  w bazie wiedzy - w naszym przypadku chcemy się dowiedzieć  czy kandydat może być zatrudniony w zakładzie pracy chronionej, jaki rodzaj umowy może być podpisany oraz ewentualne wynagrodzenie  a także jakie świadczenia socjalne przysługują pracownikowi. Zamiast zapisywać hipotezę możemy wybrać oba jej elementy z list dostępnych po naciśnięciu przycisków ATRYBUT , WARTOŚĆ.
klikamy wnioskuj. Teraz program będzie nas prosił o podawanie zmiennych użytych w bazie reguł .Dane są przetwarzane   sekwencyjnie i system zadaje tyle pytań ile jest mu potrzebne do weryfikacji hipotezy -jeżeli już po podaniu pierwszej wartości będzie jasne , ze kandydat ma szanse na zatrudnienie bądź jaki typ umowy może podpisać to nasz wynik zostanie wyświetlony jako hipoteza potwierdzona bądź niepotwierdzona . Dzieje się to za pomocą algorytmu maszyny wnioskującej w tył.
Dodanie bardziej zaawansowanych funkcji interfejsu użytkownika wymaga dołączenia do programu bloku sterowania control...end, umożliwiającemu algorytmicznie sterowanie praca samego systemu regułowego.

Blok sterowania control...end jest trzecim (po fasets and rules) blokiem w kodzie bazy wiedzy.
Od pozostałych rożni  się tym , ze jest nieobowiązkowy. W bloku sterowania używany jest wyspecjalizowany język wysokiego poziomu stworzony specjalnie dla potrzeb programu PC-Shell w celu ułatwienia obsługi specyficznych wymagań aplikacji w nim tworzonych.

Poza funkcjami sterującymi , język dostarcza instrukcji i typów danych niezbędnych w systemach ekspertowych , umożliwia utworzenie interfejsu użytkownika , pozwala integrować aplikacje z innymi programami daje możliwość efektywnego opisywania wiedzy o  charakterze algorytmicznym .

     W bloku control użyto następujące polecenia :

Run-  uruchomienie programu  zawartego w bloku sterowania


Goal (hipoteza )- uruchomienie -  wnioskowania z  podaną hipotezą


Answer (wartość )- przypisanie -  odpowiedzi na zapytanie o wartość zmiennej

Solution - element rozwiązania (pełna trójka OAW )

Kod z bloku control w aplikacji ZPCHR

contorl

int Odp;


 Budowę interfejsu użytkownika rozpoczynamy w kodzie control ...end wpisujemy

createAppWindow;



run;
vignette  ( "ZPCHR" , "DEMONSTRACYJNA BAZA WIEDZY DOTYCZACA WYBORU STANOWISKA PRACY DLA OSOBY NIEPELNOSPRAWNEJ . TYP UMOWY , WYSOKOSC WYNAGRODZENIA ORAZ  PROPONOWANA OPIEKA SOCJALNA W ZALEZNOSCI  OD STOPNIA NIEPELNOSPRAWNOSCI\nAutor : Beata XXXX", "Copyright (C) 1992-99 AITECH Artificial Intelligence Laboratory");

setAppWinTitle, (" na jakim stanowisku ma pracować kandytat ");

setAppWinTitle, ("proponowany rodzaj umowy i proponowane wynagrodzenie");

setAppWinTitle, (" jakie świadczenia socjalne może uzyskac osoba niepelnosprawna ");

addSolution (yes);

W łatwy sposób możemy dodać ekran powitalny aplikacji , służy do tego instrukcja Vignette .

Dodajemy do naszej aplikacji menu w bloku menu..end jest pewien rodzaj instrukcji warunkowej .
Jako parametr podajemy nazwę menu a następnie kolejne pozycje . Ponieważ aplikacja jest z raportowaniem z jednej pozycji menu musimy podać kod DDE.
 Nawiązanie konwersacji wymaga podania trzech parametrów : zmiennej typu int której przypisany zostanie numer otwartego kanału ( w przypadku pozytywnego nawiązania konwersacji) oraz dwóch parametrów określających nawiązywaną konwersacje -usługi  oraz nazwę tematu .W przypadku aplikacji "ZPCHR" nazwa usługi to" WinWord" nazwa tematu "System"

Przy nawiązywaniu łączności z edytorem tekstu Word w pakiecie Office mogą wystąpić problemy . Należy sprawdzić z jakiego pakietu Office korzystamy .W zależności od edycji zmieniają się numery kolejnej edycji plików Office.
 Kod raportowania W DDE umieszczamy w bloku menu w instrukcji case .
 W bloku menu można umieścić notatkę gdzie można zapisywać uwagi - służy temu  kod



system( "notepad.exe oaplik.text");

Zakonczenia systemu zapisujemy kodem , aby kod zadziałał należy w bloku control zaimplementować zmienna int odp :


case 4 :




system( "notepad.exe oaplik.text");
case 5 :
confirmBox (0,0, "Wyjscie ..","\n\nKONIECPRACY", odp);
  while (odp==1)
Begin
exit;
 end;
end;
end;
end;

4 komentarze:

  1. Ten komentarz został usunięty przez autora.

    OdpowiedzUsuń
  2. Jak dla mnie świetny wpis. Pozdrawiam serdecznie.

    OdpowiedzUsuń
  3. Ten komentarz został usunięty przez autora.

    OdpowiedzUsuń
  4. Temat doskonale jest mi znany, ponieważ chcemy wprowadzić do firmy nowoczesne rozwiązania oraz nowoczesne systemy, ale jak na razie potrzeba czasu, aby wszystko zmienić. Długo zastanawiałem się dla jakich branż warto pomyśleć o uczeniu maszynowym? . Na szczęście kilka osób przekonało mnie, że w zakładzie produkcyjnym będzie to bardzo dobra opcja. Może i Wy się zainteresujecie? Nowoczesne rozwiązania za kilka lat będą podstawą prowadzenia każdej działalności.

    OdpowiedzUsuń