Script program :
DOMAINS
nama,jender,pekerjaan,benda,alasan,zat=symbol
umur=integer
PREDICATES
nondeterm orang(nama,umur,jender,pekerjaan)
nondeterm selingkuh(nama,nama)
terbunuh_dengan(nama,benda)
terbunuh(nama)
nondeterm pembunuh(nama)
motif(alasan)
ternodai(nama,zat)
milik(nama,benda)
nondeterm cara_kerja_mirip(benda, benda)
nondeterm kemungkinan_milik(nama, benda)
nondeterm dicurigai(nama)
/* * * Fakta-fakta tentang pembunuhan * * */
CLAUSES
orang(budi,55,m,tukang_kayu).
orang(aldi,25,m,pemain_sepak_bola).
orang(aldi,25,m,tukang_jagal).
orang(joni,25,m,pencopet).
selingkuh(ina,joni).
selingkuh(ina,budi).
selingkuh(siti,joni).
terbunuh_dengan(siti,pentungan).
terbunuh(siti).
motif(uang).
motif(cemburu).
motif(dendam).
ternodai(budi,darah).
ternodai(siti,darah).
ternodai(aldi,lumpur).
ternodai(joni,coklat).
ternodai(ina,coklat).
milik(budi,kaki_palsu).
milik(joni,pistol).
/* * * Basisi Pengetahuan * * */
cara_kerja_mirip(kaki_palsu,pentungan).
cara_kerja_mirip(balok,pentungan).
cara_kerja_mirip(gunting,pisau).
cara_kerja_mirip(sepatu_bola,pentungan).
kemungkinan_milik(X,sepatu_bola):-
orang(X,_,_,pemain_sepak_bola).
kemungkinan_milik(X,gunting):-
orang(X,_,_,pekerja_salon).
kemungkinan_milik(X,Benda):-
milik(X,Benda).
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* dicuragai semua orang yang memiliki senjata yang *
* kerjanya mirip dengan senjata penyebab siti terbunuh *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * */
dicurigai(X):-
terbunuh_dengan(siti,Senjata),
cara_kerja_mirip(Benda,Senjata),
kemungkinan_milik(X,Benda).
/* * * * * * * * * * * * * * * * * * * * * * * * * *
* dicuragai laki-laki yang selingkuh dengan siti *
* * * * * * * * * * * * * * * * * * * * * * * * * */
dicurigai(X):-
motif(cemburu),
orang(X,_,m,_),
selingkuh(siti,X).
/* * * * * * * * * * * * * * * * * * * * * * * *
* dicuragai perempuan yang selingkuh dengan *
* laki-laki yang juga selingkuh dengan siti *
* * * * * * * * * * * * * * * * * * * * * * * */
dicurigai(X):-
motif(cemburu),
orang(X,_,f,_),
selingkuh(X,Lakilaki),
selingkuh(siti,Lakilaki).
/* * * * * * * * * * * * * * * * * * * * * * * * *
* dicuragai pencopet yang mempunyai motif uang *
* * * * * * * * * * * * * * * * * * * * * * * * */
dicurigai(X):-
motif(uang),
orang(X,_,_,pencopet).
pembunuh(Pembunuh):-
orang(Pembunuh,_,_,_),
terbunuh(Terbunuh),
Terbunuh<>Pembunuh, /* Bukan bunuh diri */
dicurigai(Pembunuh),
ternodai(Pembunuh,Zat),
ternodai(Terbunuh,Zat).
GOAL
pembunuh(X).
hasil output :
penjelasan program diatas :
- Pertama kali Visual Prolog akan mencari fakta atau head dari rule yang cocok dengan goal, maka ditemukan pembunuh(X). Kemudian mencari pada klausa tersebut untuk mengunifikasi argumennya. Karena X variabel bebas, maka X dapat diunifikasikan ke variabel manapun. Nama juga merupakan variabel bebas dari head rule pembunuh, maka terjadi unifikasi antara X dan Nama, sehingga X=Nama.
- Kemudian, Visual Prolog berusaha untuk memenuhi bagian body dari rule. Untuk melakukannya, Visual Prolog memanggil subgoal yang pertama pada body dari rule tersebut yaitu orang(budi,55,m,tukang_kayu), dan mencari pencocokan untuk pemanggilan ini. Ditemukan pencocokan dengan fakta pertama dari klausa relasi dicurigai. Pada titik ini X diikat dengan nilai motif. Kemudian Visual Prolog menset titik lacakbalik pada fakta motif(cemburu).
- Dengan X diikat pada nilai motif, Visual Prolog membuat panggilan untuk subgoal yang kedua yaitu adalah orang(X,_,f,_), dan mencari percocokan. Dan menemukan dengan fakta yang pertama motif(cemburu). X diikat dengan nilai cemburu dan Prolog menset titik lacakbalik pada milik(budi,kaki_palsu).
- Kemudian Prolog mencoba untuk memnuhi subgoal yang terakhir yaitu, ternodai(budi,darah). Karena tidak ditemukan fakta tersebut maka panggilan gagal dan Prolog memulai lacakbalik untuk menemukan solusi lain.
- Ketika Visual Prolog lacakbalik, proses kembali ke titik lacakbalik terakhir. Pada kasus ini, titik lacakbalik terakhir berada subgoal yang kedua dari rule yaitu fakta milik(budi,kaki_palsu).
- Ketika Visual Prolog barada pada titik lacakbalik, ia akan membebaskan variabel yang diberi nilai pada titik lacakbalik tersebut dan berusaha mencari jawaban lain untuk panggilan tersebut dalam kasus ini motif(cemburu).
- Visual Prolog melanjutkan pencarian ke bawah dari titik lacakbalik tersebut untuk pencocokan klausa yang lain. Karena tidak ada klausa yang ditemukan, maka terjadi lacakbalik dan proses kembali ke titik lacakbalik terakhir yaitu di cara_kerja_mirip(kaki_palsu,pentungan).
- Visual Prolog membebasakan variabel dan mencoba untuk menemukan solusi lain dari panggilan kemungkinan_milik(X,Benda). Pencarian dimulai setelah titik lacakbalik dan menemukan kecocokan dengan fakta motif diprogram pada klausa selingkuh(ina,joni). X kemudian diikat pada nilai ina, dan titik lacakbalik baru di set pada fakta tersebut.
- Kemudian Visual Prolog bergerak ke subgoal berikutnya pada rule. Karena ini panggilan baru, maka pencarian dimuali dari bagian atas program dengan panggilan cara_kerja_mirip(kaki_palsu,pentungan). Visual Prolog menemukan kecocokan dengan panggilan ini. Y diikat dengan nilai kaki_palsu, dan sebuah titik lacakbalik baru diset pada fakta milik(budi,kaki_palsu).
- Karena Y diikat dengan nilai kaki_palsu, panggilan subgoal berikutnya adalah cara_kerja_mirip(sepatu_bola,pentungan). Karena panggilan baru, maka pencarian dimulai dari bagian atas program. Prolog mencoba setiap fakta namun gagal menemukan kecocokan dan subgoal dinyatakan gagal.
- Visual Prolog, kemudian kembali ketitik lacakbalik terakhir yaitu pada cara_kerja_mirip(kaki_palsu,pentungan). Variabel yang diikat pada pencocokan ini kemudian dibebaskan. Beranjak dari titik ini, Visual Prolog mencari solusi baru unruk panggilan milik(budi,kaki_palsu).
- Visual Prolog menemukan kecocokan dengan klausa milik berikutnya. Y kemudian diikat dengan simbol budi. Kemudian Visual Prolog mencoba lagi subgoal yang terakhir dengan variabel Y diikat pada nilai budi. Panggilannya menjadi milik(budi,kaki_palsu). Pencarian kembali dimulai dari bagian atas program karena merupakan panggilan baru dan menemukan kecocokan dengan fakta yang ada dan subgoal terakhir sukses(true).
- Pada titik ini, body dari rule pembunuh dapat di penuhi. Visual Prolog mengembalikan nilai Y pada pemanggil (goal) pembunuh(X). Karena X diikat nilainya ke Y dan Y diikat nilainya nama, maka sekarang X juga diikat nilainya ke nama pada goal tersebut. Visual Prolog akan menampilkan jawaban :
1 Solution
Kesimpulan dari penggunaan lcak balik pada kecerdasan buatan
unifikasi dan lacak balik dapat digunakan untuk mencari solusi yaitu jawaban benar dari suatu klausa. Untuk pengendalian lacak balik digunakan 3 predikat dalam unifikasi dan lacak balik yaitu predikat fail, predikat not, dan predikat cut.
Tidak ada komentar:
Posting Komentar