Minggu, 30 Maret 2014

SPK Menggunakan PHP


Penerapan Metode Sistem Pendukung Keputusan SAW

Metode sistem pendukung keputusan SAW (Simple additive Weighting) merupakan salah satu metode Sistem Pendukung Keputusan yang menggunakan konsep penjumlahan terbobot.

Penerapan Metode Sistem Pendukung Keputusan SAW dengan PHP
Proses dari metode Simple additive weighting :
  1. Siapkan terlebih dahulu data yang disimpan dalam Matrik Data.
  2. Lakukan Normalisasi Matrik Data dengan formula :
    Normalisasi Matrik SAW
    Normalisasi Matrik SAW
  3. Lakukan perangkingan dengan Formula
    1
    Vi = (rij * wi) + (rij * wi) + .. (rxx * wx)
Sebagai bahan Penerapan Metode SAW, berikut contoh kasus yang melakukan perhitungan dengan PHP.
Suatu Institusi Perguruan tinggi akan memilih seorang karyawan untuk dipromosikan sebagai kepala unit Sistem Informasi.
Ada empat kriteria yang digunakan untuk melakukan penilaian yaitu :
  1. C1  = Tes Pengetahuan (Wawasan) Sistem Informasi.
  2. C2 = Praktik Insatalasi Jaringan
  3. C3 = Tes Kepripadian
  4. C4 = Tes Pengetahuan Agama.
Pengambil keputusan memberikan bobot untuk setiap kriteria sebagai berikut: C1 = 35%; C2 = 25%; C3 = 25%; dan C4 = 15%.

Ada enam orang karyawan yang menjadi kandidat (alternatif) untuk dipromosikan sebagai kepala unit, yaitu:
  1. A1 = Indra
  2. A2 = Roni,
  3. A3 = Putri,
  4. A4 = Dani,
  5. A5 = Ratna, dan
  6. A6 = Mira.
Data diatas sekarang kita rubah ke dalam database, buat database kira2 seperti ini :
tbcalon :
Tabel Calon Sistem Pendukung Keputusan
Tabel Calon Sistem Pendukung Keputusan
Selanjutnya kita buat tabel untuk menyimpan matrik, misal tbmatrik :
Tabel Matrik Sistem Pendukung Keputusan
Tabel Matrik Sistem Pendukung Keputusan
Setelah keduanya dibuat, silahkan isi data sehingga terbentuk data seperti ini :
tbcalon :
Data Calon SPK
Data Calon SPK
dan data Matrik :
Data Matrik Calon SPK
Data Matrik Calon SPK
Langkah-langkah perhitungan sistem pendukung keputusan dengan php :
Lakukan Langkah ke 2, yakni normalisasi :

























//Lakukan Normalisasi dengan rumus pada langkah 2
    //Cari Max atau min dari tiap kolom Matrik
    $crMax = mysql_query("SELECT max(Kriteria1) as maxK1,
                        max(Kriteria2) as maxK2,
                        max(Kriteria3) as maxK3,
                        max(Kriteria4) as maxK4
            FROM tbmatrik");
    $max = mysql_fetch_array($crMax);
    //Hitung Normalisasi tiap Elemen
    $sql2 = mysql_query("SELECT * FROM tbmatrik");
    //Buat tabel untuk menampilkan hasil
    echo "<H3>Matrik Normalisasi</H3>
    <table width=500 style='border:1px; #ddd; solid; border-collapse:collapse' border=1>
        <tr>
            <td>No</td><td>Nama</td><td>C1</td><td>C2</td><td>C3</td><td>C4</td>
        </tr>
        ";
    $no = 1;
    while ($dt2 = mysql_fetch_array($sql2)) {
        echo "<tr>
            <td>$no</td><td>".getNama($dt2['idCalon'])."</td><td>".round($dt2['Kriteria1']/$max['maxK1'],2)."</td><td>".round($dt2['Kriteria2']/$max['maxK2'],2)."</td><td>".round($dt2['Kriteria3']/$max['maxK3'],2)."</td><td>".round($dt2['Kriteria4']/$max['maxK4'],2)."</td>
        </tr>";
    $no++;
    }
    echo "</table>";
Selanjutnya lakukan Perangkingan :























//Proses perangkingan dengan rumus langkah 3
    $sql3 = mysql_query("SELECT * FROM tbmatrik");
    //Buat tabel untuk menampilkan hasil
    echo "<H3>Perangkingan</H3>
    <table width=500 style='border:1px; #ddd; solid; border-collapse:collapse' border=1>
        <tr>
            <td>No</td><td>Nama</td><td>Rangking</td>
        </tr>
        ";
    $no = 1;
    //Kita gunakan rumus (Normalisasi x bobot)
    while ($dt3 = mysql_fetch_array($sql3)) {
        echo "<tr>
            <td>$no</td><td>".getNama($dt3['idCalon'])."</td>
            <td>"
            .round((($dt3['Kriteria1']/$max['maxK1'])*$bobot[0])+
            (($dt3['Kriteria2']/$max['maxK2'])*$bobot[1])+
            (($dt3['Kriteria3']/$max['maxK3'])*$bobot[2])+
            (($dt3['Kriteria4']/$max['maxK4'])*$bobot[3]),2)."</td>
        </tr>";
    $no++;
    }
    echo "</table>";
Selesai, berikut adalah perhitungan sistem pendukung keputusan dengan PHP :
Hasil Sistem Pendukung Keputusan
Hasil Sistem Pendukung Keputusan

SPK Menggunakan Metode WP


Metode WP (Weigted Product) merupakan salah satu metode sistem pendukung keputusan, dimana perkalian digunakan untuk menghubungkan rating atribut, dan rating setiap atribut harus dipangkatkan dulu dengan bobot atribut yang bersangkutan. Untuk Lebih jelasnya berikut ini adalah algoritma metode weighted product :
  • Persiapkan terlebih dahulu bobot dan lakukan perbaikan bobot dengan :
    W j = Wj / ∑Wj
  • Normalisasi matriks X berdasarkan persamaan Normalisasi Matrik Metode WP
    sehingga diperoleh matriks ternormalisasi S.
  • wj adalah pangkat bernilai positif untuk atribut keuntungan, dan bernilai negatif untuk atribut biaya.
  • Lakukan perangkingan dengan menggunakan persamaan :
    Perangkingan WP.
Menghitung metode Weighted product dengan PHP.
Data Matrix calo kepala unit sistem informasi :
Data Matrik Metode Weighted Product
Data Matrik Metode Weighted Product
Bobot (w) :
W 0.35 0.25 0.25 0.15
Tahap melakukan perhitungan metode WP dengan PHP :
  1. Lakukan perbaikan bobot :

     
     









    $bobot = array(0.35, 0.25, 0.25, 0.15);
    $jumBobot = array_sum($bobot);
    echo "<h3>Bobot Awal</h3>";
    echo "<table border=1 style='border-collapse:collapse; border:solid 1px #000' width=300><tr><td>Bobot (w)</td>";
    for($i=0; $i<4; $i++)
        echo "<td>$bobot[$i]</td>";
    echo "</tr></table>";  
    //Perbaikan bobot
    //Simpan di array newBobot
    $newBobot = array();
    echo "<h3>Bobot Baru</h3>";
    echo "<table border=1 style='border-collapse:collapse; border:solid 1px #000' width=300><tr><td>Bobot (W new)</td>";
    for($i=0; $i<4; $i++){
        $newBobot[$i] = $bobot[$i] / $jumBobot;
        echo "<td>$newBobot[$i]</td>";
    }
    echo "</tr></table>"
     
  2. Normalisasi Matrix























    //Lakukan Normalisasi dengan rumus pada langkah 2
    //Hitung Normalisasi tiap Elemen
    $sql2 = mysql_query("SELECT * FROM tbmatrik");
    //Buat tabel untuk menampilkan hasil
    echo "<H3>Matrik Normalisasi</H3>
    <table width=300 style='border:1px; #ddd; solid; border-collapse:collapse' border=1>
        <tr>
            <td>No</td><td>Nama</td><td>Nilai S</td>
        </tr>
    ";
    $no = 1;
    $i = 0;
    //Buat variabel S array
    $normS = array();
    while ($dt2 = mysql_fetch_array($sql2)) {
    //Hitung S per baris
        $normS[$i] = pow($dt2['Kriteria1'], $newBobot[0]) * pow($dt2['Kriteria2'], $newBobot[1]) * pow($dt2['Kriteria3'], $newBobot[2]) * pow($dt2['Kriteria4'], $newBobot[3]);
        echo "<tr>
            <td>$no</td><td>".getNama($dt2['idCalon'])."</td><td>".round($normS[$i],2)."</td>
        </tr>";
    $no++;
    $i++;
    }
    echo "</table>";
     
  3. Lakukan Perangkingan 






















    //Proses perangkingan dengan rumus langkah 3
    //Jumlahkan Terlebih dahulu nilai S
    $jums = round(array_sum($normS),2);
    $sql3 = mysql_query("SELECT * FROM tbmatrik");
    //Buat tabel untuk menampilkan hasil
    echo "<H3>Perangkingan</H3>
    Nilai Sum S = $jums
    <table width=300 style='border:1px; #ddd; solid; border-collapse:collapse' border=1>
        <tr>
            <td>No</td><td>Nama</td><td>Rangking</td>
        </tr>
    ";
    $no = 1;
    $i=0;
    //Kita gunakan rumus (s/ sum(s))
    while ($dt3 = mysql_fetch_array($sql3)) {
        echo "<tr>
            <td>$no</td><td>".getNama($dt3['idCalon'])."</td>
            <td>"
            .round($normS[$i]/ $jums,2)."</td>
        </tr>";
    $no++;
    $i++;
    }
    echo "</table>";
Berikut adalah hasil dari source code sistem pendukung keputusan Weighted Product :
Hasil SPK Metode WP
Hasil SPK Metode WP

Minggu, 09 Maret 2014

SPK Menggunakan Metode SAW

SAW adalah Simple Additive Weighting. Dalam hal pengambilan keputusan, metode SAW cukup populer. SAW merupakan metode penjumlahan terbobot suatu alternatif dari beberapa atribut (kriteria) yang didalamnya terdapat proses normalisasi dengan hasil akhir urutan alternatif yang paling disarankan berdasar algoritma metode tersebut.
Ada beberapa langkah untuk mengerjakan pemecahan pengambilan keputusan dari suatu set alternatif dengan beberapa kriteria menggunakan metode SAW. Sesuai dengan algoritma yang ada dari berbagai sumber, sebagai berikut:
1. Menentukan nilai kriteria Cj pada suatu set alternatif Ai. Beserta bobot preferensi (Wj) setiap kriteria Cj
2. Menghitung Rij dengan formula normalisasi sehingga mendapat matrik ternormaisasi.
Rij = Cij / Max(Cij) → jika j adalah atribut / kriteria benefit (untung = nilai lebih besar lebih dipilih)
Rij = Min(Cij) / Cij → jika j adalah atribut / kriteria cost (biaya = nilai lebih kecili lebih dipilih)
3. Menghitung nilai preferensi Vi, lalu mengurutkan dari yang terbesar.

Vi merupakan hasil akhir metode SAW, dengan nilai yang terbesar merupakan alternatif yang disarankan
Wj merupakan bobot preferensi untuk setiap kriteria Cj
Rij merupakan hasil normalisasi
Berikut script dari perhitungan tersebut:
Contoh kasus:
Terdapat 3 alternatif dan 5 kriteria sebagai berikut:
Dengan bobot preferensi: PPKN (30), IPA (25), IPS (20), SENI (10), KOMPUTER (15)


script:
<?php
//variabel jml alternatif
$jml = 3;
//variabel nama alternatif (sesuai urutan soal)
$a = array(‘ANDI’,'BOBI’,'CIAN’);
//variabel jml kriteria
$jk = 5;
//variabel nama kriteria
$k = array(‘PPKN’,'IPA’,'IPS’,'SENI’,'KOMPUTER’);
//variabel bobot kriteria (sesuai urutas soal: PPKN – IPA – IPS – SENI – KOMPUTER)
$w = array(’30′,’25′,’20′,’10′,’15′);
//variabel skor kriteria (sesuia urutan nama pd soal: ANDI – BOBI – CIAN )
$k1 = array(’80′,’70′,’60′); //PPKN
$k2 = array(’64′,’75′,’90′); //IPA
$k3 = array(’78′,’90′,’86′); //IPS
$k4 = array(’89′,’67′,’65′); //SENI
$k5 = array(’85′,’90′,’70′); //KOMPUTER
//pemasangan alternatif terhadap kriteria
$j=1;
for ($i=0; $i < $jml; $i++) {
$alt[$j][1] = $k1[$i]; //kriteria1 utk alternatif ke-i
$alt[$j][2] = $k2[$i]; //kriteria2 utk alternatif ke-i
$alt[$j][3] = $k3[$i]; //kriteria3 utk alternatif ke-i
$alt[$j][4] = $k4[$i]; //kriteria3 utk alternatif ke-i
$alt[$j][5] = $k5[$i]; //kriteria3 utk alternatif ke-i
$alt[$j][6] = $a[$i]; //nama alternatif ke-i
$j++;
}
//Contoh untuk program ini SEMUA Kriteria berkaidah MAX ,,
//untuk kaidah MIN/MAX sesuaikan rumus, diprogram PERLU menambahkan kode kondisi kriteria sesuai kaidah
//Mencari Max pada setiap set nilai kriteria dari semua alternatif.
//Contoh pada set kriteria PPKN nilai max adl 80.
$max[0] = max($k1); //PPKN
$max[1] = max($k2); //IPA
$max[2] = max($k3); //IPS
$max[3] = max($k4); //SENI
$max[4] = max($k5); //KOMPUTER
echo ‘<br><fieldset><legend><h2>Perhitungan SAW</h2></legend>’;
echo ‘<h3>Hasil Perhitungan</h3>’;
echo ‘Tabel Bobot Kriteria SAW’;
echo ‘<table border=1 bordercolor=silver cellspacing=0 cellpadding=5>
<tr bgcolor=#779999>’;
for ($i=0; $i < $jk; $i++){
echo “<th>$k[$i]</th>”;
}
echo “</tr><tr>”;
for ($i=0; $i < $jk; $i++){
echo “<td>$w[$i]</td>”;
}
echo “</tr></table></br>”;
echo ‘Tabel Hitungan Normalisasi SAW’;
echo ‘<table border=1 bordercolor=silver cellspacing=0 cellpadding=5>
<tr bgcolor=#779999><th>No</th><th>Nama</th>’;
for ($i=0; $i < $jk; $i++){
echo “<th>$k[$i]</th>”;
}
echo ‘</tr><tr>’;
//tahap normalisasi
//dari alternatif 1 s.d 3
for ($i=1; $i <= $jml; $i++){
echo “<td>$i</td><td>”.$alt[$i][6].”</td>”;
//$V[$i] = 0;
// dari kriteria 1 s.d 5
for ($k=1; $k <= $jk; $k++){
$R[$i][$k] = $alt[$i][$k]/$max[$k-1]; //formula untuk kaidah MAX
echo “<td>”.round($R[$i][$k],5).”</td>”; //hasil pembulatan 5 angka dibelakan koma
}
echo ‘</tr>’;
}
echo ‘</table><br>’;
//tahap hitung V
for ($i=1; $i <= $jml; $i++){ //loop sebanyak alternatif
$V = 0;
for ($k=1; $k <= $jk; $k++){ //loop sebanyak kriteria
$V = $V + $R[$i][$k]*$w[$k-1]; //hasil Vi, didapat dari jumlah perkalian antara Wj dengan Rij
//echo $V.’<br>’;
}
$Vi[$i] = $V; //simpan hasil V dlm array sesuai alternatif
}
for ($i=1; $i <= $jml; $i++){
$nama[$i] = $alt[$i][6]; //menyimpan varibel nama alternatif ke single array
}
echo ‘Tabel Urutan Akhir SAW’;
echo ‘<table border=1 bordercolor=silver cellspacing=0 cellpadding=5>
<tr bgcolor=#779999><th>No</th><th>Nama</th><th>Nilai V</th></tr>’;
//tahap pengurutan hasil
$jvi = array_combine($nama, $Vi); //menggabungkan array nama dg array Vi
//print_r($jvi);
arsort($jvi); //mengurutkan berdasarkan Vi terbesar
$n = 0;
foreach ($jvi as $x => $val){ //untuk setiap $x = nama dan $val = Vi
$n = $n+1; $vsaw=round($val,5);
echo ‘<tr>’;
echo “<td>$n</td><td>”.$x.”</td>”;
echo “<td>”.$vsaw.”</td>”;
echo ‘</tr>’;
}
echo ‘</table><br></fieldset>’;
?>