RSS

Final Project Expert System (PDF)

This time for final project. Our group make final project for identifying characteristhic people.
You can get our Final Project Journal in here (mediafire)

Thank You very much

Expert System Berguna Identifikasi Karakteristik Kapribadian Manusia

Kita akan mengaplikasikan expert system guna menentukan karakteristik kepribadian seseorang .....

Pertama-tama kita membuat new file dari notepad ....
Kemudian kita berikan inputan seperti gambar di bawah ini, guna memberitahukan pilihan-pilhan sifat guna menunjukkan apa karakteristik orang tersebut


Disini kami mengurutkan langsung mana sifat yang sanguinis, korelis, melankolis, dan plegmatis. Dan di bawah ini adalah proses bagaimana mengetahui karakter orang tersebut.

Kemudian, simpan file tersebut dengan nama exp2.pl (format pl). 

Bukalah file exp2.pl anda melalui folder anda menyimpannya dan buka dengan plwin (SWI-Prolog). Pertama, kita ketikkan start dan muncullah hasil seperti gambar di bawah ini




Kemudia, kita bisa memilih siat mana yang sesuai dengan kita-kita, disini pengecekka dilakukan satu persatu. Pengecekan dilakukakn dengan mengetikkan    

?-tes(no).

no= no urut dari sifat yang anda pilih. Dan akan menampilkan hasil seperti gambar dibawah ini


Terima Kasih 

Maaf bila ada salah dalam penggunaan kata maupun proses pengerjaan ini

Resume Chapter 6

Looping? Apa itu looping?

Looping adalah pengeksekusian berulang dari instruksi himpunan atau deret hingga beberapa kali sampai kondisi yang diberikan dieksekusi. Dalam prolog tidak terdapat fasilitas looping, akan tetapi dapat diakali dengan pemberian evaluasi pada deret secara berulang. Contohnya ;pemberian rekursi(memanggil method di atasnya), membangun predikat, serta variasi dan kombinasi dari contoh-contoh-contoh  tersebut.

 

A.      6.1 Looping dengan angka yang tetap

Contoh 1:

loop(0).

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

M is N-1,loop(M).

 Penjelasan :

Loop akan didefinisikan pada loop itu sendiri. Klausa yang kedua “'to loop from N” akan berfungsi mencetak nilai N kemudian akan dikurangi 1 untuk menghasilkan nilai M. Dan pada saat nilai M=0, maka tidak akan dijalankan proses dan proses rekursi berhenti. Dan hasilnya seperti ini

?- 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:

 

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).

Di sini output_values mempunyai dua argument, yang dapat dibaca ‘'output the

integers from First to Last inclusive'’. Dan looping akan berhenti ketika dua argument tersebut sama.

Outputnya akan

?- output_values(5,12).

56789

10

11

12

end of example

yes

Contoh 3

Mendefinisikan sebuah predikat untuk menemukan jumlah bilangan integer dari 1. Prosesnya adalah jika dimulai dari angka 1 maka akan ditambah 2, ditambah 3, sampai 100, dst.

 

Jumlah dari ke-100 bilangan integer adalah jumlah dari ke-99 bilangan integer ditambah 100.

…………………………………………………………………………….

Jumlah dari ke-3 bilangan integr pertama adlah jumlah dari bilangan kedua bilangan integer pertama ditambah 3.

Jumlah dari  ke-2 bilangan integer pertama adalah jumlah dari bilangan integer pertama ditambah 1.

Jumlah dari ke-1 bilangan integer pertama adalah 1.

Ada dua kasus untuk menentukan hal tersebut. Kasus yang umum adalah jumlah bilangan N integer pertama adlah jumlah dari ke N-1 bilangna integer pertama, ditambah N dan kasus ini akan berhenti pada jumlah ke-1 bilangan integer pertama yaitu 1.

Contoh ::

/* 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

Note : Menngunakan variable tambahan N1 akan bisa menentukan nilai N-1. Jika  penulisan  sumto(N1,S1) diganti dengan sumto(N-1,S1) tidak akan bisa berjalan karena  N-1 adalah sebuah term bukan nilai numeric.

 

Contoh 4

Mendefinisikan sebuah predikat untuk menghasilkan kuadrat dari ke-N bilangan integer pertama, baris demi baris. Pertama harus memanggil secara rekursiv seperti berikut

Untuk menghasilkan kuadrat dari ke-N bilangan integer, maka harus mnegeluarka output dari kuadrat  ke-N-1 bilangan integer dan output N2

……………………………………………………………………………………….

-          Untuk menghasilkan kuadrat dari ke-3 bilangan integer, maka harus mnegeluarkan output dari kuadrat  ke-2 bilangan integer dan output 32

-          Untuk menghasilkan kuadrat dari ke-2 bilangan integer, maka harus mnegeluarkan output dari kuadrat  ke-1 bilangan integer dan output 22

-          Untuk menghasilkan kuadrat dari ke-1 bilangan integer, maka outputnya adalah 1.

 

Sama seperti contoh sebelumnya , proses akan berhenti pada bilangan 1

 

/* output the first N squares, one per line */

writesquares(1):-write(1),nl.

writesquares(N):-N>1,N1 is N-1,writesquares(N1),

Nsq is N*N,write(Nsq),nl.

?- writesquares(6).

149

16

25

36

yes

 

 

Contoh 5

Progaram berikut menampilkan 6 term pertama dari file yang spesifik dan menulis ke output yang sesuai

 

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).

6,2 Looping Kondisi Apakah Puas 

Banyak bahasa memiliki sebuah 'sampai loop' yang memungkinkan sebuah set instruksi yang akan dieksekusi berulang kali sampai kondisi tertentu terpenuhi. Sekali lagi, tidak ada fasilitas seperti  tersedia secara langsung di Prolog, tetapi efek yang sama dapat diperoleh dengan beberapa cara. 

6.2.1 Rekursi

Contoh pertama di bawah ini menunjukkan penggunaan istilah rekursi untuk membaca dimasukkan oleh  pengguna dari keyboard dan output mereka ke layar, sampai akhir dijumpai.

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


Menggunakan pemisahan operator; / 2 yang disebutkan dalam Pasal di atas 4,4
program dapat ditulis ulang sebagai satu klausa.


loop:-write('Type end to end'),read(Word),
write('Input was '),write(Word),nl,
(Word=end;loop).


The 'memisahkan tujuan' (Firman = akhir; loop) digantikan jika Firman variabel terikat untuk
akhir atom. Jika tidak, sistem berusaha untuk memenuhi tujuan loop rekursif.


?- loop.
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

6.2.2 Menggunakan 'ulangi' Predicate

Meskipun sering dapat digunakan untuk efek yang besar, rekursi tidak selalu yang paling mudah cara untuk menyediakan jenis perulangan yang diperlukan dalam program Prolog. Metode lain   yang sering digunakan adalah berdasarkan pada built-in predikat ulangi. Nama predikat ini benar-benar sebuah ironi. Tujuan tidak mengulangi mengulangi apa pun; itu hanya berhasil setiap kali disebut. Nilai besar mengulang adalah bahwa hal itu juga berhasil (sebanyak yang diperlukan) pada kemunduran. Efek ini, seperti untuk tujuan lainnya berhasil, adalah untuk mengubah urutan mengevaluasi tujuan 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. Program ini berulang kali mendorong pengguna untuk memasukkan istilah sampai entah ya atau tidak dimasukkan. Ini adalah alternatif dari program rekursif ditampilkan di bagian akhir bagian sebelumnya. Dalam hal ini masih diperdebatkan apakah menggunakan mengulang adalah perbaikan menggunakan rekursi, tetapi contoh adalah termasuk untuk tujuan ilustrasi.

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).


Pertama lima gol dalam tubuh get_answer akan selalu berhasil. Mengevaluasi
tujuan kelima: read (Jawaban) akan meminta pengguna untuk memasukkan istilah. Jika istilah input apa tapi ya atau tidak, mengatakan tidak yakin, tujuan berikut berlaku (Jawaban) akan gagal. Prolog kemudian akan mundur ke baca (Jawaban) dan menulis ( 'jawaban ya atau tidak "), baik yang adalah unresatisfiable, yaitu akan selalu gagal pada kemunduran. Backtracking akan mencapai predikat ulangi dan berhasil, menyebabkan evaluasi untuk melangkah maju (kiri-ke-kanan) lagi, dengan menulis ( 'jawaban ya atau tidak ")  dan baca (Jawaban) keduanya berhasil, diikuti oleh evaluasi lebih lanjut yang berlaku (Jawaban). 
Tergantung pada nilai Jawaban, yaitu input pengguna, yang berlaku (Jawaban) tujuan akan 
baik gagal, dalam hal Prolog akan mundur sejauh yang berulang, seperti sebelumnya, atau akan
berhasil dalam hal mana tiga gol terakhir menulis ( 'Jawaban ini'), menulis (Jawaban) dan nl
semua akan berhasil. Dampak keseluruhan adalah bahwa dua tujuan menulis ( 'jawaban ya atau tidak ") dan baca (Jawaban) disebut berulang kali sampai kondisi mengakhiri valid (Jawaban) adalah puas, efektif menciptakan lingkaran antara mengulangi dan valid (Jawaban).


?- 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


6,3 Backtracking dengan Kegagalan


Seperti namanya, predikat gagal selalu gagal, apakah pada 'standar' evaluasi kiri-ke-kanan atau pada kemunduran. Keuntungan dapat diambil dari ini, dikombinasikan dengan otomatis Prolog backtracking, untuk pencarian melalui database untuk menemukan semua klausa dengan properti tertentu.

6.3.1 Pencarian Database

Misalkan database berisi klausa seperti


dog(fido).
dog(fred).
dog(jonathan).
alldogs:-dog(X),write(X),write(' is a dog'),nl,fail.
alldogs.



?- alldogs.
fido is a dog
fred is a dog
jonathan is a dog
no


6.3.2 Multiple Mencari Solusi


Backtracking dengan kegagalan juga dapat digunakan untuk mencari semua cara untuk memuaskan tujuan. Misalkan sebuah predikat findroute (Town1, Town2, Route) menemukan sebuah rute Route antara dua kota Town1 dan Town2. Rincian predikat ini tidak relevan
di sini. Ini dapat diasumsikan bahwa Town1 dan Town2 adalah atom dan bahwa rute ini adalah daftar. Backtracking dengan kegagalan kemudian dapat digunakan untuk mencari semua kemungkinan rute antara Town1 dan Town2 dan menulis masing-masing satu di baris terpisah, sebagai berikut:


find_all_routes(Town1,Town2):-
findroute(Town1,Town2,Route),
write('Possible route: '),write(Route),nl,fail.
find_all_routes(_,_).





Loops in Prolog (Exercise)

Exercise 1

Pertama-tama, kita membuat file baru pada notepad dengan inputan seperti gambar di bawah ini


Kemudian, simpan dengan format (.pl) dengan nama exercise6-1.pl
Setelah itu, ke folder kita menyimpan file tersebut. Dan buka file exercise6-1.pl with plwin langsung. Hal ini guna menkonsult file tersebut.
Barulah kita bisa menjalankan fungsi looping prolog, dengan mengetikkan

?-outsquare(6,12).

Maka keluarlah otput seperti gambar di bawah ini



Exercise 2

Pertama-tama, kita membuat file baru pada notepad dengan inputan seperti gambar di bawah ini


Kemudian, simpan dengan format (.pl) dengan nama exercise6-2.pl
Setelah itu, ke folder kita menyimpan file tersebut. Dan buka file exercise6-.pl with plwin langsung. Hal ini guna menkonsult file tersebut.
Barulah kita bisa menjalankan fungsi looping prolog mengulang tiap huruf yang dimasukkan sekali lagi, dengan mengetikkan

?-go.
|:. atau |:? (kedua simbol titik maupun tanda tanya memiliki fungsi sama)

Maka keluarlah otput seperti gambar di bawah ini



Exercise 3

Pertama-tama, kita membuat file baru pada notepad dengan inputan seperti gambar di bawah ini


Kemudian, simpan dengan format (.pl) dengan nama exercise6-3.pl
Setelah itu, ke folder kita menyimpan file tersebut. Dan buka file exercise6-3.pl with plwin langsung. Hal ini guna menkonsult file tersebut.
Barulah kita bisa menjalankan fungsi looping prolog untuk mencari pilihan yang paling benar kemudian dicetak dengan kriteria dan syarat tertentu, dengan mengetikkan

?-find.

Maka keluarlah otput seperti gambar di bawah ini