Simple Multi Attribute Rating Technique (SMART)

Contoh implementasi DSS (Decision Support System) dengan metode SMART (Simple Multi Attribute Rating Technique) menggunakan PHP dan MySQL untuk pemilihan kelayakan bisnis

Metode Simple Multi Attribute Rating Technique atau yang biasa disingkat SMART merupakan metode dalam pengambilan keputusan multiatribut. Teknik pengambilan keputusan multi atribut ini digunakan untuk mendukung pembuat keputusan dalam memilih beberapa alternatif. Setiap pembuat keputusan harus memiliki sebuah alternatif yang sesuai dengan tujuan yang dirumuskan

[ author : cahya dsn, published on : April 5, 2018 updated on : December 30, 2018 ]

minerva minerva donasi donation

Mau lihat artikel lainya? Dapatkan artikel-artikel lain seputar pemrograman website di sini, dan dapatkan ide-ide baru
This document using Dynamic Content Technology for enrichment sample case and reading experience
  • Data yang digunakan BUKAN merupakan data real, tapi data yang digenerate secara otomatis dari sistem
  • Data dan Nilai Perhitungan yang ditampilkan akan SELALU BERBEDA jika halaman di refresh/reload
  • Nilai dari bobot masing-masing kriteria adalah acak/random
  • Jumlah dan Nama Usaha alternatif ditampilkan secara acak/random antara 4 s.d 8

2.1. Penentuan Kriteria

Dalam contoh kasus ini, untuk kriteria kelayakan usaha secara finansial yang diperhitungkan (Dewi and Yadnya 2013) adalah:

2.1.1. Net Present Value (NPV)

Merupakan metode yang dilakukan dengan cara membandingkan nilai sekarang dari aliran kas masuk bersih (proceeds) dengan nilai sekarang dari biaya pengeluaran suatu usaha (outlays). Persamaan yang digunakan adalah :

$NPV=\sum_{t=1}^{n}\frac{A_t}{(1-k)^t}$
.. [FIN-01]
Keterangan
  • $k$ : suku bunga (discount rate)
  • $A_t$ : aliran kas pada periode $t$
  • $n$ : periode yang terakhir dimana aliran kas diharapkan

Ketentuannya adalah jika NPV > 0 maka usaha layak dilanjutkan dan jika NPV < 0 maka usaha tidak layak dilanjutkan.

2.1.2. Payback Period (PP)

Merupakan metode yang digunakan untuk menghitung lama periode yang diperlukan untuk mengembalikan uang yang telah diusahakan dari aliran kas masuk. Persamaan yang digunakan untuk menghitung Payback Period sebagai berikut:

$PP=\frac{\text{usaha kas bersih}}{\text{aliran kas masuk bersih}}$
.. [FIN-02]

Kriteria penilaiannya adalah jika jika Payback Period suatu proyek lebih pendek dibanding dengan Payback Period maksimum maka usaha layak dipertahankan.

2.1.3. Average Rate of Return (ARR)

Merupakan cara untuk mengukur rata-rata pengembalian bunga dengan cara membandingkan antara rata-rata laba setelah pajak (EAT) dengan rata-rata usaha.

2.1.4. Internal Rate of Return (IRR)

Untuk menghitung tingkat bunga yang dapat menyamakan antara nilai sekarang dari semua aliran kas masuk dengan aliran kas keluar dari suatu usaha proyek. Persamaannya adalah sebagai berikut :

$IRR=P_1-C_1=\frac{P_2-P_1}{C_2-C_1}$
.. [FIN-03]
Keterangan
  • $P_1$ : tingkat bunga pertama
  • $P_2$ : tingkat bunga kedua
  • $C_1$ : $NPV$ ke-1
  • $C_2$ : $NPV$ ke-2

2.1.5. Profitability Index (PI)

Profitability Index dapat dicari dengan menghitung perbandingan antara nilai penerimaan kas bersih dimasa yang akan datang (proceeds) dengan nilai usaha sekarang (outlays). Persamaan yang digunakan adalah :

$PI=\frac{\text{Proceedss}}{\text{Outlays}}$
.. [FIN-04]

Jika PI > 1 maka usaha layak dilanjutkan, tapi jika PI < 1 maka usaha tidak layak dilanjutkan.

2.2. Contoh Data

Sebaga contoh data-data untuk masing-masing kriteria dari tiap alternatif adalah seperti dalam TABEL 1 berikut ini (data-data tersebut adalah BUKAN data real, data-data tersebut digenerate secara otomatis oleh sistem):

TABEL 1 : Contoh Data
AlternatifKriteria
KodeNamaC1C2C3C4C5
A1Toko Elektronik Persada201.2.11658.57.40.90
A2Percetakan Sejahtera302.2.99561.35.41.50
A3Toko Bangunan Jaya387.2.46536.31.31.30
A4Toko Mainan Nasional135.2.41453.44.41.60
A5Toko Kelontong Perkasa176.2.51523.47.71.00

2.3. Penentuan Bobot Kriteria

Memberikan bobot kriteria dengan nilai 1 s.d. 100 berdasarkan tingkat kepentingan kriteria. Nilai yang diberikan pada bobot kriteria ini berdasarkan pada penilaian pengambil keputusan (dalam hal ini nilainya digenerate secara otomatis oleh sistem), seperti yang ditunjukkan dalam TABEL 2 berikut :

TABEL 2 : Bobot Kriteria
KodeKriteriaBobot Kriteria (w'i)
C1NVP88
C2PP69
C3ARR42
C4IRR86
C5PI66

2.4. Normalisasi Bobot Kriteria

Normalisasi bobot kriteria dihitung berdasarkan persamaan [SMT-01], yaitu dengan membagi nilai masing-basing bobot dengan jumlah total nilai bobot, sehingga diperoleh hasil seperti dalam TABEL 3 di bawah ini:

TABEL 3 : Normalisasi Bobot Kriteria
KodeKriteriaBobot Kriteria (w'i)Normalisasi Bobot Kriteria (wi)
C1NVP88$\frac{88}{351}=0.250$
C2PP69$\frac{69}{351}=0.196$
C3ARR42$\frac{42}{351}=0.119$
C4IRR86$\frac{86}{351}=0.245$
C5PI66$\frac{66}{351}=0.188$

2.5. Penentuan Nilai Parameter

Dalam memberikan nilai parameter untuk setiap kriteria, diperlukan untuk data yang berbentuk kualitatif, misalkan untuk kriteria kualitas (sangat baik = 5, baik = 4, cukup = 3, kurang = 2 dan sangat kurang = 1). Pada contoh kasus ini, nilai untuk setiap kriteria berbentuk kuantitatif sehingga tidak perlu diberi nilai parameter lagi.

2.6. Menghitung Nilai Utility

Menentukan nilai utility ini tergantung dari sifat masing-masing kriteria. Sifat/tipe dari masing-masing kriteria dalam contoh kasus ini ditunjukkan dalam TABEL 4 berikut ini :

TABEL 4 : Tipe Kriteria
KodeKriteriaTipe Kriteria
C1NVPlebih besar lebih baik (benefit criteria)
C2PPlebih besar lebih baik (benefit criteria)
C3ARRlebih besar lebih baik (benefit criteria)
C4IRRlebih besar lebih baik (benefit criteria)
C5PIlebih besar lebih baik (benefit criteria)

Penentuan Nilai utility NVP, PP, ARR, IRR, PI untuk masing-masing usaha dihitung menggunakan persamaan [SMT-02] atau [SMT-03] sebagai berikut

2.6.1. Menghitung Nilai Utility untuk Kriteria NVP

Dalam menghitung nilai utility kriteria NVP, terlebih dahulu dicari nilai $C_{max(NVP)}$ dan nilai $C_{min(NVP)}$-nya sebagai berikut:

$C_{max(NVP)}=\{201 ; 302 ; 387 ; 135 ; 176\} = 387$

$C_{min(NVP)}=\{201 ; 302 ; 387 ; 135 ; 176\} = 135$

Karena kriteria NVP merupakan benefit criteria, sehingga berdasarkan persamaan [SMT-03] dapat dihitung masing-masing nilai utility dari tiap alternatif sebagai berikut:

$u_{NVP(a_1)}=\frac{(C_{out(a_1)} - C_{min(NVP)})}{(C_{max(NVP)} - C_{min(NVP)})} = \frac{(201 - 135)}{(387 - 135)} = 0.261$
$u_{NVP(a_2)}=\frac{(C_{out(a_2)} - C_{min(NVP)})}{(C_{max(NVP)} - C_{min(NVP)})} = \frac{(302 - 135)}{(387 - 135)} = 0.662$
$u_{NVP(a_3)}=\frac{(C_{out(a_3)} - C_{min(NVP)})}{(C_{max(NVP)} - C_{min(NVP)})} = \frac{(387 - 135)}{(387 - 135)} = 1.000$
$u_{NVP(a_4)}=\frac{(C_{out(a_4)} - C_{min(NVP)})}{(C_{max(NVP)} - C_{min(NVP)})} = \frac{(135 - 135)}{(387 - 135)} = 0$
$u_{NVP(a_5)}=\frac{(C_{out(a_5)} - C_{min(NVP)})}{(C_{max(NVP)} - C_{min(NVP)})} = \frac{(176 - 135)}{(387 - 135)} = 0.162$

2.6.2. Menghitung Nilai Utility untuk Kriteria PP

Dalam menghitung nilai utility kriteria PP, terlebih dahulu dicari nilai $C_{max(PP)}$ dan nilai $C_{min(PP)}$-nya sebagai berikut:

$C_{max(PP)}=\{2.11 ; 2.99 ; 2.46 ; 2.41 ; 2.51\} = 2.99$

$C_{min(PP)}=\{2.11 ; 2.99 ; 2.46 ; 2.41 ; 2.51\} = 2.11$

Karena kriteria PP merupakan benefit criteria, sehingga berdasarkan persamaan [SMT-03] dapat dihitung masing-masing nilai utility dari tiap alternatif sebagai berikut:

$u_{PP(a_1)}=\frac{(C_{out(a_1)} - C_{min(PP)})}{(C_{max(PP)} - C_{min(PP)})} = \frac{(2.11 - 2.11)}{(2.99 - 2.11)} = 0$
$u_{PP(a_2)}=\frac{(C_{out(a_2)} - C_{min(PP)})}{(C_{max(PP)} - C_{min(PP)})} = \frac{(2.99 - 2.11)}{(2.99 - 2.11)} = 1.000$
$u_{PP(a_3)}=\frac{(C_{out(a_3)} - C_{min(PP)})}{(C_{max(PP)} - C_{min(PP)})} = \frac{(2.46 - 2.11)}{(2.99 - 2.11)} = 0.397$
$u_{PP(a_4)}=\frac{(C_{out(a_4)} - C_{min(PP)})}{(C_{max(PP)} - C_{min(PP)})} = \frac{(2.41 - 2.11)}{(2.99 - 2.11)} = 0.340$
$u_{PP(a_5)}=\frac{(C_{out(a_5)} - C_{min(PP)})}{(C_{max(PP)} - C_{min(PP)})} = \frac{(2.51 - 2.11)}{(2.99 - 2.11)} = 0.454$

2.6.3. Menghitung Nilai Utility untuk Kriteria ARR

Dalam menghitung nilai utility kriteria ARR, terlebih dahulu dicari nilai $C_{max(ARR)}$ dan nilai $C_{min(ARR)}$-nya sebagai berikut:

$C_{max(ARR)}=\{658 ; 561 ; 536 ; 453 ; 523\} = 658$

$C_{min(ARR)}=\{658 ; 561 ; 536 ; 453 ; 523\} = 453$

Karena kriteria ARR merupakan benefit criteria, sehingga berdasarkan persamaan [SMT-03] dapat dihitung masing-masing nilai utility dari tiap alternatif sebagai berikut:

$u_{ARR(a_1)}=\frac{(C_{out(a_1)} - C_{min(ARR)})}{(C_{max(ARR)} - C_{min(ARR)})} = \frac{(658 - 453)}{(658 - 453)} = 1.000$
$u_{ARR(a_2)}=\frac{(C_{out(a_2)} - C_{min(ARR)})}{(C_{max(ARR)} - C_{min(ARR)})} = \frac{(561 - 453)}{(658 - 453)} = 0.526$
$u_{ARR(a_3)}=\frac{(C_{out(a_3)} - C_{min(ARR)})}{(C_{max(ARR)} - C_{min(ARR)})} = \frac{(536 - 453)}{(658 - 453)} = 0.404$
$u_{ARR(a_4)}=\frac{(C_{out(a_4)} - C_{min(ARR)})}{(C_{max(ARR)} - C_{min(ARR)})} = \frac{(453 - 453)}{(658 - 453)} = 0$
$u_{ARR(a_5)}=\frac{(C_{out(a_5)} - C_{min(ARR)})}{(C_{max(ARR)} - C_{min(ARR)})} = \frac{(523 - 453)}{(658 - 453)} = 0.341$

2.6.4. Menghitung Nilai Utility untuk Kriteria IRR

Dalam menghitung nilai utility kriteria IRR, terlebih dahulu dicari nilai $C_{max(IRR)}$ dan nilai $C_{min(IRR)}$-nya sebagai berikut:

$C_{max(IRR)}=\{57.4 ; 35.4 ; 31.3 ; 44.4 ; 47.7\} = 57.4$

$C_{min(IRR)}=\{57.4 ; 35.4 ; 31.3 ; 44.4 ; 47.7\} = 31.3$

Karena kriteria IRR merupakan benefit criteria, sehingga berdasarkan persamaan [SMT-03] dapat dihitung masing-masing nilai utility dari tiap alternatif sebagai berikut:

$u_{IRR(a_1)}=\frac{(C_{out(a_1)} - C_{min(IRR)})}{(C_{max(IRR)} - C_{min(IRR)})} = \frac{(57.4 - 31.3)}{(57.4 - 31.3)} = 1.000$
$u_{IRR(a_2)}=\frac{(C_{out(a_2)} - C_{min(IRR)})}{(C_{max(IRR)} - C_{min(IRR)})} = \frac{(35.4 - 31.3)}{(57.4 - 31.3)} = 0.157$
$u_{IRR(a_3)}=\frac{(C_{out(a_3)} - C_{min(IRR)})}{(C_{max(IRR)} - C_{min(IRR)})} = \frac{(31.3 - 31.3)}{(57.4 - 31.3)} = 0$
$u_{IRR(a_4)}=\frac{(C_{out(a_4)} - C_{min(IRR)})}{(C_{max(IRR)} - C_{min(IRR)})} = \frac{(44.4 - 31.3)}{(57.4 - 31.3)} = 0.501$
$u_{IRR(a_5)}=\frac{(C_{out(a_5)} - C_{min(IRR)})}{(C_{max(IRR)} - C_{min(IRR)})} = \frac{(47.7 - 31.3)}{(57.4 - 31.3)} = 0.628$

2.6.5. Menghitung Nilai Utility untuk Kriteria PI

Dalam menghitung nilai utility kriteria PI, terlebih dahulu dicari nilai $C_{max(PI)}$ dan nilai $C_{min(PI)}$-nya sebagai berikut:

$C_{max(PI)}=\{0.9 ; 1.5 ; 1.3 ; 1.6 ; 1\} = 1.6$

$C_{min(PI)}=\{0.9 ; 1.5 ; 1.3 ; 1.6 ; 1\} = 0.9$

Karena kriteria PI merupakan benefit criteria, sehingga berdasarkan persamaan [SMT-03] dapat dihitung masing-masing nilai utility dari tiap alternatif sebagai berikut:

$u_{PI(a_1)}=\frac{(C_{out(a_1)} - C_{min(PI)})}{(C_{max(PI)} - C_{min(PI)})} = \frac{(0.9 - 0.9)}{(1.6 - 0.9)} = 0$
$u_{PI(a_2)}=\frac{(C_{out(a_2)} - C_{min(PI)})}{(C_{max(PI)} - C_{min(PI)})} = \frac{(1.5 - 0.9)}{(1.6 - 0.9)} = 0.857$
$u_{PI(a_3)}=\frac{(C_{out(a_3)} - C_{min(PI)})}{(C_{max(PI)} - C_{min(PI)})} = \frac{(1.3 - 0.9)}{(1.6 - 0.9)} = 0.571$
$u_{PI(a_4)}=\frac{(C_{out(a_4)} - C_{min(PI)})}{(C_{max(PI)} - C_{min(PI)})} = \frac{(1.6 - 0.9)}{(1.6 - 0.9)} = 1.000$
$u_{PI(a_5)}=\frac{(C_{out(a_5)} - C_{min(PI)})}{(C_{max(PI)} - C_{min(PI)})} = \frac{(1 - 0.9)}{(1.6 - 0.9)} = 0.142$

Hasil perhitungan nilai utility tersebut dirangkum dalam TABEL 5 sebagai berikut:

TABEL 5 Nilai Utility
AlternatifKriteria
KodeNamaC1C2C3C4C5
A1Toko Elektronik Persada0.26101.0001.0000
A2Percetakan Sejahtera0.6621.0000.5260.1570.857
A3Toko Bangunan Jaya1.0000.3970.40400.571
A4Toko Mainan Nasional00.34000.5011.000
A5Toko Kelontong Perkasa0.1620.4540.3410.6280.142
Keterangan
  1. C1 : NVP
  2. C2 : PP
  3. C3 : ARR
  4. C4 : IRR
  5. C5 : PI

2.6. Menghitung Nilai Akhir

Perhitungan nilai akhir/preferensi menggunakan persamaan [SMT-04]; dan diperoleh hasil sebagai berikut :

2.6.1 Nilai Akhir Alternatif A1 (Toko Elektronik Persada)

Perhitungan nilai akhir untuk alternatif A1 (Toko Elektronik Persada) adalah sebagai berikut :

$\begin{align}u(a_1) &=\sum_{j=1}^{m} w_j*u_j(a_1) \\&=(w_{NVP}*u_{NVP}(a_1))+(w_{PP}*u_{PP}(a_1))+(w_{ARR}*u_{ARR}(a_1))+(w_{IRR}*u_{IRR}(a_1))+(w_{PI}*u_{PI}(a_1))\\&=(0.261 * 0.250)+(0 * 0.196)+(1.000 * 0.119)+(1.000 * 0.245)+(0 * 0.188)\\&=0.065+0+0.119+0.245+0\\&=0.430\end{align}$

Diperoleh nilai akhir u(a1) sebesar = 0.430

2.6.2 Nilai Akhir Alternatif A2 (Percetakan Sejahtera)

Perhitungan nilai akhir untuk alternatif A2 (Percetakan Sejahtera) adalah sebagai berikut :

$\begin{align}u(a_2) &=\sum_{j=1}^{m} w_j*u_j(a_2) \\&=(w_{NVP}*u_{NVP}(a_2))+(w_{PP}*u_{PP}(a_2))+(w_{ARR}*u_{ARR}(a_2))+(w_{IRR}*u_{IRR}(a_2))+(w_{PI}*u_{PI}(a_2))\\&=(0.662 * 0.250)+(1.000 * 0.196)+(0.526 * 0.119)+(0.157 * 0.245)+(0.857 * 0.188)\\&=0.166+0.196+0.063+0.038+0.161\\&=0.625\end{align}$

Diperoleh nilai akhir u(a2) sebesar = 0.625

2.6.3 Nilai Akhir Alternatif A3 (Toko Bangunan Jaya)

Perhitungan nilai akhir untuk alternatif A3 (Toko Bangunan Jaya) adalah sebagai berikut :

$\begin{align}u(a_3) &=\sum_{j=1}^{m} w_j*u_j(a_3) \\&=(w_{NVP}*u_{NVP}(a_3))+(w_{PP}*u_{PP}(a_3))+(w_{ARR}*u_{ARR}(a_3))+(w_{IRR}*u_{IRR}(a_3))+(w_{PI}*u_{PI}(a_3))\\&=(1.000 * 0.250)+(0.397 * 0.196)+(0.404 * 0.119)+(0 * 0.245)+(0.571 * 0.188)\\&=0.250+0.078+0.048+0+0.107\\&=0.484\end{align}$

Diperoleh nilai akhir u(a3) sebesar = 0.484

2.6.4 Nilai Akhir Alternatif A4 (Toko Mainan Nasional)

Perhitungan nilai akhir untuk alternatif A4 (Toko Mainan Nasional) adalah sebagai berikut :

$\begin{align}u(a_4) &=\sum_{j=1}^{m} w_j*u_j(a_4) \\&=(w_{NVP}*u_{NVP}(a_4))+(w_{PP}*u_{PP}(a_4))+(w_{ARR}*u_{ARR}(a_4))+(w_{IRR}*u_{IRR}(a_4))+(w_{PI}*u_{PI}(a_4))\\&=(0 * 0.250)+(0.340 * 0.196)+(0 * 0.119)+(0.501 * 0.245)+(1.000 * 0.188)\\&=0+0.067+0+0.122+0.188\\&=0.378\end{align}$

Diperoleh nilai akhir u(a4) sebesar = 0.378

2.6.5 Nilai Akhir Alternatif A5 (Toko Kelontong Perkasa)

Perhitungan nilai akhir untuk alternatif A5 (Toko Kelontong Perkasa) adalah sebagai berikut :

$\begin{align}u(a_5) &=\sum_{j=1}^{m} w_j*u_j(a_5) \\&=(w_{NVP}*u_{NVP}(a_5))+(w_{PP}*u_{PP}(a_5))+(w_{ARR}*u_{ARR}(a_5))+(w_{IRR}*u_{IRR}(a_5))+(w_{PI}*u_{PI}(a_5))\\&=(0.162 * 0.250)+(0.454 * 0.196)+(0.341 * 0.119)+(0.628 * 0.245)+(0.142 * 0.188)\\&=0.040+0.089+0.040+0.153+0.026\\&=0.351\end{align}$

Diperoleh nilai akhir u(a5) sebesar = 0.351


Dari hasil-hasil perhitungan nilai akhir tersebut dapat disajikan dalam bentuk tabel seperti pada TABEL 6 berikut ini:

TABEL 6 Nilai Akhir
AlternatifKriteriaNilai Akhir
KodeNamaC1C2C3C4C5u
A1Toko Elektronik Persada0.06500.1190.24500.430
A2Percetakan Sejahtera0.1660.1960.0630.0380.1610.625
A3Toko Bangunan Jaya0.2500.0780.04800.1070.484
A4Toko Mainan Nasional00.06700.1220.1880.378
A5Toko Kelontong Perkasa0.0400.0890.0400.1530.0260.351
Keterangan
  1. C1 : NVP
  2. C2 : PP
  3. C3 : ARR
  4. C4 : IRR
  5. C5 : PI

2.7. Perangkingan

Dari hasil perhitungan nilai akhir sebelumnya, dengan mengurutkan nilai data dari yang terbesar hingga yang terkecil diperoleh hasil sebagai berikut:

TABEL 7 Perangkingan
RankingAlternatifNilai Akhir
KodeNamau
1A2Percetakan Sejahtera0.62542819573004
2A3Toko Bangunan Jaya0.48479300735398
3A1Toko Elektronik Persada0.43033509700176
4A4Toko Mainan Nasional0.37802700350593
5A5Toko Kelontong Perkasa0.35182178262264

Dari data pada tabel TABEL 7 maka dapat diputuskan bahwa usaha Percetakan Sejahtera adalah yang paling layak dengan nilai akhir 0.62542819573004

Uraian diberikan secara langkah per langkah agar memudahkan pemahaman dalam pembuatan aplikasinya. Dimulai dari rancangan schema database-nya hingga langkah-langkah implemantasi proses sesuai Metode SMART yang sudah dijelaskan sebelumnya, dengan menggunakan data sesuai dengan contoh kasus yang diberikan.

3.1. Persiapan Database

Sebagai bahan pembelajaran aplikasi dengan SMART Method ini, dibuat database db_dss(dalam hal ini menggunakan MySQL/MariaDB Database server) sebagai berikut:

CREATE DATABASE IF NOT EXISTS db_dss;
USE db_dss;

Awalnya membuat dulu database dengan nama db_dss jika belum ada database dengan nama tersebut, kemudian gunakan database tersebut dengan memakai sintak USE db_dss;

Dalam hal ini, pembuatan database memakai command console dari database server yang bersangkutan

3.2. Pengambilan Nilai

Sebelum dilakukan perhitungan-perhitungan menggunakan metoda SMART dengan menggunakan PHP, maka terlebih dahulu kita menyiapkan data yang akan diolah dengan mengambil (fetching) data dari database, dan disimpan (assign) ke dalam variabel-variabel PHP.

Data-data yang diambil tersebut meliputi data-data primer -- yaitu data kriteria dan parameternya -- serta data-data sekunder yaitu data alternatif dan data nilai

3.2.1. Koneksi ke Database

Sebelum melalukan operasi dengan data dari database, perlu dibuat script untuk koneksi ke database terlebih dahulu. Dari database yang sudah dibuat, kita bisa membuat script php untuk membuat koneksi ke database server dengan extension mysqli sebagai berikut:

<?php
//-- konfigurasi database
$dbhost 'localhost';
$dbuser 'root';
$dbpass '';
$dbname 'db_dss';
//-- koneksi ke database server dengan extension mysqli
$db = new mysqli($dbhost,$dbuser,$dbpass,$dbname);
//-- hentikan program dan tampilkan pesan kesalahan jika koneksi gagal
if ($db->connect_error) {
    die(
'Connect Error ('.$db->connect_errno.')'.$db->connect_error);
}
?>

Sesuaikan nilai-nilai $dbhost,$dbuser,$dbpass dan $dbname dengan konfigurasi database yg digunakan.

3.2.2. Pengambilan Nilai Kriteria

Data kriteria yang akan digunakan dalam perhitungan metode SMART ini diambil dari tabel smt_kriteria dan dimasukkan ke dalam variabel $kriteria yang berupa array multidimensi. Variabel $kriteria ini mempunyai index berupa id_kriteria dan berisi item data nama, bobot dan tipe kriteria dari masing-masing kriteria tersebut.

<?php
//-- query untuk mendapatkan semua data kriteria di tabel smt_kriteria
$sql 'SELECT * FROM smt_kriteria';
$result $db->query($sql);
//-- menyiapkan variable penampung berupa array
$kriteria=array();
//-- melakukan iterasi pengisian array untuk tiap record data yang didapat
while ($row $result->fetch_assoc()) {
    
$kriteria[$row['id_kriteria']]=array($row['kriteria'],$row['bobot'],$row['tipe']);
}
?>

3.2.3. Pengambilan Nilai Alternatif

Kode PHP berikutnya adalah merupakan script untuk mengambil nilai data alternatif yang tersimpan pada tabel smt_alternatif dan menyimpannya ke dalam variabel $alternatif

<?php
//-- query untuk mendapatkan semua data kriteria di tabel smt_alternatif
$sql 'SELECT * FROM smt_alternatif';
$result $db->query($sql);
//-- menyiapkan variable penampung berupa array
$alternatif=array();
//-- melakukan iterasi pengisian array untuk tiap record data yang didapat
while($row=$result->fetch_assoc()) {
    
$alternatif[$row['id_alternatif']]=$row['alternatif'];
}
?>;

3.2.4. Pengambilan Nilai Penilaian

Data sample penilaian yang tersimpan pada tabel smt_data di-fetching dan di-assign ke variabel array dua dimensi $sample. Kode script PHP-nya adalah seperti berikut ini :

<?php
//-- query untuk mendapatkan semua data sample penilaian di tabel smt_data
$sql 'SELECT * FROM smt_data ORDER BY id_alternatif,id_kriteria';
$result $db->query($sql);
//-- menyiapkan variable penampung berupa array
$sample=array();
//-- melakukan iterasi pengisian array untuk tiap record data yang didapat
while($row=result->fetch_assoc()) {
    
//-- jika array $sample[$row['id_alternatif']] belum ada maka buat baru
    //-- $row['id_alternatif'] adalah id kandidat/alternatif
    
if (!isset($sample[$row['id_alternatif']])) {
        
$sample[$row['id_alternatif']] = array();
    }
    
$sample[$row['id_alternatif']][$row['id_kriteria']] = $row['nilai'];
}
?>

3.3. Perhitungan

Setelah data-data yang diperlukan dalam perhitungan diambil dari database, kemudian data-data tersebut diolah sebagai berikut:

3.3.1. Normalisasi Bobot Kriteria

Sesuai dengan persaaan SMT-01 dilakukan perhitungan normalisasi bobot, yang dituliskan dalam kode PHP sebagai berikut:

<?php
//-- inisialisasi variabel array bobot
$bobot=array();
foreach(
$kriteria as $k=>$vk){
    
$bobot[$k]=$vk[1];
}
//-- menghitung nilai total bobot
$jml_bobot=array_sum($bobot);
//-- inisialisasi variabel array w (bobot ternormalisasi)
$w=array();
//-- normalisasi bobot
foreach($bobot as $k=>$b){
    
$w[$k]=$b/$jml_bobot;
}
?>

3.3.2. Perhitungan Nilai Utility

Dalam perhitungan nilai utility, maka dicari dulu nilai $c_{max}$ dan $c_{min}$-nya, yaitu nilai terbesar ($c_{max}$) dan nilai terkecil ($c_{min}$) untuk masing-masing kriteria. Sesuai dengan tipe dari kriterianya (benefit criteria atau cost criteria) kemudian dihitung nilai utilitynya berdasarkan persamaan SMT-02 atau SMT-03 dengan script PHP sebagai berikut:

<?php
//-- inisialisasi variabel array tranpose_d untuk menyimpan data tranpose dari data sample
$tranpose_d=array();
foreach(
$alternatif as $a=>$v){
    foreach(
$kriteria as $k=>$v_k){
        if(!isset(
$tranpose_d[$k]))$tranpose_d[$k]=array();
        
$tranpose_d[$k][$a]=$sample[$a][$k];
    }
}
//-- inisialisasi variabel array c_max dan c_min 
$c_max=array();
$c_min=array();
//-- mencari nilai max dan min utk tiap-tiap kriteria
foreach($kriteria as $k=>$v){
    
$c_max[$k]=max($tranpose_d[$k]);
    
$c_min[$k]=min($tranpose_d[$k]);
}
//-- inisialisasi variabel array U
$U=array();
//-- menghitung nilai utility utk masing-masing alternatif dan kriteria
foreach($kriteria as $k=>$v){
    foreach(
$alternatif as $a=>$a_v){
        if(!isset(
$U[$a])) $U[$a]=array();
        if(
$kriteria[$k]['tipe']=='max'){
            
//-- perhitungan nilai utility untuk benefit criteria
            
$U[$a][$k]=($sample[$a][$k]-$c_min[$k])/($c_max[$k]-$c_min[$k]);
        }else{
            
//-- perhitungan nilai utility untuk cost criteria
            
$U[$a][$k]=($c_max[$k]-$sample[$a][$k])/($c_max[$k]-$c_min[$k]);
        }
    }
}
?>

Dalam kode PHP tersebut, nilai $U[$a][$k] adalah nilai utility dari alternatif ke $a pada kriteria ke $k

3.3.3. Perhitungan Nilai Akhir

Perhitungan nilai akhir dari tiap-tiap alternatif merupakan penjumlahan dari perkalian nilai utility dengan nilai bobot yang sudah ternormalisasi untuk masing-masing kriteria. Sesuai dengan persamaan SMT-04, dan dituliskan dalam kode PHP sebagai berikut:

<?php
//-- inisialisasi variabel array V
$V=array();
//-- melakukan iterasi utk setiap alternatif 
foreach($U as $a=>$a_u){
    
$V[$a]=0;
    
//-- perhitungan nilai Preferensi V untuk tiap-tiap kriteria
    
foreach($a_u as $k=>$u){
        
$V[$a]+=$u*$w[$k];
    }
}
?>

Nilai akhir/preferensi dari alternatif ke $a pada script di atas dinyatakan dengan $V[$a]

3.3.4. Perangkingan

Proses perangkingan dilakukan dengan mengurutkan nilai preferensi berdasarkan besar nilainya, dari yang terbesar sampai dengan yang terkecil; dimana kandidat/alternatif dengan nilai preferensi yang terbesar adalah yang terpilih. Proses perangkingan ini dituliskan dalam PHP seperti berikut ini :

<?php
//--mengurutkan data secara descending dengan tetap mempertahankan key/index array-nya 
arsort($V); 
//-- mendapatkan key/index item array yang pertama 
$index=key($V); 
//-- menampilkan hasil akhir: 
echo "Hasilnya adalah alternatif <b>{$alternatif[$index]}</b> "
echo 
"dengan nilai akhir <b>{$V[$index]}</b> yang terpilih"
?>

Hasil akhir dari aplikasi PHP ini adalah berupa teks :
'Hasilnya adalah alternatif Percetakan Sejahtera dengan nilai akhir 0.62542819573004 yang terpilih '.

Source code selengkapnya bisa dilihat di tautan ini source source