• Tidak ada hasil yang ditemukan

Modul Pratikum Sistem Pakar (Modul 3)

N/A
N/A
Protected

Academic year: 2021

Membagikan "Modul Pratikum Sistem Pakar (Modul 3)"

Copied!
5
0
0

Teks penuh

(1)

TOPIK : LOGIKA PROGRAM dengan PREDIKAT FAIL, TRUE, CUT dan NOT Turbo Prolog menyediakan dua predikat penting , yakni predikat fail yang selalu mengakibatkan kegagalan untuk memaksa lacak balik dan predikat cut (!) yang selalu berhasil untuk mencegah lacak balik.

Predikat Fail dan True

Seperti telah dikatehui, lacak balik terjadi bila menemui kegagalan. Dalam kedaaan tertentu kita perlu memaksa lacak balik untuk memperoleh alternatif jawaban yang lain . Untuk itu disediakan predikat fail yang selalu gagal dan memaksa lacak balik. Memanggil predikat fail berakibat sama seperti membandingkan 1 =2.

Tuliskan program berikut ini : predicates ibu(symbol,symbol) seseorang clauses ibu(acih,uup) ibu(enah, bek) ibu(nani, asep) seseorang :- ibu(X,Y),

write(X,”adalah ibu”, Y), fail.

goal seseorang

Jika program dijalankan, akan menjawab sebagai berikut :

• Jika diberi goal eksternal ibu(X,Y) (bagian Goal di program ditutp dulu dengan tanda komentar) akan menyebutkan semua fakta yang ada sebagai berikut :

X= acih, Y= uup X = enah, Y = bek X = nani, Y = asep

• Jika dengan goal internal seperti tampak pada program dan tidak ada predikat fail, maka Turbo Prolog hanya memberi satu jawaban :

acih adalah ibu uup

Tetapi karena ada fail, lihat apa yang dilakukan oleh Prolog.

Ketika Prolog memanggil klausa Ibu , Prolog mencatat adanya jawaban lain karena fakta untuk ibu lebih dari satu. Hal ini disebut non deterministik, sebaliknya disebut deterministik.

(2)

• Coba anda bandingkan goal yang memakai fail dengan yang tidak ada fail nya.

Dari goal tersebut, jelas bahwa Prolog tidak akan pernah memanggil klausa setelah predikat fail karena begitu Prolog gagal akibat predikat fail, Prolog langsung melakukan lacak balik. Jadi tidak ada artinya meletakkan sesuatu setelah predikat fail.

Predikat Cut

Cut berarti memotong. Dalam Turbo Prolog cut berarti memotong jejak untuk melakukan lacak balik. Predikat ini dilambangkan dengan tanda seru (!). Predikat cut tidak pernah gagal sebagaimana predikat true hanya saja predikat true tidak berpengaruh terhadap pemotongan jejak lacak balik. Pada goal atau aturan yang memungkinkan adanya lacak balik, Prolog memenuhi sub-goal dari atas ke bawah selangkah demi selangkah , kemudian naik lagi ke atas setingkat jika mengalami kegagalan.

Cara meletakkan cut, seperti meletakkan predikat lain dalam tubuh aturan contoh : x :- a,b,!,c,d.

x :- e.

Perhatikan dua klausa untuk aturan x diatas. Setelah melakukan pemadanan dengan aturan x yang pertama, Prolog mencatat titik lacak balik karena ada x yang lain. Selanjutnya subgoal dipanggil. Jika gagal, lacak balik ke klausa x berikutnya. Jika berhasil lanjutkan ke b. Apabila b gagal , lacak balik ke a atau ke x berikutnya , jika a tidak mengandung titik lacak balik. Tapi apabila b berhasil, Prolog memasuki cut sehingga titik lacak balik sebelumnya terhapus semua. Akibatnya bila kemudian gagal, tidak terjadi lacak balik ke b, a atau tidak juga ke x berikutnya. Setelah memsuki cut, apabila c gagal, program berhenti dengan gagal , tetapi jika c berhasil , proses berlanjut ke d. Apabila d gagal, lcak balik hanya pada c. Jika d berhasil, program selesai dalam keadaan berhasil.

Predikat cut berguna untuk :

• Apabila kita mengetahui sebelumnya bahwa kemungkinan mencari jawaban yang lain tidak akan memberi arti sama sekali yang hanya membuang waktu dan memori saja. Cut yang demikian disebut cut green, yakni kehadirannya tidak mengubah logika program, tetapi diperlukan untuk peningkatan efisiensi.

• Jika logika program memang membutuhkan cut untuk mencegah perhatian Prolog terhadap alternatif sub-goal. Cut ini disebut cut merah (red cut), karena secara logika memang perlu meletakkan cut.

Tuliskan program berikut : trace

predicates

(3)

test_baik(symbol) minuman_baik clauses

minuman(susu, sehat).

minuman (kopi, menyegarkan). minuman (arak, berbahaya). minuman (sirup, berenergi). minuman_baik :-

minuman(Jenis,Sifat), tes_baik(Sifat),

write(Jenis,” minuman “, Sifat), fail.

minuman_baik.

tes_baik(berbahaya) :- fail. test_baik (_).

goal minuman_baik.

Jalankan program diatas, lalu perhatikan pada jendel Trace ,kenapa diperoleh hal tersebut...

Deterministik dan Cut

Diatas telah dikemukakan bahwa predikat kan bersifat non deterministik apabila kembali dari pemanggilan klausa, meningalkan titik lacak balik karena ada alternatif lain dalam klausa. Hal ini akan mempengaruhi penggunaan memori (jika ada pengulangan) sehingga bisa terjadi dalam kompilasi benar, tapi saat dijalankan program akan berhenti. Dengan predikat cut, yang dapat mencegah terjadinya lacak balik ke klausa berikutnya, kumpulan klausa menjadi seolah-olah satu klausa saja, karena apabila match dengan salah satu klausa, titik lacak balik dihapus sehingga menutup kemungkinan terjadinya lacak balik. Artinya klausa akan bersifat deterministik yang harus memberi satu jawaban

Jadi predikat bersifat non deterministik apabila :

• Ada suatu klausa tanpa cut dan ada lagi klausa dibawahnya (ada alternatif lain). • Ada klausa yang memanggil predikat non-deterministik.

Perhatikan contoh berikut : a :- a1,!,a2,a3.

a1 :- a11,a12. /* a1 bersifat non deterministik */ a1 :- a21,a22.

Pada contoh ini, klausa a1 bersifat non deterministik karena ada dua kemungkinan aturan. Jika klausa a tidak menggunakan cut, maka klausa a bersifat non deterministik karena memanggil klausa non deterministik (a1). Cara lain mencegah non deterministik dalam contoh ini adalah dengan memberi tanda cut sebgai berikut :

(4)

a :- a1,a2,a3.

a1 :- a11,!,a12. /* a1 bersifat non deterministik */ a1 :- a21,a22.

Perlu diperhatikan bahwa penggunaan cut bisa mengubah logika pemrograman atau dapat memberi hasil yang tidak terduga. Oleh karena itu gunakan terlebih dulu petunjuk kompiler check_determ untuk memeriksa adanya predikat yang non deterministik, baru kemudian diberi cut. Usahakanlah agar dalam setiap program hanya terdiri dari predikat deterministik, kecuali jika non deterministik memang sangat diperlukan.

Kapankah kita menghendaki non-deterministik ? jawabannya antara lain adalah apabila kita membutuhkan proses pengulangan dengan lacak balik.

Predikat not

Predikat not berfungsi untuk membalik keadaan . Dengan not, pemanggilan yang berhasil menjadi gagal dan sebaliknya. Penggunaan not khusus untuk atom atau mengandung variabel tapi harus sudah terikat dan not tidak boleh dipakai di kepala klausa (aturan), seperti :

not(aturan1(...)) :- sc1,... /* salah */

not(besar(X)),.... /* benar*/

Sub klausa besar diatas digunakan untuk memeriksa apakah sesuatu berukuran besr atau tidak. Kita bisa menyatakan bahwa sesuatu berukuran besar jika kita tahu sesuatu tersebut. Misalnya kita ditanya : Si anu besar atau tidak ?. Kita akan bingung dan balik bertanya: siapa yang dimaksud?. Oleh karena itu, dalam Turbo Prolog akan diperingatkan jika variabel X diatas tidak terikat. Dalam hal ini Prolog mencegah terjadinya pengikatan variabel oleh klausa dalam predikat not, karena akan menimbulkan pertentangan.

Contoh penggunaan not : predicates sayang(symbol) ular(symbol) clauses sayang(X) :- binatang(X), not(ular(X)), write(“Dedi sayang “, X), fail. binatang(kucing). binatang(kobra). binatang(kambing). binatang(burung).

(5)

ular(kobra). ular(piton). goal sayang(X). Logika program dan Cut

Telah kita ketahui bahwa cut dapat mengubah logika program atau logika program terkadang memerlukan cut. Hal ini wajar karena Prolog bekerja dengan lacak balik sedangkan cut dapat memotong jejak lacak balik tersebut. Untuk itu peletakan cut harus mempertimbangkan jangan sampai program menjadi salah atau menghasilkan sesuatu yang tidak terduga. Perhatikan contoh berikut :

r :- s,t. r :- u.

Secara deklaratif , r benar jika : 1. s dan t benar.

2. s gagal /salah dan u benar (atau not(s) dan u benar). 3. s benar, not(t) benar dan u benar.

4. u benar.

Bandingkan jika ada cut seperti : r :- s,!,t.

r :- u

Secara deklaratif berarti r benar jika : • s dan t benar

• not(s) dan u benar • u benar

Dengan demikian kita harus mengusahakan agar peletakan cut tidak sampai menghilangkan logika yang memang diperlukan. Dalam contoh diatas, misalkan kita menghendaki agar jika terjadi kegagalan di t , program harus lacak balik ke klausa r berikutnya, maka kita tidak boleh meletakkan cut seperti pada contoh diatas. Jika kita menghendaki agar r deterministik dan kegagalan di t harus lacak balik ke r berikutnya, maka letakkan cut diujung tubuh aturan r. cobakan...

Referensi

Dokumen terkait

Taksiran kemampuan proses mungkin dalam bentuk distribusi probabilitas yang memunyai bentuk,ukuran pemusatan,dan ukuran penyebaran tertentu.dalam

Rincian stratigrafi Cekungan Jawa Timur bagian Utara dari Zona Rembang yang disusun oleh Harsono Pringgoprawiro (1983) terbagi menjadi 15 (lima belas) satuan yaitu Batuan Pra –

Pada gambar 6 dan 7 menunjukkan bahwa semakin besar konsentrasi inhibitor ekstrak sarang semut yang ditambahkan ke dalam larutan elektrolit (NaCl 3,5%), maka impedansi

Diharapkan dengan mengetahui dampak biologi, sosial dan ekonomi dari penerapan instrumen KKL di pulau-pulau kecil dapat disusun implikasi

Berdasarkan jawaban responden dalam tabel tersebut di atas terdapat 2 orang (4 %) menjawab Tidak Setuju, 20 orang (40 %) menjawab Ragu-ragu, 22 orang (44 %)

Puji dan syukur kehadirat Allah SWT karena atas ridho-Nya, penulis dapat menyelesaikan skripsi dengan judul “TAKTIK IMPRESSION MANAGEMENT SANDIAGA UNO MELALUI AKUN

Berdasarkan data aktivitas harian Susi dan Peni maka dapat disimpulkan bahwa aktivitas harian Susi dan Peni tidak jauh berbeda meskipun berbeda masa pelepasliaran

Untuk material cetak elastomer jenis silikon yang memiliki viskositas putty metode pencampuran dilakukan dengan menakar volume kedua pasta dengan sendok takar