Kamis, 31 Desember 2009

DOWNLOAD

EXPERT SYSTEM - ANGKOT

Klik link berikut untuk mengunduh file PROJECT EXPERT SYSTEM kami:
DOWNLOAD

Berikut merupakan source code EXPERT SYSTEM ANGKOT KAMI:

Berikut merupakan contoh tampilan jika program dijalankan:

Rabu, 16 Desember 2009

Testing - 2

Berikut merupakan tampilan aplikasi expert system angkot ketika dijalankan.


Anda dapat melihat cara membuat program ini di blog ini, di category Development-2. Semoga program ini dapat berguna bagi pembaca sekalian. Apabila penjelasan kurang jelas, silahkan bertanya. Kritik dan saran anda merupakan cara saya mengetahui tulisan saya sudah mudah dimengerti atau belum. Terima kasih, selamat mencoba! =] (TP).

Development - 2

Development - 2 - Expert System

Berikut merupakan tambahan aplikasi expert system mengenai jalur angkot. Untuk penjelasan expert system dapat dilihat di blog ini, category: Penerapan Expert System (November).

Ketikkan program ini di notepad, dan save dengan tipe .pl, jangan lupa untuk mengubah tipe save dengan allfiles. Kemudian consult file .pl anda di software Prolog anda.


Berikut merupakan tampilan fact dan rule (program) di notepad.


Aplikasi ini dapat mencari semua angkot yang menuju / melewati gebang. Jika anda ingin melihat tampilan dari program ini, anda dapat lihat di blog ini, di category: Testing-2 Aplikasi ini merupakan aplikasi dasar, anda dapat menambahkan sendiri fitur-fitur lain. Selamat mencoba! =] (TP).

Senin, 14 Desember 2009

Testing

Testing - Expert System (Sistem Pakar)

Berikut merupakan tampilan program expert system (sistem pakar) untuk aplikasi smart-calculator (category: Development) ketika dijalankan. Jalankan program Prolog anda, kemudian consult terlebih dahulu file .pl yang tadi anda telah buat, kemudian ikuti instruksi langkah demi langkah. Selamat mencoba.


Semoga program ini dapat berguna bagi para pembaca sekalian. Terima kasih. =] (TP).

Development

Development-Expert System (Sistem Pakar)


Pada kesempatan kali ini, kelompok kami akan mencoba mengimplementasikan expert sistem atau sistem pakar dengan menggunakan bahasa pemrograman Prolog. Expert sistem yang saya adalah tentang smart-calculator. smart-calculator ini dapat digunakan oleh orang awam sekalipun, karena ketika pengguna aplikasi ini menggunakannya, akan dipandu tahap pertahap untuk cara memakai smart-kalkulator ini.

Berikut merupakan contoh sederhana programnya, ketik program ini di notepad, kemudian save dengan tipe file .pl (jangan lupa untuk merubnah tipe penyimpanan menjadi all files).

Program ini cukup sederhana, anda dapat mengembangkan kalkulator ini lebih lanjut lagi. Semoga contoh program ini dapat membantu pembaca sekalian. Selamat mencoba! =] (TP)

Senin, 07 Desember 2009

TUTORIAL 5 - Summary Chapter 6

INPUT AND OUTPUT in Prolog - Summary Chapter 6

Loops


Introduction

Prolog has no looping facilities, similar effects can be obtained that enable a sequence of goals to be evaluated repeatedly. This can be done in a variety of ways, using backtracking, recursion, built-in predicates, or a combination of these.


6.1 Looping a Fixed Number of Times

No such facility is available in Prolog (directly), but a similar effect can be obtained using recursion, as shown in the example programs below.


Example 1

The following program outputs integers from a specified value down to 1.


loop(0).

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

M is N-1,loop(M).


The loop predicate is defined in terms of itself. The second clause can be thought of as: 'to loop from N, first write the value of N, then subtract one to give M, then loop from M'. This process clearly needs to be terminated and this is achieved by the first clause: 'when the argument is zero, do nothing (and hence stop)'. The first clause can be regarded as a terminating condition for the recursion.


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


Example 2

The next program outputs integers from First to Last inclusive.


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


Here output_values has two arguments, which can be read as 'output the integers from First to Last inclusive'. The loop terminates when both arguments are the same.


?- output_values(5,12).

56789

10

11

12

end of example

yes


Example 3

Define a predicate to find the sum of the integers from 1 to N (say for N = 100). It is natural to think of this procedurally, i.e. start with 1, then add 2, then add 3, then add 4, … , then add 100. However the process is much easier to program if reexpressed declaratively in terms of itself.

The sum of the first 100 integers is the sum of the first 99 integers, plus 100.

The sum of the first 99 integers is the sum of the first 98 integers, plus 99.

The sum of the first 98 integers is the sum of the first 97 integers, plus 98.

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

The sum of the first 3 integers is the sum of the first 2 integers, plus 3.

The sum of the first 2 integers is the sum of the first 1 integers, plus 2.

The sum of the first 1 integers is one.

There are two distinct cases to consider: the general case: 'the sum of the first N integers is the sum of the first N-1 integers, plus N' and the terminating case: 'the sum of the first 1 integers is 1'. This leads directly to the recursive definition:


/* 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 that using the additional variable N1 for holding the value of N-1 is essential. Writing sumto(N-1,S1) etc. instead would not work correctly. N-1 is a term, not a numerical value.


Example 4

Define a predicate to output the squares of the first N integers, one per line. This can most easily be programmed if first recast in a recursive form, as follows.

To output the squares of the first N integers, output the squares of the first N-1 and then output N2 To output the squares of the first N-1 integers, output the squares of the first N-2 and then output (N-1)2

To output the squares of the first N-2 integers, output the squares of the first N-3 and then output (N-2)2

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

To output the squares of the first 3 integers, output the squares of the first 2 and then output 32

To output the squares of the first 2 integers, output the squares of the first 1 and then output 22

To output the squares of the first 1 integers, output the number 1

Here the general case is 'to output the squares of the first N integers, output the squares of the first N-1 and then output N2' and the terminating case is 'to output the squares of the first 1 integers, output the number 1'. This leads to the following two-clause program.


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


Example 5

The following program reads the first 6 terms from a specified file and writes them to the current output stream. It uses a 'counting down' method, in a similar way to Example 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).


Normal 0 false false false EN-US X-NONE X-NONE MicrosoftInternetExplorer4

6.2 Looping Until a Condition Is Satisfied

Many languages have an 'until loop' which enables a set of instructions to be

executed repeatedly until a given condition is met. Again, no such facility is

available directly in Prolog, but a similar effect can be obtained in several ways.

6.2.1 Recursion

Excemple shows the use of recursion to read terms entered by the

user from the keyboard and output them to the screen, until end is encountered

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

Output

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

Using the disjunction operator ;/2 which was defined in Section 4.4 the above

program can be rewritten as a single clause.

loop:-write('Type end to end'),read(Word),

write('Input was '),write(Word),nl,

(Word=end;loop).

Output

?- 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 Using the 'repeat' Predicate

The goal repeat does not repeat anything; it merely succeeds whenever it is called. The great value of repeat is that it also succeeds (as many times as necessary) on backtracking.

This program repeatedly prompts the user to enter a term until either yes or no is entered.

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

output

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

The next program reads a sequence of terms from a specified file and outputs

them to the current output stream until the term end is encountered.

readterms(Infile):-

seeing(S),see(Infile),

repeat,read(X),write(X),nl,X=end,

seen,see(user).

If file myfile.txt contains the lines

'first term'. 'second term'.

'third term'. 'fourth term'.

'fifth term'. 'sixth term'.

'seventh term'.

'eighth term'.

end.

Outout

?- readterms('myfile.txt').

first term

second term

third term

fourth term

fifth term

sixth term

seventh term

eighth term

end

yes

Baik, sekarang saya akan menunjukkan sebuah program Prolog yang digunakan untuk menampilkan sebuah menu, dimana menu ini akan terus keluar tergantung dari masukkan pengguna program. Perintah ‘go’ dalam program, akan menyebabkan program menampilkan menu yang dapat dipilih. Menu ini baru akan tertutup sampai masukkan adalah q (masukkan dapat berbeda-beda program 1 dengan lainnya, tergantung kesepakatan rules di program Prolog). Setiap masukkan harus diikuti dengan tanda titik.
Berikut rules program ini, ketikkan program ini di notepad. Kemudian save dengan tipe file .pl


Pada baris ke-1 terdapat rules ‘go’. Saat Prolog nanti dijalankan, dan anda memasukkan perintah ‘go.’, maka program akan menampilkan tulisan seperti yang telah ditulis di notepad tadi, yaitu “Pemilihan Kegiatan Ekstrakulikuler”, dan sekaligus memanggil method ‘menu’. Dimana method ‘menu’ pada baris ke-2 sudah diatur sehingga ketika method ini dipanggil, ia akan menampilkan teks seperti yang ada di rules diatas, yaitu “PILIH Ekstrakulikuler …dst”. Method menu ini nanti juga akan menyuruh user untuk memasukkan karakter melalui perintah ‘read’, sebagai opsi pilih pengguna program ini nantinya. Ketika pengguna program ini memasukkan karakter a/A, maka program akan menampilkan “Ekstra sepakbola telah anda pilih!” dan sekaligus memanggil method menu kembali. Demikian seterusnya sampai pengguna computer memasukkan karakter ‘q’ (karakter dapat bervariasi dengan program lainnya).
Berikut merupakan contoh program ini ketika dijalankan.


Searching menggunakan method fail di Prolog

Prolog juga menyediakan fitur searching, dimana prolog akan mencari semua property apa yang ingin dicari di database. Misalkan, database menyimpan keterangan bahwa tommy, roodhin, noval adalah murid dan yonatan adalah pekerja. Jika kita ingin mencari semua murid, maka tentu yang akan ditampilkan adalah tommy, roodhin dan Yonatan.
Berikut merupakan contoh program searching, ketikkan program ini di notepad. Kemudian save dengan tipe .pl


Pada baris 1-4 nampak bahwa, program membuat sebuah fakta, bahwa tommy, roodhin dan noval adalah student dan yonatan adalah worker. Bisa dikatakan bahwa database menyimpan keterangan bahwa tommy, roodhin dan noval adalah student dan yonatan adalah worker. Baris 6 nampak bahwa dibuat sebuah rules ‘allstudent’, dimana ketika rules ’allstudent’ dijalankan, akan ditampilkan X dimana X adalah student dan tampilkan juga, “ is a student”. Program akan menampilkan terus menerus setiap student yang ada di database. Jika sudah tidak ada student lagi, maka method fail akan berjalan dan menghentikan program. Jika method allstudent yang kedua / pada baris ke 7 diabaikan, setiap student akan tetap ditemukan, namun akan berakhir dengan kesalahan, akan muncul no setelah hasil ditemukan.
Berikut contoh tampilan ketika program ini dijalankan


Model searching dapat dibuat bervariasi. Berikut merupakan program untuk mencari database yang berisi nama depan, nama belakang, umur, kota asal dan pekerjaan. Program akan menampilkan nama depan dan nama belakang orang yang bekerja sebagai programmer.
Berikut merupakan contoh program. Ketikkan program ini di notepad dan save dengan tipe .pl


Pada baris 1-4 nampak bahwa, program membuat sebuah fakta bahwa, tommy prasetyo, umur 19, kota asal kediri, pekerjaan doktor adalah person, demikian juga noval, roodhin, dan yonatan. Baris ke 6 menyatakan bahwa ‘allprogrammer’ merupakan sebuah method/rules, dimana bila method ini dipanggil, akan menampilkan nama depan (dalam kasus ini saya misalkan karakter X, maksudnya adalah siapapun X itu),nama belakang orang yang bekerja sebagai programmer. Jika di database sudah tidak ada lagi person yang bekerja sebagai programmer, maka program akan berhenti dengan perintah fail.
Berikut contoh program apabila dijalankan:



Searching dapat juga dilakukan tanpa method fail. Sebagai contoh, kita dapat memanipulasi program agar mencari data yang ingin dicari dengan cara menetapkan bahwa program akan berhenti apabila ditemukan m_top.
Berikut contoh programnya, ketikkan program ini dinotepad dan kemudian save dengan tipe .pl


Baris ke 1-4 sama seperti program tadi. Pada baris ke-6 kita membuat sebuah method ‘somepeople’, dimana method ini akan menampilkan nama depan dan belakang ‘person’ yang bekerja sebagai programmer. Program akan berhenti sampai ditemukan nama belakang=m_top, yang tidak lain adalah nama belakang orang terakhir yang bekerja sebagai programmer di database.

Berikut tampilan program bila dijalankan:


Mencari semua daftar kemungkinan

Backtracking dengan failure dapat digunakan juga untuk menemukan kepuasan tujuan yang diinginkan. Misalkan findroute(Town1,Town2,Route) akan digunakan untuk menemukan jarak rute antara dua kota, Town1 dan Town2. Rincian dari rules ini tidak relevan. Rincian tersebut akan diartikan Town1 dan Town2 adalah kota dan Route adalah daftar. Backtracking dengan failure dapat digunakan untuk mencari semua kemungkinan rute antara kota 1 dan kota 2.
Berikut contoh programnya, ketikkan di notepad dan save dengan tipe .pl



Berikut tampilan program bila dijalankan:




Tutorial Practical Exercise chapter 6

Practical Exercise chapter 6 (Looping)

1. Tentukan sebuah predikat yang menampilkan nilai kuadrat dari integer N1 sampai N2, dimana N1=6 dan N2=12.

Jawab:

(a) Pertama buat file text baru, dan kemudian tuliskan source code berikut.

Writesquares(6):-write(36),nl. Merupakan perintah pertama yang akan dieksekusi oleh program. Karena N1 = 6, maka pada baris pertama yang ditulis adalah 36 sebagai hasil kuadrat dari 6.

Writesquares(N):-N>6, N1 is N-1,writesquares(N1),Nsq is N*N,write(Nsq),nl. Ini merupakan perintah perulangan (looping) yang akan dieksekusi. Disini nilai N harus lebih dari 6.

(b) Setelah itu simpan file text itu dengan nama exercise 6a dan berformat .pl

(c) Buka aplikasi ProLog Anda. Kemudian pada menu File, pilih Consult. Setelah itu carilah lokasi file exercise 6a.pl yang telah Anda buat

(d) Setelah itu akan muncul tampilan seperti dibawah

(e) Tuliskan perintah writesquares(12). Setelah itu akan muncul hasil kuadrat dari 6 sampai 12. Tampilannya seperti dibawah ini

Perhatikan bahwa hasil ditampilkan merupakan hasil kuadrat mulai dari N1=6 sampai N2=12


2. Tentukan sebuah predikat yang membaca serangkaian inputan oleh pengguna dan menampilkan semua sebelum baris baru atau karakter “?”

(a) Pertama buat file text baru, dan kemudian tuliskan source code berikut.

(b) Setelah itu simpan file text itu dengan nama exercise 6b dan berformat .pl

(c) Buka aplikasi ProLog Anda. Kemudian pada menu File, pilih Consult. Setelah itu carilah lokasi file exercise 6b.pl yang telah Anda buat

(d) Tuliskan perintah go. Kemudian tekan enter.

Setelah itu masukkan kata/kalimat(jika menggunakan spasi, sebaiknya diganti dengan underline (_))

(e) Jika pada kata atau kalimat yang Anda masukkan ada tanda tanya (?), maka ProLog hanya akan membaca kata/kalimat yang diketik sebelum tanda tanya

Perhatikan bahwa “so_much” tidak ikut terbaca oleh ProLog karena syarat yang diminta jika ada tanda tanya (?), maka ProLog akan menganggap program selesai.


3. Menggunakan klausa database Person pada bagian 6.3.1, tentukan profesi dari mereka yang berusia diatas 40 tahun.

(a) Pertama buat file text baru, dan kemudian tuliskan source code berikut:

Person(john,smith,45,london,doctor). Dan lainnya, merupakan database person.

Kemudian predicate ageprofessions, berguna untuk mencari profesi dari database yang objectnya berusia diatas 40 tahun.

"karena gambarnya kurang jelas, ini source odenya:

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

ageprofessions:-person(Forename,Surname,Age,_,Professions),Age>40,
write(Forename),write(' '),write(Surname),write(' '),write(Age),

write(' profession is '),write(Professions),nl,
fail.
ageprofessions.


(b) Setelah itu simpan file text itu dengan nama exercise 6c dan berformat .pl

(c) Buka aplikasi ProLog Anda. Kemudian pada menu File, pilih Consult. Setelah itu carilah lokasi file exercise 6c.pl yang telah Anda buat

(d) Setelah itu akan muncul tampilan seperti dibawah

(e) Tuliskan ageprofessions. Kemudian tekan enter, maka akan muncul tampilan seperti berikut:

Prolog telah menampilkan profesi dari Person yang memiliki usia diatas 40 tahun.


Sekian Tutorial kali ini.. semoga bermanfaat..!
Salam Super...!