Apa itu TOPSIS?

TOPSIS (Technique for Order Preference by Similarity to Ideal Solution) adalah metode SPK yang memilih alternatif berdasarkan kedekatan dengan solusi ideal positif dan jauhnya dari solusi ideal negatif.

Konsep Dasar

  • Solusi Ideal Positif (A+): Alternatif hipotesis yang memiliki nilai terbaik untuk semua kriteria.
  • Solusi Ideal Negatif (A-): Alternatif hipotesis yang memiliki nilai terburuk untuk semua kriteria.

Alternatif terbaik adalah yang paling dekat dengan A+ dan paling jauh dari A-.

Langkah-Langkah TOPSIS

  1. Buat matriks keputusan ternormalisasi (menggunakan normalisasi vektor).
  2. Buat matriks ternormalisasi terbobot.
  3. Tentukan solusi ideal positif dan negatif.
  4. Hitung jarak setiap alternatif ke A+ dan A-.
  5. Hitung nilai preferensi (kedekatan relatif).
  6. Ranking alternatif.

Rumus-Rumus TOPSIS

Normalisasi Vektor:

rij = xij / sqrt(Σ xij²)

Matriks Terbobot:

yij = wj × rij

Solusi Ideal:

A+ = {max(yij) jika benefit, min(yij) jika cost}
A- = {min(yij) jika benefit, max(yij) jika cost}

Jarak ke Solusi Ideal:

D+ = sqrt(Σ (yij - A+j)²)
D- = sqrt(Σ (yij - A-j)²)

Nilai Preferensi (Kedekatan Relatif):

Vi = D-i / (D+i + D-i)

Implementasi Python

import numpy as np

# Data alternatif
data = np.array([
    [80, 90, 85],
    [75, 85, 90],
    [90, 80, 75],
    [85, 88, 80]
])

bobot = np.array([0.35, 0.35, 0.30])
jenis = [1, 1, 1]  # 1 = benefit

# 1. Normalisasi vektor
norm = data / np.sqrt((data**2).sum(axis=0))

# 2. Matriks terbobot
weighted = norm * bobot

# 3. Solusi ideal
A_plus = np.where(jenis, weighted.max(axis=0), weighted.min(axis=0))
A_minus = np.where(jenis, weighted.min(axis=0), weighted.max(axis=0))

# 4. Jarak ke solusi ideal
D_plus = np.sqrt(((weighted - A_plus)**2).sum(axis=1))
D_minus = np.sqrt(((weighted - A_minus)**2).sum(axis=1))

# 5. Nilai preferensi
V = D_minus / (D_plus + D_minus)

print("Nilai Preferensi:")
for i, v in enumerate(V):
    print(f"Alternatif {i+1}: {v:.4f}")

print(f"\nAlternatif terbaik: Alternatif {np.argmax(V)+1}")