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
A1Loundry Jaya104.2.84504.54.31.00
A2Percetakan Abadi312.2.14201.42.30.90
A3Minimarket Persada491.2.82394.12.21.20
A4Toko Kelontong Buana470.2.21422.22.60.90
A5Toko Bangunan Langgeng121.2.68688.31.31.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)
C1NVP90
C2PP73
C3ARR58
C4IRR81
C5PI75

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)
C1NVP90$\frac{90}{377}=0.238$
C2PP73$\frac{73}{377}=0.193$
C3ARR58$\frac{58}{377}=0.153$
C4IRR81$\frac{81}{377}=0.214$
C5PI75$\frac{75}{377}=0.198$

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)}=\{104 ; 312 ; 491 ; 470 ; 121\} = 491$

$C_{min(NVP)}=\{104 ; 312 ; 491 ; 470 ; 121\} = 104$

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{(104 - 104)}{(491 - 104)} = 0$
$u_{NVP(a_2)}=\frac{(C_{out(a_2)} - C_{min(NVP)})}{(C_{max(NVP)} - C_{min(NVP)})} = \frac{(312 - 104)}{(491 - 104)} = 0.537$
$u_{NVP(a_3)}=\frac{(C_{out(a_3)} - C_{min(NVP)})}{(C_{max(NVP)} - C_{min(NVP)})} = \frac{(491 - 104)}{(491 - 104)} = 1.000$
$u_{NVP(a_4)}=\frac{(C_{out(a_4)} - C_{min(NVP)})}{(C_{max(NVP)} - C_{min(NVP)})} = \frac{(470 - 104)}{(491 - 104)} = 0.945$
$u_{NVP(a_5)}=\frac{(C_{out(a_5)} - C_{min(NVP)})}{(C_{max(NVP)} - C_{min(NVP)})} = \frac{(121 - 104)}{(491 - 104)} = 0.043$

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.84 ; 2.14 ; 2.82 ; 2.21 ; 2.68\} = 2.84$

$C_{min(PP)}=\{2.84 ; 2.14 ; 2.82 ; 2.21 ; 2.68\} = 2.14$

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.84 - 2.14)}{(2.84 - 2.14)} = 1.000$
$u_{PP(a_2)}=\frac{(C_{out(a_2)} - C_{min(PP)})}{(C_{max(PP)} - C_{min(PP)})} = \frac{(2.14 - 2.14)}{(2.84 - 2.14)} = 0$
$u_{PP(a_3)}=\frac{(C_{out(a_3)} - C_{min(PP)})}{(C_{max(PP)} - C_{min(PP)})} = \frac{(2.82 - 2.14)}{(2.84 - 2.14)} = 0.971$
$u_{PP(a_4)}=\frac{(C_{out(a_4)} - C_{min(PP)})}{(C_{max(PP)} - C_{min(PP)})} = \frac{(2.21 - 2.14)}{(2.84 - 2.14)} = 0.100$
$u_{PP(a_5)}=\frac{(C_{out(a_5)} - C_{min(PP)})}{(C_{max(PP)} - C_{min(PP)})} = \frac{(2.68 - 2.14)}{(2.84 - 2.14)} = 0.771$

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)}=\{504 ; 201 ; 394 ; 422 ; 688\} = 688$

$C_{min(ARR)}=\{504 ; 201 ; 394 ; 422 ; 688\} = 201$

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{(504 - 201)}{(688 - 201)} = 0.622$
$u_{ARR(a_2)}=\frac{(C_{out(a_2)} - C_{min(ARR)})}{(C_{max(ARR)} - C_{min(ARR)})} = \frac{(201 - 201)}{(688 - 201)} = 0$
$u_{ARR(a_3)}=\frac{(C_{out(a_3)} - C_{min(ARR)})}{(C_{max(ARR)} - C_{min(ARR)})} = \frac{(394 - 201)}{(688 - 201)} = 0.396$
$u_{ARR(a_4)}=\frac{(C_{out(a_4)} - C_{min(ARR)})}{(C_{max(ARR)} - C_{min(ARR)})} = \frac{(422 - 201)}{(688 - 201)} = 0.453$
$u_{ARR(a_5)}=\frac{(C_{out(a_5)} - C_{min(ARR)})}{(C_{max(ARR)} - C_{min(ARR)})} = \frac{(688 - 201)}{(688 - 201)} = 1.000$

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)}=\{54.3 ; 42.3 ; 12.2 ; 22.6 ; 31.3\} = 54.3$

$C_{min(IRR)}=\{54.3 ; 42.3 ; 12.2 ; 22.6 ; 31.3\} = 12.2$

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{(54.3 - 12.2)}{(54.3 - 12.2)} = 1.000$
$u_{IRR(a_2)}=\frac{(C_{out(a_2)} - C_{min(IRR)})}{(C_{max(IRR)} - C_{min(IRR)})} = \frac{(42.3 - 12.2)}{(54.3 - 12.2)} = 0.714$
$u_{IRR(a_3)}=\frac{(C_{out(a_3)} - C_{min(IRR)})}{(C_{max(IRR)} - C_{min(IRR)})} = \frac{(12.2 - 12.2)}{(54.3 - 12.2)} = 0$
$u_{IRR(a_4)}=\frac{(C_{out(a_4)} - C_{min(IRR)})}{(C_{max(IRR)} - C_{min(IRR)})} = \frac{(22.6 - 12.2)}{(54.3 - 12.2)} = 0.247$
$u_{IRR(a_5)}=\frac{(C_{out(a_5)} - C_{min(IRR)})}{(C_{max(IRR)} - C_{min(IRR)})} = \frac{(31.3 - 12.2)}{(54.3 - 12.2)} = 0.453$

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)}=\{1 ; 0.9 ; 1.2 ; 0.9 ; 1\} = 1.2$

$C_{min(PI)}=\{1 ; 0.9 ; 1.2 ; 0.9 ; 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{(1 - 0.9)}{(1.2 - 0.9)} = 0.333$
$u_{PI(a_2)}=\frac{(C_{out(a_2)} - C_{min(PI)})}{(C_{max(PI)} - C_{min(PI)})} = \frac{(0.9 - 0.9)}{(1.2 - 0.9)} = 0$
$u_{PI(a_3)}=\frac{(C_{out(a_3)} - C_{min(PI)})}{(C_{max(PI)} - C_{min(PI)})} = \frac{(1.2 - 0.9)}{(1.2 - 0.9)} = 1.000$
$u_{PI(a_4)}=\frac{(C_{out(a_4)} - C_{min(PI)})}{(C_{max(PI)} - C_{min(PI)})} = \frac{(0.9 - 0.9)}{(1.2 - 0.9)} = 0$
$u_{PI(a_5)}=\frac{(C_{out(a_5)} - C_{min(PI)})}{(C_{max(PI)} - C_{min(PI)})} = \frac{(1 - 0.9)}{(1.2 - 0.9)} = 0.333$

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

TABEL 5 Nilai Utility
AlternatifKriteria
KodeNamaC1C2C3C4C5
A1Loundry Jaya01.0000.6221.0000.333
A2Percetakan Abadi0.537000.7140
A3Minimarket Persada1.0000.9710.39601.000
A4Toko Kelontong Buana0.9450.1000.4530.2470
A5Toko Bangunan Langgeng0.0430.7711.0000.4530.333
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 (Loundry Jaya)

Perhitungan nilai akhir untuk alternatif A1 (Loundry Jaya) 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 * 0.238)+(1.000 * 0.193)+(0.622 * 0.153)+(1.000 * 0.214)+(0.333 * 0.198)\\&=0+0.193+0.095+0.214+0.066\\&=0.570\end{align}$

Diperoleh nilai akhir u(a1) sebesar = 0.570

2.6.2 Nilai Akhir Alternatif A2 (Percetakan Abadi)

Perhitungan nilai akhir untuk alternatif A2 (Percetakan Abadi) 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.537 * 0.238)+(0 * 0.193)+(0 * 0.153)+(0.714 * 0.214)+(0 * 0.198)\\&=0.128+0+0+0.153+0\\&=0.281\end{align}$

Diperoleh nilai akhir u(a2) sebesar = 0.281

2.6.3 Nilai Akhir Alternatif A3 (Minimarket Persada)

Perhitungan nilai akhir untuk alternatif A3 (Minimarket Persada) 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.238)+(0.971 * 0.193)+(0.396 * 0.153)+(0 * 0.214)+(1.000 * 0.198)\\&=0.238+0.188+0.060+0+0.198\\&=0.686\end{align}$

Diperoleh nilai akhir u(a3) sebesar = 0.686

2.6.4 Nilai Akhir Alternatif A4 (Toko Kelontong Buana)

Perhitungan nilai akhir untuk alternatif A4 (Toko Kelontong Buana) 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.945 * 0.238)+(0.100 * 0.193)+(0.453 * 0.153)+(0.247 * 0.214)+(0 * 0.198)\\&=0.225+0.019+0.069+0.053+0\\&=0.368\end{align}$

Diperoleh nilai akhir u(a4) sebesar = 0.368

2.6.5 Nilai Akhir Alternatif A5 (Toko Bangunan Langgeng)

Perhitungan nilai akhir untuk alternatif A5 (Toko Bangunan Langgeng) 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.043 * 0.238)+(0.771 * 0.193)+(1.000 * 0.153)+(0.453 * 0.214)+(0.333 * 0.198)\\&=0.010+0.149+0.153+0.097+0.066\\&=0.477\end{align}$

Diperoleh nilai akhir u(a5) sebesar = 0.477


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
A1Loundry Jaya00.1930.0950.2140.0660.570
A2Percetakan Abadi0.128000.15300.281
A3Minimarket Persada0.2380.1880.06000.1980.686
A4Toko Kelontong Buana0.2250.0190.0690.05300.368
A5Toko Bangunan Langgeng0.0100.1490.1530.0970.0660.477
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
1A3Minimarket Persada0.68673716710253
2A1Loundry Jaya0.57052053660423
3A5Toko Bangunan Langgeng0.47749600162784
4A4Toko Kelontong Buana0.3680268137918
5A2Percetakan Abadi0.28192097357429

Dari data pada tabel TABEL 7 maka dapat diputuskan bahwa usaha Minimarket Persada adalah yang paling layak dengan nilai akhir 0.68673716710253

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 Minimarket Persada dengan nilai akhir 0.68673716710253 yang terpilih '.

Source code selengkapnya bisa dilihat di tautan ini source source