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