logic programming
DESCRIPTION
Kecerdasan Buatan / Artificial Intelligence. Logic Programming. Imam Cholissodin, S.Si., M.Kom. Pokok Bahasan. Sekilas Inference FOL ( Optional ) Logic Programming Logika Predikat Bahasa Deklaratif Pemrograman Prolog Fakta (Clauses) Aturan (Rules) Klausa (Clauses) Variabel Query - PowerPoint PPT PresentationTRANSCRIPT
Logic Programming
Imam Cholissodin, S.Si., M.Kom.
Kecerdasan Buatan/Artificial Intelligence
Pokok Bahasan
1. Sekilas Inference FOL (Optional)
2. Logic Programming
3. Logika Predikat
4. Bahasa Deklaratif
5. Pemrograman Prolog Fakta (Clauses) Aturan (Rules) Klausa (Clauses) Variabel Query
6. Implementasi Prolog (The Next)
7. Latihan Individu + Tugas Kelompok
Logic Programming
Sejarah Singkat o Pemrograman Logika diperkenakan oleh Robert Kowalski pada tahun 1974o Algoritma tersusun atas Logika dan kontrol
Prologo Merupakan pemrograman dalam logikao Bahasa pemrograman yang menggunakan pemrograman logika untk
komputasio Diperkenalkan oleh Alain Colmerauer pada tahun 1970 ano Imprementasi Prolog yang digunakan SWI Prolog versi 5.6.32o Bebas melakukan download di URL: http://www.swi-prolog.org/o Dikembangkan oleh Jan Wielenmaker, Universitas Amsterdamo Ada berbagai implementasi lain seperti: SICStus Prolog, XSB, dsb.)
Logic Programming
PROLOG adalah kependekan dari PROgramming in LOGic, yang berarti pemrograman.
Pemrograman Prolog menggunakan bahasa deklaratif, dimana pemrogram memberi fakta dan aturan untuk selanjutnya diselesaikan oleh Prolog secara deduktif sehingga menghasilkan suatu kesimpulan.
Hal ini berbeda dengan bahasa prosedural seperti Pascal, Fortran, C, atau yang sejenis, dimana pemrogram memberi perintah atau penugasan untuk memecahkan persoalan langkah demi langkah.
Prolog menggunakan relasi, bukan fungsi sehingga sangat sesuai untuk implementasi sistem pakar.
Logic Programming
Contoh : Pemrograman Logikao Temukan seluruh elemen yang beranggotakan dua list yang diberikan
List: [a1, a2, ..., an] atau [a1 | [a2..., an]]
a1 disebut dengan head dari [a1, a2, ..., an]
[a2, ..., an] disebut tail dari [a1, a2, ..., an]
Contoh: [1,2,3,4,5=[1|[2,3,4,5]]
o Kita memerlukan definisi pada saat X merupakan member dari suatu list. Jika X adalah sebagai head-nya, maka jawabannya positif (benar)
member(X,[X|List]). Sebaliknya, lakukan pengecekan apakah X adalah member dari tail.
member(X,[Y|List]) member(X,List).
o Maka dalam bahasa Prolog bisa dituliskan terurut sebagaimana berikut: member(X|[X|List]).
member(X,[Y|List]):-member(X,List).
member_both(X,L1,L2):-member(X,L1),member(X,L2).
o Kemudian jalankan program untuk memecahkan permasalahan ?-member_both(X,[1,2,3],[2,3,4,5]).
Logika Predikat
Logika predikat (kalkulus predikat) merupakan bagian dari komputasi logika yang juga mencakup logika proposisional, dimana fakta dan aturan dinyatakan melalui predikat seperti:
lelaki(Joko) . // fakta
menikah(Joko, Tuti) . // fakta
∀x y [∀ menikah(x,y) ∧ lelaki(x)] → ~lelaki(y) . // aturan
∀y x [∃ orang(y) → ibu(x,y) . // aturan Kalimat pertama menunjukkan adanya fakta bahwa Joko adalah seorang
lelaki. kalimat kedua menyatakan bahwa Joko menikah dengan Tuti. Kalimat ketiga dan keempat menunjukkan suatu aturan atau kaidah
yang umum berlaku. Simbol predikat yang digunakan dalam kalimat-kalimat tersebut adalah
lelaki, menikah, orang, dan ibu yang sering disebut sebagai relasi, sedangkan Joko dan Tuti disebut sebagai simbol konstanta.
Bahasa Deklaratif
Sebagai bukti bahwa Prolog merupakan bahasa deklaratif adalah dalam menyatakan fakta dan aturan seperti berikut:
Jika ingin menyatakan bahwa “Prawiro adalah bapak dari Joko”, maka dalam Prolog dituliskan sebagai:
bapak(prawiro, joko). Jika ingin menerangkan suatu kaidah bahwa A adalah kakek dari Z
maka harus dibuat dahulu logika dalam bahasa Indonesia sehingga menjadi suatu aturan seperti berikut:
A adalah kakek Z jika A adalah bapak dari X dan X adalah bapak Z
atau
A adalah kakek Z jika A adalah bapak dari X dan X adalah ibu Z
dalam Prolog dituliskan sebagai:
kakek(A,Z) :- bapak(A,X), bapak(X,Z).
atau
kakek(A,Z) :- bapak(A,X), ibu(X,Z).
Pemrograman Prolog
Fakta adalah suatu kenyataan atau kebenaran yang diketahui, dan menyatakan hubungan (relasi) antara dua atau lebih obyek. Fakta dapat pula menunjukkan sifat suatu obyek.
Contoh :
bapak(prawiro, joko).
merah(darah).
asin(garam). Aturan merupakan logika yang dirumuskan dalam bentuk relasi sebab-
akibat dan hubungan implikasi. Misalnya dapat dibuat aturan bahwa jika A adalah bapak dari X dan X adalah bapak atau ibu dari Z maka dapat dipastikan bahwa A adalah kakek dari Z.
Contoh :
kakek(A,Z) :- bapak(A,X), bapak(X,Z).
kakek(A,Z) :- bapak(A,X), ibu(X,Z).
Pemrograman Prolog
Klausa adalah aturan yang ditulis berupa klausa (clause) dan terdiri dari head (kakek) dan tail yang dipisahkan oleh tanda :- (bapak dan ibu). Klausa selalu diakhiri dengan tanda titik (.). Suatu tail klausa dapat terdiri dari beberapa sub-klausa yang dihubungkan dengan tanda koma (,) yang berarti hubungan and dan tanda titik koma (;) yang menunjukkan hubungan or. Contoh :
orangtua(P,Q) :- bapak(P,Q); ibu(P,Q).
kakek(A,Z) :- bapak(A,X), orangtua(X,Z). Variabel adalah argumen suatu predikat dapat berupa konstanta (atom),
variabel, atau obyek lain. Suatu atom, variabel, atau obyek lain dalam Prolog disebut term, sehingga argumen selalu berupa term. Dalam Prolog terdapat dua variabel, yaitu
1. Variabel bernama, seperti X, Orang, dan sebagainya
2. Variabel tak bernama (placeholder), dilambangkan (_).
Pemrograman Prolog
Variabel adalah argumen suatu predikat dapat berupa konstanta (atom), variabel, atau obyek lain. Suatu atom, variabel, atau obyek lain dalam Prolog disebut term, sehingga argumen selalu berupa term. Dalam Prolog terdapat dua variabel, yaitu
1. Variabel bernama, seperti X, Orang, dan sebagainya
2. Variabel tak bernama (placeholder), dilambangkan (_).
Setiap term yang ditulis dengan awalan huruf kapital selalu dianggap sebagai variabel bernama dalam Prolog, sedangkan awalan dengan huruf kecil dianggap sebagai suatu relasi atau konstanta. Variabel tak bernama digunakan untuk mengabaikan nilai suatu variabel, yang berarti bisa bernilai apa saja. Contoh :
member(X,[X|_]).
member(X,[_|Y]) :- member(X,Y)
Pemrograman Prolog
Contoh gambaran Prolog :
Fakta :link(fortran,algol60).link(algol60, simula67).link(algol60, cpl).link(simula67, smalltalk80).link(simula67, cpp).link(cpl, bcpl).link(bcpl, c).link(c, cpp).path(L,L).path(L,M):-link(L,X),path(X,M).
Pemrograman Prolog
Contoh gambaran Prolog :
Fakta :father(john,bill).father(bill,mary).father(bill,tom).father(tom,chris).father(tom,bob).mother(mary,june).mother(mary,katie)
john
bill
tom mary
chris bob june katie
Pemrograman Prolog
Contoh dua Program keluarga :
Fakta :female(pat).male(jim),
offspring(Y,X) :- parent(X,Y).mother(X,Y) :- parent(X,Y),female(X).grandparent(X,Z) :- parent(X,Y),parent(Y,Z).sister(X,Y) :- parent(Z,X),parent(Z,Y),female(X), different(X,Y).predecessor(X,Z) :- parent(X,Z).predecessor(X,Z) :- parent(X,Y),predecessor(Y,Z).
Fakta :parent(pam,bob). % Pam is a parent of Bobparent(tom,bob).parent(tom,liz).parent(bob,ann).parent(bob,pat).parent(pat,jim).
female(pam). % Pam is femalemale(tom).male(bob).female(liz).female(ann).
Pemrograman Prolog
Query adalah pertanyaan yang digunakan untuk memperoleh jawaban dari suatu problem. Contoh :
Fakta :edge(a,b).edge(a,e).edge(b,d).edge(b,c).edge(c,a).edge(e,b).edge(X,Y) :- tedge(X,Y).
Query :?- edge(a,c).?- edge(a,b).?- edge(e,c).
tedge(Node1,Node2) :-edge(Node1,SomeNode), edge(SomeNode,Node2).
Pemrograman Prolog
FOL form: X (barks(X) wags_tail(X) dog(X)) Knowledge Base
dog(X) :- barks(X), wags_tail(X).barks(woff).barks(spot).wags_tail(woff).
Queries ?- dog(woff) => yes
?- dog(Y) => Y = woff (menggunakan Variabel) ?- dog(spot) => no
Means no more matches found.
Pemrograman Prolog
Knowledge Base :
big(bear).
big(elephant).
small(cat).
brown(bear).
black(cat).
gray(elephant).
dark(Z) :- black(Z).
dark(Z) :- brown(Z). Queries :
?- dark(X), big(X).
Pemrograman Prolog
Knowledge Base : written_by(fleming, "DR NO").
written_by(melville, "MOBY DICK").
book("MOBY DICK", 250).
book("DR NO", 310).
long_novel(Title):-
written_by(_, Title),
book(Title, Length),
Length > 300.
Queries :
?- written_by(X,Y)
Penyelesian (Unification) :
?- written_by(X,Y)
written_by( X , Y ).
| |
written_by(fleming, "DR NO").
written_by( X , Y ).
| |
written_by(melville, "MOBY DICK").
Prolog menampilkan semua solusi :
X=fleming, Y=DR NO
X=melville, Y=MOBY DICK
2 Solusi
Pemrograman Prolog
Knowledge Base : written_by(fleming, "DR NO").
written_by(melville, "MOBY DICK").
book("MOBY DICK", 250).
book("DR NO", 310).
long_novel(Title):-
written_by(_, Title),
book(Title, Length),
Length > 300.
Queries :
?- written_by(X,Y)
?- written_by(X, “MOBY DICK”)
Penyelesian (Unification) :
?- written_by(X, “MOBY DICK”)
?- written_by(X, “MOBY DICK”).
| |
written_by(fleming, "DR NO").
FAIL
?- written_by(X, “MOBY DICK”).
| |
written_by(melville, "MOBY DICK").
Prolog menampilkan 1 solusi :
X=melville
Pemrograman Prolog
Knowledge Base : written_by(fleming, "DR NO").
written_by(melville, "MOBY DICK").
book("MOBY DICK", 250).
book("DR NO", 310).
long_novel(Title):-
written_by(_, Title),
book(Title, Length),
Length > 300.
Queries :
?- written_by(X,Y)
?- written_by(X, “MOBY DICK”)
?- long_novel(X)
Penyelesian (Unification) :
?- long_novel(X)
?- long_novel(X) |
long_novel(Title):-
written_by(_, Title),
book(Title, Length),
Length > 300.written_by(_, Title) | |written_by(fleming,"DR NO").
book(Title, Length) |book("DR NO", Length). |book("DR NO", 310).
Length > 300 | 310 > 300. Prolog menampilkan 1 solusi :
X=DR NO
Backtracking
Knowledge Base :likes(bill,X):-food(X),tastes(X,good).
tastes(pizza,good).
tastes(brussels_sprouts,bad).
food(brussels_sprouts).
food(pizza).
Queries :
?- likes(bill, What).
likes(bill, What). |likes(bill, X)
food(X) | backtracking point food(brussels_sprouts)
tastes(X,good). | |
FAILtastes(brussels_sprouts,bad).
Backtrackingfood(X) |food(pizza)
tastes(X, good). | | tastes(pizza,good).
X => What = pizza
Penyelesaian (Backtracking) :
Latihan Individu
Perhatikan silsilah keluarga berikut:
a. Buatlah Code Prolog sesuai fakta yang ada dari silsilah keluarga di atas!
b. Buatlah minimal 2 query yang merepresentasikan permasalahan di atas dalam Code Prolog!
Ninda AryaAri Alya
Aisah Fahmi Nisak Aldi Roy
Tian Maya Soni
Level 3
Level 2
Level 1
Tugas Kelompok
Buatlah 1 silsilah keluarga minimal sampai pada tingkatan buyut (Level 4). Kemudian buatlah fakta-fakta yang mungkin dan berikakan 5 query yang representatif dengan permasalahan tersebut!
Perhatikan Program Plolog berikut :
Ubahlah pertanyaan berikut menjadi Program Prolog & Jawaban!– Was George1 the parent of Charles1?
– Who was Charles1's parent?
– Who were the children of Charles1?
Fakta :male(james1).
male(charles1). male(charles2). male(james2). male(george1).
female(catherine). female(elizabeth). female(sophia).
parent(charles1, james1). parent(elizabeth, james1). parent(charles2, charles1). parent(catherine, charles1). parent(james2, charles1). parent(sophia, elizabeth). parent(george1, sophia).
Selesai