PROLOG
Ken Ratri
The Houw Liong
Pendahuluan
Prolog merupakan sebuah bahasa pemrograman logika tingkat tinggi (Programming in logic), sangat cocok untuk pencocokan pola (pattern matching) menggunakan unifikasi dan pencarian. Baik untuk pengolahan bahasa, sistem pakar berbasis aturan, perencanaan, dan aplikasi-aplikasi kecerdasan buatan seperti
Basis data inteligen (Intelligent database)
Pemahaman Bahasa alami (Natural language understanding)
Sistem Pakar (Expert systems)
Pengkhususan bahasa (Specification language)
Bahasa Mesin (Machine language)
Perencanaan Robot (Robot planning)
Penalaran automatis (Automated reasoning)
Pemecahan masalah (Problem solving)
Permainan (Game)
dan lain-lain
Menggunakan metode pencarian mendalam dahulu (depth-first search) dan mundur (backtracking) untuk melakukan pencarian solusi secara otomatis.
Tiga konsep penting dalam prolog:
Unifikasi
Mundur (Backtracking)
Rekursi (Recursion)
Terdapat tiga konstruksi dasar dalam prolog: fakta-fakta, kaidah (rules), dan pertanyaan (queries). Fakta dalam prolog dapat berupa item tertentu atau relasi antar item. Sebagai contoh hujan, mendung, manis dan lain-lain. Kita dapat menanyakan sebuah pertanyaan (query) pada prolog: ?-hujan maka prolog akan menjawab “yes”.
Fakta yang lebih lenglap terdiri dari suatu relasi pada item yang disebut argument. Suatu fakta yang menjelaskan relasi antar objek:
sayang(edy,mia)
memiliki(michael,rumah,mobil,tv).
Sintaks pada fakta :
Nama pada relasi dan objek harus dalam bentuk atom,
Relasi dituliskan sebelum objek-objek,
Tanda titik (.) harus dituliskan diakhir sebuah fakta.
Dari fakta yang ada maka kita dapat menanyakan suatu pertanyaan pada prolog. Dalam menjawab suatu pertanyaan Prolog menggunakan prosedur berikut ini.
Prolog melakukan pencarian pada basis pengetahuan.
Prolog mencari fakta yang sesuai/cocok antara fakta dan pertanyaan.
jika cocok atau ditemukan, maka prolog akan menjawab “ya (yes)” dan jika tidak akan menjawab “tidak (no)”.
Dua buah fakta akan cocok jika predikatnya sama dan argumen yang sesuai sama.
Sebuah variabel akan terinstansiasi jika ada suatu objek yang berada pada posisi dimana variabel berada. Proses pencocokan antara argumen dan variabel disebut unifikasi.
Jika sesuatu tergantung dari sekelompok fakta maka kita dapat mengekspresikan sebagai “kaidah (rules)”. Di dalam prolog rules memiliki sintaks:
Sasaran(argumen_sasaran):- subsasaran1(argumen_subsasaran_1), subsasaran2(argumen_subsasaran_2), ……………… subsasarann(argumen_subsasaran_n).
Koleksi dari fakta-fakta dan rules disebut sebagai basis pengetahuan. Berikut ini lima bentuk basis pengetahuan:
Basis Pengetahuan 1
Dibawah ini merupakan sekumpulan fakta yang sederhana.
wanita(mia).
wanita(jody).
wanita(yolanda).
Bermain_gitar(jody).
Basis Pengetahuan 2
mendengarkan_musik(mia).
gembira(yolanda).
bermain_gitar(mia):-mendengarkan_musik(mia).
bermain_gitar(yolanda):-mendengarkan_musik(yolanda).
mendengarkan_musik(yolanda):-gembira(yolanda).
Contoh di atas kaidah (rule) pertama menyatakan bahwa mia Bermain_gitar bila ia mendengarkan_musik, dan pada kaidah terakhir mengatakan bahwa yolanda mendengarkan_musik bila ia bahagia.
Tanda :- dibaca jika atau merupakan “implikasi dari “. Pada sebelah kiri dari tanda :- disebut kepala (head) dari kaidah (rule) dan pada sisi sebelah kanan dari tanda :- disebut tubuh (body) sehingga secara umum kaidah (rule) mengatakan bahwa bila tubuh (body) benar maka kepala (head) benar.
Bila suatu basis pengetahuan berisi sebuah rule head:-body dan prolog mengetahui bahwa body berada dalam basis pengetahuan maka prolog dapat melakukan inferensi pada head atau dikenal dengan istilah modus ponen.
Kita dapat melakukan pertanyaan pada prolog untuk contoh di atas :
?-bermain_gitar(mia).
Prolog akan merespon “yes”, meskipun fakta bermain_gitar(mia) tidak secara eksplisit tertulis namum terdapat kaidah bermain_gitar(mia):-mendengarkan_musik(mia). Di samping itu berisi fakta mendengarkan_musik(mia). Prolog dapat menggunakan modus ponen untuk melakukan deduksi pada bermain_gitar(mia) tersebut.
Berikut ini contoh yang menunjukkan bahwa prolog dapat melakukan deduksi secara berantai dengan menggunakan modus ponen.
?-bermain_gitar(yolanda).
Prolog akan menjawab “yes”, karena dengan menggunakan fakta gembira(yolanda). Prolog dapat melakukan deduksi fakta baru mendengarkan_musik(yolanda). Fakta baru ini secara eksplisit tidak tertulis dalam basis pengetahuan. Fakta ini hanya secara implisit di dalam basis pengetahuan yang terinferensi. Prolog dapat melakukan hal tersebut sesuai fakta yang tertulis secara eksplisit yaitu bersama-sama rule:
bermain_gitar(yolanda):-mendengarkan_musik(yolanda).
Suatu fakta yang dihasilkan oleh pemanfaatan modus ponen dapat digunakan sebagai input pada rule selanjutnya. Fakta-fakta dan rule yang berada dalam basis pengetahuan di sebut klausa. Dalam contoh di atas berisi lima buah klausa yang masing-masing adalah tiga buah rule dan dua buah fakta. Dengan kata lain basis pengetahuan 2 terdiri dari tiga buah predikat atau disebut juga functor.
mendengarkan_musik
bermain_gitar
gembira
predikat gembira dinyatakan menggunakan klausa tunggal atau sebuah fakta, sedangkan predikat mendengarkan_musik dan bermain_gitar dinyatakan menggunakan dua buah klausa.
Basis Pengetahuan 3
gembira(ani).
mendengarkan_musik(devi).
bermain_gitar(ani):-mendengarkan_musik(ani),gembira(ani).
bermain_gitar(devi):- gembira(devi).
bermain_gitar(devi):-mendengarkan_musik(devi).
Terdapat dua buah fakta baru pada contoh di atas yaitu gembira(ani) dan mendengarkan_musik(devi), tiga buah rule dan memiliki tiga buah predikat yaitu gembira, mendengarkan_musik, dan bermain_gitar tetapi dengan susunan yang berbeda. Pada rule yang menyatakan predikat bermain_gitar memperkenalkan suatu ide baru, perhatikan rule :
bermain_gitar(ani):-mendengarkan_musik(ani),gembira(ani).
Memiliki dua buah item dalam body atau dua buah goal. Tanda koma yang memisahkan antara goal mendengarkan_musik(ani) dengan gembira(ani) dalam rule body merupakan logika konjungsi (logika AND) yang diekspresikan dalam prolog, sehingga rule ini mengatakan : ani bermain_gitar bila ia mendengarkan_musik dan gembira.
Bila kita tanyakan pada prolog :
?-bermain_gitar(ani).
Prolog akan menjawab “no” karena meskipun ada fakta gembira(ani) tetapi tidak secara eksplisit berisi informasi mendengarkan_musik(ani) dan fakta ini tidak dapat dideduksi lagi. Dalam basis pengetahuan 3 hanya dapat memberikan salah satu dari dua kondisi yang diperlukan untuk memenuhi klausa bermain_gitar(ani) dengan demikian query ini gagal.
Berikut ini adalah basis pengetahuan 3 dengan dua buah rule yang memiliki head yang sama.
bermain_gitar(devi):- gembira(devi).
bermain_gitar(devi):-mendengarkan_musik(devi).
Klausa tersebut menyatakan bahwa devi bermain gitar bila dia mendengarkan musik atau dia gembira yaitu rule dengan head yang sama merupakan suatu cara untuk mengekspresikan logika disjungsi ( logika OR).
Bila kita tanyakan pada prolog :
?-bermain_gitar(devi).
Prolog akan menjawab “yes” dengan menggunakan modus ponen untuk menerapkan rule : bermain_gitar(devi):-mendengarkan_musik(devi) untuk memenuhi query tersebut.
Cara lain untuk mengekspresikan logika disjungsi dengan menggunakan rule tunggal:
bermain_gitar(devi):- gembira(devi);mendengarkan_musik(devi).
Tanda semi colon (;) merupakan symbol prolog untuk logika OR.
Basis Pengetahuan 4
wanita(mia).
wanita(jodi).
wanita(anggi).
sayang(dany,mia).
sayang(marsel,mia).
sayang(kristy,devi).
sayang(devi,kristy).
Dalam contoh di atas tidak melibatkan rule sama sekali, hanya sekumpulan fakta-fakta. Terdapat relasi(predikat) yang bernama “sayang” yang memiliki dua buah argumen. Kita dapat menggunakan variabel untuk contoh tersebut.
?wanita(X).
X merupakan variabel. Prolog akan menjawab query tersebut dengan melakukan pencarian pada basis pengetahuan 4 mulai dari klausa paling atas hingga bawah untuk mencocokan atau unifikasi pada ekspresi wanita(X) dengan informasi yang terdapat dalam basis pengetahuan 4.
Prolog akan memberikan jawaban:
X=mia untuk mengetahui adakah jawaban yang lain dilakukan dengan menekan ?-; maka prolog akan mencari item dalam predikat wanita yang cocok dengan variable X yang lain yaitu X=jodi dan X=anggi dan akan memberikan jawaban “no” jika sudah tidak ada lagi item dengan predikat wanita dan variable X yang terinstansiasi.
Untuk query yang lain
?sayang(marsel,X),wanita(X)
Bila kita melihat basis pengetahuan 4 terdapat bahwa: mia adalah wanita (fakta1) dan marsel sayang mia (fakta5). Maka prolog menemukan jawaban:
X=mia.
Basis Pengetahuan 5
Berikut ini penggunaan contoh variabel.
sayang(vincent,mia).
sayang(marsel,mia).
sayang(dany,lia).
cemburu(X,Y):-sayang(X,Z), sayang(Y,Z).
Dalam basis pengetahuan 5 berisi fakta tentang relasi “sayang” dan sebuah kaidah (rule) yang terdiri dari tiga buah variable X, Y, Z. arti dari kaidah tersebut :
“seseorang yang bernama X akan merasa cemburu pada seseorang yang bernama Y bila ada seseorang yang bernama Z yang disayangi X dan Y .
?-cemburu(marsel,W).
Prolog akan memberikan jawaban W=vincent karena mereka berdua “sayang” pada wanita yang sama yaitu mia.
1 comment:
Berbicara logika memang cukup menyenangkan tapi ada yang mengatakan bahwa dalam logika tak ada unsur kejutan.
Sayang sekali otoritas yang dilimpahkan dari blog ini ke blog lain tidak dibalas dengan tautan dofollow.
If you're interested in exchanging dofollow links in the same category, please let me know.
Thank you
Post a Comment