Senin, 14 Desember 2009

Expert System Design in Prolog


EXPERT SYSTEM DESIGN FOR KNOWING THE CHARACTERISTIC OF BLOOD TYPE in SWI PROLOG


Pada Final Project 4, kita telah membuat desain system pakar yang berguna untuk mengetahui karakteristik atau komponen apa saja yang terdapat di dalam setiap golongan darah. Karakteristik tiap golongan darah pun telah kita jelaskan pada final project 4 beserta prolog nya. Namun, kami menganggap prolog yang kami buat sebelumnya belum sempurna. Oleh karena itu, kita akan menunjukkan desain system pakar baru yang kami buat di prolog. Mari kita perhatikan desain system pakar yang telah kami buat:


Sistem Pakar Karakteristik golongan darah ini memiliki data-data sebagai berikut:

Tipe A:

  1. Memiliki Aglutinogen A
  2. Memiliki Aglutinin B
  3. Jika darah ditetesi zat Anti A maka darah akan menggumpal dan Jika darah ditetesi zat Anti B maka darah tidak akan menggumpal.

Tipe B:

  1. Memiliki Aglutinogen B
  2. Memiliki Aglutinin A
  3. Jika darah ditetesi zat Anti A maka darah tidak akan menggumpal dan Jika darah ditetesi zat Anti B maka darah akan menggumpal.

Tipe AB:

  1. Memiliki Aglutinogen A dan B
  2. Tidak memiliki agglutinin
  3. Jika darah ditetesi zat Anti A maka darah akan menggumpa dan Jika darah ditetesi zat Anti B maka darah juga akan menggumpal.

Tipe O:

  1. Tidak Memiliki Aglutinogen
  2. Memiliki Aglutinogen A dan B
  3. Jika darah ditetesi zat Anti A ataupun zat Anti B maka darah tidak akan menggumpal.

Untuk menyimpan Data-Data tersebut dalam notepad agar bisa dijadikan program di prolog maka dapat ditulis atau diketik rule nya pada notepad sebagai berikut:


bloodtype(type_A,aglutinogen_A,aglutinin_B,clump,not_clump).

bloodtype(type_B,aglutinogen_B,aglutinin_A,not_clump,clump).

bloodtype(type_AB,aglutinogen_A_and_B,no_aglutinin,clump,clump).

bloodtype(type_O,no_aglutinogen,aglutinin_A_and_B,not_clump,not_clump).


NB(forgive us if its make you confuse):

type=menjelaskan tentang tipe darah

aglutinogen=menjelaskan aglutinogen yang dimiliki

aglutinin= menjelaskan aglutinin yang dimiliki

clump/not clump=clump/not clump setelah aglutinin menyatakan reaksi darah setelah ditetesi zat Anti A, sedangkan pada clump/not clump bagian akir menyatakan reaksi darah setelah ditetesi zat Anti B.



Kemudian, kami akan membuat program dimana saat di masukkan sebuah kondisi maka dapat disimpulkan jenis golongan darah tersebut. Misalnya:

1. JIKA : Memiliki Aglutinogen A

MAKA : Jenis Golongan Darah adalah Golongan Darah A.

2. JIKA : Memiliki Aglutinin A

MAKA : Jenis Golongan Darah adalah Golongan Darah B.

3. JIKA : Ditetesi zat Anti A menggumpal dan saat ditetesi zat Anti B tidak menggumpal

MAKA : Jenis Golongan Darah adalah Golongan Darah A.


Program pertama yang kami buat yaitu menentukan kondisi aglutinogen yang dimiliki oleh tiap tipe golongan darah. Maka dapat ditulis atau diketik caranya atau rule pada notepad sebagai berikut :


aglutinogen_A:-bloodtype(Darah,Aglutino,_,_,_),Aglutino=aglutinogen_A,

write('Blood Type is '),write(Darah),nl,fail.

aglutinogen_A.


Cara ini juga bisa dilakukan pada setiap golongan darah namun harus merubah persyaratannya terlebih dahulu. Untuk rule selengkapnya, lihat gambar di bawah ini:


Program kedua yang kami buat yaitu menentukan kondisi aglutinin yang dimiliki oleh tiap tipe golongan darah. Maka kita dapat mengetik rulenya pada notepad sebagai berikut :


no_aglutinin:-

bloodtype(Darah,_,Aglutinin,_,_),Aglutinin=no_aglutinin,write('Blood Type is '),write(Darah),nl,fail.

no_aglutinin.

Cara ini juga bisa dilakukan pada setiap golongan darah namun harus merubah persyaratannya terlebih dahulu. Untuk rule selengkapnya, lihat gambar di bawah ini:



Program ketiga yang kami buat yaitu menentukan kondisi saat ditetesi zat anti a dan zat anti b yang terjadi pada tiap tipe golongan darah. Kita dapatt mengetik rulenya pada notepad sebagai berikut :


clump_not:-

bloodtype(Darah,_,_,clump,not_clump),

write('Blood Type is '),write(Darah),nl,fail.

clump_not.


NB: clump_not memiliki arti clump = menggumpal saat ditetesi Zat anti A dan

not = tidak menggumpal saat ditetesi zat anti B.

more example: not_not memiliki arti not = tidak menggumpal saat ditetesi zat anti A dan not= tidak menggumpal saat ditetesi zat anti B.


Cara ini juga bisa dilakukan pada setiap golongan darah namun harus merubah persyaratannya terlebih dahulu. Untuk rule selengkapnya, lihat gambar di bawah ini:



Selain ketiga program diatas, kita juga membuat satu lagi yaitu untuk memunculkan semua karakteristik setiap golongan darah. Caranya yaitu:


tipeO:-bloodtype(type_O,Forename,Surname,Forename1,Surname1),write('The characteristic are: '),nl,write(Forename),nl,write(Surname),nl,write('when its dropped'),write(' by Anti A'),write(' ,its will be '),write(Forename1),nl,write('when its dropped'),write(' by Anti B'),write(' ,its will be '),write(Surname1),nl,fail.

tipeO.


NB: forgive us if this rule too complicated to make you understand.

Cara ini juga bisa dilakukan pada setiap golongan darah namun harus merubah persyaratannya terlebih dahulu. Untuk rule selengkapnya, lihat gambar di bawah ini:



Then, setelah kita menyimpan semua rule yang telah kita kerjakan menjadi satu di notepad dengan format .pl atau prolog, maka kita dapat melihat tampilan program kita dalam SWI Prolog sebagai berikut:


1. Kondisi Aglutiogen



NB: keyword yang digunakan yaitu aglutinogen_(tipe aglutinogen) jika tidak ada maka no_aglutinogen.


2. Kondisi Aglutinin



NB: keyword yang digunakan yaitu aglutinin_(tipe aglutinogen) jika tidak ada maka no_aglutinin.


3.Kondisi saat ditetesi zat Anti A dan zat Anti B



NB: keyword yang digunakan yaitu (kondisi darah saat ditetesi zat antiA)_ (darah kondisi darah saat ditetesi zat antiA) jika tidak menggumpal=not, dan jika menggumpal=clump


4. Menampilkan seluruh karakter yang dimiliki oleh golongan darah



NB: keyword yang digunakan yaitu tipe(jenis golongan darah).


This program inspirated by Logic Programming chapter 6