Algoritma TOPSIS (Technique for Order of Preference by Similarity to Ideal Solution) adalah salah satu algoritma yang digunakan untuk pengambilan keputusan. Contoh yang dibahas kali ini adalah mengenai pemilihan sepeda motor berdasarkan kriteria tertentu.
Diasumsikan ada 3 buah motor yang dapat dipilih yaitu Motor A,B,C,D
Masing-masing motor memiliki kriteria, yaitu harga, jarak tempuh per liter, cc, nilai model
Sehingga dalam kasus ini, diasumsikan data awalnya adalah sebagai berikut:
Motor | Harga | Jarak tempuh per liter | cc | nilai model (1-10) |
---|---|---|---|---|
Motor A | 10.000.000 | 35 | 110 | 7 |
Motor B | 12.000.000 | 45 | 125 | 6 |
Motor C | 15.000.000 | 40 | 150 | 8 |
Motor D | 14.000.000 | 37.5 | 125 | 7.5 |
Langkah pertama adalah memasukkan data-data yang digunakan.
Contoh data awal adalah sebagai berikut:
Dim data(3, 3) As Double data(0, 0) = 10000000 data(0, 1) = 35 data(0, 2) = 110 data(0, 3) = 7 data(1, 0) = 12000000 data(1, 1) = 45 data(1, 2) = 125 data(1, 3) = 6 data(2, 0) = 15000000 data(2, 1) = 40 data(2, 2) = 150 data(2, 3) = 8 data(3, 0) = 14000000 data(3, 1) = 37.5 data(3, 2) = 125 data(3, 3) = 7.5
Langkah-langkah penggunaan algoritma ini adalah
1. Tentukan Kriteria Pembobotan untuk masing-masing kriteria
Jumlah pembobotan dari semua kriteria harus sama dengan 100%
Contoh dalam kasus ini:
Bobot harga 35%
Bobot jarak tempuh per liter 25%
Bobot cc 15%
Bobot nilai model 25%
Dim bobot(3) As Double bobot(0) = 0.35 bobot(1) = 0.25 bobot(2) = 0.15 bobot(3) = 0.25
2. Hitung matriks normalisasi
Matriks normalisasi adalah matriks data yang isinya dihitung dengan data awal dibagi dengan (akar dari (jumlah dari kuadrat data pada masing-masing kriteria))
Dim faktorNormalisasi(3) As Double For i As Integer = 0 To 3 faktorNormalisasi(i) = 0 For j As Integer = 0 To 3 faktorNormalisasi(i) += Math.Pow(data(j, i), 2) Next faktorNormalisasi(i) = Math.Sqrt(faktorNormalisasi(i)) Next Dim normalisasi(3, 3) As Double For i As Integer = 0 To 3 For j As Integer = 0 To 3 normalisasi(i, j) = data(i, j) / faktorNormalisasi(j) Next Next
3. Hitung matriks normalisasi pembobotan
Matriks normalisasi pembobotan adalah matriks normalisasi dikali dengan bobot kriterianya
Dim bobotNormalisasi(3, 3) As Double For i As Integer = 0 To 3 For j As Integer = 0 To 3 bobotNormalisasi(i, j) = normalisasi(i, j) * bobot(j) Next Next
4. Tentukan PIS (Solusi ideal Positif) dan NIS (Solusi Ideal Negatif)
PIS adalah kumpulan nilai-nilai terbaik dari setiap kriteria
NIS adalah kumpulan nilai-nilai terburuk dari setiap kriteria
Diasumsikan dalam kasus ini adalah:
Untuk kriteria harga, nilai terbaik adalah nilai terendah, nilai terburuk adalah nilai tertinggi
Untuk kriteria jarak tempuh per liter, nilai terbaik adalah nilai tertinggi, nilai terburuk adalah nilai terendah
Untuk kriteria cc, nilai terbaik adalah nilai tertinggi, nilai terburuk adalah nilai terendah
Untuk kriteria nilai model, nilai terbaik adalah nilai tertinggi, nilai terburuk adalah nilai terendah
Dim PIS(3) As Double Dim NIS(3) As Double For i As Integer = 0 To 3 PIS(i) = bobotNormalisasi(0, i) NIS(i) = bobotNormalisasi(0, i) For j As Integer = 1 To 3 If i = 0 Then If PIS(i) > bobotNormalisasi(j, i) Then PIS(i) = bobotNormalisasi(j, i) If NIS(i) < bobotNormalisasi(j, i) Then NIS(i) = bobotNormalisasi(j, i) Else If PIS(i) < bobotNormalisasi(j, i) Then PIS(i) = bobotNormalisasi(j, i) If NIS(i) > bobotNormalisasi(j, i) Then NIS(i) = bobotNormalisasi(j, i) End If Next Next
5. Hitung matriks jarak PIS dan NIS
Matriks jarak PIS adalah kuadrat dari matriks normalisasi pembobotan dikurangi dengan PIS nya
Matriks jarak NIS adalah kuadrat dari matriks normalisasi pembobotan dikurangi dengan NIS nya
Dim jarakPIS(3, 3) As Double Dim jarakNIS(3, 3) As Double For i As Integer = 0 To 3 For j As Integer = 0 To 3 jarakPIS(i, j) = Math.Pow(bobotNormalisasi(i, j) - PIS(j), 2) jarakNIS(i, j) = Math.Pow(bobotNormalisasi(i, j) - NIS(j), 2) Next Next
6. Hitung nilai jarak PIS dan NIS
Nilai jarak PIS adalah akar dari jumlah matriks data PIS
Nilai jarak NIS adalah akar dari jumlah matriks data NIS
Dim nilaiPIS(3) As Double Dim nilaiNIS(3) As Double For i As Integer = 0 To 3 nilaiPIS(i) = 0 nilaiNIS(i) = 0 For j As Integer = 0 To 3 nilaiPIS(i) += jarakPIS(i, j) nilaiNIS(i) += jarakNIS(i, j) Next nilaiPIS(i) = Math.Sqrt(nilaiPIS(i)) nilaiNIS(i) = Math.Sqrt(nilaiNIS(i)) Next
7. Hitung nilai akhir untuk setiap inputan data dengan rumus nilai NIS / (nilai NIS + nilai PIS)
Data yang terpilih adalah data dengan nilai akhir yang paling besar
Dim motor As String = "" Dim maks As Double = 0 For i As Integer = 0 To 3 Console.WriteLine("Motor " & Chr(i + 65) & ": " & (nilaiNIS(i) / (nilaiNIS(i) + nilaiPIS(i))).ToString("F2")) If maks < nilaiNIS(i) / (nilaiNIS(i) + nilaiPIS(i)) Then motor = "Motor " & Chr(i + 65) maks = nilaiNIS(i) / (nilaiNIS(i) + nilaiPIS(i)) End If Next
Hasil akhir adalah: (klik untuk perbesar gambar)
Contoh modul / source code dalam bahasa VB (Visual Basic) dapat didownload disini:
Jika membutuhkan jasa kami dalam pembuatan program, keterangan selanjutnya dapat dilihat di Fasilitas dan Harga
Jika ada yang kurang paham dengan langkah-langkah algoritma diatas, silahkan berikan komentar Anda.
Selamat mencoba.