Anda di halaman 1dari 24

Kecerdasan Buatan/

Artificial Intelligence

Logic Programming
Pokok Bahasan
1. Logic Programming
2. Logika Predikat
3. Bahasa Deklaratif
4. Pemrograman Prolog
 Fakta (Clauses)
 Aturan (Rules)
 Klausa (Clauses)
 Variabel
 Query
5. Latihan Individu + Tugas Kelompok
Logic Programming
 Sejarah Singkat
o Pemrograman Logika diperkenakan oleh Robert Kowalski pada tahun 1974
o Algoritma tersusun atas Logika dan kontrol
 Prolog
o Merupakan pemrograman dalam logika
o Bahasa pemrograman yang menggunakan pemrograman logika untuk
komputasi
o Diperkenalkan oleh Alain Colmerauer pada tahun 1970 an
o Imprementasi Prolog yang digunakan SWI Prolog versi 5.6.32
o Bebas melakukan download di URL: http://www.swi-prolog.org/
o Dikembangkan oleh Jan Wielenmaker, Universitas Amsterdam
o 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 Logika
o 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 :
john
father(john,bill).
father(bill,mary).
father(bill,tom).
bill father(tom,chris).
father(tom,bob).
mother(mary,june).
tom mary mother(mary,katie)

chris bob june katie


Pemrograman Prolog
 Contoh dua Program keluarga :
Fakta : Fakta :
female(pat). parent(pam,bob).
male(jim), % Pam is a parent of Bob
parent(tom,bob).
offspring(Y,X) :- parent(X,Y). parent(tom,liz).
mother(X,Y) :- parent(bob,ann).
parent(X,Y),female(X). parent(bob,pat).
grandparent(X,Z) :- parent(pat,jim).
parent(X,Y),parent(Y,Z).
sister(X,Y) :- female(pam).
parent(Z,X),parent(Z,Y),female(X), % Pam is female
different(X,Y). male(tom).
predecessor(X,Z) :- parent(X,Z). male(bob).
predecessor(X,Z) :- female(liz).
parent(X,Y),predecessor(Y,Z). 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).
tedge(Node1,Node2) :-edge(Node1,SomeNode), edge(SomeNode,Node2).

Query :
?- edge(a,c).
?- edge(a,b).
?- edge(e,c).
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 :
Constraint
suka(bejo, cilok). diletakkan ?- teman(bejo, Who).
suka(gondo, cilok). pada awal rule
suka(wulan, bakso).
teman(X, Y) :- \+(X = Y), suka(X, Z), suka(Y, Z).
atau Constraint
teman(X, Y) :- suka(X, Z), suka(Y, Z), \+(X = Y). diletakkan
pada akhir rule
 Queries :
?- suka(bejo, cilok).
?- teman(bejo, gondo).
?- suka(bejo, What). ?- teman(bejo, Who).

?- suka(Who, bakso).
Pemrograman Prolog
 Knowledge Base :  Penyelesian (Unification) :
written_by(fleming, "DR NO"). ?- written_by(X,Y)
written_by(melville, "MOBY DICK"). written_by( X , Y ).
book("MOBY DICK", 250). | |
written_by(fleming, "DR NO").
book("DR NO", 310).
long_novel(Title):-
written_by( X , Y ).
written_by(_, Title), | |
book(Title, Length), written_by(melville, "MOBY DICK").
Length > 300.
Prolog menampilkan semua solusi :
 Queries : X=fleming, Y=DR NO
?- written_by(X,Y) X=melville, Y=MOBY DICK
2 Solusi
Pemrograman Prolog
 Knowledge Base :  Penyelesian (Unification) :
written_by(fleming, "DR NO"). ?- written_by(X, “MOBY DICK”)
written_by(melville, "MOBY DICK"). ?- written_by(X, “MOBY DICK”).
book("MOBY DICK", 250). | |
written_by(fleming, "DR NO").
book("DR NO", 310).
long_novel(Title):- FAIL
?- written_by(X, “MOBY DICK”).
written_by(_, Title),
| |
book(Title, Length),
written_by(melville, "MOBY DICK").
Length > 300.
 Queries : Prolog menampilkan 1 solusi :
X=melville
?- written_by(X,Y)
?- written_by(X, “MOBY DICK”)
Pemrograman Prolog
 Knowledge Base :  Penyelesian (Unification) :
written_by(fleming, "DR NO"). ?- long_novel(X)
written_by(melville, "MOBY DICK"). ?- long_novel(X)
|
book("MOBY DICK", 250).
long_novel(Title):-
book("DR NO", 310).
written_by(_, Title),
long_novel(Title):- book(Title, Length),
written_by(_, Title), Length > 300.
book(Title, Length), written_by(_, Title)
| |
Length > 300.
written_by(fleming,"DR NO").
 Queries :
book(Title, Length)
?- written_by(X,Y) |
?- written_by(X, “MOBY DICK”) book("DR NO", Length).
|
?- long_novel(X) book("DR NO", 310).

Length > 300


|
310 > 300.
Prolog menampilkan 1 solusi :
X=DR NO
Backtracking
 Knowledge Base :  Penyelesaian (Backtracking) :
likes(bill,X):-food(X),tastes(X,good). likes(bill, What).
tastes(pizza,good). |
likes(bill, X)
tastes(brussels_sprouts,bad).
food(brussels_sprouts). food(X)
| backtracking point
food(pizza). food(brussels_sprouts)
 Queries : tastes(X,good).
?- likes(bill, What). | |
FAIL
tastes(brussels_sprouts,bad).

Backtracking
food(X)
|
food(pizza)

tastes(X, good).
| |
tastes(pizza,good).

X => What = pizza


Latihan Individu
 Perhatikan silsilah keluarga berikut:
Ninda Ari Alya Arya Level 3

Aisah Fahmi Nisak Aldi Roy Level 2

Tian Maya Soni Level 1

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!
Tugas Kelompok
 Buatlah 1 silsilah keluarga minimal sampai pada tingkatan buyut (Level 4).
Kemudian buatlah fakta-fakta yang mungkin dan berikan 5 query yang
representatif dengan permasalahan tersebut! (Optional)
 Perhatikan Program Plolog berikut :
Fakta :
parent(charles1, james1).
male(james1).
parent(elizabeth, james1).
male(charles1).
parent(charles2, charles1).
male(charles2).
parent(catherine, charles1).
male(james2).
parent(james2, charles1).
male(george1).
parent(sophia, elizabeth).
parent(george1, sophia).
female(catherine).
female(elizabeth).
female(sophia).

Ubahlah pertanyaan berikut menjadi Program Prolog & Jawaban!


a. Was George1 the parent of Charles1?
b. Who was Charles1's parent?
c. Who were the children of Charles1?
Selesai

Anda mungkin juga menyukai