VIšekriterijumsko KOmpromisno Rangiranje(VIKOR) merupakan salah satu metode yang digunakan pada Multi Attribute Decision Making (MADM) dengan melihat solusi/alternatif terdekat sebagai pendekatan kepada solusi ideal dalam perangkingan.
author : cahya dsn
,
published on : March 20th, 2018
updated on : March 11th, 2019
Ide perangkingan kompromi diperkenalkan oleh Yu (Yu 1973
) dan Zeleny (Zeleny 1982
). Kemudian, Opricovic dan Tzeng memperkenalkan metode VIKOR sebagai metode perangkingan kompromi (Opricovic and Tzeng, 2007
). Solusi kompromi merupakan sebuah solusi yang layak yang terdekat pada solusi ideal, sedangkan kompromi berarti persetujuan yang dibuat dengan saling mengizinkan (Rao 2008
).
VIšekriterijumsko KOmpromisno Rangiranje (VIKOR) merupakan salah satu metode yang digunakan pada Multi Atribute Decision Making (MADM) dengan melihat solusi/alternatif terdekat sebagai pendekatan kepada solusi ideal dalam perangkingan (Rao, 2008
). Metode ini berfokus pada perankingan dan pemilihan dari sejumlah alternatif walaupun kriterianya saling bertentangan (Yin-Yu, 2011
).
VIKOR (VIšekriterijumsko KOmpromisno Rangiranje dalam bahasa Serbia, yang artinya Perangkingan Kompromis MultiKriteria) adalah metode perankingan dengan menggunakan indeks peringkat multikriteria berdasarkan ukuran tertentu dari kedekatan dengan solusi yang ideal. Metode VIKOR merupakan salah satu metode yang dapat dikategorisasikan dalam Multi-Criteria Decision Analysis/MCDA (Opricovic 1998
). Metode VIKOR dikembangkan sebagai metode Multi-Criteria Decision Making/MCDM untuk menyelesaikan pengambilan keputusan bersifat diskrit pada kriteria yang bertentangan dan non-commensurable(tidak ada cara yang tepat untuk menentukan mana yang lebih akurat) (Opricovic and Tzeng 2007
).
Metode VIKOR fokus pada perankingan dan memilih dari satu set sampel dengan kriteria yang saling bertentangan, yang dapat membantu para pengambil keputusan untuk mendapatkan keputusan akhir (Opricovic and Tzeng 2007
). Metode ini sangat berguna pada situasi dimana pengambil keputusan tidak memiliki kemampuan untuk menentukan pilihan pada saat desain sebuah sistem dimulai (Sayadi and Heydari 2009
).
Metode VIKOR adalah sebuah metode untuk optimisasi/optimalisasi kriteria majemuk dalam suatu sistem yang kompleks (Khezrian and Kadir, et al. 2011
). Konsep dasar VIKOR adalah menentukan ranking dari sampel-sampel yang ada dengan melihat hasil dari nilai-nilai sesalan atau regrets (R) dari setiap sampel. Metode VIKOR telah digunakan oleh beberapa peneliti dalam MCDM, seperti dalam pemilihan vendor (Datta and Mahapatra, et al. 2010
), perbandingan metode-metode outranking (Opricovic and Tzeng 2007
), pemilihan bahan dalam industri (Cristobal and Biezma, et al. 2009
). Dan masih banyak lagi penelitian-penelitian yang menggunakan metode VIKOR ini.
Langkah-langkah yang digunakan dalam Metode VIKOR adalah sebagai berikut (Kusdiantoro 2012
): :
F
)W
)N
)F*
)S
) dan Regret Measures(R
)Q
)F
)Langkah 1 : Menyusun kriteria dan alternatif ke dalam bentuk matriks
Dari data yang didapat dijadikan data untuk matriks Keputusan F
). Pada langkah ini setiap kriteria dan alternatif disusun ke dalam bentuk matriks F
; Aj
menyatakan alternatif ke i=1,2,3,...m
; dan Cxn
menyatakan kriteria ke j=1,2,3,... n
.
Keterangan
i
pada kriteria j
W
)Langkah 2 : Menentukan bobot untuk setiap kriteria
Menentukan bobot kriteria yang diperoleh dari pengguna sistem sesuai dengan kebutuhan atau kriteria yang diinginkan. Rumusan umum untuk bobot kriteria adalah berlaku persamaan :
Keterangan
j
N
)Langkah 3 : Membuat matriks normalisasi dengan menentukan nilai positif dan nilai negatif sebagai solusi ideal dari setiap kriteria
Matrik F
tersebut kemudian di normalisasikan dengan persamaan sebagai berikut :
Keterangan
i
pada kriteria j
j
j
Penentuan nilai data terbaik/positif (f+j) dan terburuk/negatif (f-j) atau dengan istilah Cost dan Benefit dalam satu variabel penelitian ditentukan oleh jenis data variabel penelitian higher-the-better (HB) atau lower-the-better (LB) (Kusdiantoro 2012
). Nilai (f+j) dan (f-j) tersebut dinyatakan sebagai berikut :
Keterangan
j
j
F*
)Langkah 4 : Menentukan nilai terbobot dari data ternormalisasi untuk setiap alternatif dan kriteria
Melakukan perkalian antara nilai data yang telah dinormalisasi (N
) dengan nilai bobot kriteria (W
) yang telah ditentukan, dengan perhitungan sebagai berikut :
Keterangan
i
pada kriteria j
j
i
pada kriteria j
Langkah 5 : Menghitung Nilai Utility Measure (S
) dan Regret Measure (R
)
Utility measures (S
) dan Regret measures (R
) dari setiap alternatif dihitung menggunakan rumus sebagai berikut :
$S_i$ merupakan jarak Manhattan (Manhattan distance) yang terbobot dan dinormalisasi
$R_i$ merupakan jarak Chebyshev (Chebyshev distance) yang terbobot dan dinormalisasi.
Si
(maximum group utility) dan Ri
(minimum individual regret of the opponent), keduanya menyatakan utility measures yang diukur dari titik terjauh dan titik terdekat dari solusi ideal, sedangkan wj
adalah bobot yang diberikan pada setiap kriteria ke-j
Langkah 6 : Menghitung indeks VIKOR (Q
)
Setiap alternatif i
dihitung indeks VIKOR-nya menggunakan rumus sebagai berikut
Dimana,
$S^{-}=min_i(S_i)$
$S^{+}=max_i(S_i)$
$R^{-}=min_i(R_i)$
$R^{+}=max_i(R_i)$
dan v
merupakan bobot berkisar antara 0-1 (umumnya bernilai 0.5). Nilai v
adalah merupakan nilai bobot strategy of the maximum group utility, sedangkan nilai 1-v
adalah bobot dari individual regret
Semakin kecil nilai indeks VIKOR (Qi
) maka semakin baik pula solusi alternatif tersebut.
Langkah 7 : Perankingan alternatif
Setelah Qi
dihitung, maka akan terdapat 3 macam perangkingan yaitu Si
, Ri
dan Qi
. Solusi kompromi dilihat pada perangkingan Qi
.
Pengurutan perankingan ditentukan dari nilai yang paling rendah dengan solusi kompromi sebagai solusi ideal dilihat dari perankingan Qi
dengan nilai terendah. Karena nilai Si
merupakan solusi yang diukur dari titik terjauh solusi ideal, sedangkan nilai Ri
merupakan solusi yang diukur dari titik terdekat solusi ideal
Solusi kompromi ditentukan dari alternatif yang memiliki peringkat terbaik dengan mengukur indeks VIKOR yang minimum, apabila 2 kondisi berikut terpenuhi:
Di mana m
adalah banyaknya alternatif, alternatif A1
adalah peringkat pertama danA2
adalah peringkat kedua dari perankingan Qi
.
Alternatif A1
juga harus menjadi peringkat terbaik dalam perankingan. Solusi kompromi ini stabil dalam proses pengambilan keputusan, yang dapat menjadi: voting by majority rule (saat v > 0,5), atau by concensus (v ≈ 0,5), atau with veto (v < 0,5).
Jika salah satu kondisi tidak memuaskan, maka solusi kompromi dapat diajukan sebagai berikut :
A1
dan A2
jika hanya kondisi 2 tidak memuaskan, atau A1
, A2
, ... , Am
jika kondisi 1 tidak memuaskan. Am
merupakan alternatif yang ditentukan dengan menggunakan persamaan :
Di mana m
maksimum adalah alternatif yang posisinya berada pada kondisi yang saling berdekatan.
Metode VIKOR memiliki kelebihan dan kekurangan sebagai berikut (Lengkong, SP - 2016
):
Beberapa kelebihan Metode VIKOR adalah:
Sedangkan pada metode VIKOR memiliki kekurangan :
Masalah penyeleksian penerima beasiswa merupakan masalah yang dapat diselesaikan dengan teknik MADM dengan menggunakan metode VIKOR. Metode VIKOR menyediakan perankingan kepada solusi terdekat meskipun terdapat kriteria yang bertentangan, sehingga pembuat keputusan dalam hal ini bagian kemahasiswaan dapat memilih perankingan yang tepat sesuai dengan alternatif yang ada.
Dalam contoh kasus ini ada 17 calon penerima beasiswa, yaitu Oscar, Shinta, Usman S., Gatot, Nina, P. Vicky, Pandu H., S. Kevin, H. Reza, L. Lina, Yuna R., Firza, Zaki, K. Mirza, M. Enrico, Carlie, dan D. James
Dalam contoh kasus ini, kriteria-kriteria yang dipertimbangkan untuk penerima beasiswa adalah sebagai berikut :
Data-data awal yang akan diperhitungakan dengan metoda VIKOR ini adalah seperti yang tercantum dalam TABEL 1 berikut ini
Alternatif | Kriteria | ||||
---|---|---|---|---|---|
Kode | Nama | C1 | C2 | C3 | C4 |
A1 | Oscar | 3.23 | 5 | 900 | 770336 |
A2 | Shinta | 3.59 | 2 | 450 | 658003 |
A3 | Usman S. | 2.94 | 2 | 2200 | 637691 |
A4 | Gatot | 3.28 | 4 | 900 | 241072 |
A5 | Nina | 3.46 | 5 | 900 | 976604 |
A6 | P. Vicky | 3.72 | 4 | 2200 | 957469 |
A7 | Pandu H. | 3.62 | 4 | 1300 | 331327 |
A8 | S. Kevin | 3.66 | 2 | 2200 | 107995 |
A9 | H. Reza | 2.54 | 5 | 900 | 380003 |
A10 | L. Lina | 3.00 | 6 | 2200 | 163145 |
A11 | Yuna R. | 3.03 | 7 | 2200 | 673882 |
A12 | Firza | 2.89 | 4 | 1300 | 729486 |
A13 | Zaki | 2.92 | 7 | 450 | 666588 |
A14 | K. Mirza | 2.69 | 3 | 900 | 692414 |
A15 | M. Enrico | 3.07 | 3 | 900 | 188398 |
A16 | D. James | 3.69 | 6 | 2200 | 407197 |
A17 | Carlie | 2.92 | 7 | 900 | 296435 |
Keterangan
Langkah pertama : menyusun alternatif dan kriteria ke dalam bentuk matriks keputusan (F
) sebagai berikut:
$F=\begin{vmatrix} 3.23 & 5 & 900 & 770336 \\ 3.59 & 2 & 450 & 658003 \\ 2.94 & 2 & 2200 & 637691 \\ 3.28 & 4 & 900 & 241072 \\ 3.46 & 5 & 900 & 976604 \\ 3.72 & 4 & 2200 & 957469 \\ 3.62 & 4 & 1300 & 331327 \\ 3.66 & 2 & 2200 & 107995 \\ 2.54 & 5 & 900 & 380003 \\ 3.00 & 6 & 2200 & 163145 \\ 3.03 & 7 & 2200 & 673882 \\ 2.89 & 4 & 1300 & 729486 \\ 2.92 & 7 & 450 & 666588 \\ 2.69 & 3 & 900 & 692414 \\ 3.07 & 3 & 900 & 188398 \\ 3.69 & 6 & 2200 & 407197 \\ 2.92 & 7 & 900 & 296435\end{vmatrix}$
Langkah kedua : menentukan bobot kriteria. Berdasarkan data yang diberikan di atas, maka diperoleh data bobot kriteria (W
) sebagai berikut:
$W = [ 0.50\ ,\ 0.20\ ,\ 0.05\ ,\ 0.25 ]$
Langkah ketiga : membuat matriks Normalisasi (N
) berdasarkan persamaan [VIK-03], dengan sebelumnya dihitung dulu nilai positif dan negatif dari masing-masing kriterianya. Dalam penentuan nilai postif dan negatif ini perlu diperhatikan tipe dari tiap kriteria (min/max) untuk menentukan nilai terbaik untuk kriteria tersebut merupakan nilai minimal atau maksimal-nya. Setiap kriteria yang dinilai berdasarkan ukuran terendah semakin baik (min), maka nilai terbaiknya adalah -1. Sedangkan, Setiap kriteria yang dinilai berdasarkan ukuran tertinggi semakin baik (max), maka nilai terbaiknya adalah 1.
Untuk menghitung nilai positif dan negatif sebagai solusi ideal dari setiap kriteria ini digunakan persamaan [VIK-04] dan [VIK-05].
$\begin{align}
f_1^+&= max\{\ f_{1,1}\ ;\ f_{2,1}\ ;\ f_{3,1}\ ;\ ...\ ;\ f_{17,1}\ \} \\
&= max\{\ 3.23\ ;\ 3.59\ ;\ 2.94\ ;\ ...\ ;\ 2.92\ \}\\
&= 3.72\end{align}$
dan seterusnya hingga $f_{4}^{+}$
$\begin{align}
f_1^-&= min\{\ f_{1,1}\ ;\ f_{2,1}\ ;\ f_{3,1}\ ;\ ...\ ;\ f_{17,1}\ \} \\
&= min\{\ 3.23\ ;\ 3.59\ ;\ 2.94\ ;\ ...\ ;\ 2.92\ \}\\
&= 2.54\end{align}$
dan seterusnya hingga $f_{4}^{-}$
Setelah nilai positif dan negatif diperoleh maka selanjutnya menghitung normalisasi matriks keputusan $N$ sesuai dengan persamaan [VIK-03], untuk masing-masing alternatif dan kriteria sebagai berikut
Untuk semua alternatif pada kriteria ke-1 dihitung nilai normalisasi $N_{1,1}$ sampai dengan $N_{17,1}$ seperti ini:
$\begin{align} N_{1,1}&=\frac{(f_1^{+}-f_{1,1})}{f_1^{+}-f_1^{-}}\\ &=\frac{(3.72 - 3.23)}{(3.72 - 2.54)} \\ &=0.415\end{align}$
$\begin{align} N_{2,1}&=\frac{(f_1^{+}-f_{2,1})}{f_1^{+}-f_1^{-}}\\ &=\frac{(3.72 - 3.59)}{(3.72 - 2.54)} \\ &=0.110\end{align}$
... dan seterusnya hingga
$\begin{align} N_{17,1}&=\frac{(f_1^{+}-f_{17,1})}{f_1^{+}-f_1^{-}}\\ &=\frac{(3.72 - 2.92)}{(3.72 - 2.54)} \\ &=0.678\end{align}$
demikian juga dilakukan cara yang sama untuk semua alternatif untuk kriteria ke-2 hingga kriteria ke-4 ($N_{1,2},..,N_{17,2}$ s.d. $N_{1,4},..,N_{17,4}$) dan diperoleh matriks normalisasi (N
) sebagai berikut :
$N=\begin{vmatrix} 0.415 & 0.600 & 0.257 & 0.763 \\ 0.110 & 0.000 & 0.000 & 0.633 \\ 0.661 & 0.000 & 1.000 & 0.610 \\ 0.373 & 0.400 & 0.257 & 0.153 \\ 0.220 & 0.600 & 0.257 & 1.000 \\ 0.000 & 0.400 & 1.000 & 0.978 \\ 0.085 & 0.400 & 0.486 & 0.257 \\ 0.051 & 0.000 & 1.000 & 0.000 \\ 1.000 & 0.600 & 0.257 & 0.313 \\ 0.610 & 0.800 & 1.000 & 0.063 \\ 0.585 & 1.000 & 1.000 & 0.651 \\ 0.703 & 0.400 & 0.486 & 0.716 \\ 0.678 & 1.000 & 0.000 & 0.643 \\ 0.873 & 0.200 & 0.257 & 0.673 \\ 0.551 & 0.200 & 0.257 & 0.093 \\ 0.025 & 0.800 & 1.000 & 0.344 \\ 0.678 & 1.000 & 0.257 & 0.217\end{vmatrix}$
Langkah keempat : Matriks keputusan yang telah dinormalisasi (N
) selanjutnya dikalikan dengan bobot kriteria sebagai berikut:
$\begin{align} F_{1,1}^{*}&=N_{1,1}*w_1 \\ &=0.415 * 0.50 \\ &=0.208\end{align}$
$\begin{align} F_{2,1}^{*}&=N_{2,1}*w_1 \\ &=0.110 * 0.50 \\ &=0.055\end{align}$
... dan seterusnya hingga
$\begin{align} F_{17,1}^{*}&=N_{17,1}*w_1 \\ &=0.678 * 0.50 \\ &=0.339\end{align}$
demikian juga dilakukan cara yang sama hingga kriteria ke-4 dan diperoleh matriks normalisasi terbobot ($F^{*}$) sebagai berikut :
$F^{*}=\begin{vmatrix} 0.208 & 0.120 & 0.013 & 0.191 \\ 0.055 & 0.000 & 0.000 & 0.158 \\ 0.331 & 0.000 & 0.050 & 0.152 \\ 0.186 & 0.080 & 0.013 & 0.038 \\ 0.110 & 0.120 & 0.013 & 0.250 \\ 0.000 & 0.080 & 0.050 & 0.244 \\ 0.042 & 0.080 & 0.024 & 0.064 \\ 0.025 & 0.000 & 0.050 & 0.000 \\ 0.500 & 0.120 & 0.013 & 0.078 \\ 0.305 & 0.160 & 0.050 & 0.016 \\ 0.292 & 0.200 & 0.050 & 0.163 \\ 0.352 & 0.080 & 0.024 & 0.179 \\ 0.339 & 0.200 & 0.000 & 0.161 \\ 0.436 & 0.040 & 0.013 & 0.168 \\ 0.275 & 0.040 & 0.013 & 0.023 \\ 0.013 & 0.160 & 0.050 & 0.086 \\ 0.339 & 0.200 & 0.013 & 0.054\end{vmatrix}$
Langkah kelima : Menghitung utility measure dari setiap alternatif. Ada 2 utility measure yang dihitung, yaitu nilai S
dan R
Perhitungan nilai Utility Measures $S$ sesuai persamaan [VIK-07] untuk setiap alternatif adalah sebagai berikut:
$\begin{align} S_{1}&=F_{1,1}^{*}+F_{1,2}^{*}+F_{1,3}^{*}+F_{1,4}^{*} \\ &=0.208 + 0.120 + 0.013 + 0.191 \\ &=0.531\end{align}$
$\begin{align} S_{2}&=F_{2,1}^{*}+F_{2,2}^{*}+F_{2,3}^{*}+F_{2,4}^{*} \\ &=0.055 + 0.000 + 0.000 + 0.158 \\ &=0.213\end{align}$
... dan seterusnya hingga
$\begin{align} S_{17}&=F_{17,1}^{*}+F_{17,2}^{*}+F_{17,3}^{*}+F_{17,4}^{*} \\ &=0.339 + 0.200 + 0.013 + 0.054 \\ &=0.606\end{align}$
Perhitungan nilai Regret measures $R$ sesuai persamaan [VIK-08] untuk setiap alternatif adalah sebagai berikut:
$\begin{align} R_{1}&=max\{\ F_{1,1}^{*}\ ;\ F_{1,2}^{*}\ ;\ F_{1,3}^{*}\ ;\ F_{1,4}^{*}\} \\ &=max\{0.208\ ;\ 0.120\ ;\ 0.013\ ;\ 0.191\} \\ &=0.208\end{align}$
$\begin{align} R_{2}&=max\{\ F_{2,1}^{*}\ ;\ F_{2,2}^{*}\ ;\ F_{2,3}^{*}\ ;\ F_{2,4}^{*}\} \\ &=max\{0.055\ ;\ 0.000\ ;\ 0.000\ ;\ 0.158\} \\ &=0.158\end{align}$
... dan seterusnya hingga
$\begin{align} R_{17}&=max\{\ F_{17,1}^{*}\ ;\ F_{17,2}^{*}\ ;\ F_{17,3}^{*}\ ;\ F_{17,4}^{*}\} \\ &=max\{0.339\ ;\ 0.200\ ;\ 0.013\ ;\ 0.054\} \\ &=0.339\end{align}$
Langkah keenam : Menghitung nilai indeks VIKOR (Q
)
Sebelum menghitung nilai indeks VIKOR (Q
) dari tiap alternatif, perlu dihitung terlebih dahulu nilai-nilai S+, S-, R+,
dan R-
sebagai berikut :
$\begin{align} S^{+}&=max\{S_1\ ;\ S_2\ ;\ S_3\ ;\ ...\ ;\ S_{17}\} \\ &=max\{0.531\ ;\ 0.213\ ;\ 0.533\ ;\ ...\ ;\ 0.606\} \\ &= 0.711\end{align}$
$\begin{align} S^{-}&=min\{S_1\ ;\ S_2\ ;\ S_3\ ;\ ...\ ;\ S_{17}\} \\ &=min\{0.531\ ;\ 0.213\ ;\ 0.533\ ;\ ...\ ;\ 0.606\} \\ &= 0.075\end{align}$
$\begin{align} R^{+}&=max\{R_1\ ;\ R_2\ ;\ R_3\ ;\ ...\ ;\ R_{17}\} \\ &=max\{0.208\ ;\ 0.158\ ;\ 0.331\ ;\ ...\ ;\ 0.339\} \\ &= 0.500\end{align}$
$\begin{align} R^{-}&=min\{R_1\ ;\ R_2\ ;\ R_3\ ;\ ...\ ;\ R_{17}\} \\ &=min\{0.208\ ;\ 0.158\ ;\ 0.331\ ;\ ...\ ;\ 0.339\} \\ &= 0.050\end{align}$
Perhitungan nilai indeks VIKOR dari setiap alternatif (dari $Q_1$ sampai dengan $Q_{17}$ sesuai dengan persamaan [VIK-09]) adalah sebagai berikut:
$\begin{align} Q_{1}&=v\left[\frac{S_{1}-S^{-}}{S^{+}-S^{-}}\right]+(1-v)\left[\frac{R_{1}-R^{-}}{R^{+}-R^{-}}\right]\\ &=0.5\left[\frac{0.531 - 0.075}{0.711 - 0.075}\right]+(1-0.5)\left[\frac{0.208 - 0.050}{0.500 - 0.050}\right]\\ &=0.534\end{align}$
$\begin{align} Q_{2}&=v\left[\frac{S_{2}-S^{-}}{S^{+}-S^{-}}\right]+(1-v)\left[\frac{R_{2}-R^{-}}{R^{+}-R^{-}}\right]\\ &=0.5\left[\frac{0.213 - 0.075}{0.711 - 0.075}\right]+(1-0.5)\left[\frac{0.158 - 0.050}{0.500 - 0.050}\right]\\ &=0.229\end{align}$
... dan seterusnya sampai dengan
$\begin{align} Q_{17}&=v\left[\frac{S_{17}-S^{-}}{S^{+}-S^{-}}\right]+(1-v)\left[\frac{R_{17}-R^{-}}{R^{+}-R^{-}}\right]\\ &=0.5\left[\frac{0.606 - 0.075}{0.711 - 0.075}\right]+(1-0.5)\left[\frac{0.339 - 0.050}{0.500 - 0.050}\right]\\ &=0.738\end{align}$
Pada perhitungan indeks VIKOR ini digunakan nilai voting by majority rule yaituv = 0.5
Langkah ketujuh : Meranking alternatif dengan mengurutkan mulai dari nilai Q
terkecil. Hasil pemeringkatan selengkapnya adalah sebagai berikut:
Rangking | Alternatif | Nilai Q | ||
---|---|---|---|---|
kode | Nama | kode | Nilai | |
1 | $A_{8}$ | S. Kevin | $Q_{8}$ | 0.000 |
2 | $A_{7}$ | Pandu H. | $Q_{7}$ | 0.140 |
3 | $A_{2}$ | Shinta | $Q_{2}$ | 0.229 |
4 | $A_{16}$ | D. James | $Q_{16}$ | 0.306 |
5 | $A_{4}$ | Gatot | $Q_{4}$ | 0.342 |
6 | $A_{6}$ | P. Vicky | $Q_{6}$ | 0.451 |
7 | $A_{15}$ | M. Enrico | $Q_{15}$ | 0.468 |
8 | $A_{1}$ | Oscar | $Q_{1}$ | 0.534 |
9 | $A_{5}$ | Nina | $Q_{5}$ | 0.551 |
10 | $A_{10}$ | L. Lina | $Q_{10}$ | 0.642 |
11 | $A_{3}$ | Usman S. | $Q_{3}$ | 0.672 |
12 | $A_{17}$ | Carlie | $Q_{17}$ | 0.738 |
13 | $A_{11}$ | Yuna R. | $Q_{11}$ | 0.765 |
14 | $A_{12}$ | Firza | $Q_{12}$ | 0.775 |
15 | $A_{13}$ | Zaki | $Q_{13}$ | 0.812 |
16 | $A_{14}$ | K. Mirza | $Q_{14}$ | 0.887 |
17 | $A_{9}$ | H. Reza | $Q_{9}$ | 1.000 |
Langkah kedelapan : Langkah terakhir adalah mengusulkan solusi kompromi. Solusi kompromi dapat diusulkan dengan membuktikan kedua kondisi. Dalam pembuktian solusi kompromi ini digunakan nilai v
(nilai bobot strategy of the maximum group utility) masing-masing adalah v=0.41
(with veto), v=0.5
(by concensus), dan v=0.59
(voting by majority rule)
Pembuktian I : Pembuktian kondisi Acceptable advantage dengan menggunakan persamaan [VIK-10] dan [VIK-11], yaitu :
$\begin{align} DQ &= \frac{1}{(m - 1)} \\ &=\frac{1}{(17-1)} \\ &=0.062\end{align}$
$\begin{align} Q_{A_2}-Q_{A_1}&=0.140 - 0.000 \\ &=0.140\end{align}$
Nilai selisih yang dihasilkan lebih besar dari nilai DQ
, sehingga kondisi Acceptable advantage terpenuhi
Pembuktian II : Pembuktian kondisi Acceptable stability in decision making.
Hasil peringkat terbaik dari perankingan dengan v=0.59
adalah S. Kevin yang sama dengan peringkat terbaik dari perankingan Q
. Hasil peringkat terbaik dari perankingan dengan 0.41
dan 0.5
adalah keduanya S. Kevin yang sama dengan peringkat terbaik dari perankingan Q
. Berdasarkan hasil yang diperoleh dapat dibuktikan bahwa kondisi Acceptable stability in decision making terpenuhi.
Ranking | Alternatif, dengan DQ=0.0625 | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
S | R | v=0.41 | v=0.5 | v=0.59 | |||||||
Nama | Q | Qm-Q1 | Nama | Q | Qm-Q1 | Nama | Q | Qm-Q1 | |||
1 | 8 | 8 | S. Kevin | 0.000 | 0.000 | S. Kevin | 0.000 | 0.000 | S. Kevin | 0.000 | 0.000 |
2 | 7 | 7 | Pandu H. | 0.127 | 0.127 | Pandu H. | 0.140 | 0.140 | Pandu H. | 0.153 | 0.153 |
3 | 2 | 2 | Shinta | 0.231 | 0.231 | Shinta | 0.229 | 0.229 | Shinta | 0.227 | 0.227 |
4 | 16 | 16 | D. James | 0.295 | 0.295 | D. James | 0.306 | 0.306 | D. James | 0.317 | 0.317 |
5 | 4 | 4 | Gatot | 0.335 | 0.335 | Gatot | 0.342 | 0.342 | Gatot | 0.349 | 0.349 |
6 | 15 | 1 | P. Vicky | 0.448 | 0.448 | P. Vicky | 0.451 | 0.451 | P. Vicky | 0.455 | 0.455 |
7 | 6 | 6 | M. Enrico | 0.474 | 0.474 | M. Enrico | 0.468 | 0.468 | M. Enrico | 0.462 | 0.462 |
8 | 5 | 5 | Oscar | 0.501 | 0.501 | Oscar | 0.534 | 0.534 | Oscar | 0.567 | 0.567 |
9 | 10 | 15 | Nina | 0.532 | 0.532 | Nina | 0.551 | 0.551 | Nina | 0.570 | 0.570 |
10 | 1 | 11 | L. Lina | 0.628 | 0.628 | L. Lina | 0.642 | 0.642 | L. Lina | 0.655 | 0.655 |
11 | 3 | 10 | Usman S. | 0.663 | 0.663 | Usman S. | 0.672 | 0.672 | Usman S. | 0.680 | 0.680 |
12 | 17 | 3 | Carlie | 0.721 | 0.721 | Carlie | 0.738 | 0.738 | Carlie | 0.756 | 0.756 |
13 | 12 | 13 | Yuna R. | 0.724 | 0.724 | Yuna R. | 0.765 | 0.765 | Firza | 0.794 | 0.794 |
14 | 14 | 17 | Firza | 0.756 | 0.756 | Firza | 0.775 | 0.775 | Yuna R. | 0.805 | 0.805 |
15 | 13 | 12 | Zaki | 0.782 | 0.782 | Zaki | 0.812 | 0.812 | Zaki | 0.843 | 0.843 |
16 | 11 | 14 | K. Mirza | 0.882 | 0.882 | K. Mirza | 0.887 | 0.887 | K. Mirza | 0.892 | 0.892 |
17 | 9 | 9 | H. Reza | 1.000 | 1.000 | H. Reza | 1.000 | 1.000 | H. Reza | 1.000 | 1.000 |
Berdasarkan hasil pembuktian kedua kondisi dapat diketahui bahwa kedua kondisi tersebut terpenuhi. S. Kevin dapat diusulkan menjadi solusi kompromi dan merupakan peringkat terbaik dari perankingan penerima beasiswa dengan metode VIKOR.
Untuk melengkapi artikel ini, berikut ini akan diberikan gambaran implementasi Metode VIKOR dengan menggunakan PHP dan MySQL database.
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 VIKOR yang sudah dijelaskan sebelumnya, dengan menggunakan data sesuai dengan contoh kasus yang diberikan.
Untuk menyimpan data-data kriteria, alternatif dan data sample ; disini digunakan database bernama db_dss
yang dibuat dengan sintak SQL 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;
vik_kriteria
Dari data pada fakta di atas, dapat di representasikan kriteria dan parameter yang berperan dalam permasalahan ini dalam bentuk tabel database, yaitu tabel vik_kriteria
sebagai berikut:
DROP TABLE IF EXISTS vik_kriteria; CREATE TABLE IF NOT EXISTS vik_kriteria( id_kriteria TINYINT(3) UNSIGNED AUTO_INCREMENT, kriteria VARCHAR(100) NOT NULL, bobot FLOAT NOT NULL, tipe SET('max','min') NOT NULL, PRIMARY KEY(id_kriteria) )ENGINE=MyISAM; INSERT INTO vik_kriteria(id_kriteria,kriteria,bobot,tipe) VALUES (1,'Indeks Prestasi','50','max'), (2,'Semester','20','min'), (3,'Daya listrik','5','min'), (4,'Jumlah tagihan listrik','25','min');
vik_alternatif
Berikutnya adalah data mengenai nama-nama alternatif yang akan diperhitungkan -- sesuai dengan contoh kasus di atas -- dengan dibuatkan satu tabel baru bernama vik_alternatif
. Dalam contoh ini atribut yang disimpan hanya `nama` dari alternatifnya. Atribut-atribut (field/kolom) lain bisa ditambahkan disesuaikan dengan kebutuhan sistem/aplikasi yang dibuat
DROP TABLE IF EXISTS vik_alternatif; CREATE TABLE IF NOT EXISTS vik_alternatif( id_alternatif TINYINT(3) UNSIGNED AUTO_INCREMENT, alternatif VARCHAR(100) NOT NULL, PRIMARY KEY(id_alternatif) )ENGINE=MyISAM; INSERT INTO vik_alternatif(alternatif) VALUES ('Oscar'), ('Shinta'), ('Usman S.'), ('Gatot'), ('Nina'), ('P. Vicky'), ('Pandu H.'), ('S. Kevin'), ('H. Reza'), ('L. Lina'), ('Yuna R.'), ('Firza'), ('Zaki'), ('K. Mirza'), ('M. Enrico'), ('D. James'), ('Carlie');
vik_sample
Data-data penilaian yang didapat dalam contoh kasus sebelumnya dimasukkan dalam tabel baru bernama vik_sample
DROP TABLE IF EXISTS vik_sample; CREATE TABLE IF NOT EXISTS vik_sample( id_sample INT(11) UNSIGNED AUTO_INCREMENT, id_alternatif TINYINT(3) UNSIGNED NOT NULL, id_kriteria TINYINT(3) UNSIGNED NOT NULL, nilai FLOAT NOT NULL, PRIMARY KEY(id_sample) )ENGINE=MyISAM; INSERT INTO vik_sample(id_alternatif,id_kriteria,nilai) VALUES (1,1,3.23),(1,2,5),(1,3,900),(1,4,770336), (2,1,3.59),(2,2,2),(2,3,450),(2,4,658003), (3,1,2.94),(3,2,2),(3,3,2200),(3,4,637691), (4,1,3.28),(4,2,4),(4,3,900),(4,4,241072), (5,1,3.46),(5,2,5),(5,3,900),(5,4,976604), (6,1,3.72),(6,2,4),(6,3,2200),(6,4,957469), (7,1,3.62),(7,2,4),(7,3,1300),(7,4,331327), (8,1,3.66),(8,2,2),(8,3,2200),(8,4,107995), (9,1,2.54),(9,2,5),(9,3,900),(9,4,380003), (10,1,3.00),(10,2,6),(10,3,2200),(10,4,163145), (11,1,3.03),(11,2,7),(11,3,2200),(11,4,673882), (12,1,2.89),(12,2,4),(12,3,1300),(12,4,729486), (13,1,2.92),(13,2,7),(13,3,450),(13,4,666588), (14,1,2.69),(14,2,3),(14,3,900),(14,4,692414), (15,1,3.07),(15,2,3),(15,3,900),(15,4,188398), (16,1,3.69),(16,2,6),(16,3,2200),(16,4,407197), (17,1,2.92),(17,2,7),(17,3,900),(17,4,296435);
Sebelum dilakukan perhitungan-perhitungan menggunakan metoda VIKOR 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 bobot -- serta data-data sekunder yaitu data kandidat/alternatif beserta data penilaiannya (nilai)
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.
Data parameter kriteria dan bobot yang akan digunakan dalam perhitungan metode VIKOR ini diambil dari tabel vik_kriteria
dan dimasukkan ke dalam variabel $kriteria
dan $bobot
yang berupa array multidimensi. Variabel $kriteria
dan $bobot
ini mempunyai index berupa id_kriteria
dan berisi item data array yang menyimpan data-data nama kriteria dan type (benefit/cost), serta bobot dari masing-masing kriteria tersebut.
<?php
//-- query untuk mendapatkan semua data kriteria di tabel vik_kriteria
$sql = 'SELECT * FROM vik_kriteria';
$result = $db->query($sql);
//-- menyiapkan variable penampung berupa array
$kriteria=array();
$bobot=array();
//-- melakukan iterasi pengisian array untuk tiap record data yang didapat
foreach ($result as $row) {
$kriteria[$row['id_kriteria']]=array($row['kriteria'],$row['type']);
$bobot[$row['id_kriteria']]=$row['bobot']/100;
}
?>;
Pada contoh kasus yang disajikan, variabel $kriteria[1]
berisi nilai berupa array('Indeks Prestasi','max')
, Sedangkan variabel $bobot[1]
berisi nilai 0.5
Kode PHP berikutnya adalah merupakan script untuk mengambil nilai data alternatif yang tersimpan pada tabel vik_alternatif
dan menyimpannya ke dalam variabel $alternatif
<?php
//-- query untuk mendapatkan semua data kriteria di tabel vik_alternatif
$sql = 'SELECT * FROM vik_alternatif';
$result = $db->query($sql);
//-- menyiapkan variable penampung berupa array
$alternatif=array();
//-- melakukan iterasi pengisian array untuk tiap record data yang didapat
foreach ($result as $row) {
$alternatif[$row['id_alternatif']]=$row['alternatif'];
}
?>;
Data sample penilaian yang tersimpan pada tabel vik_sample
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 vik_sample
$sql = 'SELECT * FROM vik_sample 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
foreach ($result as $row) {
//-- 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'];
}
?>
Nilai dari variabel $sample
ini adalah merupakan representasi dari matriks keputusan (lihat Membuat Matriks Keputusan]
Setalah data-data yang diperlukan dalam perhitungan diambil dari database, kemudian data-data tersebut diolah sebagai berikut:
F
)Matrik keputusan F
, seperti dalam bagian sebelumnya direpresentasikan dalam variable $sample
(lihat Pengambilan Nilai Penilaian). Data ini dapat ditampilkan dengan kode PHP sebagai berikut:
<table border='1'>
<?php
//-- melakukan iterasi utk setiap alternatif
foreach ($sample as $id_altenatif=>$kriteria) {
echo "<tr>";
//-- melakukan iterasi utk setiap kriteria
foreach($kriteria as $id_kriteria=>$nilai){
echo "<td>{$nilai}</td>";
}
echo "</tr>";
}
?>
</table>
N
)Dalam pembuatan matrik Normalisasi (N
) perlu dicari dulu nilai f+
dan f-
untuk masing-masing kriteria. Nilai fj+
adalah nilai maksimum/terbesar dari semua nilai matrik keputusan F
pada kriteria ke-j
. Sedangkan fj-
adalah nilai minimum/terkecil dari semua nilai matrik keputusan F
pada kriteria ke-j
; perhitungannya adalah sebagai berikut:
<?php
$f_plus=$f_min=array();
//-- melakukan iterasi utk setiap alternatif
foreach ($sample as $id_altenatif=>$kriteria) {
//-- melakukan iterasi utk setiap kriteria
foreach($kriteria as $j=>$nilai){
//-- inisialisai nilai f_plus dan f_min
if(!isset($f_plus[$j])) {
$f_plus[$j]=0;
$f_min[$j]=9999999;
}
$f_plus[$j] = ($f_plus[$j] < $nilai ? $nilai : $f_plus[$j]);
$f_min[$j] = ($f_min[$j] > $nilai ? $nilai : $f_min[$j]);
}
}
?>
Setelah nilai positif f+
dan negatif f-
diperoleh maka selanjutnya menghitung normalisasi matriks keputusan N
sebagai berikut:
<?php
$N=array();
//-- melakukan iterasi utk setiap alternatif
foreach ($sample as $i=>$kriteria) {
$N[$i]=array();
//-- melakukan iterasi utk setiap kriteria
foreach($kriteria as $j=>$nilai){
$N[$i][$j]=($f_plus[$j] - $nilai)/($f_plus[$j]-$f_min[$j]);
}
}
?>
F*
)Matriks keputusan yang telah dinormalisasi N
selanjutnya dikalikan dengan bobot kriteria untuk mendapatkan nilai matrik normalisasi terbobot F*
sebagai berikut:
<?php
$F_star=array();
//-- melakukan iterasi utk setiap alternatif
foreach ($N as $i=>$kriteria) {
$F_star[$i]=array();
//-- melakukan iterasi utk setiap kriteria
foreach($kriteria as $j=>$nilai){
$F_star[$i][$j]=$nilai * $bobot[$j];
}
}
?>
S
dan R
)Langkah berikutnya adalah menghitung nilai Utility Measure yaitu nilai S
dan R
; Nilai Si
merupakan jumlah nilai F*
untuk alternatif ke -i
, sedangkan nilai Ri
merupakan nilai maksimum / terbesar di antara nilai-nilai yang ada pada F*
untuk alternatif ke -i
. Kode script PHP-nya dapat dituliskan sebagai berikut:
<?php
$S=$R=array();
//-- melakukan iterasi utk setiap alternatif
foreach ($F_star as $i=>$kriteria) {
$S[$i]=$R[$i]=0;
//-- melakukan iterasi utk setiap kriteria
foreach($kriteria as $j=>$nilai){
$S[$i]+=$nilai;
$R[$i]=($R[$i]<$nilai ? $nilai : $R[$i]);
}
}
?>
Q
)Dalam perhitungan Nilai Indeks VIKOR Q
terlebih dahulu dicari nilai untuk S+
,S-
,R+
, dan nilai R-
. Untuk mendapatkan nilai-nilai tersebut, karena nilai S
dan R
sudah dalam bentuk array, maka dapat digunakan fungsi max()
dan min()
. Dalam menghiutng nilai indeks VIKOR (Q
) ini dibuatkan fungsi tersendiri dalam PHP (function get_Q()
) seperti berikut:
<?php
//-- inisialisasi nilai index VKOR (Q)
$Q=array();
//-- deklarasi fungsi untuk mencari nilai index VIKOR (Q)
function get_Q($S,$R,$v=0.5)
{
//-- mencari nilai S_plus,S_min,R_plus dan R_min
$S_plus=max($S);
$S_min=min($S);
$R_plus=max($R);
$R_min=min($R);
$Q=array();
foreach($R as $i=>$r){
$Q[$i]=$v*(($S[$i]-$S_min[$i])/($S_plus[$i]-$S_min[$i]))
+(1-$v)*(($R[$i]-$R_min[$i])/($R_plus[$i]-$R_min[$i]));
}
return $Q;
}
//-- inisiasi nilai v untuk nilai by vote, by consensus, dan voting by majority rule
$v=array(0.41,0.5,0.59);
//-- menghitung nilai index VIKOR (Q) untuk v=0.5 (by consensus)
$Q[$v[1]]=get_Q($S,$R);
?>
Perankingan alternatif dibuat dengan mengurutkan mulai dari nilai Q
terkecil hingga yang terbesar. Di sini bisa memanfaatkan fungsi asort()
yang merupakan fungsi buit-in dalam PHP. Source code-nya adalah sebagai berikut:
<?php
//-- mengurutkan nilai indeks VIKOR Q
asort($Q[$v[1]]);
//-- inisialisasi variabel array sQ
$sQ=array();
function get_sQ($Q)
{
$s_Q=array();
foreach($Q as $i=>$v)
$s_Q[]=array($i,$v);
return $s_Q;
}
$sQ[$v[1]]=get_sQ($Q[$v[1]]);
?>
Solusi kompromi ditentukan dari alternatif yang memiliki peringkat terbaik dengan mengukur indeks VIKOR yang minimum, apabila 2 kondisi yaitu Acceptable Advantage dan Acceptable Stability in Decision Making terpenuhi.
Berdasarkan persamaan VIK-10 dan VIK-11 dapat dibuat kode PHP sebagai berikut:
<?php
//-- inisialisasi kondisi_1
$kondisi_1=0;
//-- m adalah jumlah alternatif
$m = count($sample);
//-- menghitung nilai DQ
$DQ = 1 / ($m - 1);
//-- pengecekan kondisi Acceptable Advantage
if( ($sQ[$v[1]][1][1]-$sQ[$v[1]][0][1]) >= $DQ ){
$kondisi_1=1;
echo 'kondisi 1 terpenuhi<br>';
}else{
echo 'kondisi 1 tidak terpenuhi<br>';
}
?>
Dengan menggunakan persamaan VIK-12 dan menggunakan nilai v = 0.41
, v = 0.5
, dan v = 0.59
dibuat script sebagai berikut:
<?php
//-- inisialisasi kondisi_2
$kondisi_2=0;
//-- menghitung nilai Q untuk v=$V[0] (by vote)
$Q[$v[0]]=get_Q($S,$R,$v[0]);
asort($Q[$v[0]]);
$sQ[$v[0]]=get_sQ($Q[$v[0]]);
//-- menghitung nilai Q untuk v=$V[2] (voting by majority rule)
$Q[$v[2]]=get_Q($S,$R,$v[2]);
asort($Q[$v[2]]);
$sQ[$v[2]]=get_sQ($Q[$v[2]]);
//-- pengecekan kondisi Acceptable Stability in Decision Making
if(($sQ[$v[1]][0][1]==$sQ[$v[0]][0][1]) && ($sQ[$v[1]][0][1]==$sQ[$v[2]][0][1])){
$kondisi_2=1;
echo 'kondisi 2 terpenuhi<br>';
}else{
echo 'kondisi 2 tidak terpenuhi<br>';
}
?>
Jika salah satu atau kedua kondisi tidak terpenuhi maka maka dapat diajukan suatu solusi kompromi, sesuai dengan penjelasan pada poin 1.1.7.3 dan persamaan VIK-12 dapat dinyatakan dalam kode PHP sebagai berikut:
<?php
echo "Berdasarkan hasil pembuktian kedua kondisi dapat diketahui bahwa "
.($kondisi_1==1?($kondisi_2==1?"kedua kondisi tersebut":"kondisi dua tidak"):"kondisi satu tidak")
." terpenuhi.";
if($kondisi_1==1){
if($kondisi_2==1){
echo "<b>{$alternatif[$sQ[$v[1]][0][0]]}</b> dapat diusulkan menjadi solusi kompromi "
."dan merupakan peringkat terbaik dari perankingan penerima beasiswa dengan metode VIKOR.";
}else{
echo "Sehingga <b>{$alternatif[$sQ[$v[1]][0][0]]}</b> dan <b>{$alternatif[$Q[$v[1]][1][0]]}</b> "
."dapat diusulkan menjadi solusi kompromi penerima beasiswa dengan metode VIKOR.";
}
} else{
echo "Berdasarkan persamaan [<a href='#vik12'>VIK-12</a>] diperoleh nilai m={$m}, sehingga alternatif ";
if($m>1){
echo "A<sub>1</sub>, ..., A<sub>{$m}; yaitu ";
$nm=array();
for($i=0;$i<$m;$i++) $nm[]=$alternatif[$sQ[$v[1]][$i][0]];
$nm_a=array_pop($nm);
echo "<b>".implode(', ',$nm)."</b> dan <b>{$nm_a}</b> ";
}else{
echo "A<sub>1</sub>; yaitu <b>{$alternatif[$sQ[$v[1]][0][0]]}</b> ";
}
echo "dapat diusulkan menjadi solusi kompromi penerima beasiswa dengan metode VIKOR.";
}
?>
Beberapa simpulan yang bisa diperoleh adalah