Source Code Perhitungan SPK Metode AHP dengan PHP - Kali ini saya akan berbagi source code perhitungan ahp dengan php. Saya buatkan class dengan nama AHP, dimana dalam class tersebut terdapat beberapa fungsi diantaranya: get_row_total, normalize, get_priority, get_cm, dan get_consistency. Di contoh ini juga akan langsung ditampilkan hasil perhitungan dalam bentuk tabel seperti gambar berikut:
Langsung saja cek kodenya:
<?php
error_reporting(~E_NOTICE);
class AHP{
function get_row_total($matrix){
$arr = array();
foreach($matrix as $key => $val){
foreach($val as $k => $v){
$arr[$k]+=$v;
}
}
return $arr;
}
function normalize($matrix, $row_total){
$arr = array();
foreach($matrix as $key => $val){
foreach($val as $k => $v){
$arr[$key][$k] = $v / $row_total[$k];
}
}
return $arr;
}
function get_priority($normal){
$arr = array();
foreach($normal as $key => $val){
$arr[$key] = array_sum($val) / count($val);
}
return $arr;
}
function get_cm($matrix, $priority){
$arr = array();
foreach($matrix as $key => $val){
foreach($val as $k => $v){
$arr[$key]+=$v * $priority[$k];
}
}
foreach($arr as $key => $val){
$arr[$key] = $val/$priority[$key];
}
return $arr;
}
function get_consistency($cm){
$arr = array();
$sum = array_sum($cm);
$count = count($cm);
$arr['ci'] = (($sum / $count) - $count) / ($count - 1);
$nRI = array (
1=>0,
2=>0,
3=>0.58,
4=>0.9,
5=>1.12,
6=>1.24,
7=>1.32,
8=>1.41,
9=>1.46,
10=>1.49,
11=>1.51,
12=>1.48,
13=>1.56,
14=>1.57,
15=>1.59
);
$arr['ri'] = $nRI[count($cm)];
$arr['cr'] = $arr['ci'] / $arr['ri'];
$arr['consistency'] = $arr['cr']<=0.1 ? 'consistent' : 'inconsistent';
return $arr;
}
}
function display($arr, $echo = true){
$result = '<table border="1">';
foreach($arr as $key => $val){
$result.= '<tr>';
foreach($val as $k => $v){
$result.='<td>' . $v . '</td>';
}
$result.= '</tr>';
}
$result.= '</table>';
if($echo)
echo $result;
else
return $result;
}
$matrix = array(
array(1, 2, 3),
array(1/2, 1, 3),
array(1/3, 1/3, 1),
);
echo '<h3>Step 1</h3>';
$ahp = new AHP($matrix);
display($matrix);
echo '<h3>Step 2</h3>';
$row_total = $ahp->get_row_total($matrix);
display(array($row_total));
echo '<h3>Step 3</h3>';
$normal = $ahp->normalize($matrix, $row_total);
display($normal);
echo '<h3>Step 4</h3>';
$priority = $ahp->get_priority($normal);
display(array($priority));
echo '<h3>Step 5</h3>';
$cm = $ahp->get_cm($matrix, $priority);
display(array($cm));
echo '<h3>Step 5</h3>';
$consistency = $ahp->get_consistency($cm);
echo 'CI: ' . $consistency['ci'] . '<br />';
echo 'CI: ' . $consistency['ri'] . '<br />';
echo 'CR: ' . $consistency['cr'] . '<br />';
echo 'Consistency: ' . $consistency['consistency'] . '<br />';
?>Penjelasan Source Code
Untuk bisa memahami source code ini setidaknya temen-temen harus sudah tahu tentang ahp. Bila masih kurang jelas, silahkan baca contoh perhitungan spk metode ahp.
error reporting
Error reporting digunakan untuk mengatur jenis error apa saja yang ingin ditampilkan. Pada contoh di atas saya menggunakan ~e_notice yang artinya PHP hanya akan menampilkan error selain e_notice. e_notice biasanya muncul jika suatu variabel belum diinisialisasi.
get_row_total
get_row_total berfungsi untuk menghitung total setiap kolom matriks. Parameter yang dimasukkan berupa matriks nilai perbandingan AHP berupa array dua dimensi. Fungsi ini akan mengembalikan nilai berupa array satu dimensi.
normalize
normalize berfungsi untuk menormalisasikan matriks perbandingan AHP. Parameter yang dimasukkan adalah matriks (array dua dimensi) dan row_total (array satu dimensi). Fungsi ini akan menghasilkan array dua dimensi.
get_priority
get_priority berfungsi untuk mencari bobot prioritas atau rata-rata matriks yang sudah ternormalisasi. Parameter yang dimasukkan adalah normal (matriks dua dimensi). Fungsi ini akan mengembalikan nilai berupa array 1 dimensi.
get_cm
get_cm berfungsi untuk mencari consistency measure dalam AHP. Parameter yang dimasukkan adalah matrix (array dua dimensi) dan prioritas (array satu dimensi). Fungsi ini akan menghasilkan array satu dimensi.
get_consistency
get_consistency berfungsi untuk mencari konsistensi perbandingan AHP, dengan parameter cm (array dua dimensi). Selain konsistensi, fungsi ini akan mengembalikan nilai berupa array satu dimensi yang berisi ci (consistency index), ri (ratio index), cr (consistency ratio), dan consistncy.
Demikian penjelasan singkat dari source code perhitungan ahp di atas. Jika masih kurang jelas silahkan berikan komentar.

kalau kriterianya ditambah, jadinya matriksnya agar dinamis gimana ya?? matriks 3x3, 4x4, 5x5,..., nxn
ReplyDelete