PROMETHEE

Contoh implementasi DSS (Decision Support System) dengan metode PROMETHEE menggunakan PHP dan MySQL untuk pemilihan hardisk eksternal.

PROMETHEE (Preference Ranking Organization METHod for Enrichment Evaluation) adalah Metode MCDM(Multi Criteria Decision Making) yang dibangun oleh Brans.(Brans and Vincke 1985; Brans et al. 1986). PROMETHEE adalah metode yang cukup sederhana dalam konsep dan aplikasi dibandingkan metode lain yang digunakan dalam analisa kasus multi kriteria. Dalam artikel ini akan ditunjukkan contoh implementasi metode PROMETHEE dalam pemilihan hardisk external.

[ author : cahya dsn, published on : June 28, 2017 updated on : March 22, 2018 ]

minerva minerva donasi donation

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

Perhitungan

Berdasarkan data yang disajikan dalam Tabel 1, dilakukan perhitungan dengan menggunakan metoda PROMETHEE sebagai berikut:

Penentuan Nilai Deviasi berdasarkan Perbandingan Berpasangan dj(a,b)

Berdasarkan persamaan [PMT-01] dapat dihitung nilai deviasi berdasarkan perbandingan berpasangan antara dua alternatif untuk suatu kriteria. Rincian perhitungannya adalah sebagai berikut :

Nilai Deviasi dj(1,2)

dHDD Capacity(1,2) = 7 - 7 = 0 -> linear quasi -> H(d)= 0
dSystem Requirement(1,2) = 6 - 7 = -1 -> quasi -> H(d)= 0
dWrite Speed(1,2) = 1 - 2 = -1 -> linear quasi -> H(d)= 0
dRead Speed(1,2) = 4 - 2 = 2 -> linear -> H(d)= 0.286
dHeight(1,2) = 7 - 7 = 0 -> level -> H(d)= 0.5
dWidth(1,2) = 6 - 7 = -1 -> level -> H(d)= 0.5
dInterface(1,2) = 5 - 6 = -1 -> gaussian -> H(d)= 0.393
dFile System(1,2) = 7 - 7 = 0 -> usual -> H(d)= 0
dHarga(1,2) = 5 - 4 = 1 -> linear -> H(d)= 0.143
H(dj(1,2)) = 1/9 * (0+0+0+0.286+0.5+0.5+0.393+0+0.143) = 1.822

Nilai Deviasi dj(1,3)

dHDD Capacity(1,3) = 7 - 7 = 0 -> linear quasi -> H(d)= 0
dSystem Requirement(1,3) = 6 - 7 = -1 -> quasi -> H(d)= 0
dWrite Speed(1,3) = 1 - 4 = -3 -> linear quasi -> H(d)= 0
dRead Speed(1,3) = 4 - 4 = 0 -> linear -> H(d)= 0
dHeight(1,3) = 7 - 6 = 1 -> level -> H(d)= 0
dWidth(1,3) = 6 - 5 = 1 -> level -> H(d)= 0
dInterface(1,3) = 5 - 6 = -1 -> gaussian -> H(d)= 0.393
dFile System(1,3) = 7 - 7 = 0 -> usual -> H(d)= 0
dHarga(1,3) = 5 - 6 = -1 -> linear -> H(d)= 0.143
H(dj(1,3)) = 1/9 * (0+0+0+0+0+0+0.393+0+0.143) = 0.536

Nilai Deviasi dj(1,4)

dHDD Capacity(1,4) = 7 - 7 = 0 -> linear quasi -> H(d)= 0
dSystem Requirement(1,4) = 6 - 7 = -1 -> quasi -> H(d)= 0
dWrite Speed(1,4) = 1 - 5 = -4 -> linear quasi -> H(d)= 0
dRead Speed(1,4) = 4 - 5 = -1 -> linear -> H(d)= 0.143
dHeight(1,4) = 7 - 6 = 1 -> level -> H(d)= 0
dWidth(1,4) = 6 - 6 = 0 -> level -> H(d)= 0.5
dInterface(1,4) = 5 - 6 = -1 -> gaussian -> H(d)= 0.393
dFile System(1,4) = 7 - 7 = 0 -> usual -> H(d)= 0
dHarga(1,4) = 5 - 4 = 1 -> linear -> H(d)= 0.143
H(dj(1,4)) = 1/9 * (0+0+0+0.143+0+0.5+0.393+0+0.143) = 1.179

Nilai Deviasi dj(1,5)

dHDD Capacity(1,5) = 7 - 7 = 0 -> linear quasi -> H(d)= 0
dSystem Requirement(1,5) = 6 - 6 = 0 -> quasi -> H(d)= 0
dWrite Speed(1,5) = 1 - 6 = -5 -> linear quasi -> H(d)= 0
dRead Speed(1,5) = 4 - 6 = -2 -> linear -> H(d)= 0.286
dHeight(1,5) = 7 - 7 = 0 -> level -> H(d)= 0.5
dWidth(1,5) = 6 - 6 = 0 -> level -> H(d)= 0.5
dInterface(1,5) = 5 - 5 = 0 -> gaussian -> H(d)= 0
dFile System(1,5) = 7 - 7 = 0 -> usual -> H(d)= 0
dHarga(1,5) = 5 - 6 = -1 -> linear -> H(d)= 0.143
H(dj(1,5)) = 1/9 * (0+0+0+0.286+0.5+0.5+0+0+0.143) = 1.429

Nilai Deviasi dj(2,1)

dHDD Capacity(2,1) = 7 - 7 = 0 -> linear quasi -> H(d)= 0
dSystem Requirement(2,1) = 7 - 6 = 1 -> quasi -> H(d)= 0
dWrite Speed(2,1) = 2 - 1 = 1 -> linear quasi -> H(d)= 0.167
dRead Speed(2,1) = 2 - 4 = -2 -> linear -> H(d)= 0.286
dHeight(2,1) = 7 - 7 = 0 -> level -> H(d)= 0.5
dWidth(2,1) = 7 - 6 = 1 -> level -> H(d)= 0
dInterface(2,1) = 6 - 5 = 1 -> gaussian -> H(d)= 0.393
dFile System(2,1) = 7 - 7 = 0 -> usual -> H(d)= 0
dHarga(2,1) = 4 - 5 = -1 -> linear -> H(d)= 0.143
H(dj(2,1)) = 1/9 * (0+0+0.167+0.286+0.5+0+0.393+0+0.143) = 1.489

Nilai Deviasi dj(2,3)

dHDD Capacity(2,3) = 7 - 7 = 0 -> linear quasi -> H(d)= 0
dSystem Requirement(2,3) = 7 - 7 = 0 -> quasi -> H(d)= 0
dWrite Speed(2,3) = 2 - 4 = -2 -> linear quasi -> H(d)= 0
dRead Speed(2,3) = 2 - 4 = -2 -> linear -> H(d)= 0.286
dHeight(2,3) = 7 - 6 = 1 -> level -> H(d)= 0
dWidth(2,3) = 7 - 5 = 2 -> level -> H(d)= 0.5
dInterface(2,3) = 6 - 6 = 0 -> gaussian -> H(d)= 0
dFile System(2,3) = 7 - 7 = 0 -> usual -> H(d)= 0
dHarga(2,3) = 4 - 6 = -2 -> linear -> H(d)= 0.286
H(dj(2,3)) = 1/9 * (0+0+0+0.286+0+0.5+0+0+0.286) = 1.071

Nilai Deviasi dj(2,4)

dHDD Capacity(2,4) = 7 - 7 = 0 -> linear quasi -> H(d)= 0
dSystem Requirement(2,4) = 7 - 7 = 0 -> quasi -> H(d)= 0
dWrite Speed(2,4) = 2 - 5 = -3 -> linear quasi -> H(d)= 0
dRead Speed(2,4) = 2 - 5 = -3 -> linear -> H(d)= 0.429
dHeight(2,4) = 7 - 6 = 1 -> level -> H(d)= 0
dWidth(2,4) = 7 - 6 = 1 -> level -> H(d)= 0
dInterface(2,4) = 6 - 6 = 0 -> gaussian -> H(d)= 0
dFile System(2,4) = 7 - 7 = 0 -> usual -> H(d)= 0
dHarga(2,4) = 4 - 4 = 0 -> linear -> H(d)= 0
H(dj(2,4)) = 1/9 * (0+0+0+0.429+0+0+0+0+0) = 0.429

Nilai Deviasi dj(2,5)

dHDD Capacity(2,5) = 7 - 7 = 0 -> linear quasi -> H(d)= 0
dSystem Requirement(2,5) = 7 - 6 = 1 -> quasi -> H(d)= 0
dWrite Speed(2,5) = 2 - 6 = -4 -> linear quasi -> H(d)= 0
dRead Speed(2,5) = 2 - 6 = -4 -> linear -> H(d)= 0.571
dHeight(2,5) = 7 - 7 = 0 -> level -> H(d)= 0.5
dWidth(2,5) = 7 - 6 = 1 -> level -> H(d)= 0
dInterface(2,5) = 6 - 5 = 1 -> gaussian -> H(d)= 0.393
dFile System(2,5) = 7 - 7 = 0 -> usual -> H(d)= 0
dHarga(2,5) = 4 - 6 = -2 -> linear -> H(d)= 0.286
H(dj(2,5)) = 1/9 * (0+0+0+0.571+0.5+0+0.393+0+0.286) = 1.751

Nilai Deviasi dj(3,1)

dHDD Capacity(3,1) = 7 - 7 = 0 -> linear quasi -> H(d)= 0
dSystem Requirement(3,1) = 7 - 6 = 1 -> quasi -> H(d)= 0
dWrite Speed(3,1) = 4 - 1 = 3 -> linear quasi -> H(d)= 0.5
dRead Speed(3,1) = 4 - 4 = 0 -> linear -> H(d)= 0
dHeight(3,1) = 6 - 7 = -1 -> level -> H(d)= 0.5
dWidth(3,1) = 5 - 6 = -1 -> level -> H(d)= 0.5
dInterface(3,1) = 6 - 5 = 1 -> gaussian -> H(d)= 0.393
dFile System(3,1) = 7 - 7 = 0 -> usual -> H(d)= 0
dHarga(3,1) = 6 - 5 = 1 -> linear -> H(d)= 0.143
H(dj(3,1)) = 1/9 * (0+0+0.5+0+0.5+0.5+0.393+0+0.143) = 2.036

Nilai Deviasi dj(3,2)

dHDD Capacity(3,2) = 7 - 7 = 0 -> linear quasi -> H(d)= 0
dSystem Requirement(3,2) = 7 - 7 = 0 -> quasi -> H(d)= 0
dWrite Speed(3,2) = 4 - 2 = 2 -> linear quasi -> H(d)= 0.333
dRead Speed(3,2) = 4 - 2 = 2 -> linear -> H(d)= 0.286
dHeight(3,2) = 6 - 7 = -1 -> level -> H(d)= 0.5
dWidth(3,2) = 5 - 7 = -2 -> level -> H(d)= 0.5
dInterface(3,2) = 6 - 6 = 0 -> gaussian -> H(d)= 0
dFile System(3,2) = 7 - 7 = 0 -> usual -> H(d)= 0
dHarga(3,2) = 6 - 4 = 2 -> linear -> H(d)= 0.286
H(dj(3,2)) = 1/9 * (0+0+0.333+0.286+0.5+0.5+0+0+0.286) = 1.905

Nilai Deviasi dj(3,4)

dHDD Capacity(3,4) = 7 - 7 = 0 -> linear quasi -> H(d)= 0
dSystem Requirement(3,4) = 7 - 7 = 0 -> quasi -> H(d)= 0
dWrite Speed(3,4) = 4 - 5 = -1 -> linear quasi -> H(d)= 0
dRead Speed(3,4) = 4 - 5 = -1 -> linear -> H(d)= 0.143
dHeight(3,4) = 6 - 6 = 0 -> level -> H(d)= 0.5
dWidth(3,4) = 5 - 6 = -1 -> level -> H(d)= 0.5
dInterface(3,4) = 6 - 6 = 0 -> gaussian -> H(d)= 0
dFile System(3,4) = 7 - 7 = 0 -> usual -> H(d)= 0
dHarga(3,4) = 6 - 4 = 2 -> linear -> H(d)= 0.286
H(dj(3,4)) = 1/9 * (0+0+0+0.143+0.5+0.5+0+0+0.286) = 1.429

Nilai Deviasi dj(3,5)

dHDD Capacity(3,5) = 7 - 7 = 0 -> linear quasi -> H(d)= 0
dSystem Requirement(3,5) = 7 - 6 = 1 -> quasi -> H(d)= 0
dWrite Speed(3,5) = 4 - 6 = -2 -> linear quasi -> H(d)= 0
dRead Speed(3,5) = 4 - 6 = -2 -> linear -> H(d)= 0.286
dHeight(3,5) = 6 - 7 = -1 -> level -> H(d)= 0.5
dWidth(3,5) = 5 - 6 = -1 -> level -> H(d)= 0.5
dInterface(3,5) = 6 - 5 = 1 -> gaussian -> H(d)= 0.393
dFile System(3,5) = 7 - 7 = 0 -> usual -> H(d)= 0
dHarga(3,5) = 6 - 6 = 0 -> linear -> H(d)= 0
H(dj(3,5)) = 1/9 * (0+0+0+0.286+0.5+0.5+0.393+0+0) = 1.679

Nilai Deviasi dj(4,1)

dHDD Capacity(4,1) = 7 - 7 = 0 -> linear quasi -> H(d)= 0
dSystem Requirement(4,1) = 7 - 6 = 1 -> quasi -> H(d)= 0
dWrite Speed(4,1) = 5 - 1 = 4 -> linear quasi -> H(d)= 0.667
dRead Speed(4,1) = 5 - 4 = 1 -> linear -> H(d)= 0.143
dHeight(4,1) = 6 - 7 = -1 -> level -> H(d)= 0.5
dWidth(4,1) = 6 - 6 = 0 -> level -> H(d)= 0.5
dInterface(4,1) = 6 - 5 = 1 -> gaussian -> H(d)= 0.393
dFile System(4,1) = 7 - 7 = 0 -> usual -> H(d)= 0
dHarga(4,1) = 4 - 5 = -1 -> linear -> H(d)= 0.143
H(dj(4,1)) = 1/9 * (0+0+0.667+0.143+0.5+0.5+0.393+0+0.143) = 2.346

Nilai Deviasi dj(4,2)

dHDD Capacity(4,2) = 7 - 7 = 0 -> linear quasi -> H(d)= 0
dSystem Requirement(4,2) = 7 - 7 = 0 -> quasi -> H(d)= 0
dWrite Speed(4,2) = 5 - 2 = 3 -> linear quasi -> H(d)= 0.5
dRead Speed(4,2) = 5 - 2 = 3 -> linear -> H(d)= 0.429
dHeight(4,2) = 6 - 7 = -1 -> level -> H(d)= 0.5
dWidth(4,2) = 6 - 7 = -1 -> level -> H(d)= 0.5
dInterface(4,2) = 6 - 6 = 0 -> gaussian -> H(d)= 0
dFile System(4,2) = 7 - 7 = 0 -> usual -> H(d)= 0
dHarga(4,2) = 4 - 4 = 0 -> linear -> H(d)= 0
H(dj(4,2)) = 1/9 * (0+0+0.5+0.429+0.5+0.5+0+0+0) = 1.929

Nilai Deviasi dj(4,3)

dHDD Capacity(4,3) = 7 - 7 = 0 -> linear quasi -> H(d)= 0
dSystem Requirement(4,3) = 7 - 7 = 0 -> quasi -> H(d)= 0
dWrite Speed(4,3) = 5 - 4 = 1 -> linear quasi -> H(d)= 0.167
dRead Speed(4,3) = 5 - 4 = 1 -> linear -> H(d)= 0.143
dHeight(4,3) = 6 - 6 = 0 -> level -> H(d)= 0.5
dWidth(4,3) = 6 - 5 = 1 -> level -> H(d)= 0
dInterface(4,3) = 6 - 6 = 0 -> gaussian -> H(d)= 0
dFile System(4,3) = 7 - 7 = 0 -> usual -> H(d)= 0
dHarga(4,3) = 4 - 6 = -2 -> linear -> H(d)= 0.286
H(dj(4,3)) = 1/9 * (0+0+0.167+0.143+0.5+0+0+0+0.286) = 1.095

Nilai Deviasi dj(4,5)

dHDD Capacity(4,5) = 7 - 7 = 0 -> linear quasi -> H(d)= 0
dSystem Requirement(4,5) = 7 - 6 = 1 -> quasi -> H(d)= 0
dWrite Speed(4,5) = 5 - 6 = -1 -> linear quasi -> H(d)= 0
dRead Speed(4,5) = 5 - 6 = -1 -> linear -> H(d)= 0.143
dHeight(4,5) = 6 - 7 = -1 -> level -> H(d)= 0.5
dWidth(4,5) = 6 - 6 = 0 -> level -> H(d)= 0.5
dInterface(4,5) = 6 - 5 = 1 -> gaussian -> H(d)= 0.393
dFile System(4,5) = 7 - 7 = 0 -> usual -> H(d)= 0
dHarga(4,5) = 4 - 6 = -2 -> linear -> H(d)= 0.286
H(dj(4,5)) = 1/9 * (0+0+0+0.143+0.5+0.5+0.393+0+0.286) = 1.822

Nilai Deviasi dj(5,1)

dHDD Capacity(5,1) = 7 - 7 = 0 -> linear quasi -> H(d)= 0
dSystem Requirement(5,1) = 6 - 6 = 0 -> quasi -> H(d)= 0
dWrite Speed(5,1) = 6 - 1 = 5 -> linear quasi -> H(d)= 0.833
dRead Speed(5,1) = 6 - 4 = 2 -> linear -> H(d)= 0.286
dHeight(5,1) = 7 - 7 = 0 -> level -> H(d)= 0.5
dWidth(5,1) = 6 - 6 = 0 -> level -> H(d)= 0.5
dInterface(5,1) = 5 - 5 = 0 -> gaussian -> H(d)= 0
dFile System(5,1) = 7 - 7 = 0 -> usual -> H(d)= 0
dHarga(5,1) = 6 - 5 = 1 -> linear -> H(d)= 0.143
H(dj(5,1)) = 1/9 * (0+0+0.833+0.286+0.5+0.5+0+0+0.143) = 2.262

Nilai Deviasi dj(5,2)

dHDD Capacity(5,2) = 7 - 7 = 0 -> linear quasi -> H(d)= 0
dSystem Requirement(5,2) = 6 - 7 = -1 -> quasi -> H(d)= 0
dWrite Speed(5,2) = 6 - 2 = 4 -> linear quasi -> H(d)= 0.667
dRead Speed(5,2) = 6 - 2 = 4 -> linear -> H(d)= 0.571
dHeight(5,2) = 7 - 7 = 0 -> level -> H(d)= 0.5
dWidth(5,2) = 6 - 7 = -1 -> level -> H(d)= 0.5
dInterface(5,2) = 5 - 6 = -1 -> gaussian -> H(d)= 0.393
dFile System(5,2) = 7 - 7 = 0 -> usual -> H(d)= 0
dHarga(5,2) = 6 - 4 = 2 -> linear -> H(d)= 0.286
H(dj(5,2)) = 1/9 * (0+0+0.667+0.571+0.5+0.5+0.393+0+0.286) = 2.917

Nilai Deviasi dj(5,3)

dHDD Capacity(5,3) = 7 - 7 = 0 -> linear quasi -> H(d)= 0
dSystem Requirement(5,3) = 6 - 7 = -1 -> quasi -> H(d)= 0
dWrite Speed(5,3) = 6 - 4 = 2 -> linear quasi -> H(d)= 0.333
dRead Speed(5,3) = 6 - 4 = 2 -> linear -> H(d)= 0.286
dHeight(5,3) = 7 - 6 = 1 -> level -> H(d)= 0
dWidth(5,3) = 6 - 5 = 1 -> level -> H(d)= 0
dInterface(5,3) = 5 - 6 = -1 -> gaussian -> H(d)= 0.393
dFile System(5,3) = 7 - 7 = 0 -> usual -> H(d)= 0
dHarga(5,3) = 6 - 6 = 0 -> linear -> H(d)= 0
H(dj(5,3)) = 1/9 * (0+0+0.333+0.286+0+0+0.393+0+0) = 1.013

Nilai Deviasi dj(5,4)

dHDD Capacity(5,4) = 7 - 7 = 0 -> linear quasi -> H(d)= 0
dSystem Requirement(5,4) = 6 - 7 = -1 -> quasi -> H(d)= 0
dWrite Speed(5,4) = 6 - 5 = 1 -> linear quasi -> H(d)= 0.167
dRead Speed(5,4) = 6 - 5 = 1 -> linear -> H(d)= 0.143
dHeight(5,4) = 7 - 6 = 1 -> level -> H(d)= 0
dWidth(5,4) = 6 - 6 = 0 -> level -> H(d)= 0.5
dInterface(5,4) = 5 - 6 = -1 -> gaussian -> H(d)= 0.393
dFile System(5,4) = 7 - 7 = 0 -> usual -> H(d)= 0
dHarga(5,4) = 6 - 4 = 2 -> linear -> H(d)= 0.286
H(dj(5,4)) = 1/9 * (0+0+0.167+0.143+0+0.5+0.393+0+0.286) = 1.489

Perhitungan Nilai Leaving Flow

Perhitungan Leaving Flow A1

φ+1=1/(5-1)*(1.822+0.536+1.179+1.429)
φ+1=1/4*(4.966)
φ+1=1.242

Perhitungan Leaving Flow A2

φ+2=1/(5-1)*(1.489+1.071+0.429+1.751)
φ+2=1/4*(4.739)
φ+2=1.185

Perhitungan Leaving Flow A3

φ+3=1/(5-1)*(2.036+1.905+1.429+1.679)
φ+3=1/4*(7.049)
φ+3=1.762

Perhitungan Leaving Flow A4

φ+4=1/(5-1)*(2.346+1.929+1.095+1.822)
φ+4=1/4*(7.192)
φ+4=1.798

Perhitungan Leaving Flow A5

φ+5=1/(5-1)*(2.262+2.917+1.013+1.489)
φ+5=1/4*(7.68)
φ+5=1.92

Menghitung Nilai Entering Flow

Perhitungan Entering Flow A1

φ-1=1/(5-1)*(1.489+2.036+2.346+2.262)
φ-1=1/4*(8.133)
φ-1=2.0331972433108

Perhitungan Entering Flow A2

φ-2=1/(5-1)*(1.822+1.905+1.929+2.917)
φ-2=1/4*(8.573)
φ-2=2.1431632415723

Perhitungan Entering Flow A3

φ-3=1/(5-1)*(0.536+1.071+1.095+1.013)
φ-3=1/4*(3.716)
φ-3=0.92887752728654

Perhitungan Entering Flow A4

φ-4=1/(5-1)*(1.179+0.429+1.429+1.489)
φ-4=1/4*(4.525)
φ-4=1.1312584796675

Perhitungan Entering Flow A5

φ-5=1/(5-1)*(1.429+1.751+1.679+1.822)
φ-5=1/4*(6.68)
φ-5=1.6701020052155

Menghitung Nilai Net Flow

Perhitungan Net Flow A1

φ(1) = φ+(1) - φ-(1)
φ(1) = 1.242 - 2.033
φ(1) = -0.792

Perhitungan Net Flow A2

φ(2) = φ+(2) - φ-(2)
φ(2) = 1.185 - 2.143
φ(2) = -0.958

Perhitungan Net Flow A3

φ(3) = φ+(3) - φ-(3)
φ(3) = 1.762 - 0.929
φ(3) = 0.833

Perhitungan Net Flow A4

φ(4) = φ+(4) - φ-(4)
φ(4) = 1.798 - 1.131
φ(4) = 0.667

Perhitungan Net Flow A5

φ(5) = φ+(5) - φ-(5)
φ(5) = 1.92 - 1.67
φ(5) = 0.25

Perangkingan

rangking 1 : A3 = 0.833
rangking 2 : A4 = 0.667
rangking 3 : A5 = 0.25
rangking 4 : A1 = -0.792
rangking 5 : A2 = -0.958

Sehingga dipilih alternatif Harddisk External A3(A-Data DashDrive) dengan nilai Net Flow sebesar 0.833.

Sebagai bahan pembelajaran aplikasi PROMETHEE ini; dibuat database bernama db_dss(dalam hal ini menggunakan MySQL/MariaDB Database server) sebagai berikut:

CREATE DATABASE IF NOT EXISTS db_dss;
USE db_dss;

Membuat Data Tabel Alternatif

Tabel alternatif (pro_alternatives) digunakan untuk menyimpan data-data alternatif dari kasus yang akan dihitung. Struktur tabel dasarnya adalah sebagai berikut :

DROP TABLE IF EXISTS pro_alternatives;
CREATE TABLE IF NOT EXISTS pro_alternatives (
  id_alternative smallint(5) unsigned NOT NULL AUTO_INCREMENT,
  name varchar(30) NOT NULL,
  code char(1) NOT NULL,
  PRIMARY KEY (id_alternative)
);
INSERT INTO pro_alternatives(id_alternative,name,code)
VALUES 
(1,'Hitachi Touro Mobile','A1'),
(2,'Toshiba Canvio Simple','A2'),
(3,'A-Data DashDrive','A3'),
(4,'Transcend StoreJet','A4'),
(5,'Buffalo Mini Station','A5');

Pada tabel pro_alternatives tersebut hanya disimpan nilai attribute name, dan code saja secara praktis, untuk pengembangannya dapat ditambahkan atribut-atribut lainnya; semisal spesifikasi teknis, harga dan sebagainya.

Membuat Data Tabel Kriteria

Tabel kriteria pro_criterias berisi data nama kriteria-kriteria utama yang akan dibandingkan. Dalam contoh ini, seperti data yang ada dalam [Tabel 1] ada 4 kriteria yang ada (Kapasitas, Kecepatan Transfer, Dimensi, dan Tipe USB). Struktur tabel dan data yang dimasukkan adalah sebagai berikut:

DROP TABLE IF EXISTS pro_criterias;
CREATE TABLE IF NOT EXISTS pro_criterias (
  id_criteria smallint(5) unsigned NOT NULL AUTO_INCREMENT,
  criteria varchar(30) NOT NULL,
  PRIMARY KEY (id_criteria)
);

INSERT INTO pro_criterias(id_criteria,criteria)
VALUES
(1,'Kapasitas'),
(2,'Kecepatan Transfer'),
(3,'Dimensi'),
(4,'Tipe USB'),
(5,'Lain-lain');

Membuat Data Tabel Tipe Preferensi

Berdasarkan Tipe-tipe Kriteria Dasar Fungsi Preferensi yang dijelaskan di atas, dibuat tabel tipe preferensi pro_types sebagai berikut:

DROP TABLE IF EXISTS pro_types;
CREATE TABLE IF NOT EXISTS pro_types (
  id_type smallint(5) unsigned NOT NULL AUTO_INCREMENT,
  type varchar(30) NOT NULL,
  PRIMARY KEY (id_type)
);
INSERT INTO pro_types(id_type,type)
VALUES
(1,'Usual'),
(2,'Linear'),
(3,'Quasi'),
(4,'Linear Quasi'),
(5,'Level'),
(6,'Gaussian');

Membuat Data Tabel Sub Kriteria

Dari data pada Tabel 1 dibuatkan tabel sub kriteria pro_sub_criterias yang berisi data sub kriteria secara lebih detail, sebagai berikut :

DROP TABLE IF EXISTS pro_sub_criterias;
CREATE TABLE IF NOT EXISTS pro_sub_criterias (
  id_sub_criteria smallint(11) unsigned NOT NULL AUTO_INCREMENT,
  id_criteria smallint(5) unsigned NOT NULL,
  nama varchar(30) NOT NULL,
  id_type tinyint(2) NOT NULL,
  min_max SET('min','max') DEFAULT 'max',
  p double,
  q double,
  s double,
  PRIMARY KEY (id_sub_criteria)
);
INSERT INTO pro_sub_criterias(id_sub_criteria,id_criteria,nama,id_type,min_max,p,q,s)
VALUES
(1,1,'HDD Capacity',4,'max',7,1,0),
(2,1,'System Requirement',3,'max',7,5,0),
(3,2,'Write Speed',4,'max',7,1,0),
(4,2,'Read Speed',2,'max',7,0,0),
(5,3,'Height',5,'max',7,1,0),
(6,3,'Width',5,'max',7,1,0),
(7,4,'Interface',6,'max',0,0,1),
(8,4,'File System',1,'max',0,0,0),
(9,5,'Harga',2,'min',7,0,0);

Membuat Data Tabel Evaluasi

Pemetaan nilai data-data dari data alternatif yang akan dihitung dimasukkan dalam tabel pro_evaluations sebagai berikut:

DROP TABLE IF EXISTS pro_evaluations;
CREATE TABLE IF NOT EXISTS pro_evaluations (
  id_alternative smallint(5) unsigned NOT NULL,
  id_sub_criteria smallint(5) unsigned NOT NULL,
  value tinyint(2) NOT NULL,
  PRIMARY KEY (id_alternative,id_sub_criteria)
);
INSERT INTO pro_evaluations(id_alternative,id_sub_criteria,value)
VALUES
(1,1,7),(1,2,6),(1,3,1),(1,4,4),(1,5,7),(1,6,6),(1,7,5),(1,8,7),(1,9,5),
(2,1,7),(2,2,7),(2,3,2),(2,4,2),(2,5,7),(2,6,7),(2,7,6),(2,8,7),(2,9,4),
(3,1,7),(3,2,7),(3,3,4),(3,4,4),(3,5,6),(3,6,5),(3,7,6),(3,8,7),(3,9,6),
(4,1,7),(4,2,7),(4,3,5),(4,4,5),(4,5,6),(4,6,6),(4,7,6),(4,8,7),(4,9,4),
(5,1,7),(5,2,6),(5,3,6),(5,4,6),(5,5,7),(5,6,6),(5,7,5),(5,8,7),(5,9,6);

Koneksi ke Database Server

Dari databse yang sudah dibuat, kita bisa membuat script php untuk membuat koneksi ke database server dengan extension mysqli secara sederhana sebagai berikut:

<?php
//-- database configurations
$dbhost='localhost';
$dbuser='root';
$dbpass='';
$dbname='db_dss';
//-- database connections
$db=new mysqli($dbhost,$dbuser,$dbpass,$dbname);
//-- halt and show error message if connection fail
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.

Menyiapkan Data yang Akan Diolah

Sebelum melangkah ke pemrograman yang lebih lanjut, disiapkan dulu data-data yang akan diolah. Data-data tersebut diambil dari database yang sudah dibuat sebelumnya. Data-data yang disiapkan adalah data alternatif, sub-kriteria dan data nilai untuk tiap-tiap alternatif (data evaluasi). Data-data tersebut dimasukkan ke dalam variable array untuk selanjutnya akan digunakan dipemrograman berikutnya.

<?php
$sql
="SELECT 
        a.id_alternative,c.name AS alternative, c.code, 
        a.id_sub_criteria,a.value, 
        b.id_criteria, b.id_type, b.p,b.q,b.s
      FROM 
        pro_evaluations a
        JOIN pro_sub_criterias b USING(id_sub_criteria)
        JOIN pro_alternatives c USING(id_alternative)
      ORDER BY 
        a.id_alternative,a.id_sub_criteria"
;
$result=$db->query($sql);
$data=array();
$alternative='';
$alternatives=array();
$sub='';
$subs=array();
while(
$r=$result->fetch_object()){
    if(
$sub!=$r->id_sub_criteria){
        
$subs[$r->id_sub_criteria]=array(
        
'type'=>$r->id_type,
        
'p'=>$r->p,
        
'q'=>$r->q,
        
's'=>$r->s
        
);
    }
    if(
$alternative!=$r->code){
        
$alternative=$r->code;
        
$alternatives[$r->code]=$r->alternative;
        
$data[$r->code]=array();
    }
    
$data[$r->code][$r->id_sub_criteria]=$r->value;
}
?>

Penentuan Deviasi Berdasarkan Perbandingan Berpasangan

Dengan menggunakan persamaan [PMT-01], ditentukan nilai deviasi dari masing-masing kriteria/subkriteria dari suatu alternatif terhadap alternatif yang lainnya.

<?php
$d
=array();
foreach(
$alternatives as $code_A=>$name_A){
    
$d[$code_A]=array();
    foreach(
$alternatives as $code_B=>$name_B){
        if(
$code_A!=$code_B){
            
$d[$code_A][$code_B]=array();
            foreach(
$subs as $sub=>$v){
                
$d[$code_A][$code_B][$sub]=abs($data[$code_A][$sub]-$data[$code_B][$sub]);
            }
        }
    }
}
?>

Penerapan Fungsi Preferensi

Dari hasil perhitungan nilai deviasi pada langkah sebelumnya, dan mengacu pada persamaan [PMT-02] serta mengaplikasikan fungsi preferensi yang sesuai (lihat: Tipe-tipe Kriteria Dasar Fungsi Preferensi] maka dapat dihitung nilai-nilai preferensinya.

Untuk keperluan penghitungan nilai preferensi dibuat satu fungsi preference(), dengan parameter masukan berupa nilai dan data sesuai tipe preferensinya, sebagai berikut:

<?php
function preference($value,$sub){
    if(
$sub['type']==1){      //-- usual`
        
return $value==0?0:1;
    }elseif(
$sub['type']==2){ //-- linear
        
return $value==0?0:($value>$sub['p']?1:abs($value/$sub['p']));
    }elseif(
$sub['type']==3){ //-- quasi
        
return $value<=$sub['q']?0:1;
    }elseif(
$sub['type']==4){ //-- linear quasi
        
return $value<$sub['q']?0:($value>$sub['p']?1:abs($value/($sub['p']-$sub['q'])));
    }elseif(
$sub['type']==5){ //-- level
        
return $value==$sub['q']?0:($value>$sub['p']?1:0.5);
    }elseif(
$sub['type']==6){ //-- gaussian
        
return $value==0?0:1-exp(-1*pow($value,2)/(2*pow($sub['s'],2)));
    }
}
?>

Sehingga dapat ditentukan nilai-nilai preferensi sebagai berikut :

<?php
$P
=array();
foreach(
$alternatives as $code_A=>$name_A){
    
$P[$code_A]=array();
    foreach(
$alternatives as $code_B=>$name_B){
        if(
$code_A!=$code_B){
            
$P[$code_A][$code_B]=array();
            foreach(
$subs as $sub=>$v){
                
$P[$code_A][$code_B][$sub]=preference($d[$code_A][$code_B][$sub],$subs[$sub]);
            }
        }
    }
}
?>

Perhitungan Indeks Preferensi Global

Karena dalam kasus ini nilai semua bobot preferensinya dianggap sama dengan 1 (satu) maka dapat diabaikan, sehingga nilai Indeks Preferensi Global-nya sesuai persamaan [PMT-03] dapat dihitung sebagai berikut:

<?php
$j
=count($subs);
$sigma=array();
foreach(
$alternatives as $code_A=>$name_A){
    
$sigma[$code_A]=array();
    foreach(
$alternatives as $code_B=>$name_B){
        if(
$code_A!=$code_B){
            
$sigma[$code_A][$code_B]=array_sum($P[$code_A][$code_B])/$j;
        }
    }
}
?>

Perhitungan Aliran Perangkingan dan Peringkat Parsial (PROMETHEE I)

Langkah berikutnya adalah menghitung aliran perangkingan dan peringkat parsialnya, dalam hal ini akan dihitung nilai leaving flow [PMT-04 dan nilai entering flow [PMT-05]

<?php
//-- menghitung Leaving Flow
$leaving_flow=array();
$devider=count($sigma)-1;
foreach(
$sigma as $code_A=>$value_A){
    
$leaving_flow[$code_A]=array_sum($value_A)/$devider;
}
//-- menghitung Entering Flow
$entering_flow=array();
foreach(
$sigma as $code_A=>$item_A){
    foreach(
$item_A as $code_B=>$value_B){
        if(!isset(
$entering_flow[$code_B])) $entering_flow[$code_B]=0;
        
$entering_flow[$code_B]+=$value_B;
    }
}
foreach(
$sigma as $code_A=>$value_A){
    
$entering_flow[$code_A]/=$devider;
}

?>

Perhitungan Aliran Perangkingan Bersih dan Peringkat Lengkap (PROMETHEE II)

Langkah terakhir adalah menghitung Net-FLow (Aliran perangkingan bersih) dan peringkat lengkap-nya

<?php
//-- Menghitung Net-Flow
$net_flow=array();
foreach(
$leaving_flow as $code_A=>$value_A){
    
$net_flow[$code_A]=$value_A $entering_flow[$code_A];
}
//-- Menentukan peringkat lengkapnya
arsort($net_flow);
?>

Dan (bagi) orang-orang yang menerima (mematuhi) seruan Tuhannya dan mendirikan shalat sedang urusan mereka (diputuskan) dengan musyawarat antara mereka dan mereka menafkahkan sebagian dari rezeki yang Kami berikan kepada mereka.

QS Asy Syuura (42) : 38

  • Brans, J.P. & Vincke, Ph., 1985. A preference ranking organization method: The PROMETHEE method. Management Science 31: 647–656.
  • Brans, Jean-Pierre. 1998. Promethee Method. Centrum Voor Statistiek Operationeel Onderzoek, Brussel University.Belgia.
  • Ignatius, J. , dkk. 2012. Financial Performance of Iran’s Automotive Sector based on PROMETHEE II. Malaysia : IEEE ICMIT
  • Kusrini. (2007). Konsep dan Aplikasi Sistem Pendukung Keputusan. Yogyakarta: Penerbit Andi.
  • Kusumadewi, S., Hartati, S., Harjoko, A., dan Wardoyo, R. (2006). Fuzzy Multi-Atribute Decision Making (FUZZY MADM). Yogyakarta: Penerbit Graha Ilmu.
  • Tien-Yin Chou, Wen-Tzu Lin, Chao-Yuan Lin, Wen-Chieh Choud dan Pi-Hui Huang, (2004), Application of the PROMETHEE technique to determine depression outlet location and flow direction in DEM, Journal of Hydrology, 287:49–61.
  • Tzeng, Gwo-Hshiung , 2003Fuzzy MCDM in Past, Present, and Future, Management of Technology, 1:12-18
  • Vermaat, Shelly Cashman. 2008. Discovering Computers "Menjelajah Dunia Komputer" FUNDAMENTAL. Third Edition. Salemba Infotek.