Dempster Shafer Theory

Contoh implementasi Expert System (Sistem Pakar) dengan DST (Dempster Shafer Theory) menggunakan PHP dan MySQL

Artikel ini akan mencoba menjelaskan penerapan Dempster-Shafer Theory dalam aplikasi sistem pakar yang menggunakan PHP dan MySQL. Dimulai dari dasar-dasar teori mengenai Dempster-Shafer Theory, perancangan database sampai dengan pembuatan aplikasinya. Sebagai pelengkap untuk lebih memahami langkah-langkah penerapan Dempster-Shafer Theory ini disertakan juga simulasi aplikasi sistem pakar yang sudah jadi dengan mengambil contoh kasus pendeteksian jenis perilaku abnormal ADHD (Attention Deficit Hyperactivity Disorder) pada anak

[ author : cahya dsn, published on : January 4, 2017 updated on : December 4, 2018 ]

minerva minerva donasi donation

Mau lihat artikel lainya? Dapatkan artikel-artikel lain seputar pemrograman website di sini, dan dapatkan ide-ide baru

Minimnya pengetahuan publik tentang perilaku abnormal berakibat perilaku-perilaku abnormal yang ada dan tampak sering dipahami secara keliru, bahkan tidak jarang penyandang perilaku abnormal diperlakukan secara tidak manusiawi. Salah satu bentuk perilaku abnormal tersebut adalah ADHD (Attention Deficit Hyperactivity Disorder) atau gangguan pemusatan perhatian pada anak. Pada aplikasi yang akan dibuat ini, sistem pakar untuk mendeteksi jenis perilaku ADHD memberikan kesimpulan tentang jenis penyakit yang diderita dan tingkat keyakinannya.

Digunakan metode Dempster Shafer sebagai metode untuk menghitung nilai kepercayaan atas gejala-gejala yang dipilih pasien. Dengan cara membandingkan setiap nilai bobot dari 2 gejala awal yang dipilih untuk seterusnya dibandingkan dengan nilai bobot gejala-gejala lain, sehingga menghasilkan gejala baru yang mengacu kepada suatu penyakit disertai dengan nilai keyakinannya

Ada beberapa data masukan yang dimasukkan kedalam sistem pakar ini antara lain: data gejala, data penyakit dan data gejala penyakit. Data-data tersebut yang sudah dimasukkan disimpan kedalam basis pengetahuan sistem pakar dan akan digunakan dalam proses diagnosa menentukan jenis penyakit ADHD serta tingkat kenyakinannya.

3.1. Basis Pengetahuan

Hal yang pertama kali dilakukan dalam membangun sistem pakar adalah membuat struktur basis pengetahuan. Basis pengetahuan merupakan kumpulan- kumpulan fakta. Beberapa struktur basis pengetahuan pada sistem pakar ini adalah sebagai berikut:

  • Basis pengetahuan gejala
  • Basis pengetahuan penyakit
  • Basis pengetahuan gejala penyakit

Dalam kasus ini seorang user (pengguna) dapat mengetahui jenis penyakit dan nilai tingkat kenyakinnaya dengan cara memasukkan gejala-gejala yang diderita kedalam sistem sehingga sistem pakar dengan metode Dempster Shafer akan mencocokkan gejala-gejala yang dimasukkan dengan jenis penyakit yang berada pada basis pengetahuan dan juga sistem akan memberikan nilai kepastian jenis penyakit tersebut.

Pada basis pengetahuan berisikan tentang jenis penyakit, gejala-gejala, dan nilai densitas (Dempster Shafer) gejala terhadap penyakit. Pada tabel 2.1 berisikan basis pengetahuan yang berisikan semua gejala yang mendukung semua jenis perilaku ADHD (Attention Deficit Hyperactivity Disorder) pada anak

Tabel 2.1 : Basis pengetahuan gejala-gejala ADHD
KodeGejala
G1Sulit untuk disiplin
G2Sangat sensitif terhadap kritikan
G3Hanya memiliki sedikit teman
G4Menghindari atau tidak menyukai kegiatan yang membutuhkan usaha berkesinambungan, contohnya duduk diam
G5Mengalami kecemasan pada situasi baru atau yang tidak familiar
G6Memiliki kecenderungan untuk melamun
G7Sering merasa rendah diri dan tidak percaya diri
G8Banyak merasa khawatir dan takut
G9Menjawab tanpa berpikir,sementara pertanyaan belum selesai
G10Apabila bermain, lebih sering mondar-mandir dan sulit bermain dengan tenang
G11Bicara berlebihan
G12Sering menghentak-hentakkan kaki ketika duduk diam
G13Sering mengganggu anak-anak lain
G14Mengalami kesulitan menunggu gilirannya (tidak sabaran)
G15Sering mengambil mainan teman dengan paksa
G16Reaktif, sering merespon kembali apa yang dilakukan kepadanya
G17Sering mengulangi kata-kata yang diucapkan teman
G18Sering bertindak kasar dengan teman sebaya
G19Sikap menantang dan membangkang
G20Sering melanggar peraturan, bahkan peraturan yang sederhana
G21Selalu bermasalah dengan orang- orang yang memiliki otoritas
G22Mudah merasa terganggu, mudah marah
G23Terlihat sangat pemalu dan menarik diri
G24Mainan sering tertinggal
G25Mudah beralih perhatian (terutamarangsang suara)
G26Cenderung tidak mendengarkan ketika seseorang berbicara
G27Memiliki masalah dalam hal mengatur tugas / kegiatan sehari- hari
G28Sulit mengikuti petunjuk guru dan orang tua
G29Sulit menyelesaikan tugas atau kegiatan yang diberikan guru atau orang tua
G30Seringkali lupa dengan kebiasaan dan kegiatan sehari-hari
G31Selalu bergerak, seperti berjalan atau memanjat
G32Sering menggeliat
G33Sering membuat gaduh suasana
G34Selalu ingin memegang benda yang dilihat

Pada Tabel 2.2 berikut merupakan basis pengetahuan yang berisikan semua jenis penyakit yang mendukung perilaku ADHD (Attention Deficit Hyperactivity Disorder) pada anak

Tabel 2.2 : Basis pengetahuan penyakit ADHD
KodeNama PenyakitKeterangan
P1InatentifAnak-anak yang masalah utamanya adalah rendahnya konsentrasi dan kurangnya kemampuan untuk memusatkan perhatian.
P2HiperaktifAnak-anak yang masalahnya terutama diakibatkan oleh perilaku yang tidak bisa diam.
P3ImpulsifAnak-anak yang mengalami kesulitan untuk menunda respon (dorongan untuk mengatakan sesuatu/melakukan sesuatu dengan tidak sabar) dan selalu terburu-buru.

Tabel 2.3 berikut merupakan basis pengetahuan yang berisikan semua jenis gejala dan penyakit yang mendukung perilaku ADHD (Attention Deficit Hyperactivity Disorder) pada anak serta nilai bobot atau nilai tingkat kepercayaan (nilai belief) dan nilai plausability masing-masing gejala terhadap penyakit ADHD yang diderita anak.

Tabel 2.3 : Basis pengetahuan gejala penyakit ADHD serta nilai belief masing- masing gejala terhadap penyakit
KodeNama GejalaP1P2P3BeliefPlausibility
G1Sulit untuk disiplin0.30.7
G2Sangat sensitif terhadap kritikan0.30.7
G3Hanya memiliki sedikit teman0.30.7
G4Menghindari atau tidak menyukai kegiatan yang membutuhkan usaha berkesinambungan, contohnya duduk diam0.60.4
G5Mengalami kecemasan pada situasi baru atau yang tidak familiar0.60.4
G6Memiliki kecenderungan untuk melamun0.60.4
G7Sering merasa rendah diri dan tidak percaya diri0.60.4
G8Banyak merasa khawatir dan takut0.60.4
G9Menjawab tanpa berpikir,sementara pertanyaan belum selesai0.60.4
G10Apabila bermain, lebih sering mondar-mandir dan sulit bermain dengan tenang0.70.3
G11Bicara berlebihan0.60.4
G12Sering menghentak-hentakkan kaki ketika duduk diam0.60.4
G13Sering mengganggu anak-anak lain0.60.4
G14Mengalami kesulitan menunggu gilirannya (tidak sabaran)0.850.15
G15Sering mengambil mainan teman dengan paksa0.40.6
G16Reaktif, sering merespon kembali apa yang dilakukan kepadanya0.850.15
G17Sering mengulangi kata-kata yang diucapkan teman0.750.25
G18Sering bertindak kasar dengan teman sebaya0.90.1
G19Sikap menantang dan membangkang0.90.1
G20Sering melanggar peraturan, bahkan peraturan yang sederhana0.750.25
G21Selalu bermasalah dengan orang- orang yang memiliki otoritas0.60.4
G22Mudah merasa terganggu, mudah marah0.60.4
G23Terlihat sangat pemalu dan menarik diri0.60.4
G24Mainan sering tertinggal0.70.3
G25Mudah beralih perhatian (terutamarangsang suara)0.850.15
G26Cenderung tidak mendengarkan ketika seseorang berbicara0.90.1
G27Memiliki masalah dalam hal mengatur tugas / kegiatan sehari- hari0.350.65
G28Sulit mengikuti petunjuk guru dan orang tua0.60.4
G29Sulit menyelesaikan tugas atau kegiatan yang diberikan guru atau orang tua0.750.25
G30Seringkali lupa dengan kebiasaan dan kegiatan sehari-hari0.950.05
G31Selalu bergerak, seperti berjalan atau memanjat0.950.05
G32Sering menggeliat0.450.55
G33Sering membuat gaduh suasana0.80.2
G34Selalu ingin memegang benda yang dilihat0.90.1

Referensi: Anggia Kargenti E.M, M.Si

 

3.2. Analisa Aturan Penalaran

Aturan Penalaran digunakan untuk menentukan proses pencarian atau menentukan kesimpulan untuk sebuah penyakit berdasarkan gejala-gejala yang diinputkan. Aturan penalaran yang digunakan di sini adalah Rule-Based Reasoning (penalaran berbasis aturan)

3.3. Metode Inferensi

Langkah selanjutnya setelah membuat basis pengetahuan adalah analisa metode inferensi. Metode inferensi atau teknik penelusuran yang digunakan dalam sistem pakar ini adalah dengan menggunakan metode inferensi forward chaining. Metode inferensi forward chaining menggunakan himpunan aturan kondisi-aksi, dimana dalam pengambilan kesimpulan berdasarkan fakta-fakta atau pernyataan yang dimulai dengan kondisi IF kemudian THEN untuk menyimpulkan perilaku yang diderita.

Untuk lebih memahami metode inferensi biasanya digunakan mesin inferensi. Mesin inferensi ini secara teori dapat berupa pohon keputusan (decision tree) atau disebut juga dengan pohon inferensi. Pohon inferensi merupakan gambaran berbentuk grafis dari basis pengetahuan dan aturan-aturan dalam mesin inferensi.

Sebagai bahan pembelajaran aplikasi Sistem Pakar dengan DST ini; dibuat database (dalam hal ini menggunakan MySQL/MariaDB Database server) dengan nama db_expert sebagai berikut:

CREATE DATABASE IF NOT EXISTS db_expert;
USE db_expert;

4.1. Membuat Data Tabel Evidences

Tabel ds_evidences merupakan tabel untuk menyimpan data-data entitas gejala. Atribut-atribut dari gejala yang akan disimpan meliputi id,code (opsional), dan name. Struktur tabelnya adalah sebagai berikut :

DROP TABLE IF EXISTS ds_evidences;
CREATE TABLE IF NOT EXISTS ds_evidences(
	id INT AUTO_INCREMENT,
	code VARCHAR(3),
	name VARCHAR(30),
	PRIMARY KEY (id)
) ENGINE=MyISAM CHARSET=utf8;

Mengacu kepada daftar gejala yang ditunjukkan dalam contoh kasus (Tabel 2.1) dapat dimasukkan data-data tersebut dalam tabel ds_evidences seperti berikut ini:

INSERT INTO ds_evidences(code,name)
VALUES
('G1','Sulit untuk disiplin'),
('G2','Sangat sensitif terhadap kritikan'),
('G3','Hanya memiliki sedikit teman'),
('G4','Menghindari atau tidak menyukai kegiatan yang membutuhkan usaha berkesinambungan, contohnya duduk diam'),
('G5','Mengalami kecemasan pada situasi baru atau yang tidak familiar'),
('G6','Memiliki kecenderungan untuk melamun'),
('G7','Sering merasa rendah diri dan tidak percaya diri'),
('G8','Banyak merasa khawatir dan takut'),
('G9','Menjawab tanpa berpikir,sementara pertanyaan belum selesai'),
('G10','Apabila bermain, lebih sering mondar-mandir dan sulit bermain dengan tenang'),
('G11','Bicara berlebihan'),
('G12','Sering menghentak-hentakkan kaki ketika duduk diam'),
('G13','Sering mengganggu anak-anak lain'),
('G14','Mengalami kesulitan menunggu gilirannya (tidak sabaran)'),
('G15','Sering mengambil mainan teman dengan paksa'),
('G16','Reaktif, sering merespon kembali apa yang dilakukan kepadanya'),
('G17','Sering mengulangi kata-kata yang diucapkan teman'),
('G18','Sering bertindak kasar dengan teman sebaya'),
('G19','Sikap menantang dan membangkang'),
('G20','Sering melanggar peraturan, bahkan peraturan yang sederhana'),
('G21','Selalu bermasalah dengan orang- orang yang memiliki otoritas'),
('G22','Mudah merasa terganggu, mudah marah'),
('G23','Terlihat sangat pemalu dan menarik diri'),
('G24','Mainan sering tertinggal'),
('G25','Mudah beralih perhatian (terutamarangsang suara)'),
('G26','Cenderung tidak mendengarkan ketika seseorang berbicara'),
('G27','Memiliki masalah dalam hal mengatur tugas / kegiatan sehari- hari'),
('G28','Sulit mengikuti petunjuk guru dan orang tua'),
('G29','Sulit menyelesaikan tugas atau kegiatan yang diberikan guru atau orang tua'),
('G30','Seringkali lupa dengan kebiasaan dan kegiatan sehari-hari'),
('G31','Selalu bergerak, seperti berjalan atau memanjat'),
('G32','Sering menggeliat'),
('G33','Sering membuat gaduh suasana'),
('G34','Selalu ingin memegang benda yang dilihat'); 

4.2. Membuat Data Tabel Problems

Data-data mengenai penyakit/masalah disimpan dalam tabel ds_problems. Atribut-atribut yang disimpan diantaranya adalah id,code (optional),name, dan notes(optional. Selain itu bisa juga ditambahkan atribut-atribut lain semisal saran tindakan, cara pengobatan dan lain sebagainya. Struktur tabelnya kurang lebih adalah sebagai berikut :

DROP TABLE IF EXISTS ds_problems;
CREATE TABLE IF NOT EXISTS ds_problems(
	id INT AUTO_INCREMENT,
	code VARCHAR(3),
	name VARCHAR(30),
	notes TEXT,
	PRIMARY KEY (id)
) ENGINE=MyISAM CHARSET=utf8;

Data-data penyakit pada Tabel 2.2 dapat dimasukkan ke dalam tabel ds_problems dengan query SQL sebagai berikut :

INSERT INTO ds_problems(code,name,notes)
VALUES
('P1','Inatentif','Anak-anak yang masalah utamanya adalah rendahnya konsentrasi dan kurangnya kemampuan untuk memusatkan perhatian.'),
('P2','Hiperaktif','Anak-anak yang masalahnya terutama diakibatkan oleh perilaku yang tidak bisa diam.'),
('P3','Impulsif','Anak-anak yang mengalami kesulitan untuk menunda respon (dorongan untuk mengatakan sesuatu/melakukan sesuatu dengan tidak sabar) dan selalu terburu-buru.'); 

4.3. Membuat Data Tabel Rules

Tabel ds_rules merupakan representasi dari data-data basis pengetahuan gejala penyakit. Tabel ini adalah tabel relasi antara entitas gejala (evidence ) dengan entitas penyakit (problem), dengan tambahan atribut certainly factor(cf) yang menunjukkan nilai tingkat kepercayaannya. Struktur tabelnya adalah sebagai berikut :

DROP TABLE IF EXISTS ds_rules;
CREATE TABLE IF NOT EXISTS ds_rules(
	id_problem INT,
	id_evidence INT,
	cf float
) ENGINE=MyISAM CHARSET=utf8;

Berdasarkan daftar gejala penyakit ADHD serta nilai belief masing- masing gejala terhadap penyakit Tabel 2.3 dapat dimasukkan data-data tersebut dalam tabel ds_rules seperti berikut ini:

INSERT INTO ds_rules(id_problem,id_evidence,cf)
VALUES
('1','1','0.3'),
('2','1','0.3'),
('3','1','0.3'),
('1','2','0.3'),
('2','2','0.3'),
('3','2','0.3'),
('1','3','0.3'),
('2','3','0.3'),
('3','3','0.3'),
('1','4','0.6'),
('2','4','0.6'),
('1','5','0.6'),
('2','5','0.6'),
('1','6','0.6'),
('2','6','0.6'),
('3','6','0.6'),
('1','7','0.6'),
('2','7','0.6'),
('1','8','0.6'),
('1','9','0.6'),
('3','9','0.6'),
('2','10','0.7'),
('2','11','0.6'),
('3','11','0.6'),
('2','12','0.6'),
('3','12','0.6'),
('2','13','0.6'),
('3','13','0.6'),
('3','14','0.85'),
('3','15','0.4'),
('3','16','0.85'),
('3','17','0.75'),
('3','18','0.9'),
('3','19','0.9'),
('3','20','0.75'),
('2','21','0.6'),
('3','21','0.6'),
('1','22','0.6'),
('3','22','0.6'),
('1','23','0.6'),
('3','23','0.6'),
('1','24','0.7'),
('1','25','0.85'),
('1','26','0.9'),
('1','27','0.35'),
('1','28','0.6'),
('1','29','0.75'),
('1','30','0.95'),
('2','31','0.95'),
('2','32','0.45'),
('2','33','0.8'),
('2','34','0.9'); 

4.4. Koneksi ke Database Server

Dari databse yang sudah dibuat, kita bisa membuat script php untuk membuat koneksi ke database server dengan extension mysqli secara sederhana sebagai berikut:

<?php
//-- database configurations
$dbhost='localhost';
$dbuser='root';
$dbpass='';
$dbname='db_expert';
//-- database connections
$db=new mysqli($dbhost,$dbuser,$dbpass,$dbname);
//-- halt and show error message if connection fail
if ($db->connect_error) {
	die('Connect Error ('.$db->connect_errno.')'.$db->connect_error);
}
?>

5.1 Menampilkan Daftar Gejala

Sebagai tampilan awal dari aplikasi yang akan dibuat adalah berupa daftar input pilihan gejala. Karena dimungkinkan untuk memilih lebih dari satu gejala, maka jenis inputan yang cocok adalah berupa inputan checkbox (dalam HTML dengan sintak tag/element <input type='checkbox'>) -- dan sebagai alternatif lain bisa juga digunakan input <select> dengan menggunakan atribut multiple sehingga bisa dipilih lebih dari satu pilihan.

Pertama : query data semua gejala dari tabel ds_evidences, kemudian data yang diperoleh di-fetching dalam kalang(loop) while{} untuk ditampilkan semuanya. Scriptnya adalah sebagai berikut:

<form method="post">
<?php
//-- menampilkan daftar gejala
$sql="SELECT * FROM ds_evidences";
$result=$db->query($sql);
while($row=$result->fetch_object()){
	echo "<input type='checkbox' name='evidence[]' value='{$row->id}'> {$row->code} {$row->name}<br>";
}
?>
<input type="submit" value="proses">
</form>

Pada tag/element <input type='checkbox'> tersebut nilai atribute name-nya adalah 'evidence[]' sehingga memungkinkan untuk mengirimkan nilai dari beberapa checkbox (multiple value). Nilai tersebut akan dikirim berupa array. Yang perlu sedikit diperhatikan adalah karakteristik dari tag/element <input type='checkbox'> yang hanya akan mengirim nilainya jika dalam kondisi ter-check.

5.2. Mengambil Nilai Gejala yang Dipilih

Pada saat form tersebut disubmit dengan menekan tombol proses maka data akan dikirim dengan HTTP POST method pada halaman itu sendiri (karena tidak dispesifikasikan nilai dari atribut action pada tag <form>-nya). Untuk mengambil nilai yang dikirimkan tersebut digunakan variable $_POST, sebagai berikut :

<?php
if(isset($_POST['evidence'])){
	if(count($_POST['evidence'])<2){
		echo "Pilih minimal 2 gejala";
	}else{
		$sql = "SELECT GROUP_CONCAT(b.code), a.cf
			FROM ds_rules a
			JOIN ds_problems b ON a.id_problem=b.id
			WHERE a.id_evidence IN(".implode(',',$_POST['evidence']).") 
			GROUP BY a.id_evidence";
		$result=$db->query($sql);
		$evidence=array();
		while($row=$result->fetch_row()){
			$evidence[]=$row;
		}
		//-- masukkan kode perhitungannya di sini
	}
}

Sebelum proses berlanjut di cek dahulu apakah ada nilai gejala yang diterima dengan if(isset($_POST['evidence')), jika tidak ada maka abaikan, sedangkan jika ada di cek kembali apakah jumlah gejala yang dikirimkan kurang dari 2 (if(count($_POST['evidence'])<2) ) maka tampilkan notifikasi/pemberitahuan untuk memilih 2 atau lebih gejala. Jika yang diterima ada 2 atau lebih gejala maka dapatkan list densitas awalnya dengan query seperti pada script di atas, kemudian masukkan nilainya ke dalam variabel array $evidence

Pada bagian yang bertuliskan:
//-- masukkan kode perhitungannya di sini
diisi dengan perintah-perintah yang akan dijelaskan pada bagian-bagian lain berikut ini.

5.3. Menentukan Environment

Sebelum menuju ke proses perhitungan berikutnya, ditentukan dahulu semesta pembicaraan (frame of discernment FOD) atau environment-nya sebagai berikut:

//--- menentukan environement
$sql="SELECT GROUP_CONCAT(code) FROM ds_problems";
$result=$db->query($sql);
$row=$resul->fecth_row();
$fod=$row[0];

Dengan menggunakan fungsi GROUP_CONCAT() maka nilai dari field code akan ditampilkan dalam bentuk serialized string dengan koma (,) sebagai pemisah antar code tersebut. (dalam contoh aplikasi ini akan menjadi 'P1,P2,P3'), sehingga nilai dari variable $fod adalah merupakan environment dari sistem aplikasi sistem pakar ini.

5.4. Menentukan Nilai Densitas

Inti dari aplikasi ini adalah dalam perhitungan untuk menentukan nilai densitas dari beberapa evidence yang diberikan. Dalam proesnya, dari setiap gejala yang diberikan akan dihitung satu per satu untuk densitasnya sampai semuanya habis diperhitungkan. Jika gejala yang pertama ada densitas ke-1 dan gejala kedua adalah densitas ke-2, maka dari perhitungan akan didapatkan densitas ke-3. Jika ada gejala ketiga maka akan dijadikan sebagai densitas ke-4 yang akan diperhitungkan dengan densitas ke-3 dari hasil sebelumnya untuk mendapatkan densitas baru yaitu densitas ke-5; demikian seterusnya sampai semua gejala yang diterima diperhitungkan. Dengan kata lain jika ada N buah gejala yang diberikan, maka hasilnya adalah densitas ke N+1.

Data gejala yang diterima ($evidence) akan diambil satu demi satu dengan fungsi array_shift() dalam kalang(loop) while() selama $evidence tersebut masih ada (!empty($evidence)). Gejala yang muncul, sesuai urutan akan dimasukkan ke dalam variabel $evidence[0], sedangkan plausability-nya dimasukkan ke variabel evidence[1]

Jika belum ada hasil perhitungan densitas sebelumnya (empty($densitas_baru)) maka gejala berikutnya (yang kedua) dimasukkan ke dalam $densitas2[0] sebagai densitas kedua; sedangkan jika sudah ada maka semua hasil perhitungan sebelumnya kecuali yang ber-index/key "&theta;" dimasukkan ke variabel array $densitas2 sebagai item array baru yang merepresentasikan suatu densitas baru

Selanjutnya menghitung nilai plausability dari densitas baru tersebut ($theta); yaitu 1 dikurangi jumlah total nilai kemungkinan dari masing-masing elemen densitas baru itu. Caranya dengan pertama-tama meng-inisialisai variable $theta=1; dan dilakukan pengurangan nilai kemungkinan masing-masing elemen densitas yang baru dengan perintah foreach($densitas2 as $d) $theta-=$d[1];. Hasilnya dimasukkan dalam item array baru dari variable array $densitas2.

//--- menentukan nilai densitas
$densitas_baru=array();
while(!empty($evidence)){
	$densitas1[0]=array_shift($evidence);
	$densitas1[1]=array($fod,1-$densitas1[0][1]);
	$densitas2=array();
	if(empty($densitas_baru)){
		$densitas2[0]=array_shift($evidence);
	}else{
		foreach($densitas_baru as $k=>$r){
			if($k!="&theta;"){
				$densitas2[]=array($k,$r);
			}
		}
	}
	$theta=1;
	foreach($densitas2 as $d) $theta-=$d[1];
	$densitas2[]=array($fod,$theta);
	$m=count($densitas2);
	$densitas_baru=array();
	for($y=0;$y<$m;$y++){
		for($x=0;$x<2;$x++){
			if(!($y==$m-1 && $x==1)){
				$v=explode(',',$densitas1[$x][0]);
				$w=explode(',',$densitas2[$y][0]);
				sort($v);
				sort($w);
				$vw=array_intersect($v,$w);
				if(empty($vw)){
					$k="&theta;";
				}else{
					$k=implode(',',$vw);
				}
				if(!isset($densitas_baru[$k])){
					$densitas_baru[$k]=$densitas1[$x][1]*$densitas2[$y][1];
				}else{
					$densitas_baru[$k]+=$densitas1[$x][1]*$densitas2[$y][1];
				}
			}
		}
	}
	foreach($densitas_baru as $k=>$d){
		if($k!="&theta;"){
			$densitas_baru[$k]=$d/(1-(isset($densitas_baru["&theta;"])?$densitas_baru["&theta;"]:0));
		}
	}
	print_r($densitas_baru);
}

Proses selanjunya adalah menghitung jumlah iterasi, sesuai jumlah item array dari densitas yang baru dengan kode $m=count($densitas2);. Dalam kalang -- loopfor() dua dimensi dilakukan perhitungan untuk mendapatkan densitas yang baru.

Karena hasil perkalian antara nilai kemungkinan dari plausability dari densitas yang pertama dan kedua tidak diperhitungkan, maka dibatasi dengan if(!($y==$m-1 && $x==1)) perhitungan densitas yang baru dilakukan. Tiap elemen dari $densitas1 dan $densitas2 dikalikan nilai kemungkinannya, dan index/key-nya merupakan irisan --intersect dari kode penyakitnya (dalam hal ini memakai fungsi array_intersect()).

Dan akhirnya berdasarkan persamaan Dempster's Rule of Combination [DST-06] dihitung masing-masing nilai kemungkinan dari tiap elemen dari densitas yang baru tersebut

5.5. Perangkingan

Pada proses perangkingan ini, pertama-tama hilangkan hasil sebelumnya yang mempunyai key/index="&theta;" dengan memakai kode unset($densitas_baru["&theta;"]);. Selanjunya data tersebut diurutkan dengan tetap mempertahankan associative keys-nya dengan pengurutan secara terbalik (reverse -- dari besar ke kecil) menggunakan fungsi arsort.

//--- perangkingan
unset($densitas_baru["&theta;"]);
arsort($densitas_baru);
print_r($densitas_baru);

Perintah print_r($densitas_baru); digunakan untuk menampilkan hasil perhitungan terakhir yang sudah terurut dari yang terbesar nilainya hingga yang terkecil nilainya

5.6. Menampilkan Hasil Akhir

Hasil akhir dari perhitungan ini adalah penyakit(atau beberapa penyakit) dengan nilai derajat kemungkinannya yang tertinggi. Hasil dari proses perangkingan sebelumnya adalah berupa array associative, dengan key-nya berupa kode penyakit dan nilai array-nya adalah nilai derajat kemungkinannya. Untuk mendapatkan key dari array tersebut maka digunakan fungsi array_keys(). Data daftar key (atau kode penyakit) tersebut kemudian dimasukkan ke dalam variable $codes.

//--- menampilkan hasil akhir
$codes=array_keys($densitas_baru);
$sql="SELECT GROUP_CONCAT(name) 
	FROM ds_problems 
	WHERE code IN('{$codes[0]}')";
$result=$db->query($sql);
$row=$result->fetch_row();
echo "Terdeteksi penyakit <b>{$row[0]}</b> dengan derajat kepercayaan ".round($densitas_baru[$codes[0]]*100,2)."%";

Dengan menggunakan query SQL seperti pada script di atas, diambil nama (atau beberapa nama) penyakit yang codenya ada di $code[0] (kode penyakit dengan nilai kemungkinan tertinggi), untuk kemudian ditampilkan $row[0] beserta nilai kemungkinannya dalam prosentase (dikali 100, dibulatkan 2 angka dibelakang koma dengan fungsi round()).

Source code selengkapnya bisa dilihat di [ tautan ini]

DAFTAR GEJALA

  Selalu bermasalah dengan orang- orang yang memiliki otoritas
  Sulit untuk disiplin
  Sering mengambil mainan teman dengan paksa
  Bicara berlebihan
  Menjawab tanpa berpikir,sementara pertanyaan belum selesai
  Sering membuat gaduh suasana
  Mengalami kecemasan pada situasi baru atau yang tidak familiar
  Terlihat sangat pemalu dan menarik diri
  Sering mengulangi kata-kata yang diucapkan teman
  Mudah merasa terganggu, mudah marah
  Sering menghentak-hentakkan kaki ketika duduk diam
  Reaktif, sering merespon kembali apa yang dilakukan kepadanya
  Selalu ingin memegang benda yang dilihat
  Sering melanggar peraturan, bahkan peraturan yang sederhana
  Mudah beralih perhatian (terutamarangsang suara)
  Mengalami kesulitan menunggu gilirannya (tidak sabaran)
  Sikap menantang dan membangkang
  Seringkali lupa dengan kebiasaan dan kegiatan sehari-hari
  Cenderung tidak mendengarkan ketika seseorang berbicara
  Mainan sering tertinggal
  Memiliki kecenderungan untuk melamun
  Sulit menyelesaikan tugas atau kegiatan yang diberikan guru atau orang tua
  Memiliki masalah dalam hal mengatur tugas / kegiatan sehari- hari
  Menghindari atau tidak menyukai kegiatan yang membutuhkan usaha berkesinambungan, contohnya duduk diam
  Sering merasa rendah diri dan tidak percaya diri
  Hanya memiliki sedikit teman
  Selalu bergerak, seperti berjalan atau memanjat
  Apabila bermain, lebih sering mondar-mandir dan sulit bermain dengan tenang
  Sering menggeliat
  Banyak merasa khawatir dan takut
  Sangat sensitif terhadap kritikan
  Sering mengganggu anak-anak lain
  Sulit mengikuti petunjuk guru dan orang tua
  Sering bertindak kasar dengan teman sebaya
Referensi: American Psychiatric Association DSM-IV TR (1994)

Dan seandainya pohon-pohon di bumi menjadi pena dan laut (menjadi tinta), ditambahkan kepadanya tujuh laut (lagi) sesudah (kering)nya, niscaya tidak akan habis-habisnya (dituliskan) kalimat Allah. Sesungguhnya Allah Maha Perkasa lagi Maha Bijaksana.

QS Al Luqman (31) : 27

  • American Psychiatric Association (1994). Diagnostic And Statistical Manual Of Mental Disorders (4th editon text revision) / DSM IV-TR. pp. 78-85
  • Dempster, A. P. (1967). Upper and lower probabilities induced by a multivalued mapping. The Annals of Mathematical Statistics. 38 (2): 325–339.
  • Dempster, Arthur P.(1968) A generalization of Bayesian inference, Journal of the Royal Statistical Society, Series B, Vol. 30, pp. 205–247
  • Giarratano,Joseph C.;Riley, Gary D. (1989) Expert Systems: Principles and Programming, Fourth Edition
  • Kusrini (2006). Sistem Pakar Teori dan Aplikasi. Yogyakarta: Andi
  • Kusrini (2008). Aplikasi Sistem Pakar. Yogyakarta: Andi
  • Putra, Eka Ramian. (2013) Sistem Pakar Dengan Menggunakan Metode Dempster Shafer Untuk Mendeteksi Jenis Perilaku Abnormal ADHD (Attention Deficit Hyperactivity Disorder) Pada Anak
  • Shafer, Glenn (1976). A Mathematical Theory of Evidence. Princeton University Press, ISBN 0-608-02508-9
  • Shafer, Glenn. (2002) Dempster–Shafer theory