Algoritma Fuzzy AHP (Analytic Hierarchy Process) adalah salah satu algoritma yang digunakan untuk pengambilan keputusan. Contoh yang dibahas kali ini adalah menentukan nilai akhir kinerja karyawan.
Secara singkat, algoritma ini merupakan penggabungan dari Algoritma Fuzzy Logic dan Algoritma AHP (Analytic Hierarchy Process) yang sudah dijelaskan sebelumnya. Sebelum memperoleh jawaban akhir menggunakan teknik AHP, akan digunakan teknik Fuzzy Logic untuk memperoleh bobot kriteria yang lebih penting dibandingkan kriteria lainnya.



Diasumsikan ada 3 kriteria penentu nilai kinerja karyawan, yaitu jumlah jam kerja, jumlah barang yang dikerjakan, dan jumlah barang lolos uji
Kemudian terdapat 3 data karyawan yang sudah diketahui nilai pada masing-masing kriteria tersebut
Maka tentukan nilai akhir dari masing-masing karyawan
Diasumsikan data karyawan adalah sebagai berikut:

Nama jumlah jam kerja jumlah barang yang dikerjakan jumlah barang yang lolos uji
Andi 200 80 70
Budi 190 60 45
Dedi 180 65 55
Erdi 190 70 60

Langkah pertama adalah memasukkan data-data yang digunakan.
Contoh data awal adalah sebagai berikut:

namaKaryawan = {'Andi' 'Budi' 'Dedi' 'Erdi'};
data = [ 200 80 70
         190 60 45
         180 65 55
         190 70 60];

Langkah-langkah penggunaan algoritma ini adalah

1. Tentukan batas maksimal untuk ketiga kriteria diatas
Diasumsikan dalam kasus ini:
jam kerja maksimal adalah 200 jam
jumlah barang maksimal yang dapat dihasilkan adalah 100 buah
jumlah barang berkualitas adalah 100 buah
Sehingga, bilamana terdapat karyawan yang bekerja 200 jam, menghasilkan 100 buah barang, dan semuanya lolos uji, maka nilai kinerjanya adalah sempurna (1)

maksJamKerja = 200;
maksJumlahBarang = 100;
maksKualitas = 100;

2. Lakukan normalisasi data pada masing-masing kriteria
dengan cara membagi masing-masing data dengan nilai maksimal pada masing-masing kriteria
Normalisasi perlu dilakukan agar tidak ada kriteria yang lebih mendominasi kriteria lain karena angka yang terlalu tinggi

data(:,1) = data(:,1) / maksJamKerja;
data(:,2) = data(:,2) / maksJumlahBarang;
data(:,3) = data(:,3) / maksKualitas;

3. Tentukan relasi antar kriteria yang digunakan
Ada 3 kriteria yang digunakan dalam kasus ini, yaitu: jam kerja, Jumlah barang yang dikerjakan, dan jumlah barang yang lolos uji (berkualitas)
diasumsikan dalam kasus ini:
jam kerja 0.5 kali lebih penting daripada jumlah barang
jam kerja 0.5 kali lebih penting daripada kualitas barang
Jumlah barang 0.25 kali lebih penting daripada kualitas barang

4. Buat matriks dari relasi antar kriteria tersebut
Dengan asumsi diatas, maka matriks yang dihasilkan adalah sebagai berikut:

Kriteria Jam Kerja Jumlah Barang Kualitas
Jam Kerja 1 0.5 0.5
Jumlah Barang 2 1 0.25
Kualitas 2 4 1

Dalam penerapan kedalam skrip, nilai matriks bagian segitiga bawah sementara ini diisi dengan 0
Untuk nantinya akan diisi dengan nilai seperti diatas pada saat perhitungan

relasiAntarKriteria = [ 1     2     2
                        0     1     4
                        0     0     1];

5. Tentukan TFN, yaitu Triangular Fuzzy Number
TFN adalah sekumpulan 3 angka yang membentuk grafik fuzzy pada nilai fuzzy 0, kemudian naik ke 1, dan kembali ke 0
TFN berisi 2 kelompok data,
kelompok pertama adalah TFN dalam nilai sebenarnya
kelompok kedua adalah invers dari TFN, yaitu dengan mengubah x menjadi 1/x dan membalik urutan angka TFN

TFN = {[-100/3 0     100/3] 	[3/100  0     -3/100]
       [0      100/3 200/3] 	[3/200  3/100 0     ]
       [100/3  200/3 300/3] 	[3/300  3/200 3/100 ]
       [200/3  300/3 400/3] 	[3/400  3/300 3/200 ]};

6. Lakukan perhitungan rasio konsistensi untuk memastikan bahwa matriks relasi antara kriteria sudah bernilai benar
Penjelasan tentang fungsi ini akan dijelaskan pada perhitungan dibawah ini (poin 6a – 6g)

RasioKonsistensi = HitungKonsistensiAHP(relasiAntarKriteria);

Memasuki perhitungan pada fungsi HitungKonsistensiAHP

6a. Tentukan Indeks Konsistensi Acak yang digunakan
Nilai yang nantinya dipakai adalah nilai pada indeks sebanyak jumlah kriteria yang ada

indeksAcak = [0 0 0.58 0.9 1.12 1.24 1.32 1.41 1.45 1.49];

6b. Hitung jumlah kriteria, yaitu sesuai dengan ukuran matriks relasi antar kriteria

[~, jumlahKriteria] = size(relasiAntarKriteria);

6c. Hitung nilai lambda, yaitu nilai eigenvalue dengan menggunakan fungsi eigenvector

[~, lambda] = eig(relasiAntarKriteria);

6d. Tentukan maksimal nilai lambda yang telah dihitung sebelumnya

maksLambda = max(max(lambda));

6e. Hitung nilai indeks konsistensi dengan rumus (maksLambda – n) / (n – 1)

IndeksKonsistensi = (maksLambda - jumlahKriteria)/(jumlahKriteria-1);

6f. Hitung rasio konsistensi untuk mendapatkan jawaban akhir

RasioKonsistensi = IndeksKonsistensi/indeksAcak(1,jumlahKriteria);

6g. Apabila nilai rasio konsistensi lebih dari 0.1, maka tampilkan pesan kesalahan

if RasioKonsistensi > 0.10
    str = 'Rasio Konsistensi adalah %% %1.2f. Matriks yang dievaluasi tidak konsisten!';
    str = sprintf(str,RasioKonsistensi);
    disp(str);
end

7. Jika rasio konsistensi kurang dari 0.10, maka lakukan perhitungan berikutnya

if RasioKonsistensi < 0.10
. . .

8. Lakukan perhitungan bobot menggunakan metode Fuzzy AHP
Penjelasan tentang fungsi ini akan dijelaskan pada perhitungan dibawah ini (poin 8a – 8i)

[bobotAntarKriteria, relasiAntarKriteria] = FuzzyAHP(relasiAntarKriteria, TFN);

Memasuki perhitungan pada fungsi FuzzyAHP

* Lakukan konversi masing-masing relasi antar kriteria menjadi TFN (Triangular Fuzzy Number) (poin 8a – 8b)

8a. Lakukan perhitungan pada matriks relasi antar kriteria
Masukkan nilai pada bagian segitiga bawah sesuai dengan nilai sesuai pada poin 4.

for i=1:jumlahData
    for j=i+1:jumlahData
       relasiAntarKriteria(j,i) = 1 / relasiAntarKriteria(i,j); 
    end
end

8b. Lakukan perhitungan pada matriks relasi antar kriteria
Jika nilai matriks relasi antar kriteria lebih dari 1,
maka nilai TFN yang digunakan adalah nilai kriteria pada kelompok pertama
Jika nilai matriks relasi antar kriteria kurang dari 1,
maka nilai TFN yang digunakan adalah nilai kriteria pada kelompok kedua

for i=1:jumlahData
    for j=1:jumlahKriteria
        kriteria = relasiAntarKriteria(i,j);
        if kriteria >= 1
           fuzzyRelasi{i,j} = TFN{kriteria ,1 };
        else
           fuzzyRelasi{i,j} = TFN{round(kriteria^-1) ,2 };
        end
    end
end

8c. Hitung jumlah dari masing-masing TFN yang dipakai dalam matriks relasi antar kriteria
Kemudian dari nilai tersebut, jumlahkan nilai pada masing-masing kolom kriteria

for i=1:jumlahData
    barisRelasi = [fuzzyRelasi{i,:}];
    jumlahRelasiPerBaris{1,i} = sum(reshape(barisRelasi,3,[])');
end

RelasiPerData = [jumlahRelasiPerBaris{1,:}];
jumlahRelasiPerKolom = sum(reshape(RelasiPerData,3,[])');

8d. Lakukan perhitungan pada masing-masing nilai relasi pada masing-masing kolom
Lakukan pembagian dengan jumlah relasi pada masing-masing kolom
Kemudian catat jumlah dari pembagian tersebut untuk setiap kolomnya

for i=1:jumlahData
    RelasiPerData = [jumlahRelasiPerBaris{1,i}];
    for j=1:3
        nilaiRelasiPerKolom = jumlahRelasiPerKolom(1,j);
        jumlahPerKolom(1,j) = (RelasiPerData(1,j))*(1/nilaiRelasiPerKolom);
    end
    jumlahRelasiPerBaris{1,i} = jumlahPerKolom;
end

*Lakukan perhitungan derajat kemungkinan (poin 8e – 8g)
Rumus yang digunakan adalah:

              /---
              | jika m2>=m1          1    
              |
              | jika l1>=l2          0    
 V(M2>=M1) = <
              |                    l1-u2
              | selain itu     --------------- 
              |                (m1-u2)-(m1-l1)
              \---

8e. Lakukan perhitungan pada masing-masing data dengan indeks baris dan kolom tidak sama

for i=1:jumlahData
    for j=1:jumlahData
        if i~=j
		. . .

8f. Masukkan nilai awal derajat kemungkinan, M1, dan M2 sesuai rumus yang telah dijelaskan sebelumnya

derajatKemungkinan(idxBaris,[1 2]) = [i j];
M1 = jumlahRelasiPerBaris{1,i};
M2 = jumlahRelasiPerBaris{1,j};

8g. Hitung nilai derajat kemungkinan menggunakan rumus yang telah dijelaskan sebelumnya

if M1(1,2) >= M2(1,2)
	derajatKemungkinan(idxBaris,3) = 1;
elseif M2(1,1) >= M1(1,3)
	derajatKemungkinan(idxBaris,3) = 0;
else
	derajatKemungkinan(idxBaris,3) = (M2(1,1)-M1(1,3))/((M1(1,2)-M1(1,3))-(M2(1,2)-M2(1,1)));
end

8h. Hitung nilai bobot menggunakan nilai derajat kemungkinan minimal pada masing-masing kriteria

bobotAntarKriteria = zeros(1,jumlahData);
for i=1:jumlahData,
    bobotAntarKriteria(1,i) = min(derajatKemungkinan([find(derajatKemungkinan(:,1) == i)], [3]));
end

8i. Lakukan normalisasi terhadap nilai bobot yang telah dihitung
yaitu dengan cara membagi masing-masing nilai bobot dengan total semua bobot

bobotAntarKriteria = bobotAntarKriteria/sum(bobotAntarKriteria);

9. Hitung nilai skor akhir dengan mengalikan data dengam masing-masing bobot antar kriteria

ahp = data * bobotAntarKriteria';

10. Tentukan rentang kesimpulan nilai yang digunakan dalam perhitungan
Diasumsikan dalam kasus ini:
< 0.6 -> Kurang
0.6 – 0.69 -> Cukup
0.7 – 0.79 -> Baik
>= 0.8 -> Sangat Baik

if ahp(i) < 0.6
	status = 'Kurang';
elseif ahp(i) < 0.7
	status = 'Cukup';
elseif ahp(i) < 0.8
	status = 'Baik';
else
	status = 'Sangat Baik';
end

Hasil akhir adalah:

Algoritma Fuzzy AHP (Analytic Hierarchy Process)
Contoh: Menentukan nilai akhir kinerja karyawan
Diasumsikan ada 3 kriteria penentu nilai kinerja karyawan, yaitu jumlah jam kerja, jumlah barang yang dikerjakan, dan jumlah barang lolos uji
Kemudian terdapat 3 data karyawan yang sudah diketahui nilai pada masing-masing kriteria tersebut
Maka tentukan nilai akhir dari masing-masing karyawan
Diasumsikan data karyawan adalah sebagai berikut: 
Nama Karyawan, jumlah jam kerja, jumlah barang yang dikerjakan, jumlah barang yang lolos uji
Andi         , 200             , 80                           , 70
Budi         , 190             , 60                           , 45
Dedi         , 180             , 65                           , 55
Erdi         , 190             , 70                           , 60


Hasil Perhitungan dengan metode Fuzzy AHP
Nama Karyawan, Skor Akhir, Kesimpulan
Andi         , 0.89357   , Sangat Baik
Budi         , 0.76375   , Baik
Dedi         , 0.76696   , Baik
Erdi         , 0.81696   , Sangat Baik

Contoh modul / source code menggunakan Matlab dapat didownload disini:

[sdm_download id=”2346″ fancy=”0″]



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.