jika saya lihat blog ini.. saya tidak bisa berhenti berterima kasih kepada mas komara…. terima kasih sedalam-dalamnya mas…

 

p.s: mas, maaf passwordnya saya ganti.. saya lupa passwornya.. hehehehe

Project Report :  Project report MTJ TEAM

Source Code: http://www.accio.web.id/images/expert.rar

Bismillah….

Mas-mas, mba-mba, bertemu lagi dengan kami dalam tutorial kali ini. Pada kesempatan ini kami akan mencoba menjadikan ide tentang contoh Expert System yang telah kami post sebelumnya yaitu astrologi, kedalam prolog. Yang kami buat disini adalah sebuah bentuk yang sangat sederhana, namun semoga dapat menambah pengetahuan Anda tentang Prolog dan Expert System.

Apakah Anda telah siap??

Baiklah, langsung saja kita mulai:

1. Kita buat masukkan dalam notepad. Masukkan akan menjadi file database berisi keterangan data tanggal. Program yang kami buat menggunakan struktur menu yang akan mangalami looping secara berulang untuk melakukan input selanjutnya. Masukannya adalah berupa pernyataan (term) sehingga harus diikuti oleh full stop. (gambar 1).

2. Kemudian kita tambahkan menu pilihan (gambar 1, line terakhir).

3. Kita buat menu pilihan dari angka 1 sampai 13, sehingga hasil (output) akan sesuai dengan masukkannya.  (gambar 2)

4. Kemudian kita simpan sebagai expert.pl.

5. Sekarang kita buka dalam prolog. Kita buka prolog dan kita consult file expert.pl (gambar 3).

6. Kemudian ketikkan go. kemudian di enter, jika pernyatan yang kita buat benar akan muncul data tentang pilihan tanggal lahir. (gambar 4).

7. Kemudian akan muncul pilihan tanggal lahir. Jika Anda lahir antara tanggal 21 Desember hingga 19 Januari maka isikan dengan angka 1. Berlaku juga untuk tanggal-tanggal yang lain.

8. Sebagai contoh, tanggal 15 November. Tanggal 15 November terletak di antara tanggal 23 Oktober hingga 22 November, sehingga kita isikan dengan angka 11. Maka akan keluar hasil “Scorpio sifatnya adalah Panjang Akal, Pendiam, Pendendam, Gigih, Tekun”. (gambar 5)

9. Selain itu akan muncul menu pilihan kembali. Untuk  melakukan input kembali untuk dengan pilihan angka yang sama (1-13).(gambar 5).

10. Untuk berhenti dari program pilih nomor 13. (gambar 6)

11.  Selesai.

Semoga penjelasan singkat ini dapat menambah pemahaman Anda semua. Jika ada kesalahan mohon koreksinya sehingga dapat kita diskusikan bersama.

Terima kasih…peace…

Berkurang satu -headache seven around- ; hehehehe



Konsep sudah jelas…akan lebih jelas lagi jika berlatih….

Kita mulai langsung….

Latihan 1…

Mencari kuadrat dari sebuah angka (integer)…

Untuk memperoleh output berupa kuadarat dari sebuah angka, maka kita harus mendefinisikan predikat, sehinga instruksi dapat  dijalankan….Predikatnya:

kuadrat(A1,A2):-A1>A2.A1

A1 adalah bilangan pertama, sedangkan A2 adalah bilangan terakhir. Kemudian A1>A2; ketika kondisi A1 nilainya lebih kecil daripada A2 looping terus berlangsung. Sehingga ketika nilai A1 lebih besar daripada A2 maka looping akan berhenti.

kuadrat(A1,A2):-

write(A1),write(‘ hasilnya adalah ‘),Hkuadrat is A1*A1,write(Hkuadrat),nl,B is A1+1,kuadrat(B,A2).

Pernyataan ini berarti mencetak angka A1, kemudian dilakukan proses menghitung dan mencetak hasil kuadrat dari angka bersaggkutan. Kemudian kondisi yang membuat instruksi tersebut di ulang adalah pada pernyataan : B si A1+1,hasilkuadrat(B,A2).

Kita periksa dalam prolog, apakah predikat yang kita buat akan memberikan output berupa hasil kuadrat dari angka.

1. Kita buat predikat diatas dalam notepad. Kemudian kita simpan sebagai kuadrat.pl (gambar 1)

2. Kita “nyalakan” prolog. Kemudian file yang telah kita simpan di consult. (gambar 2).

3. Kita periksa hasilnya dengan mengetikkan perintah: kuadrat(6,12) >>>angka bisa kita isi terserah, dengan syarat nilai A1 lebih kecil  A2… (gambar 3).

Bagaimana, sudah jelas ?? jelasssssssssss….bagus !!

Next….sabar dulu ya…hehe

Assalamu’alaikum Wr. Wb. (alfie mode: ON)

Ehm….ehm (margo mode: ON)

Sedang dikejar-kejar deadline nih (kaya pernah dengar) ….anyway…selamat berjumpa dalam Pembelajaran kali ini. Tema nya adalah Looping…

Langsung saja masuk ke materi pembahasan:

Bismillah….

Hampir semua bahasa pemrograman memiliki fasilitas looping, demikian juga dengan prolog. Dengan looping maka instruksi-instruksi yang ada akan dieksekusi hingga beberapa kali / mencapai batas yang ditentukan.

1. Looping a Fixed Number of Times

Contoh 1:

loop(0).

loop(N):-N>0,write(‘The value is: ‘),write(N),nl,

M is N-1,loop(M).

Predikat loop menandakan instruksi diatas adalah perintah looping. Kemudian klausa dibawahnya berarti lakukan loop dari N, cetak (tulis) nilainya. Kemudian klausa yang berikutnya berarti kurangi N dengan 1 akan sama dengan M, kemudian lakukan looping dari M.

Kemudian kita buka dengan prolog:

?- loop(6).

The value is: 6

The value is: 5

The value is: 4

The value is: 3

The value is: 2

The value is: 1

yes

 

Contoh 2:

/* output integers from First to Last inclusive */

output_values(Last,Last):- write(Last),nl,

write(‘end of example’),nl.

output_values(First,Last):-First=\=Last,write(First),

nl,N is First+1,output_values(N,Last).

 

Output disini memiliki dua argument, yang dibaca sebagai “hasil keluaran yang berupa integer dari pertama hingga terakhir”. Loop berakhir jika keduana (First, Last) memiliki nilai yang sama. Hasil dalm prolog:

?- output_values(5,12).

56789

10

11

12

end of example

yes

 

Contoh 3:

Tentukan sebuah predikat untuk menemukan jumlah bilangan bulat dari 1 sampai N (katakanlah untuk N = 100).
Adalah wajar untuk memikirkan secara prosedural ini, yaitu mulai dengan 1, kemudian tambahkan 2, kemudian tambahkan 3, kemudian tambahkan 4, …, kemudian tambahkan 100. Namun proses ini lebih mudah program jika reexpressed declaratively dalam hal itu sendiri.
Jumlah dari 100 bilangan bulat yang pertama adalah jumlah dari 99 bilangan bulat yang pertama, ditambah 100.
Jumlah dari 99 bilangan bulat yang pertama adalah jumlah dari 98 bilangan bulat yang pertama, ditambah 99.
Jumlah dari 98 bilangan bulat yang pertama adalah jumlah dari 97 bilangan bulat yang pertama, ditambah 98.
… … … … … … … … … … … … … … … … … … … … … … … … … … … … ….
Jumlah dari 3 bilangan bulat pertama adalah jumlah dari 2 bilangan bulat pertama, ditambah 3.
Jumlah dari 2 bilangan bulat pertama adalah jumlah dari 1 bilangan bulat pertama, ditambah 2.
Jumlah 1 bilangan bulat pertama adalah satu.

Ada dua kasus yang berbeda untuk mempertimbangkan:

general case: ‘jumlah N bilangan bulat adalah jumlah dari N-1 bilangan bulat, ditambah N.

terminating case:’ jumlah 1 bilangan bulat pertama adalah 1 ‘. Ini mengarah langsung ke definisi rekursif.

/* sum the integers from 1 to N (the first argument)

inclusive */

sumto(1,1).

sumto(N,S):-N>1,N1 is N-1,sumto(N1,S1),S is S1+N.

 

?- sumto(100,N).

N = 5050

?- sumto(1,1).

yes

 

Contoh 4:

Program berikut ini membaca 6 istilah pertama dari file tertentu dan mencetak arus keluaran mereka. Ini menggunakan metode ‘menghitung mundur’, dengan cara yang sama untuk  Contoh 1.

read_six(Infile):-seeing(S),see(Infile),

process_terms(6),seen,see(S).

process_terms(0).

process_terms(N):-N>0,read(X),write(X),nl,N1 is N-1,

process_terms(N1).

2. Looping hingga Sebuah Kondisi Tercapai/ Terpenuhi

Hampir semua bahasa pemrograman memiliki “until loop”, yang menyebabkan sekumpulan instruksi dieksekusi hingga kondisi yang ditentukan terpenuhi.

a.Rekursi

Contoh pertama di bawah ini menunjukkan penggunaan istilah rekursi untuk membaca masukkan dari keyboard dan output mereka ke layar, sampai “end” terpenuhi.

go:-loop(start). /* start is a dummy value used to get

the looping process started.*/

loop(end).

loop(X):-X\=end,write(‘Type end to end’),read(Word),

write(‘Input was ‘),write(Word),nl,loop(Word).

 

?- go.

Type end to end: university.

Input was university

Type end to end: of.

Input was of

Type end to end: portsmouth.

Input was portsmouth

Type end to end: end.

Input was end

yes

b. Menggunakan Predikat repeat

Nama predikat ini benar-benar sebuah ironi (misnomer). Tujuan repeat tidak mengulang apa-apa; itu hanya berhasil setiap kali disebut. Nilai besar ulangi adalah bahwa ia juga berhasil (sebanyak yang diperlukan) dalam backtracking. Efek dari ini, seperti untuk tujuan lainnya, adalah untuk mengubah urutan dengan mengevaluasi goal dari “kanan ke kiri ‘(yaitu backtracking) kembali ke’ kiri-ke-kanan ‘. Ini dapat digunakan untuk menciptakan efek perulangan, seperti ditunjukkan pada contoh di bawah ini.

get_answer(Ans):-

write(‘Enter answer to question’),nl,

repeat,write(‘answer yes or no’),read(Ans),

valid(Ans),write(‘Answer is ‘),write(Ans),nl.

valid(yes). valid(no).

 

Cek dalam prolog:

?- get_answer(X).

Enter answer to question

answer yes or no: unsure.

answer yes or no: possibly.

answer yes or no: no.

answer is no

X = no

3. Backtracking menggunakan “failure”.

  1. Pencarian Database Prolog.

Contoh 1:

Database nya terdiri dari:

dog(fido).dog(fred).

dog(jonathan).

 

Dengan rules:

alldogs:-dog(X),write(X),write(‘ is a dog’),nl,fail.

alldogs.

 

Kita cek dalam prolog:

?- alldogs.

fido is a dog

fred is a dog

jonathan is a dog

yes

Contoh 2:

Program berikutnya dirancang untuk mencari database yang berisi klausul yang mewakili nama, umur, tempat tinggal dan pekerjaan dari sejumlah orang. Jika database berisi lima klausa:

person(john,smith,45,london,doctor).

person(martin,williams,33,birmingham,teacher).

person(henry,smith,26,manchester,plumber).

person(jane,wilson,62,london,teacher).

person(mary,smith,29,glasgow,surveyor).

 

Kemudian kita berikan predikat:

allteachers:-person(Forename,Surname,_,_,teacher),

write(Forename),write(‘ ‘),write(Surname),nl,

fail.

allteachers.

 

Kita cek menggunakan Prolog:

allteachers:-person(Forename,Surname,_,_,teacher),

write(Forename),write(‘ ‘),write(Surname),nl,

fail.

allteachers.

 

Semoga pembahasan kali ini cukup membantu…

Kemudian pembahasan soal akan kami muat dalam page yang berbeda…biar lebih mudah untuk dibaca..

Wassalam…

ganbatee !! (artinya semangatttt: novan.red)