Podstawy programowania logicznego
Transkrypt
Podstawy programowania logicznego
Technologia inteligentnych agentów Autor: dr Jacek Jakieła Technologia inteligentnych agentów WYKŁAD ............................................................................................................. 3 Podstawy programowania logicznego ................................................................... 3 ĆWICZENIA ........................................................................................................ 7 Wskazówka ...................................................................................................... 7 Zadanie 1 ........................................................................................................ 7 Zadanie 2 ........................................................................................................ 8 Materiały Distance Learning © Wyższa Szkoła Informatyki i Zarządzania z siedzibą w Rzeszowie 2 Technologia inteligentnych agentów WYKŁAD Podstawy programowania logicznego Programowanie w języku Prolog (PROgramming in LOGic), które jest szczególną postacią programowania w logice, jest realizacją idei programowania deklaratywnego. Przydatność programowania deklaratywnego obrazowo uzasadnili Clark i McCabe, którzy napisali „[…] pytanie, które jest istotne, gdy mamy do czynienia z jakimś programem komputerowym, to pytanie o to Co program robi?, a nie o to Jak on to robi? […]. Przeniesienie akcentu z jak na co powoduje, że w programach deklaratywnych można abstrahować od sposobu implementowania struktur danych i algorytmów na rzecz klarowności i czytelności. Proces pisania programów konwencjonalnych (proceduralnych) sprowadza się do instruowania komputera jak ma on rozwiązać określony problem poprzez wykonanie danej sekwencji działań zdefiniowanych przez programistę. Komputer wykonuje zbiór instrukcji zgodnie z określonym przez programistę porządkiem. W przypadku programowania deklaratywnego programista definiuje, na czym polega problem opisując dziedzinę problemu z wykorzystaniem języka logiki pierwszego rzędu (patrz Reprezentacja wiedzy agenta). Problem jest zdefiniowany poprzez fakty i reguły z nim związane. Rozwiązanie problemu, jest realizowane poprzez zastosowanie odpowiednich zasad logicznych. W języku Prolog jest to zasada rezolucji zaproponowana przez Robinsona zaimplementowana w tak zwanej maszynie wnioskującej (Inference Engine). Dzięki zasadzie rezolucji możliwa jest automatyzacja procesu wnioskowania realizowanego w oparciu o zbiór formuł opisujących dany problem. Program zapisany w języku Prolog może być traktowany, jako wykonywalna specyfikacja, z którą można eksperymentować wykorzystując „wszytą” w system maszynę wnioskującą. Programowanie logiczne jest tradycyjnie wiązane z zastosowaniami z obszaru sztucznej inteligencji. W dziedzinie systemów agentowych paradygmat logiczny jest również powszechnie wykorzystywany, a znajomość podstaw składni języka Prolog pomaga w szybszym przyswojeniu zasad tworzenia systemów w językach programowania agentowego. Podstawy jednego z takich języków, języka Jason, zostały omówione w niniejszym kursie. Program w języku Prolog jest skończonym zbiorem klauzul w formie A :- B1,…,Bm. gdzie m ≥ 0 i A i B1-Bn to formuły atomowe. Formuła atomowa A jest nazywana głową klauzuli, a klauzule B1,…,Bm są nazywane ciałem klauzuli. Jeżeli m=0 wówczas klauzula z pominiętym symbolem ”:-” jest nazywana klauzulą jednostkową. Klauzule mogą reprezentować fakty i reguły. • Fakt przedstawia uznane za prawdziwe stwierdzenie na temat dziedziny problemu. Np. fakt mówiący o tym, że Jan lubi muzykę może być zapisany jako lubi(jan,muzyka). • Reguła reprezentuje twierdzenie warunkowe. Np. reguła mówiąca o tym, że Jan lubi tylko utwory Bacha lubi(jan,U) :- utwor_muzyczny(U),kompozytor(bach, U). Klauzule mogą zawierać termy oraz formuły atomowe. W roli termu występują stałe, zmienne oraz funktory. Term zawsze występuje wewnątrz formuły atomowej. Znaczenie wymienionych elementów jest identyczne z tym zdefiniowanym dla języka rachunku predykatów pierwszego rzędu. Materiały Distance Learning © Wyższa Szkoła Informatyki i Zarządzania z siedzibą w Rzeszowie 3 Technologia inteligentnych agentów Przejście z zapisu w języku rachunku predykatów na kod w języku Prolog jest stosunkowo proste i powinno być realizowane zgodnie z następującymi regułami składniowymi: • • • • Symbole stałych zaczynają się od małej litery. Symbole zmiennych zaczynają się od dużej litery lub znaku podkreślenia. Symbole predykatów oraz funktorów zaczynają się od małej litery. Podstawowe operatory logiczne są zapisywane zgodnie z notacją przedstawioną w tabeli. Tabela. Operatory logiczne oraz ich odpowiedniki w języku Prolog. Język naturalny Język rachunku predykatów Język Prolog Koniunkcja (And) ∧ , Alternatywa (Or) ∨ ; Implikacja ⇐ :- Negacja ¬ Not Przykład. Załóżmy, że dziedzina problemu została opisana z wykorzystaniem następujących formuł logicznych. 1. ∀x,y(Wykłada(x,y) ∧ Przedmiot_Scisły(y)) ⇒ Inteligentny(x) 2. Wykłada(J,S) 3. Przedmiot_Scisły(S) 4. Wykłada(Żona(J),HS) 5. Przedmiot_humanistyczny(HS) gdzie J=Jan, S=statystyka, HS=historia sztuki Odpowiadający temu zapisowy program w języku Prolog wygląda następująco: 1. 2. 3. 4. 5. inteligentny(X):-wyklada(X,Y),przedmiot_scisly(Y). wyklada(j,s). przedmiot_scisly(s). wyklada(zona(j),hs). przedmiot_humanistyczny(hs). Aby uruchomić program powinien on zostać umieszczony w pamięci roboczej interpretera poleceniem ?-consult(‘nazwa_pliku’), gdzie symbol ”?-” jest znakiem zachęty występującym w przypadku większości interpreterów języka Prolog. Umieszczenie kodu w pamięci roboczej jest nazywane konsultowaniem programu. Po skonsultowaniu programu można zacząć pracę z systemem budując tak zwane zapytania. Zapytanie w systemie Prologowym ma budowę ?- A1,…,An, gdzie każdy element Ai jest formułą atomową. Zbiór symboli (A1,…,An) jest nazywany celem, a każdy element Ai jest nazywany podcelem. Jeżeli n=1 wówczas cel jest nazywany celem prostym, natomiast jeżeli n=0 wówczas cel jest określany jako pusty. Materiały Distance Learning © Wyższa Szkoła Informatyki i Zarządzania z siedzibą w Rzeszowie 4 Technologia inteligentnych agentów Zapytania mogą należeć do trzech, następujących kategorii: • Zapytanie wyszukujące (Finding query) – określa wartości, jakie powinny przyjąć zmienne, aby wprowadzony cel był prawdziwy w odniesieniu do programu znajdującego się w pamięci roboczej. • Zapytanie potwierdzające (Confirming query) – poszukuje potwierdzenia celu, w którym nie ma zmiennych. • Zapytanie uruchamiające akcje (Action query) – prosi system o wykonanie określonej akcji. Przykładem mogą być omówione wcześniej ?consult(‘nazwa_pliku’)., lub ?-halt., które powoduje zakończenie pracy z interpreterem. Przykładowe cele zapisane w notacji języka Prolog oraz wyjście generowane przez system zostały przedstawione poniżej. Kto jest inteligentny? ?- inteligentny(X). X = j; //symbol średnika sygnalizuje prośbę o spełniających kryteria. no Czy Jan jest inteligentny? ?-inteligentny(j). yes Jaki przedmiot ścisły jest wykładany przez Jana? ?- wyklada(j,P), przedmiot_scisly(P). P=s; no znalezienie innych obiektów Język Prolog posiada zbiór predefiniowanych predykatów oraz funkcji, z których można korzystać przy tworzeniu formuł. Szczególnie przydatne są operatory relacyjne (tabela), pozwalające na wykonywanie różnego rodzaju porównań oraz operatory arytmetyczne (tabela), dzięki którym możliwe jest prowadzenie prostych obliczeń. Tabela. Podstawowe operatory relacyjne. Operator Interpretacja X>Y X jest większe od Y X<Y X jest mniejsze od Y X >= Y X jest większe lub równe Y X <= Y X jest mniejsze lub równe Y X =:= Y X jest równe Y X =\= Y X jest różne od Y (liczby) X \= Y X jest różne od Y (łańcuchy) Przy okazji omawiania wyrażeń arytmetycznych należy rozróżnić pomiędzy predykatami ”=” oraz ”is”. Do obliczania wyniku określonego wyrażenia PROLOG wykorzystuje predykat is, który ustala wartość wyrażenia. Predykat is jest najczęściej zapisywany w notacji infiksowej w następującej formie Zmienna is wyrażenie, gdzie zmienna to nazwa zmiennej, która jest wiązana z wynikiem oceny wyrażenia. Wyrażenie może zawierać liczby, operatory arytmetyczne oraz Materiały Distance Learning © Wyższa Szkoła Informatyki i Zarządzania z siedzibą w Rzeszowie 5 Technologia inteligentnych agentów operatory relacyjne. Przy budowaniu wyrażeń należy pamiętać o priorytecie operatorów. Zmiana priorytetu wykonania jest możliwa dzięki zastosowaniu nawiasów. Z kolei predykat ”=” nie reprezentuje relacji równości w tradycyjnym znaczeniu, lecz specjalną relację o nazwie unifikowalność, która jest zdefiniowana w następujący sposób: Dwa termy T1 i T2 są unifikowalne (co jest zapisywane jako T1=T2) jeżeli mogą być doprowadzone do identycznej składniowo postaci poprzez podstawienie pod zmienne odpowiednich termów. Tabela. Podstawowe operatory arytmetyczne. Operator +,- Interpretacja Dodawanie, odejmowanie *,/,// Mnożenie, dzielenie, dzielenie całkowite mod Reszta z dzielenia Przykład. Czy termy X+2 i 1+Y oraz 1+2 i 3 są unifikowalne. ?- X + 2 = 1 + Y. X = 1 Y = 2 ?- 1 + 2 = 3. no Odpowiedź systemu pokazuje, że termy X + 2 oraz 1 + Y zostały zunifikowane przez podstawienie X = 1, Y = 2, natomiast term 3 nie jest unifikowalny z termem 1+2, ponieważ nie istnieje podstawienie, które może doprowadzić do identycznej składniowo postaci. Różnice pomiędzy predykatami ”is” oraz ”=” mogą być podsumowane następująco: • Predykat ”=” unifikuje swoje dwa argumenty nie wykonując żadnych obliczeń. • Predykat ”is” unifikuje argument znajdujący się po stronie lewej z obliczoną wartością argumentu znajdującego się po stronie prawej. Przykład. Wprowadzanie formuł z operatorami bezpośrednio w linii poleceń interpretera. ?- X is 2+2. X = 4 <enter> yes ?- X is (2+2)/4. X = 1 <enter> yes ?- 2 \= 2. no ?- 1=:=1. yes ?- 2\=2 ; 1 =:= 1. yes. Materiały Distance Learning © Wyższa Szkoła Informatyki i Zarządzania z siedzibą w Rzeszowie 6 Technologia inteligentnych agentów ĆWICZENIA Wskazówka Przed rozpoczęciem rozwiązywania zadań należy skopiować folder Prolog na dysk twardy i uruchomić środowisko (plik awide32.exe). Na rysunku znajduje się okno środowiska z kluczowymi elementami, niezbędnymi do wykonania zadań. Przycisk uruchamiający interpreter Okno edytora kodu Okno interpretera Rysunek. Środowisko programowania w języku Prolog. Zadanie 1 (Zadanie wykonywane w środowisku programowania) Dla każdego zbioru formuł logicznych opracowanych w ramach zadań w sekcji Reprezentacja wiedzy agenta przygotuj program w języku Prolog. Materiały Distance Learning © Wyższa Szkoła Informatyki i Zarządzania z siedzibą w Rzeszowie 7 Technologia inteligentnych agentów Zadanie 2 (Zadanie wykonywane w środowisku programowania) Dla opracowanych w zadaniu 1 programów przygotuj zbiór celów. Numery zadań odnoszą się do zadań z sekcji Reprezentacja wiedzy agenta. 1a). • Czy Jan lubi jabłka? • Czy jabłka są jadalne? • Kto lubi ostrygi? • Co jest jedzeniem? • Czy Tomek je węże i nadal żyje? • Co je Marta? 2). • Czy krzesło stoi pod bananami? • Co stoi pod bananami? • Czy małpa jest w pokoju? • Czy krzesło jest wysokie? • Czy małpa jest blisko bananów? • Czy lew może dosięgnąć banany? • Co może dosięgnąć małpa? • Kto może dosięgnąć banany? • Czy małpa może dosięgnąć banany? • Które obiekty są blisko których obiektów? 3). (Zadanie wykonywane w środowisku programowania) Korzystając ze specyfikacji „świata bramek logicznych” zapisanej w języku rachunku predykatów napisz program i zdefiniuj 2 cele wyszukujące oraz 2 potwierdzające. 4). (Zadanie wykonywane w środowisku programowania) Korzystając ze specyfikacji systemu doradcy finansowego zapisanej w języku rachunku predykatów napisz program, który będzie uruchamiany w sposób przedstawiony poniżej. Jaka jest optymalna inwestycja? ?- inwestycja(I). I = akcje //(lub I=oszczednosci lub I=kombinacja) Czy inwestycja w akcje to dobry wybór? ?- inwestycja(akcje). yes Załóżmy, że sytuację decyzyjną określają następujące fakty: • zarobki(kwota,rodzaj) – kwota zarobków i typ (stałe lub niestałe) • il_os(liczba) – liczba osób na utrzymaniu • oszcz(kwota) – wartość oszczędności Materiały Distance Learning © Wyższa Szkoła Informatyki i Zarządzania z siedzibą w Rzeszowie 8 Technologia inteligentnych agentów Dostosuj swój program tak, aby korzystał z ww. symboli predykatów. Korzystając z predykatów zdefiniuj przypadki testowe, które będą prowadziły do trzech różnych dorad generowanych przez system. Materiały Distance Learning © Wyższa Szkoła Informatyki i Zarządzania z siedzibą w Rzeszowie 9