Final Project Expert System (PDF)
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.
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 PuasBanyak 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.
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.
|:
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
Input and Output in Prolog (Number 5)
Soal 5
Pertama-tama, kita membuat new file pada notepad dengan inputan seperti pada gambar dibawah ini. Kemudian, simpan dengan nama masuk1.txt (format tetap .txt)
Kedua, kita membuat new file lagi pada notepad dengan inputan berbeda seperti pada gambar dibawah ini. Kemudian, simpan gambar dengan nama masuk2.txt
Setelah itu, mulai membuat masukkan untuk menjalankan prolog pada notepad dengan inputan seperti gambar dibawah ini guna menjalankan compare. Kemudian, simpan dengan nama comp.pl
Buka SWI-Prolog dan jalankan program compare dengan, membuka file comp.pl dari folder anda menyimpannya. Dan open with ... plwin
Kemudian barulah kita ketikkan perintah berikut pada prolog :
?-compare('c:/Users/.../matdis/masuk1.txt','c:/Users/.../matdis/masuk2.txt').
ENTER
Maka mumcullah gambar seperti gambar dibawah ini
Input and Output in Prolog (Number 4)
Soal 4
Pertama, kita membuat 2 new file format .txt di notepad
- FILE in1.txt, kita berikan masukan data sebagai berikut :
first.
second.
third.
fourth.
'fifth and last'.
end.
- FILE in2.txt, kita berikan masukan data sebagai berikut :
alpha.
beta.
gamma.
omega.
end.
Berikut salah satu tampilan file yang tersebut di atas
Kemudian, kita membuat prolog terlebih dahulu pada notepad untuk menggunakan formula compare. Seperti gambar di bawah ini, kemudian disimpan dengan nama : fungsi.pl
Setelah itu, mari kita menjalankan program compare di atas, dengan mengetikkan :
?-compare('C:/.../matdis/in1.txt','C:/.../matdis/in2.txt','C:/.../matdis/out3.txt').
ENTER
akan muncul kata Yes, seperti gambar di bawah ini
Setelah itu, silahkan anda buka folder anda menyimapan file otput tadi, maka akan ada file baru seperti gambar di bawah ini : out3.txt
Input and Output in Prolog (Number 3)
Soal 3
Pertama kita menuliskan data seperti dibawah ini pada notepad
Kemudian, disimpan dengan nama testa.txt
Selanjutnya tulis formula readfile pada notepad seperti dibawaha ini
Kemudian disimpan dengan nama abc.pl
Barulah, kita bisa menjalankan fungsi ABC pada SWI-Prolog
Buka prolog kemudia ketik
?-readfile('C:/.../matdis/testa.txt').
Kemudian ENTER , muncul hasil seperti gambar dibawah ini
Input dan Output in Prolog (Number 1 and 2)
Soal 1
Kita membuka notepad dan memasukkan langkah-langkah prolog di dalamnya, seperti gambar di bawah ini
kemudian disimpan dengan nama dan format gakgak
Buka SWI-Prolog dan jalankan fungsi makelower
sehingga muncul tampilan seperti gambar di bawah ini
Pertama, kita memasukkan input di notepad . Kemudian, disimpan dengan nama tes1.txt (format simpan tetap txt) di Local Disk C, seperti gambar di bawah ini :
Kemudian buka Prolog, dan jalankan fungsi copyterms seperti gambar dibawah ini, maka akan keluar output.txt secara langsung
Input dan Output in Prolog (Exercise)
1. Kita membuka notepad dan memasukkan langkah-langkah prolog di dalamnya, seperti gambar di bawah ini
makelower:-ubah(Y).
ubah(Y):-get0(X), process(X).
process(13):-nl.
process(X):-X=\=13,asik(X,Y),put(Y),makelower.
asik(X,Y):-X>64,X<91,>
asik(X,Y):-X<65,x>90, Y is X+0.
kemudian disimpan dengan nama dan format gakgak.pl
2. Buka SWI-Prolog dan jalankan fungsi makelower
kemudian, ketikkan berikut pada prolog
?- makelower. kemudian ENTER
sehingga muncul tampilan seperti gambar di bawah ini
Soal 2
Input dan Output in Prolog (Resume)
Fungsi untuk mencetak ouput dengan write/1 atau writeq/1.
Perbedaan write/1 dan writeq/1 :
- write/1 : membutuhkan tanda ' __ ' , dimana setiap otuput yang akan dicetak harus diawali dan diakhiri petik satu(')
- writeq/1 : untuk mencetak ouput kita tidak perlu membuhkan tanda petik satu (') di awal dan akhir
Contoh :
?- write('a string of characters'),nl.
a string of charactersyes
?- writeq(a string of characters),nl.
a string of charactersyes
contoh : (ketik langsung pada program prolog)
OUTPUTTING CHARACTER
Inovasi dengan Expert System
- Untuk pengembangan softskill
- Untuk Pengembangan keterampilan interpersonal serta intrapersonal
- Penuh kehidupan
- ceria
- jiwa sosial
- mempesona
- refreshing
- bersemangat
- promotor
- optimis
- humoris
- menyenangkan
- inspiring
- demontrativ
- suka bicara
- kuat
- pusat perhatian
- populer
- penuh tenaga
- suka pamer
- kurang disiplin
- cerewet
- ingatan lemah
- tidak suka mendengar
- tidak terprediksi
- tidak konsisten
- permissive
- angered easily
- naive
- suka penghargaan
- talkative
- tidak terorganisir
- tidak teratur
- ingin dilihat
- suara keras
- sulit konsentrasi
- berani
- persuasive
- percaya diri
- competitive
- tindak efektif
- mandiri
- positive
- spontaneous
- out spoken
- mendominasi
- siap menanggung resiko
- mover
- keras kepala
- pemimpin
- produktif
- tangguh
- suka memerintah
- tidak simpati
- resistant
- tidak sungkan
- tidak sabar
- unaffecionate
- agresif
- tidak berperasaan
- tidak toleransi
- memanipulasi
- sulit dibujuk
- tidak ragu-ragu
- emosional
- tergesa-gesa
- cerdik
- analitical
- menuntaskan pekerjaan
- rela berkorban
- menghargai
- menghormati
- sensitive
- planner
- terjadwal
- ingatan jernih
- metodis
- sistematis
- setia
- konsisten
- artistik
- idealistic
- musical
- tanggap
- chartmaker
- perfectionist
- menghindari perhatian
- pendendam
- mudah tersinggung
- pekerja keras
- kurang percaya diri
- tidak populer
- berpikir negatif
- merasa tertekan
- tertutup
- moody
- sulit percaya
- penyendiri
- critical
- adaptif
- tenang
- pendengar setia
- controlled
- pandai menahan emosi
- penerima keadaan
- sabar
- pemalu
- rendah diri
- kurang inisiatif
- penuh siasat
- perasa
- konsisten
- mudah puas
- jarang iri
- mudah bergaul
- terbuka
- stabil
- tidak bergairah
- khawatir
- gelisah
- sulit mengambil keputusan
- kurang sosialisasi
- lambat
- kurang emosi
- datar
- tidak peduli
- terganggu
- tidak tanggung jawab
- tidak percaya diri
- bicara pelan
- tidak cekatan
- perlu motivasi
- menghindari konflik