Penalaran berbasis pengetahuan Kecerdasan Artifisial(CIF63310 / 2 sks)
1.
U n iv e r s i t a s B r a w i j a y a - B u i l d i n g U p N o b l e F u t u r e
brone.ub.ac.id
Penalaran Berbasis
Pengetahuan (1)
Kecerdasan Artifisial(CIF63310 / 2 sks)
2.
U n iv e r s i t a s B r a w i j a y a - B u i l d i n g U p N o b l e F u t u r e
brone.ub.ac.id
Outline
1. Logika Proposisi
2. Logika Order Pertama
3. Pemrograman Berbasis Logika
3.
U n iv e r s i t a s B r a w i j a y a - B u i l d i n g U p N o b l e F u t u r e
brone.ub.ac.id
LOGIKA PROPOSISI
4.
U n iv e r s i t a s B r a w i j a y a - B u i l d i n g U p N o b l e F u t u r e
brone.ub.ac.id
Logika Proposisi
Logika Proposisi
o Merupakan logika yang paling sederhana. Sebuah sentence
dinyatakan sebagai simbol proposional P1, P2, dst.
o Sintaks dari logika proposisi
Jika S adalah kalimat, ⌐S adalah kalimat (negasi)
Jika S1 dan S2 adalah kalimat, S1 Ʌ S2 adalah kalimat
(conjunction)
Jika S1 dan S2 adalah kalimat, S1 V S2 adalah kalimat
(disjunction)
Jika Jika S1 dan S2 adalah kalimat, S1 → S2 adalah kalimat
(implication)
Jika S1 dan S2 adalah kalimat, S1 ↔ S2 adalah kalimat
(biconditional)
5.
U n iv e r s i t a s B r a w i j a y a - B u i l d i n g U p N o b l e F u t u r e
brone.ub.ac.id
Logika Proposisi
Logika Proposisi
o Semantik dari logika proposisi
Sebuah model memberi nilai true/ false terhadap setiap
proposisi, misal P1,2 = true, P2,2 = true, P3.1 = false.
Sebuah proses rekursif bisa mengevaluasi kalimat
sembarang: ⌐P1,2 (P
Ʌ 2,2 V P3,1) = true (false V true) = true
Ʌ
true = true
Ʌ .
6.
U n iv e r s i t a s B r a w i j a y a - B u i l d i n g U p N o b l e F u t u r e
brone.ub.ac.id
Logika Proposisi
Logika Proposisi
o Semantik dari logika proposisi
Maka kalimat yang digunakan untuk merepresentasikan
Wumpus World
Secara semantik :
• Pi,j = true menyatakan kalau ada lubang jebakan (pit) di [i, j].
• Bi,j = true menyatakan kalau ada hembusan angin (breeze).
Aturan main dalam Wumpus World : kamar di samping
lubang jebakan ada hembusan angin:
• B1,1↔ (P1,2 V P2,1)
• B2,1↔ (P1,2 V P2,2 V P3,1)
Hasil pengamatan (percept):
• ⌐P1,1
• ⌐ B1,1
• B2,1
dgd
Menyatakan kamar i,j tersebut (αi) aman atau tidak.
Menyatakan KB untuk dibuktikan
misalnya dengan tabel kebenaran.
7.
U n iv e r s i t a s B r a w i j a y a - B u i l d i n g U p N o b l e F u t u r e
brone.ub.ac.id
Logika Proposisi
Logika Proposisi
o Dasar Manipulasi Rules
• ¬(¬A) = A Double negation
• ¬(A ^ B) = (¬A) V (¬B) Negated “and”
• ¬(A V B) = (¬A) ^ (¬B) Negated “or”
• A ^ (B V C) = (A ^ B) V (A ^ C) Distributivity of ^ on V
• A => B = (¬A) V B by definition
• ¬(A => B) = A ^ (¬B) using negated or
• A B = (A => B) ^ (B => A) by definition
• ¬(A B) = (A ^ (¬B))V(B ^ (¬A)) using negated and & or
• …
8.
U n iv e r s i t a s B r a w i j a y a - B u i l d i n g U p N o b l e F u t u r e
brone.ub.ac.id
Logika Proposisi
Logika Proposisi
o Contoh :
9.
U n iv e r s i t a s B r a w i j a y a - B u i l d i n g U p N o b l e F u t u r e
brone.ub.ac.id
Logika Proposisi
Logika Proposisi
o Solusi :
10.
U n iv e r s i t a s B r a w i j a y a - B u i l d i n g U p N o b l e F u t u r e
brone.ub.ac.id
Logika Proposisi
Logika Proposisi
o Inferensi bisa dilakukan menggunakan tabel kebenaran
untuk membuktikan entailment dari suatu knowledge.
Sehingga kita dapat membuktikan apakah KB |= α1
menggunakan tabel kebenaran (sejenis model checking), di
mana α1 menyatakan kamar di [1, 2] aman sebagaimana tabel
di bawah ini.
U n iv e r s i t a s B r a w i j a y a - B u i l d i n g U p N o b l e F u t u r e
brone.ub.ac.id
Konsep dasar FOL
Declarative : menyatakan fakta-fakta terpisah dari mekanisme/prosedur
inference.
Memungkinkan pernyataan informasi yang partial / disjunctive / negated.
Compositional : “arti” P Q tergantung arti P dan arti Q
∧ .
Context-independent : arti tidak tergantung konteks.
Unambiguous : terhadap suatu model, arti sebuah sentence jelas.
...Sayangnya, kurang expressive.
Mis.: “Kalau ada jebakan, di kamar sebelah ada hembusan angin” harus
dinyatakan dengan n × n buah sentence propositional logic.
13.
U n iv e r s i t a s B r a w i j a y a - B u i l d i n g U p N o b l e F u t u r e
brone.ub.ac.id
Konsep dasar FOL
Dalam propositional logic, dunia hanya mengandung fakta-fakta.
Dalam first order logic (FOL), dunia bisa mengandung:
o Object : di dalam dunia ada orang, bangunan, buku, UB, ITS, UI, SBY, bilangan,
warna, hari, . . .
o Relations : tentang object dalam dunia, ada relasi merah, bulat, cantik, positif,
abang dari, lebih besar dari, di atas, terjadi sebelum, . . .
o Functions: fungsi yang menghasilkan object lain seperti ayah dari, babak final
dari, satu lebih dari, kaki kiri dari, . . .
Hal ini disebut ontological commitment dari sebuah logic : apa saja “isi” dunia yang
dijelaskan?
14.
U n iv e r s i t a s B r a w i j a y a - B u i l d i n g U p N o b l e F u t u r e
brone.ub.ac.id
Syntax FOL: Elemen-elemen dasar
Elemen-elemen dasar FOL:
o Constants : KingJohn, 2, UB, ITS, UI, Malang, Depok , . . .
o Predicates : Brother , >, Loves, Membenci , Mengajar , . . .
o Functions : Sqrt , LeftLegOf , Ayah, . . .
o Variables : x , y , a, b, . . .
o Connectives : ¬
∧ ∨ ⇒ ⇔
o Equality : =
o Quantifiers : ∀ ∃
15.
U n iv e r s i t a s B r a w i j a y a - B u i l d i n g U p N o b l e F u t u r e
brone.ub.ac.id
Syntax FOL : Kalimat Atomic
Kalimat atomic
o Definisi atomic sentence :
predicate(term1, . . . , termn)
atau term1 = term2
o Definisi term :
function(term1, . . . , termn)
atau constant
atau variable
o Contoh :
Brother (KingJohn, RichardTheLionheart )
> (Length(LeftLegOf (Richard)), Length(LeftLegOf (KingJohn)))
16.
U n iv e r s i t a s B r a w i j a y a - B u i l d i n g U p N o b l e F u t u r e
brone.ub.ac.id
Syntax FOL : Kalimat Kompleks
Kalimat kompleks
o Kalimat kompleks complex sentence terdiri dari sentence yang
digabungkan dengan connective.
o Definisi complex sentence :
¬S, S1 S
∧ 2, S1 S
∨ 2, S1 S
⇒ 2, S1 S
⇔ 2
o Contoh :
Sibling(KingJohn, Richard ) Sibling(Richard , KingJohn)
⇒
>(1, 2) ≤(1, 2)
∨
>(1, 2) ¬>(1, 2)
∧
Belajar (x , SC) Mengerti(x , AI)
⇒
17.
U n iv e r s i t a s B r a w i j a y a - B u i l d i n g U p N o b l e F u t u r e
brone.ub.ac.id
Semantics FOL : truth & model
Sama halnya dengan. Proposisi Logic (PL), sebuah
kalimat FOL bisa juga dikatakan true terhadap sebuah
model.
Namun, sebuah kalimat bisa diinterpretasikan banyak
cara dalam sebuah model.
Model berisi :
o Objects : elemen-elemen di dalam dunia (domain elements).
o Relations : hubungan antara elemen-elemen tersebut.
Sebuah interpretasi mendefinisikan referent (“yang
dipetakan”)
o Constant symbols → objects
o Predicate symbols → relations
o Function symbols → functional relations
18.
U n iv e r s i t a s B r a w i j a y a - B u i l d i n g U p N o b l e F u t u r e
brone.ub.ac.id
Semantics FOL: interpretasi & kebenaran
Arti dari sebuah kalimat FOL :
Kalimat atomik predicate(term1, . . . , termn) dikatakan bernilai
true dalam model m di bawah interpretasi i iff object yang di-refer
(term1, . . . , termn) (di bawah i) terhubung oleh relation yang di-
refer oleh predicate (di bawah i) dalam m.
Contoh sebuah model: Contoh sebuah model (lebih rinci):
19.
U n iv e r s i t a s B r a w i j a y a - B u i l d i n g U p N o b l e F u t u r e
brone.ub.ac.id
Kemungkinan model & interpretasi
Entailment, validity, satisfiability, dll. Didefinisikan untuk
semua kemungkinan interpretasi dari semua
kemungkinan model!
Kalau mau dijabarkan semua kemungkinannya:
For each number of domain elements n from 1 to ∞
For each k-ary predicate Pk in the vocabulary
For each possible k-ary relation on n objects
For each constant symbol C in the vocabulary
For each choice of referent for C from n objects .
. .
Menentukan entailment berdasarkan truth-table?
mustahil!
Biasanya ada satu interpretasi yang “dimaksudkan” →
intended interpretation.
20.
U n iv e r s i t a s B r a w i j a y a - B u i l d i n g U p N o b l e F u t u r e
brone.ub.ac.id
Universal quantification
Syntax:
Jika S kalimat, variables S
∀ adalah kalimat
Contoh:
o “Semua mahasiswa PTIIK UB adalah Genius”
o ∀ x mahasiswa(x , PTIIKUB) Genius (x)
⇒
Semantics:
x S bernilai true dalam model m di bawah interpretasi iff S bernilai true
∀
untuk semua kemungkinan referent dari x (setiap object di dalam m).
Dengan kata lain, x S ≡
∀ conjunction dari semua instantiation S:
(mahasiswa(Ani , PTIIKUB) Genius (Ani ))
⇒ ∧
(mahasiswa(Anto, PTIIKUB) Genius (Anto))
⇒ ∧
.
.
(mahasiswa(Zaenal , PTIIKUB) Genius (Zaenal))
⇒ ∧
(mahasiswa(Zakky , PTIIKUB) Genius (Zakky ))
⇒
21.
U n iv e r s i t a s B r a w i j a y a - B u i l d i n g U p N o b l e F u t u r e
brone.ub.ac.id
Universal quantification
Biasanya, adalah operator /connective yang
⇒
digunakan dengan .
∀
Masalah yang sering terjadi : menggunakan sebagai
∧
connective untuk :
∀
x mahasiswa(x , PTIIKUB) Genius (x)
∀ ∧
Kalimat ini berarti “Semua orang adalah mahasiswa
PTIIKUB dan Genius”.
22.
U n iv e r s i t a s B r a w i j a y a - B u i l d i n g U p N o b l e F u t u r e
brone.ub.ac.id
Existential quantification
Syntax :
Jika S kalimat, variable S
∃ adalah kalimat
Contoh:
o “Ada mahasiswa Gunadarma yang pintar”
o ∃ x mahasiswa(x , Gundarma ) pintar (x)
∧
Semantics :
x S bernilai true dalam model m di bawah interpretasi iff S bernilai true
∃
untuk setidaknya 1 kemungkinan referent dari x (sebuah object di dalam
m).
Dengan kata lain, x S ≡
∃ disjunction dari semua instantiation S :
(mahasiswa(Ani , Gundar) pintar (Ani))
∧ ∨
(mahasiswa(Anto, Gundar) pintar (Anto))
∧ ∨
.
.
(mahasiswa(Zaenal , Gundar) pintar (Zaenal))
∧ ∨
(mahasiswa(Zakky , Gundar) pintar (Zakky))
∧
23.
U n iv e r s i t a s B r a w i j a y a - B u i l d i n g U p N o b l e F u t u r e
brone.ub.ac.id
Existential quantification
Biasanya, adalah operator /connective yang
∧
digunakan dengan .
∃
Masalah yang sering terjadi : menggunakan sebagai
⇒
connective untuk :
∃
x mahasiswa(x , Gundar ) pintar (x )
∃ ⇒
Kalimat ini true jika ada setidaknya 1 orang (object)
yang tidak kuliah di Gunadarma!
24.
U n iv e r s i t a s B r a w i j a y a - B u i l d i n g U p N o b l e F u t u r e
brone.ub.ac.id
Beberapa sifat (For All) dan (There Exist)
∀ ∃
∀ x y S
∀ sama dengan y x S
∀ ∀ , biasa ditulis x , y S
∀
∃ x y S
∃ sama dengan y x S
∃ ∃ , biasa ditulis x , y S
∃
∃ x y S
∀ TIDAK sama dengan y x S!
∀ ∃
o ∃ x y Mencintai (x , y )
∀
“Ada (sekurang-kurangnya) seseorang yang mencintai semua
orang di dunia.”
o ∀ y x Mencintai (y , x )
∃
“Semua orang di dunia mencintai sekurang-kurangnya satu
orang”.
Quantifier bisa dinyatakan dengan yang lain:
x Doyan(x , Bakso)
∀ sama dengan ¬ x ¬Doyan(x , Bakso)
∃
x Doyan(x , Cilok)
∃ sama dengan ¬ x ¬Doyan(x , Cilok)
∀
25.
U n iv e r s i t a s B r a w i j a y a - B u i l d i n g U p N o b l e F u t u r e
brone.ub.ac.id
“Contoh kalimat” Convert to “FOL”
“Ayah adalah orangtua”
x , y Ayah(x , y) Orangtua(x , y)
∀ ⇒
“Hubungan saudara berlaku simetris”
x , y Saudara(x , y) Saudara(y , x)
∀ ⇔
“Ibu adalah orangtua berjenis kelamin perempuan”
x , y Ibu(x , y) Orangtua(x , y) Perempuan(x)
∀ ⇔ ∧
“Sepupu adalah anak dari saudara orangtua”
x , y Sepupu(x , y) ox , oy Orangtua(ox , x)
∀ ⇔ ∃ ∧
Saudara(ox , oy) Orangtua(oy , y)
∧
26.
U n iv e r s i t a s B r a w i j a y a - B u i l d i n g U p N o b l e F u t u r e
brone.ub.ac.id
Equality
Kalimat term1 = term2 bernilai true di bawah sebuah interpretasi iff
term1 and term2 me-refer ke object yang sama.
Contoh:
o Ayah(Anto) = Abdul adalah satisfiable
o Anto = Abdul juga satisfiable!
o Anto = Anto adalah valid.
Bisa digunakan dengan negasi untuk membedakan dua term:
x , y Mencintai (Anto, x ) Mencintai(Anto, y ) ¬(x = y )
∃ ∧ ∧
(Anto mendua!)
Definisi Sibling:
x , y Sibling(x , y ) (¬(x = y ) m, f ¬(m = f )
∀ ⇔ ∧ ∃ ∧
Parent (m, x ) Parent (f , x ) Parent (m, y ) Parent (f ,
∧ ∧ ∧
y ))
27.
U n iv e r s i t a s B r a w i j a y a - B u i l d i n g U p N o b l e F u t u r e
brone.ub.ac.id
Knowledge-based Agent (KBA) dengan FOL
Kita bisa menggunakan FOL sebagai KRL (Knowledge
Representation Language) sebuah KBA.
Pertama-tama, kita berikan informasi ke KB (TELL).
Kalimat FOL yang ditambahkan ke KB disebut assertion.
Contohnya :
o TELL(KB,King(John))
o TELL(KB, x King(x ) Person(x ))
∀ ⇒
Lalu, kita bisa memberikan query, atau bertanya, kepada KB
(ASK). Contohnya :
o ASK(KB,King(John)) jawabannya adalah true.
o ASK(KB,Person(John)) jawabannya adalah true.
o ASK(KB, x Person(x ))
∃ jawabannya adalah {x /John}
28.
U n iv e r s i t a s B r a w i j a y a - B u i l d i n g U p N o b l e F u t u r e
brone.ub.ac.id
Pemrograman Berbasis Logika (Logic
Programming)
29.
U n iv e r s i t a s B r a w i j a y a - B u i l d i n g U p N o b l e F u t u r e
brone.ub.ac.id
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.
30.
U n iv e r s i t a s B r a w i j a y a - B u i l d i n g U p N o b l e F u t u r e
brone.ub.ac.id
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.
31.
U n iv e r s i t a s B r a w i j a y a - B u i l d i n g U p N o b l e F u t u r e
brone.ub.ac.id
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.
32.
U n iv e r s i t a s B r a w i j a y a - B u i l d i n g U p N o b l e F u t u r e
brone.ub.ac.id
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).
33.
U n iv e r s i t a s B r a w i j a y a - B u i l d i n g U p N o b l e F u t u r e
brone.ub.ac.id
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).
34.
U n iv e r s i t a s B r a w i j a y a - B u i l d i n g U p N o b l e F u t u r e
brone.ub.ac.id
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 (_).
35.
U n iv e r s i t a s B r a w i j a y a - B u i l d i n g U p N o b l e F u t u r e
brone.ub.ac.id
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)
36.
U n iv e r s i t a s B r a w i j a y a - B u i l d i n g U p N o b l e F u t u r e
brone.ub.ac.id
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).
37.
U n iv e r s i t a s B r a w i j a y a - B u i l d i n g U p N o b l e F u t u r e
brone.ub.ac.id
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
38.
U n iv e r s i t a s B r a w i j a y a - B u i l d i n g U p N o b l e F u t u r e
brone.ub.ac.id
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 Bob
parent(tom,bob).
parent(tom,liz).
parent(bob,ann).
parent(bob,pat).
parent(pat,jim).
female(pam). %
Pam is female
male(tom).
male(bob).
female(liz).
female(ann).
39.
U n iv e r s i t a s B r a w i j a y a - B u i l d i n g U p N o b l e F u t u r e
brone.ub.ac.id
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).
40.
U n iv e r s i t a s B r a w i j a y a - B u i l d i n g U p N o b l e F u t u r e
brone.ub.ac.id
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.
41.
U n iv e r s i t a s B r a w i j a y a - B u i l d i n g U p N o b l e F u t u r e
brone.ub.ac.id
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).
42.
U n iv e r s i t a s B r a w i j a y a - B u i l d i n g U p N o b l e F u t u r e
brone.ub.ac.id
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
43.
U n iv e r s i t a s B r a w i j a y a - B u i l d i n g U p N o b l e F u t u r e
brone.ub.ac.id
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
44.
U n iv e r s i t a s B r a w i j a y a - B u i l d i n g U p N o b l e F u t u r e
brone.ub.ac.id
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
45.
U n iv e r s i t a s B r a w i j a y a - B u i l d i n g U p N o b l e F u t u r e
brone.ub.ac.id
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).
| |
FAIL
tastes(brussels_sprouts,bad).
Backtracking
food(X)
|
food(pizza)
tastes(X, good).
| |
tastes(pizza,good).
X => What = pizza
Penyelesaian (Backtracking) :