-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathFuzzyAHP.m
78 lines (67 loc) · 2.49 KB
/
FuzzyAHP.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
function [bobotAntarKriteria, relasiAntarKriteria] = FuzzyAHP(relasiAntarKriteria, TFN);
fuzzyRelasi = {};
[jumlahData, jumlahKriteria] = size(relasiAntarKriteria);
for i = 1:jumlahData
for j =1+1:jumlahData
relasiAntarKriteria(j,i) = 1 / relasiAntarKriteria(i,j);
end
end
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
for i = 1:jumlahData
barisRelasi = [fuzzyRelasi{i,:}];
jumlahRelasiPerBaris{1,i} = sum (reshape(barisRelasi,3,[])');
end
RelasiPerData = [jumlahRelasiPerBaris{1,:}];
jumlahRelasiPerKolom = sum(reshape(RelasiPerData,3,[])');
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
%Rumus yang digunakan adalah:
% /---
% | jika m2>=m1 1
% |
% | jika l1>=l2 0
% V(M2>=M1) = <
% | l1-u2
% | selain itu ---------------
% | (m1-u2)-(m1-l1)
% \---
derajatKemungkinan = zeros(jumlahData*(jumlahData-1),3);
idxBaris = 1;
for i=1:jumlahData
for j=1:jumlahData
if i~=j
derajatKemungkinan(idxBaris,[1 2]) = [i j];
M1 = jumlahRelasiPerBaris{1,i};
M2 = jumlahRelasiPerBaris{1,j};
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
idxBaris = idxBaris + 1;
end
end
end
bobotAntarKriteria = zeros(1,jumlahData);
for i=1:jumlahData,
bobotAntarKriteria(1,i) = min(derajatKemungkinan([find(derajatKemungkinan(:,1) == i)],[3]));
end
bobotAntarKriteria = bobotAntarKriteria/sum(bobotAntarKriteria);
end