Logic Programming

23
Logic Programming Imam Cholissodin, S.Si., M.Kom. Kecerdasan Buatan/ Artificial Intelligence

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 Presentation

Transcript of Logic Programming

Page 1: Logic Programming

Logic Programming

Imam Cholissodin, S.Si., M.Kom.

Kecerdasan Buatan/Artificial Intelligence

Page 2: Logic Programming

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

Page 3: Logic Programming

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.)

Page 4: Logic Programming

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.

Page 5: Logic Programming

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]).

Page 6: Logic Programming

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.

Page 7: Logic Programming

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).

Page 8: Logic Programming

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).

Page 9: Logic Programming

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 (_).

Page 10: Logic Programming

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)

Page 11: Logic Programming

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).

Page 12: Logic Programming

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

Page 13: Logic Programming

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).

Page 14: Logic Programming

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).

Page 15: Logic Programming

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.

Page 16: Logic Programming

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).

Page 17: Logic Programming

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

Page 18: Logic Programming

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

Page 19: Logic Programming

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

Page 20: Logic Programming

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) :

Page 21: Logic Programming

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

Page 22: Logic Programming

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).

Page 23: Logic Programming

Selesai