Laporan Ke 4
Laporan Ke 4
PERTEMUAN KE 4
Disusun Oleh :
Nim : 095410134
LABOROTARIUM TERPADU
SEKOLAH TINGGI MANAJEMEN INFORMATIKA DAN KOMPUTER
AKAKOM
YOGYAKARTA
2010
UNIFIKASI DAN LACAKBALIK
A. PEMBAHASAN
Tujuan untuk memepelajari unifkasi dan lacakbalik mengerti apa yang dimaksud unifkasi dan
proses terjadinya, mengerti cara kerja lacak balik dan prinsip-prinsipnya, dan dapat
mengendalikan proses lacak balik menggunakan predikat fail, cut (!) dan not.
1. Unifikasi (Unification)
Pada waktu Visual Prolog mencoba untuk mencocokkan suatu panggilan (dari sebuah
subgoal) ke klausa (pada section clauses), maka proses tersebut melibatkan suatu prosedur
yang dikenal dengan unifkasi (unifcation), yang mana berusaha untuk mencocokkan antara
struktur data yang ada di panggilan (subgoal) dengan klausa yang diberikan.
Dalam praktikum yang pertama dijelaskan sebagai berikut:
DOMAINS
judul,pengarang = symbol
halaman = unsigned
program menjelaskan untuk memberi tipe data yang sesuai untuk diisi dan kemudian program
diteruskan selanjutnya.
PREDICATES
buku(judul, halaman)
nondeterm ditulis_oleh(pengarang, judul)
nondeterm buku_tebal(judul)
program memberi instruksi untuk dijalankan kedalam program CLAUSES yang mana dalam
progam PREDICATES diberi simbol untuk menjalankan program selanjutnya.
CLAUSES
ditulis_oleh(indra_yatini_buryadi, "Algoritma pemrograman
dengan C++").
ditulis_oleh(sari_iswanti, "Sistem pakar").
buku_tebal(Judul):-
ditulis_oleh(_, Judul),
buku(Judul, Tebal),
Tebal > 300.
Terdapat pertanyaan siapa yang menulis buku judulnya apa fungsinya apabila GOAL
dieksekusi akan membaca dari program ini siapa yang menulis buku dan pada program diatas
membacanya dari program CLAUSES disitulah fungsi program CLAUSES diisi sesuai dengan tipe
data diatas (pada program PREDICATES).
GOAL
buku_tebal(M).
Apabila dalam GOAL diberi huruf selain “M” maka program tersebut juga bisa membacanya
fungsi dari karakter yang akan dipanggil mencocokkan Argumen-argumen yang ditemukan
pada masing-masing klausa ditulis_oleh, maka karakter tersebut akan mencari dari yang palng
atas hingga ke paling bawah dari program.
Hasil outputnya ;
Jika pada GOALnya karakternya diganti dengan huruf lain sebagai berikut :
GOAL
buku_tebal(Q).
Hasil outputnya :
Dan apabila buku yang kedua diganti lebih besar yang ditanyakan maka hasil runningnya ada
2 solution dan buku yang diganti “buku("Sistem pakar", 800).” Maka hasil
outputnya sebagai berikut :
2. Lacakbalik (Backtracking)
Lacak waktu penyelesaian masalah, seringkali, seseorang harus menulusuri suatu jalur
untuk mendapatkan konklusi yang logis. Jika konklusi ini tidak memberikan jawaban yang
dicari, orang tersebut harus memilih jalur yang lain. Visual Prolog akan lacakbalik ke titik lacak
balik (back-tracking point) terakhir dan mencoba alternatif subgoal yang lain.
Contoh dalam Praktikum ke-2 sebagai berikut :
PREDICATES
nondeterm jenis(symbol, symbol)
nondeterm adalah(symbol, symbol)
hidup(symbol, symbol)
nondeterm dapat_berenang(symbol)
program memberi instruksi untuk dijalankan kedalam program CLAUSES yang mana dalam
progam PREDICATES diberi tipe data untuk membaca program yang akan diisi pada CLAUSES
CLAUSES
jenis(vertebrata, hewan).
jenis(ikan,hewan).
adalah(zebra, vertebrata).
adalah(anjing, vertebrata).
adalah(lele, ikan).
adalah(tuna, ikan).
hidup(zebra, di_darat).
hidup(kodok, di_darat).
hidup(kodok, di_air).
hidup(tuna, di_air).
Fakta diatas menerangkan tentang binatang yang hidupnya ditanah dan hidupnya di air untuk
dipanggil dalam program GOAL
dapat_berenang(Y):-
jenis(X,hewan),
adalah(Y,X),
hidup(Y, di_air).
Terdapat sebuah pertanyaan dari fakta program apakah benar pernyataan yang dibuat
tersebut sama dengan programnya.
GOAL
dapat_berenang(Apa).
Hasil outputnya :
Predikat fall
Visual Prolog akan memulai lacakbalik jika ada panggilan yang gagal. Pada situasi tertentu,
ada kebutuhan untuk memasaksa lacakbalik dalam rangka mencari alternatif solusi. Visual
Prolog menyediakan predikat khusus fail untuk memaksa kegagalan sehingga memicu
terjadinya lacak balik. Efek dari fail sama dengan efek memberikan perbandingan 2=3 atau
subgoal yang tidak mungkin (impossible) lainnya. Contoh berikut ini mengilustrasikan
penggunaan predikat tesebut .
Praktikum ke 3 adalah sebagai berikut :
DOMAINS
nama = symbol
PREDICATES
nondeterm ayah(nama, nama)
setiap_orang
CLAUSES
ayah(sunarto,cici).
ayah(andi,udin).
ayah(roland,yansen).
setiap_orang:-
ayah(X,Y),
write(X, "\n" , " adalah ayah ",Y,"\n"),
fail.
setiap_orang.
GOAL
setiap_orang.
Ketika goal internal sudah sukses, tidak ada yang memberitahu Visual Prolog untuk
melakukan lacakbalik. Akibatnya, pemanggilan internal ayah hanya akan menghasilkan solusi
tunggal. Sehingga digunakan fail pada prediakat setiap_orang seperti pada contoh program
diatas untuk memaksa lacakbalik dan dengan demikian semua jawaban yang mungkin.
Hasil outputnya :
Predikat Cut(!)
Visual Prolog memiliki cut yang digunakan untuk mencegah lacakbalik, ditulis berupa
sebuah tanda seru (!). efek dari cut adalah sederhana, yaitu tidak akan memungkunkan
terjadinya lacakbalik melewati sebuah cut.
Kita menempatkan cut dalam program sama persis seperti menempatkan sebuah subgoal
padabody dari suatu rule. Ketika proses melewati cut, pemanggil ke cut dinyatakan skses dan
subgoal berikutnya (jika ada) dipanggil. Sekali sebuah cut dilewati, adalah menjadi tidak
mungkin untuk melakukan lacakbalik pada subgoal yang berada pada sebelum cut pada
klausa yang sedang diproses dan adalah menjadi tidak mungkin untuk melakukan lacakbalik
ke predikat lain yang mendifnisikan predikat yang sekarang diproses (predikat yang
mengandung cut ).
Praktikum ke-4 :
PREDICATES
beli_mobil(symbol,symbol)
nondeterm mobil(symbol,symbol,integer)
warna(symbol,symbol)
mendeklarasikan pada tipe data yang berada pada program yang akan dieksekusi
CLAUSES
beli_mobil(Model,Warna):-
mobil(Model,warna,Harga),
warna(Warna,seksi),!,
Harga < 25000.
mobil(ferrari,hijau,25000).
mobil(jaguar,hitam,24000).
mobil(jaguar,merah,26000).
mobil(porsche,merah,24000).
warna(merah,seksi).
warna(hitam,wibawa).
warna(hijau,sejuk).
Fakta diatas menuliskan untuk pemanggilan pada program terakhir yang mana pada fakta
terbebut benar-benar terjadi atau ada pada program yang telah diinputkan tersebut.
GOAL
beli_mobil(jaguar, Y).
Hasil outputnya :
Kenapa pada hasil outputnya NO Solution karena pada fakta diatas tidak ada sebab itu
program tidak mengenal padanprogram GOAL tersebut
4. Predikat Not
Program berikut memperlihatkan bagaimana penggunaan predikat not untuk
mengidentifkasikan seorang mahasiswa teladan yaitu mahasiswa yang mempunyai indeks
Prestasi Komulatif (IPK) minimal 3,5 dan tidak sedang dalam masa percobaan (sedang
menjalani masa hukuman karena melakukan tindak kejahatan).
Pada pelaksanaan Praktikum ke-5 :
DOMAINS
nama = symbol
ipk = real
pada program tersebut dideklarasikan tipe data sesuai dengan tipe data program yang akan
dibuat.
PREDICATES
nondeterm mahasiswa_teladan(nama)
nondeterm mahasiswa(nama, ipk)
masa_percobaan(nama)
disinipun sama programnya dideklarasikan tipe datanya tapi bedanya disini untuk diinputkan
pada Progam Clauses dan CLAUSES tersebut membaca pada kedua program yaitu pada
DOMAINS dan pada PREDICATES.
CLAUSES
mahasiswa_teladan(nama):-
mahasiswa(Nama, IPK),
IPK>=3.5,
not(masa_percobaan(Nama)).
masa_percobaan("Vina Panduwinata").
masa_percobaan("Helmi Yahya").
GOAL
mahasiswa_teladan(X).
Hasil output:
Ada satu catatan ketika menggunakan not yaitu predikat not akan sukses ketika subgoal
tudak bisa dibuktikan kebenarannya. Hal ini untuk mencegah suatu situasi variabel yang
belum diikat akan menggunakan not. Jika subgoal dengan variabel bebas dipanggil melalui
not, maka Visual Prolog akan mengeluarkan pesan kesalahan.
B. KESIMPULAN
Apapun yang didefnisikan sebagai sebuah object bukan subject yang nilainnya bisa bervariasi,
seperti sebuah karakter(char), angka (integer atau real) atau sebuah atom (symbol atau string).