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.
Leave a Reply