Decision Support System Series

Multi Attributive Ideal-Real Comparative Analysis (MAIRCA)

Contoh implementasi DSS (Decision Support System) dengan Metode Multi Attributive Ideal-Real Comparative Analysis (MAIRCA) menggunakan PHP dan MySQL untuk pemilihan layanan katering terbaik

Metode Multi Attributive Ideal-Real Comparative Analysis (MAIRCA) merupakan salah satu metode pengambilan keputusan multikriteria berdasarkan pada pemeringkatan selisih nilai ideal dengan nilai empiris

author : cahya dsn, published on : October 1st, 2020 updated on : October 2nd, 2020

minerva minerva donasi donation

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

Pre-requisites

  • Pemahaman terhadap dasar-dasar Sistem Pengambilan Keputusan
  • Pemahaman terhadap dasar-dasar teknologi Web,HTML dan CSS
  • Pemahaman terhadap dasar-dasar basis data/database, terutama query SQL pada MySQL/mariaDB
  • Pemahaman terhadap dasar-dasar pemrograman PHP, terutama fungsi-fungsi koneksi database dan pengelolaan tipe data array

1.1. Tahapan Metode CODAS

Metode COmbinative Distance-based Assessment CODAS diperkenalkan oleh Keshavaraz - Ghorabaee,et all pada tahun 2016. Dalam melakukan menyelesaikan masalah dan perangkingan, metode CODAS memiliki beberapa langkah yaitu:

1.1.1. Pembentukan Matriks Keputusan (Decision Making Matrix - X)

Pada matriks keputusan (X), baris menunjukkan Alternatif dan kolom menunjukkan kriteria. Matriks keputusan menunjukkan kinerja dari masing-masing alternatif terhadap berbagai kriteria

$X=\left[\begin{array}{cccc} x_{01} & \ldots & x_{0j} & \ldots & x_{0n} \\ \vdots & \ddots & \vdots & \ddots & \vdots \\ x_{i1} & \ldots & x_{ij} & \ldots & x_{in} \\ \vdots & \ddots & \vdots & \ddots & \vdots \\ x_{m1} & \ldots & x_{m2} & \ldots & x_{mn} \\ \end{array}\right] (i=0,1,2,...,m; j=1,2,...,n)$
.. [COD-01]

xij ($x_{ij}\geq0$) menunjukkan nilai kinerja alternatif ke-i pada kriteria ke-j, m adalah banyaknya alternatif sedangkan n adalah banyaknya kriteria ($i \in \{1,2,3,.. m\}$ dan $j \in \{1,2,3,..,m\}$).

1.1.2. Membentuk Matriks Normalisasi (N)

Dari matriks keputusan (X) yang diperoleh, dibuat matriks Normalisasi (N)-nya dengan persamaan:

$\begin{align} n_{ij}=\begin{cases} \frac{x_{ij}}{\substack{\text{max} \\i} x_{ij} } &\text{if j}\in N_{b}\\ \frac{\substack{\text{min} \\i} x_{ij}}{x_{ij}} &\text{if j}\in N_{c}\\ \end{cases} \end{align}$
.. [COD-02]

dimana nilai dari Nb dan Nc adalah masing-masing untuk kriteria benefit dan cost

1.1.3. Menentukan Matriks Normalisasi Terbobot (R)

Nilai normalisasi terbobot (R) dihitung dengan persamaan sebagai berikut :

$r_{ij}=w_{j}\times n_{ij}$
.. [COD-03]

dimana $w_{j} (0 < w_{j}<1)$ merupakan nilai bobot (weight) dari kriteria ke $j$, sedangkan :

$\sum_{j=1}^{m}w_{j}=1$
.. [COD-04]

1.1.4. Menentukan Nilai Ideal Negatif (NS)

Tahap berikutnya adalah menentukan nilai Ideal Negatif (NS) untuk tiap-tiap kriteria, yang diperhitungakan dari data semua alternatif. Matriks Nilai Ideal Negatif yang terbentuk adalah :

$ns=[ns_{j}]_{1\times m}$
.. [COD-05]

dimana nilai dari $ns_{j}$ adalah merupakan nilai ternormalisasi terbobot (R) terkecil/minimum untuk setiap kriteria ke $j$:

$ns_{j}=\substack{\text{min} \\i} r_{ij}$
.. [COD-06]

1.1.5. Menghitung Jarak Euclidian dan Taxicab (E/T)

Jarak Euclidian (E) untuk setiap alternatif ke-$i$ diperhitungkan dengan persamaan sebagai berikut :

$E_{i}=\sqrt{\sum^{m}_{j=1}(r_{ij}-ns_{j})^2}$
.. [COD-07]

Sedangkan Jarak Taxicab (T) untuk setiap alternatif ke-$i$ diperhitungkan dengan persamaan :

$T_{i}=\sum^{m}_{j=1} |r_{ij}-ns_{j}|$
.. [COD-08]

1.1.6. Membentuk Matriks Relative Assessment (RA)

$Ra=[h_{ik}]_{ n\times n}$
.. [COD-09]
$h_{ik}=(E_{i}-E_{k})+(\psi (E_{i}-E_{k})\times(T_{i}-T_{k}))$
.. [COD-10]

dimana nilai $k \in \{1,2, ... , n\}$ dan $\psi$ menunjukkan fungsi ambang batas untuk mengenali perbandingan jarak Euclidean dari dua alternatif, dan dirumuskan sebagai berikut :

$\begin{align}\psi(x)=\begin{cases}1 &\text{if |x| }\geq \tau\\0 &\text{if |x| <}\tau \end{cases}\end{align}$
.. [COD-11]

Dalam fungsi tersebut, nilai $\tau$ adalah nilai parameter ambang batas yang dapat ditentukan oleh pengambil keputusan. Nilai yang disarankan untuk nilai parameter ini adalah antara $0.01$ sampai dengan $0.05$. Sedangkan nilai $|x|$ adalah nilai absolute dari selisih nilai jarak Euclidean dari alternatif ke-i ($E_i$) dengan alternatif ke-k ($E_k$)

1.1.7. Mengitung Nilai Assessment Score (H)

Berikutnya adalah menghitung nilai Assessment Score H untuk setiap alternatif sebagai berikut:

$H_{i}=\sum_{k=1}^n h_{ik}$
.. [COD-12]

1.1.8. Perankingan

Tahap yang terakhir adalah perangkingan dari nilai Assessment Score H dari nilai yang tertinggi hingga yang terendah. Alternatif dengan nilai yang tertinggi menunjukkan alternatif yang terbaik.

2.1. Kriteria dan Bobot

Pada kasus penentuan pemilihan supplier terbaik ini telah ditentukan 8 buah kriteria yang diperhitungkan, yaitu Sistem Komunikasi, Pengiriman, Kebijakan Garansi, Histori Performansi, Responsibilitas, Kualitas, Biaya langsung, dan Fleksibilitas dengan rincian bobot penilaian seperti pada TABEL 1 berikut :

TABEL 1 : Kriteria dan Bobot Pemilihan Pemasok
KodeKriteriaTipe[1]Bobot[2]
C1Sistem Komunikasibenefit0.033
C2Pengirimanbenefit0.180
C3Kebijakan Garansibenefit0.098
C4Histori Performansibenefit0.082
C5Responsibilitasbenefit0.066
C6Kualitasbenefit0.230
C7Biaya langsungcost0.164
C8Fleksibilitasbenefit0.115
[1] `benefit` menandakan lebih besar lebih baik (Benefit Criteria) scodngkan `cost` menandakan lebih kecil lebih baik (Cost Criteria)
[2] Nilai bobot ditentukan oleh pakar/orang yang berwenang/kompeten untuk memberi pembobotan; atau bisa diperoleh dari hasil kuisioner

2.2. Contoh Data

Data-data awal yang akan diperhitungkan dengan metoda CODAS ini adalah seperti yang tercantum dalam TABEL 2 berikut ini [3]

TABEL 2 : Contoh Data
Alternatif Kriteria
Kode Nama C1C2C3C4C5C6C7C8
A1Rasa Mandiri44774643
A2Boga Inti44785333
A3Sari Prima44784444
A4Sari Utama33685453
A5Rasa Extra44486553
A6Pangan Mandiri13678432
A7Rasa Sejahtera45777533
A8Organik Extra13677333
A9Fresh Prima45497433
A10Organik Inti25896552
A11Boga Mandiri15875444
A12Boga Prima23774554
A13Pangan Utama23594353
A14Boga Utama23566542

Keterangan

  • C1 : Sistem Komunikasi
  • C2 : Pengiriman
  • C3 : Kebijakan Garansi
  • C4 : Histori Performansi
  • C5 : Responsibilitas
  • C6 : Kualitas
  • C7 : Biaya langsung
  • C8 : Fleksibilitas

[3] Data yang diberikan merupakan data yang sudah dikuantisasi, bukan berupa data mentah. Data dalam contoh di generate secara otomatis dari nilai acak/random

2.3. Perhitungan

Berikut ini akan dijabarkan perhitungan dengan metoda CODAS secara manual lengkah demi langkah untuk memudahkan pemahaman terhadap metoda CODAS ini

2.3.1. Matriks Keputusan (X)

Langkah pertama adalah membuat matriks keputusan (X) dari data awal yang ada. Dari data pada TABEL 2 dapat dibuat matriks keputusan sebagai berikut :

$X=\left[ \begin{array}{ccccccccccc}\\ 4 & 4 & 7 & 7 & 4 & 6 & 4 & 3 \\4 & 4 & 7 & 8 & 5 & 3 & 3 & 3 \\4 & 4 & 7 & 8 & 4 & 4 & 4 & 4 \\3 & 3 & 6 & 8 & 5 & 4 & 5 & 3 \\4 & 4 & 4 & 8 & 6 & 5 & 5 & 3 \\1 & 3 & 6 & 7 & 8 & 4 & 3 & 2 \\4 & 5 & 7 & 7 & 7 & 5 & 3 & 3 \\1 & 3 & 6 & 7 & 7 & 3 & 3 & 3 \\4 & 5 & 4 & 9 & 7 & 4 & 3 & 3 \\2 & 5 & 8 & 9 & 6 & 5 & 5 & 2 \\1 & 5 & 8 & 7 & 5 & 4 & 4 & 4 \\2 & 3 & 7 & 7 & 4 & 5 & 5 & 4 \\2 & 3 & 5 & 9 & 4 & 3 & 5 & 3 \\2 & 3 & 5 & 6 & 6 & 5 & 4 & 2\end{array} \right]$

Pada matriks keputusan (X) tersebut, data pada baris ke-i adalah menunjukan data dari Alternatif ke-i; scodngkan data pada kolom ke-j menunjukkan kriteria ke-j. Misalnya untuk data x10,4 menunjukkan data untuk alternatif ke 10 yaitu Organik Inti untuk kriteria ke 4 (Histori Performansi) dengan nilai 9

Secara lengkap, matriks keputusan (X) yang diperoleh dapat ditampilkan dalam bentuk tabel sebagai berikut

TABEL 3 : Matriks Keputusan (X)
Alternatif Kriteria
KodeNama C1C2C3C4C5C6C7C8
A1Rasa Mandiri44774643
A2Boga Inti44785333
A3Sari Prima44784444
A4Sari Utama33685453
A5Rasa Extra44486553
A6Pangan Mandiri13678432
A7Rasa Sejahtera45777533
A8Organik Extra13677333
A9Fresh Prima45497433
A10Organik Inti25896552
A11Boga Mandiri15875444
A12Boga Prima23774554
A13Pangan Utama23594353
A14Boga Utama23566542

2.3.2. Matriks Normalisasi (N)

Matrik Normalisai (N) untuk dari data tiap-tiap alternatif dan kriteria diperhitungkan berdasarkan persamaan COD-02. Untuk data yang bertipe benefit, sebagai contoh untuk data $x_{10,8}$ diperhitungkan sebagai berikut

$\begin{align} n_{10,8}&=\frac{x_{10,8}}{max_{8}} \\ &=\frac{2}{4} \\ &=0.500\end{align}$

Sedangkan untuk kriteria yang bertipe cost diperhitungkan seperti untuk data $x_{10,7}$ sebagai berikut

$\begin{align} n_{10,7}&=\frac{min_{7}}{x_{10,7}} \\ &=\frac{3}{5} \\ &=0.600\end{align}$

Dengan perhitungan yang sama, dilakukan perhitungan nilai normalisai N untuk data-data yang lain sehingga diperoleh matriks Normalisasi N sebagai berikut:

$N=\left[\begin{array}{cccccccc} \\ 1.000 & 0.800 & 0.875 & 0.778 & 0.500 & 1.000 & 0.750 & 0.750 \\ 1.000 & 0.800 & 0.875 & 0.889 & 0.625 & 0.500 & 1.000 & 0.750 \\ 1.000 & 0.800 & 0.875 & 0.889 & 0.500 & 0.667 & 0.750 & 1.000 \\ 0.750 & 0.600 & 0.750 & 0.889 & 0.625 & 0.667 & 0.600 & 0.750 \\ 1.000 & 0.800 & 0.500 & 0.889 & 0.750 & 0.833 & 0.600 & 0.750 \\ 0.250 & 0.600 & 0.750 & 0.778 & 1.000 & 0.667 & 1.000 & 0.500 \\ 1.000 & 1.000 & 0.875 & 0.778 & 0.875 & 0.833 & 1.000 & 0.750 \\ 0.250 & 0.600 & 0.750 & 0.778 & 0.875 & 0.500 & 1.000 & 0.750 \\ 1.000 & 1.000 & 0.500 & 1.000 & 0.875 & 0.667 & 1.000 & 0.750 \\ 0.500 & 1.000 & 1.000 & 1.000 & 0.750 & 0.833 & 0.600 & 0.500 \\ 0.250 & 1.000 & 1.000 & 0.778 & 0.625 & 0.667 & 0.750 & 1.000 \\ 0.500 & 0.600 & 0.875 & 0.778 & 0.500 & 0.833 & 0.600 & 1.000 \\ 0.500 & 0.600 & 0.625 & 1.000 & 0.500 & 0.500 & 0.600 & 0.750 \\ 0.500 & 0.600 & 0.625 & 0.667 & 0.750 & 0.833 & 0.750 & 0.500 \\ \end{array}\right] $

Secara lengkap, matriks Normalisasi (N) yang diperoleh dapat ditampilkan dalam bentuk tabel sebagai berikut

TABEL 4 : Matriks Normalisasi (N)
Alternatif Kriteria
KodeNama C1C2C3C4C5C6C7C8
A1Rasa Mandiri1.0000.8000.8750.7780.5001.0000.7500.750
A2Boga Inti1.0000.8000.8750.8890.6250.5001.0000.750
A3Sari Prima1.0000.8000.8750.8890.5000.6670.7501.000
A4Sari Utama0.7500.6000.7500.8890.6250.6670.6000.750
A5Rasa Extra1.0000.8000.5000.8890.7500.8330.6000.750
A6Pangan Mandiri0.2500.6000.7500.7781.0000.6671.0000.500
A7Rasa Sejahtera1.0001.0000.8750.7780.8750.8331.0000.750
A8Organik Extra0.2500.6000.7500.7780.8750.5001.0000.750
A9Fresh Prima1.0001.0000.5001.0000.8750.6671.0000.750
A10Organik Inti0.5001.0001.0001.0000.7500.8330.6000.500
A11Boga Mandiri0.2501.0001.0000.7780.6250.6670.7501.000
A12Boga Prima0.5000.6000.8750.7780.5000.8330.6001.000
A13Pangan Utama0.5000.6000.6251.0000.5000.5000.6000.750
A14Boga Utama0.5000.6000.6250.6670.7500.8330.7500.500

2.3.3. Membuat Matriks Normalisasi Terbobot (R)

Setelah didapat nilai normalisasinya (N), berikutnya adalah membuat Matriks Normalisasi Terbobot (R) maka berdasarkan persamaan COD-03 dan COD-04 dapat dicari nilai R-nya. Sebagai contoh untuk kriteria ke-4 (Histori Performansi) pada alternatif ke-10 (Organik Inti) bisa dihitung nilai r10,4 sebagai berikut:

$\begin{align} r_{10,4}&= w_{4} \times n_{10,4} \\ &=0.082 \times 1.000 \\ &=0.082 \\ \end{align}$

Dengan perhitungan yang sama untuk semua data dari matriks normalisasi (N) diperoleh data matriks normalisasi terbobot (R) seperti dalam TABEL 5 berikut ini:

TABEL 5 : Matriks Normalisasi Terbobot (R)
No.AlternatifR
KodeNamaC1C2C3C4C5C6C7C8
1A1Rasa Mandiri0.0330.1440.0860.0640.0330.2300.1230.086
2A2Boga Inti0.0330.1440.0860.0730.0410.1150.1640.086
3A3Sari Prima0.0330.1440.0860.0730.0330.1530.1230.115
4A4Sari Utama0.0250.1080.0740.0730.0410.1530.0980.086
5A5Rasa Extra0.0330.1440.0490.0730.0490.1910.0980.086
6A6Pangan Mandiri0.0080.1080.0740.0640.0660.1530.1640.057
7A7Rasa Sejahtera0.0330.1800.0860.0640.0570.1910.1640.086
8A8Organik Extra0.0080.1080.0740.0640.0570.1150.1640.086
9A9Fresh Prima0.0330.1800.0490.0820.0570.1530.1640.086
10A10Organik Inti0.0160.1800.0980.0820.0490.1910.0980.057
11A11Boga Mandiri0.0080.1800.0980.0640.0410.1530.1230.115
12A12Boga Prima0.0160.1080.0860.0640.0330.1910.0980.115
13A13Pangan Utama0.0160.1080.0610.0820.0330.1150.0980.086
14A14Boga Utama0.0160.1080.0610.0550.0490.1910.1230.057

2.3.4. Menentukan Nilai Ideal Negatif (NS)

Nilai NS merupakan adalah merupakan nilai ternormalisasi terbobot (R) terkecil/minimum untuk setiap kriteria ke j. Sebagai contoh, sesuai dengan persamaan COD-05 dan COD-06 didapat nilai NS4 , yaitu nilai Ideal Negatif untuk kriteria ke-4 (Histori Performansi)) sebagai berikut :

$\begin{align} ns_{4}&= \substack{\text{min} \\i} r_{i,4}\\ &=\text{min}\{r_{1,4}, r_{2,4}, r_{3,4}, r_{4,4}, r_{5,4}, r_{6,4}, r_{7,4}, r_{8,4}, r_{9,4}, r_{10,4}, r_{11,4}, r_{12,4}, r_{13,4}, r_{14,4}\}\\ &=\text{min}\{0.064, 0.073, 0.073, 0.073, 0.073, 0.064, 0.064, 0.064, 0.082, 0.082, 0.064, 0.064, 0.082, 0.055\}\\ &=0.055\\ \end{align}$

Nilai dari ns4 diambil dari nilai minimum (terkecil) dari nilai ternormalisasi terbobot R dari setiap alternatif untuk kriteria ke-4
Setelah dilakukan perhitungan yang sama untuk kriteria-kriteria yang lain, maka diperoleh nilai Ideal Negatif NS seperti dalam TABEL 6 berikut ini :

TABEL 6 : Nilai Ideal Negatif (NS)
No.KriteriaNS
KodeNama
1C1Sistem Komunikasi0.008
2C2Pengiriman0.108
3C3Kebijakan Garansi0.049
4C4Histori Performansi0.055
5C5Responsibilitas0.033
6C6Kualitas0.115
7C7Biaya langsung0.098
8C8Fleksibilitas0.057

2.3.5. Menghitung Jarak Euclidian dan Taxicab (E/T)

Berdasarkan persamaan COD-07 Jarak Euclidian (E) untuk setiap alternatif ke-i dapat dihitung, semisal untuk alternatif ke-10 (Organik Inti) dapat ditentukan nilai Jarak Euclidian-nya (E10) seperti perhitungan berikut:

$\begin{align} E_{10}&=\sqrt{\sum^{m}_{j=1}(r_{10,j}-ns_{j})^2}\\ &=\sqrt{(r_{10,1}-ns_{1})^2+(r_{10,2}-ns_{2})^2+(r_{10,3}-ns_{3})^2+(r_{10,4}-ns_{4})^2+(r_{10,5}-ns_{5})^2+(r_{10,6}-ns_{6})^2+(r_{10,7}-ns_{7})^2+(r_{10,8}-ns_{8})^2}\\ &=\sqrt{(0.016-0.008)^2+(0.180-0.108)^2+(0.098-0.049)^2+(0.082-0.055)^2+(0.049-0.033)^2+(0.191-0.115)^2+(0.098-0.098)^2+(0.057-0.057)^2}\\ &=\sqrt{(0.008)^2+(0.072)^2+(0.049)^2+(0.027)^2+(0.016)^2+(0.077)^2+(0.000)^2+(0.000)^2}\\ &=\sqrt{0.000+0.005+0.002+0.001+0.000+0.006+0.000+0.000}\\ &=\sqrt{0.014556720117053}\\ &=0.12065123338389\end{align}$

Sedangkan nilai Jarak Taxicab (T) dari alternatif ke 10(Organik Inti) yaitu nilai T10-nya di perhitungkan sebagai berikut:

$\begin{align} T_{10}&=\sum^{m}_{j=1} |r_{10,j}-ns_{j}|\\ &=|r_{10,1}-ns_{1}|+|r_{10,2}-ns_{2}|+|r_{10,3}-ns_{3}|+|r_{10,4}-ns_{4}|+|r_{10,5}-ns_{5}|+|r_{10,6}-ns_{6}|+|r_{10,7}-ns_{7}|+|r_{10,8}-ns_{8}|\\ &=|0.016-0.008|+|0.180-0.108|+|0.098-0.049|+|0.082-0.055|+|0.049-0.033|+|0.191-0.115|+|0.098-0.098|+|0.057-0.057|\\ &=|0.008|+|0.072|+|0.049|+|0.027|+|0.016|+|0.077|+|0.000|+|0.000|\\ &=0.008+0.072+0.049+0.027+0.016+0.077+0.000+0.000\\ &=0.24972677595628\end{align}$

Untuk alternatif-alternatif yang lain bisa dihitung nilai E/T-nya dengan cara yang sama, dan hasilnya adalah sebagai berikut:

TABEL 7 : Nilai Jarak Euclidian/Taxicab (E/T)
No.AlternatifET
KodeNama
1A1Rasa Mandiri0.133960.27468
2A2Boga Inti0.093740.21821
3A3Sari Prima0.094650.23597
4A4Sari Utama0.059650.13434
5A5Rasa Extra0.095820.20046
6A6Pangan Mandiri0.086750.17031
7A7Rasa Sejahtera0.137230.33807
8A8Organik Extra0.080100.15255
9A9Fresh Prima0.117240.28115
10A10Organik Inti0.120650.24973
11A11Boga Mandiri0.114590.25883
12A12Boga Prima0.103230.18807
13A13Pangan Utama0.042280.07650
14A14Boga Utama0.083330.13798

2.3.6. Membentuk Matriks Relative Assessment (RA)

Matriks Relative Assessment (RA) dibentuk berdasarkan pada persamaan COD-09, COD-10, dan COD-11. Nilai parameter ambang batas ($\tau$) pada contoh kasus ini adalah sebesar 0.01 [4] . Sebagai contoh perhitungan, untuk nilai $h_{10,1}$ diperhitungkan sebagai berikut:

$\begin{align} h_{10,1}&=(E_{i}-E_{1})+(\psi (E_{10}-E_{1})\times(T_{10}-T_{1})) \\ &=(0.121-0.134)+(\psi (0.121-0.134)\times(0.250-0.275)) \\ &=(-0.013)+(\psi (-0.013)\times(-0.025)) \\ &\text{dengan nilai }\tau=0.01,\text{ maka diperoleh nilai } \psi (-0.013) = 1, \text{ sehingga diperoleh } \\ h_{10,1}&=-0.013+(1 \times -0.025) \\ &=-0.013+-0.025 \\ &=-0.038\end{align}$

[4] Nilai $\tau$ yang digunakan dalam artikel ini ditentukan secara random oleh sistem, antara 0.01 s.d. 0.05

Dengan menghitung semua nilai hi,k dari semua alternatif yang ada, diperoleh hasil seperti terlihat di TABEL 8 berikut ini:

TABEL 8 : Matriks Relative Assessment (RA)
NoAlternatif A1A2A3A4A5A6A7A8A9A10A11A12A13A14
1A10.0000.0970.0780.2150.1120.152-0.0030.1760.0100.0380.0350.1170.2900.187
2A2-0.0970.000-0.0010.118-0.0020.007-0.1630.079-0.086-0.058-0.061-0.0090.1930.091
3A3-0.0780.0010.0000.137-0.0010.008-0.1450.098-0.068-0.040-0.043-0.0090.2120.109
4A4-0.215-0.118-0.1370.000-0.102-0.063-0.281-0.039-0.204-0.176-0.179-0.0970.075-0.027
5A5-0.1120.0020.0010.1020.0000.009-0.1790.064-0.102-0.074-0.077-0.0070.1770.075
6A6-0.152-0.007-0.0080.063-0.0090.000-0.2180.007-0.141-0.113-0.116-0.0340.1380.003
7A70.0030.1630.1450.2810.1790.2180.0000.2430.0770.1050.1020.1840.3570.254
8A8-0.176-0.079-0.0980.039-0.064-0.007-0.2430.000-0.166-0.138-0.141-0.0590.114-0.003
9A9-0.0100.0860.0680.2040.1020.141-0.0770.1660.000-0.0030.0030.1070.2800.177
10A10-0.0380.0580.0400.1760.0740.113-0.1050.1380.0030.0000.0060.0790.2520.149
11A11-0.0350.0610.0430.1790.0770.116-0.1020.141-0.003-0.0060.0000.0820.2550.152
12A12-0.1170.0090.0090.0970.0070.034-0.1840.059-0.107-0.079-0.0820.0000.1730.070
13A13-0.290-0.193-0.212-0.075-0.177-0.138-0.357-0.114-0.280-0.252-0.255-0.1730.000-0.103
14A14-0.187-0.091-0.1090.027-0.075-0.003-0.2540.003-0.177-0.149-0.152-0.0700.1030.000

2.3.7. Menghitung Nilai Assessment Score (H)

Langkah berikutnya dalam metode CODAS ini adalah menghitung Nilai Assessment Score (H) berdasarkan persamaan COD-12. Semisal untuk nilai Assessment Score untuk alternatif ke-10 (Organik Inti) adalah sebagai berikut:

$\begin{align} H_{10}&=\sum_{k=1}^{14}h_{10,k}\\ &=h_{10,1}+h_{10,2}+h_{10,3}+h_{10,4}+h_{10,5}+h_{10,6}+h_{10,7}+h_{10,8}+h_{10,9}+h_{10,10}+h_{10,11}+h_{10,12}+h_{10,13}+h_{10,14}\\ &=(-0.038)+0.058+0.040+0.176+0.074+0.113+(-0.105)+0.138+0.003+0.000+0.006+0.079+0.252+0.149\\ &=0.94575013240572\end{align}$

Melalui perhitungan yang serupa dapat dihitung untuk nilai Assessment Score dari alternatif-alternatif yang lainnya, sehingga diperoleh hasil seperti terlihat pada TABEL 9 berikut ini:

TABEL 9 : Assessment Score (H)
NoAlternatifAssessment Score (H)
KodeNama
1A1Rasa Mandiri1.5042845428399
2A2Boga Inti0.0092968972220538
3A3Sari Prima0.1817539368633
4A4Sari Utama-1.5642232369724
5A5Rasa Extra-0.12145666941511
6A6Pangan Mandiri-0.58760014786182
7A7Rasa Sejahtera2.3106934894429
8A8Organik Extra-1.0198478384781
9A9Fresh Prima1.2436015042337
10A10Organik Inti0.94575013240572
11A11Boga Mandiri0.96112633646709
12A12Boga Prima-0.11151086688521
13A13Pangan Utama-2.6170619649298
14A14Boga Utama-1.1348061149323

2.3.8. Perangkingan

Nilai skor penilaian Assessment Score (H) yang diperoleh dari hasil perhitungan sebelumnya selanjutnya diurutkan dari yang terbesar hingga yang terendah seperti terlihat dalam TABEL 10 seperti berikut ini :

TABEL 10 : Perangkingan
NoAlternatifAssessment Score (H)Ranking
KodeNama
1A7Rasa Sejahtera2.31069348944291
2A1Rasa Mandiri1.50428454283992
3A9Fresh Prima1.24360150423373
4A11Boga Mandiri0.961126336467094
5A10Organik Inti0.945750132405725
6A3Sari Prima0.18175393686336
7A2Boga Inti0.00929689722205387
8A12Boga Prima-0.111510866885218
9A5Rasa Extra-0.121456669415119
10A6Pangan Mandiri-0.5876001478618210
11A8Organik Extra-1.019847838478111
12A14Boga Utama-1.134806114932312
13A4Sari Utama-1.564223236972413
14A13Pangan Utama-2.617061964929814

Dari hasil perankingan nilai skor penilaian (AS) tersebut, diperoleh bahwa lokasi ke-7 (Rasa Sejahtera) dengan skor penilaian sebesar 2.3106934894429 terpilih sebagai pemasok bahan baku yang paling baik, berdasar kriteria-kriteria dan bobot yang sudah ditentukan.

3.1. Persiapan Database

Sebagai bahan pembelajaran aplikasi CODAS ini; dibuat database (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.1.1. Membuat Data Tabel Kriteria

Berdasarkan contoh kasus di atas dibuatkan tabel untuk data-data kriteria sebagai berikut:

-- menghapus tabel cod_criterias jika sudah ada
DROP TABLE IF EXISTS cod_criterias;
-- membuat tabel cod_criterias jika tidak ada
CREATE TABLE IF NOT EXISTS cod_criterias(
  id_criteria TINYINT(3) UNSIGNED NOT NULL,
  criteria VARCHAR(100) NOT NULL,
  weight FLOAT NOT NULL,
  attribute SET('benefit','cost'),
  PRIMARY KEY(id_criteria)
)ENGINE=MyISAM;

-- memasukkan data-data kriteria
INSERT INTO cod_criterias(id_criteria,criteria,weight,attribute)
VALUES
(1,'Sistem Komunikasi',0.0330,'benefit'),
(2,'Pengiriman',0.1800,'benefit'),
(3,'Kebijakan Garansi',0.0980,'benefit'),
(4,'Histori Performansi',0.0820,'benefit'),
(5,'Responsibilitas',0.0660,'benefit'),
(6,'Kualitas',0.2300,'benefit'),
(7,'Biaya langsung',0.1640,'cost'),
(8,'Fleksibilitas',0.1150,'benefit');

3.1.2. Membuat Data Tabel Alternatif

Data-data mengenai kandidat yang akan dievaluasi seperti yang tertera pada contoh kasus di atas dapat di representasikan dalam tabel database sebagai berikut:

-- menghapus tabel cod_alternatives jika sudah ada
DROP TABLE IF EXISTS cod_alternatives;
-- membuat tabel cod_alternatives jika tidak ada
CREATE TABLE IF NOT EXISTS cod_alternatives(
  id_alternative SMALLINT(5) UNSIGNED NOT NULL AUTO_INCREMENT,
  name VARCHAR(30) NOT NULL,
  PRIMARY KEY(id_alternative)
) ENGINE=MyISAM;

-- memasukkan data-data alternatif
INSERT INTO cod_alternatives(id_alternative,name)
VALUES
(1,'Rasa Mandiri'),
(2,'Boga Inti'),
(3,'Sari Prima'),
(4,'Sari Utama'),
(5,'Rasa Extra'),
(6,'Pangan Mandiri'),
(7,'Rasa Sejahtera'),
(8,'Organik Extra'),
(9,'Fresh Prima'),
(10,'Organik Inti'),
(11,'Boga Mandiri'),
(12,'Boga Prima'),
(13,'Pangan Utama'),
(14,'Boga Utama');

Dalam tabel cod_alternatives tersebut hanya disimpan id dan nama alternatif-nya; dalam pengembangannya dapat ditambahkan atribut/properti data lainnya, semisal alamat, nomor telepon, email, dan sebagainya sesuai kebutuhan. Namun dalam contoh ini hanya diperlukan namanya saja.

3.1.3. Membuat Data Tabel Hasil Evaluasi

Berikutnya adalah membuat tabel yang berisi hasil evaluasi dari tiap-tiap kandidat(alternatif) terhadap kriteria-kriteria yang diberikan. Data-data yang ada pada contoh kasus di atas dapat di representasikan dalam tabel relasi antara tabel cod_criterias dengan tabel cod_alternatives, yaitu tabel cod_evaluations sebagai berikut:

-- menghapus tabel cod_evaluations jika sudah ada
DROP TABLE IF EXISTS cod_evaluations;
-- membuat tabel cod_evaluations jika tidak ada
CREATE TABLE IF NOT EXISTS cod_evaluations(
  id_alternative SMALLINT(5) UNSIGNED NOT NULL,
  id_criteria TINYINT(3) UNSIGNED NOT NULL,
  value FLOAT NOT NULL,
  PRIMARY KEY (id_alternative,id_criteria)
)ENGINE=MyISAM;

INSERT INTO cod_evaluations(id_alternative,id_criteria,value)
VALUES
(1,1,4),(1,2,4),(1,3,7),(1,4,7),(1,5,4),(1,6,6),(1,7,4),(1,8,3),
(2,1,4),(2,2,4),(2,3,7),(2,4,8),(2,5,5),(2,6,3),(2,7,3),(2,8,3),
(3,1,4),(3,2,4),(3,3,7),(3,4,8),(3,5,4),(3,6,4),(3,7,4),(3,8,4),
(4,1,3),(4,2,3),(4,3,6),(4,4,8),(4,5,5),(4,6,4),(4,7,5),(4,8,3),
(5,1,4),(5,2,4),(5,3,4),(5,4,8),(5,5,6),(5,6,5),(5,7,5),(5,8,3),
(6,1,1),(6,2,3),(6,3,6),(6,4,7),(6,5,8),(6,6,4),(6,7,3),(6,8,2),
(7,1,4),(7,2,5),(7,3,7),(7,4,7),(7,5,7),(7,6,5),(7,7,3),(7,8,3),
(8,1,1),(8,2,3),(8,3,6),(8,4,7),(8,5,7),(8,6,3),(8,7,3),(8,8,3),
(9,1,4),(9,2,5),(9,3,4),(9,4,9),(9,5,7),(9,6,4),(9,7,3),(9,8,3),
(10,1,2),(10,2,5),(10,3,8),(10,4,9),(10,5,6),(10,6,5),(10,7,5),(10,8,2),
(11,1,1),(11,2,5),(11,3,8),(11,4,7),(11,5,5),(11,6,4),(11,7,4),(11,8,4),
(12,1,2),(12,2,3),(12,3,7),(12,4,7),(12,5,4),(12,6,5),(12,7,5),(12,8,4),
(13,1,2),(13,2,3),(13,3,5),(13,4,9),(13,5,4),(13,6,3),(13,7,5),(13,8,3),
(14,1,2),(14,2,3),(14,3,5),(14,4,6),(14,5,6),(14,6,5),(14,7,4),(14,8,2);

3.2. Koneksi Ke Database Server

Koneksi ke database server serta pengambilan data-data dari database diperlukan untuk selanjutnya diproses menggunakan metode CODAS.

Dari databse 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.1 Mengambil Data Alternatif

Sebelum masuk kebagian inti perhitungan dengan metode CODAS, sebelumnya diambil terlebih dahulu data-data yang akan digunakan dari database. Yang pertama ada data Alternatif. Data ini diambil dari tabel cod_alternatives dan dimasukkan ke dalam variabel $alternatif dengan kode script PHP seperti berikut

<?php
//-- inisialisasi variabel array alternatif
$alternatif=array();
$sql='SELECT * FROM cod_alternatives';
$data=$db->query($sql);
while(
$row $data->fetch_object()){
    
$alternatif[$row->id_alternative]=$row->name;
}
?>

Data nama alternatif dimasukkan ke dalam variabel $alternatif dengan index/key array-nye merupakan id_alternatif-nya

3.2.2 Mengambil Data Kriteria dan Bobot

Data kriteria dan bobot diambil dari tabel cod_criterias dan dimasukkan dalam variabel array $kriteria dan $w sebagai berikut:

<?php
//-- inisialisasi variabel array kriteria dan bobot (W)
$kriteria=Array=array();
$sql='SELECT * FROM cod_criterias';
$data=$db->query($sql);
while(
$row $data->fetch_object()){
    
$kriteria[$row->id_criteria]=array($row->name,$row->attribute);
    
$w[$row->id_kriteria]=$row->weight;
}
?>

Data kriteria berupa nama kriteria dan atribut/tipe-nya dimasukkan ke dalam variabel array dua dimensi $kriteria, key/index yang pertama merupakan id_criteria-nya scodngkan index/key yang kedua, jika '0' maka adalah nama kriteria-nya sendangkan jika '1' maka merupakan atribut/tipe-nya. Sebagai contoh untuk $kriteria[2][0] berisi data nama dari kriteria ke-2 yaitu 'Pengiriman' dengan atribut/tipe 'benefit'

Scodngkan untuk data nilai bobot-nya dimasukkan ke dalam variabel $w dengan index/key-nya berupa id_kriteria yang bersesuaian

3.3. Langkah-Langkah CODAS

Bagian berikutnya adalah bagian inti dari perhitungan dengan metode CODAS. Di sini dijelaskan langkah per langkah-nya untuk kode PHP-nya, sesuai dengan langkah-langkah perhitungan CODAS secara manual sebelumnya.

3.3.1. Menentukan Matriks Keputusan (X)

Mengacu pada persamaan COD-01 kita dapat membuat matriks keputusan (X) dengan mengambil data dari tabel cod_evaluations yang kemudian dimasukkan dalam variable array $X dengan kode PHP sebagai berikut:

<?php
//-- inisialisasi variabel array matriks keputusan X
$X=array();
//-- ambil nilai dari tabel
$sql='SELECT * FROM cod_evaluations';
$data=$db->query($sql);
while(
$row $data->fetch_object()){
    
$i=$row->id_alternative;
    
$j=$row->id_criteria;
    
$X[$i][$j]=$aij;
}
?>

Variable array $X merupakan array dua dimensi, dimana dimensi yang pertama merupakan index dari alternatif-nya, scodngkan dimensi yang kedua merupakan index kriteria-nya.$X[$i][$j] berarti merupakan data matrik keputusan untuk alternatif ke $i dan kriteria ke $j

3.3.2. Matriks Normalisasi (N)

Dari matrik keputusan X yang sudah ditentukan dilangkah sebelumnya, kemudian dicari nilai Normalisasinya (N) dengan script berikut:

<?php
//-- inisialisasi array nilai normalisasi (N)
$N=array();
//-- proses untuk setiap data alternatif ke-i
foreach($X as $i=>$xi){
    
$N[$i]=array();
    
//-- proses untuk setiap data alternatif ke-i kriteria ke-j
    
foreach($xi as $j=>$xij){
        if(
$kriteria[$j][1]=='benefit'){
            
//-- normalisasi utk kriteria benefit
            
$N[$i][$j]=$xij/$x_max[$j];
        }else{
            
//-- normalisasi utk kriteria cost
            
$N[$i][$j]=$x_min[$j]/$xij;
        }
    }
}
?>

Sesuai dengan persamaan COD-02, untuk normalisasi dari data berkriteria benefit maka nilainya dibagi dengan nilai maksimum $x_max pada kriteria tersebut; sedangkan untuk data yang berkriteria cost maka nilai normalisasinya adalah merupkan hasil pembagian nilai minimum $x_min pada kriteria tersebut dibagi dengan nilai datanya.

Nilai-nilai maksimum $x_max dan minimum $x_min untuk masing-masing kriteria sebelumnya dicari dengan script sebagai berikut:

<?php
//-- inisialisasi Nilai Min dan Max
$x_min=$x_max=array();
//-- proses untuk setiap data alternatif ke-i
foreach($X as $i=>$xi){
    
//-- proses untuk setiap data alternatif ke-i kriteria ke-j
    
foreach($xi as $j=>$xij){
        
//-- inisialisasi Nilai Min dan Max utk kriteria ke-j
        
if(!isset($x_min[$j])){
            
$x_min[$j]=9;
            
$x_max[$j]=1;
        }
        
//-- menentukan nilai min/max tiap kriteria
        
$x_min[$j]=($x_min[$j]>$xij)?$xij:$x_min[$j];
        
$x_max[$j]=($x_max[$j]<$xij)?$xij:$x_max[$j];
    }
}
?>

Dalam mencari nilai maksimum $x_max dan minimum $x_min untuk tiap-tiap kriteria sebelumnya diinisialisasi dengan nilai sebagai berikut:

  • nilai minimum $x_min diinisialisasi dengan nilai yang tertinggi (dalam contoh ini memakai nilai 9, sesuaikan dengan nilai data terbesar yang ada dalam matriks keputusan X yang diolah)
  • nilai maximum $x_max diinisialisasi dengan nilai yang terendah (dalam contoh ini memakai nilai 1, sesuaikan dengan nilai data terkecil yang ada dalam matriks keputusan X yang diolah)

Nilai maksimum/minimum untuk setiap kriteria diperoleh dengan membandingkan nilai $x_max/$x_min dengan nilai data matriks keputusan X untuk alternatif ke-i dan kriteria ke-j, yaitu nilai variable $xij dalam script tersebut

3.3.3. Matriks Normalisasi Terbobot (R)

Berdasarkan persamaan COD-03 dan COD-04 dibuat script sebagai berikut :

<?php
//-- inisialisasi Nilai Normalisasi Terbobot (R)
$R=array();
foreach(
$N as $i=>$ni){
    
//-- inisialisasi Nilai Normalisasi Terbobot Alternatif ke-i (Ri)
    
$R[$i]=array();
    foreach(
$ni as $j=>$nij){
        
//-- menentukan Nilai Normalisasi Terbobot Alternatif ke-i kriteria ke-j (Rij)
        
$R[$i][$j]=$nij*$w[$j];
    }
}
?>

Dalam script di atas, nilai normalisasi terbobot R didapat dari nilai matriks normalisasi N dikali dengan nilai bobot w ditiap kriteria-nya.

3.3.4. Menentukan Nilai Ideal Negatif(NS)

Langkah selanjutnya adalah menghitung nilai Ideal Negatif NS sebagai berikut:

<?php
//-- inisialisasi array NS
$ns=array();
foreach(
$N as $i=>$ni){
    foreach(
$ni as $j=>$nij){
        
//-- inisialisasi nilai Ideal Negatif kriteria ke-j (NSj)
        
if(!isset($ns[$j])) $ns[$j]=1;
        
//-- menentukan nilai minimum per kriteria
        
$ns[$j]=$ns[$j]>$R[$i][$j]?$R[$i][$j]:$ns[$j];
    }
}
?>

Nilai Ideal Negatif NS adalah nilai terkecil (minimum) untuk setiap kriteria. Sebelumnya untuk tiap-tiap kriteria nilai Ideal NEgatif untuk kriteria ke-j ($ns[$j]) diinisialisasi dengan nilai tertinggi yang mungkin yaitu 1, untuk kemudian dibandingan dengan nilai Normalisasi Terbobot untuk kriteria-j dari setiap alternatif ke-i ($R[$i][$j]) untuk diambil nilai yang lebih kecil.

3.3.5. Menghitung Jarak Euclidian dan Taxicab(E/T)

Langkah berikutnya adalah menghitung Jarak Euclidian dan Taxicab E/T dengan script berikut ini:

<?php
//-- inisialisasi array nilai jarak Euclidean dan Taxicab (E/T)
$E=$T=array();
foreach(
$R as $i=>$ri){
    
//-- inisialisasi nilai jarak Euclidean dan Taxicab (E/T) alternatif ke-i
    
$E[$i]=0;
    
$T[$i]=0;
    foreach(
$ri as $j=>$rij){
        
//-- menghitung jumlah kuadrat selisih nilai
        
$E[$i]+=($rij-$ns[$j])*($rij-$ns[$j]);
        
//-- menghitung jarak Taxicab
        //-- menhitung jumlah absolute selisih nilai
        
$T[$i]+=abs($rij-$ns[$j]);
    }
}
//-- menghitung akar kuadarat jumlah kuadrat nilai selisih
foreach($E as $i=>$e){
    
$E[$i]=sqrt($e);
}
?>

3.3.6. Membentuk Matriks Relative Assessment (RA)

Berdasarkan persamaan COD-09 sampai dengan COD-11 kemudian dicari nilai Relative Assessments dengan script berikut:

<?php
//-- fungsi ambang batas Jarak Euclidean
function f_tau($x,$tau){
    
$v_tau=abs($x)<$tau?0:1;
    return 
$v_tau;
}

//-- membuat matriks ralative Assessment RA
$h=array();
for(
$i=1;$i<=$jml_alternative;$i++){
    
$h[$i]=array();
    for(
$k=1;$k<=$jml_alternative;$k++){
        
//-- menghitung selisih jarak Euclidian antara alternatif ke-i dan ke-k
        
$delta=$E[$i]-$E[$k];
        
//-- menghitung nilai item Relative Assessment
        
$h[$i][$k]=$delta+f_tau($delta,$tau)*($T[$i]-$T[$k]);
    }
}
?>

Pada dasarnya nilai item matriks Relative Assessment (RA) untuk alternatif ke-i terhadap alternatif ke-k adalah nilai hi,k adalah merupakan nilai selisih jarak Euclidian alternatif ke-i dengan alternatif ke-K (Ei-Ek) dalam ambang batas tertentu ($\tau$); di luar (ambang batas) tersebut maka merupakan nilai selisih jarak Taxicab dari alternatif ke-i dengan alternatif ke-k (Ti-Tk).

3.3.7. Mengitung Nilai Assessment Score (H)

Mengacu pada persamaan COD-12 dicari Nilai assessment Score (H) dengan script sebagai berikut:

<?php
//-- menghitung nilai Assessment score H
$H=array();
for(
$i=1;$i<=$jml_alternative;$i++){
    
$H[$i]=0;
    foreach(
$h[$i] as $hi){
        
$H[$i]+=$hi;
    }
}
?>

Nilai assessment Score untuk alternatif kei($H[$i]) merupakan jumlah keselurah nilai item matriks Relative Assessment dari alternatif $i terhadap alternatif-alternatif yang lain.

3.3.8. Perangkingan

Bagian terakhir dari proses metode CODAS adalah perankingan, dimana data skor penilaian $H diurutkan dari yang terbesar hingga yang terkecil. Berikut adalah contoh script PHP-nya

<?php
//-- mengurutkan secara descending
arsort($H);
//-- ambil key-index yang pertama
$terpilih=key($H);
echo 
"Dari hasil perhitungan dipilih alternatif ke-{$terpilih}"
    
." ({$alternatif[$terpilih]}) <br>dengan nilai skor penilaian "
    
." sebesar {$H[$terpilih]}";
?>

Data nilai skor penilaian $H diurutkan secara descending dengan fungsi arsort() untuk mengurutkan berdasarkan nilay array namun tetap mempertahankan key-index-nya. Setelah diurutkan, maka item array yang pertama adalah nilai skor penilaian H yang terpilih, dan key-index-nya menunjukkan alternatif ke-i. Key-index ini diambil dengan fungsi key(), dan selanjutnya ditampilkan hasilnya dengan mengambil nilai dari variabel array $alternatif dengan key-index yang didapat dari baris sebelumnya, yaitu dalam variabel $terpilih. Hasil yang ditampilkan kurang lebih, sebagai berikut :

Dari hasil perhitungan dipilih alternatif ke-7 (Rasa Sejahtera)
dengan nilai skor penilaian sebesar 2.3106934894429

Source code selengkapnya bisa dilihat di tautan ini source source