正文
本文已参与「新人创作礼」活动,一起开启掘金创作之路。层次分析法(analytic hierarchy process),简称AHP。是建模比赛中比较基础的模型之一,其主要解决评价类的问题。如选择哪种方案最好,哪位员工表现最好等。
层次分析法是一个较为 主观 的评价方法,其在赋权得到权重向量的时候,主观因素占比很大。因而在建模比赛中,常常与客观方法得到的权重向量方法进行综合,而得出一个综合的权重向量,进行后续操作。
matlab实现层次分析法
% 对判断矩阵进行一致性检验,而后计算权重。
a = input("请输入判断矩阵:"); % a为判断矩阵
[n,l] = size(a); % n为矩阵的维数
验证正互反矩阵
i=0;
j=0;
zhenghufan = true;
while zhenghufan=true
i = i+1;
while zhenghufan=true
j = j+1;
if a(i,j)*a(j,i) != 1
zhenghufan = false;
end
end
end
if min(min(a)) > 0 && zhenghufan == true
disp("判断矩阵为正互反矩阵。");
GoOn = true;
else
disp("判断矩阵不是正互反矩阵。")
GoOn = false;
end
一致性检验
if GoOn
RI_all = [0 0 0.52 0.89 1.12 1.26 1.36 1.41 1.46 1.49 1.52 1.54 1.56 1.58 1.59];
[v,d] = eig(a);% v为a特征向量,d为a的特征值对角矩阵
if rank(a) ~= 1 % 如果判断矩阵不是一致性矩阵,则进行一致性检验。
disp("进行一致性检验:");
CI = (max(max(d))-n)/(n-1);
CI
RI = RI_all(n); % 查找对应的RI
RI
CR = CI/RI
CR
if CR < 0.1
disp("CR<0.10,判断矩阵通过一致性检验。");
else
disp("不通过一致性检验,判断矩阵需要修改。");
GoOn = false;
end
else
disp("判断矩阵为一致矩阵。")
end
end
计算权重
%算数平均数权重
if GoOn
guiyi = zeros(n,n);
s = 0;
for i = 1:n
for j = 1:n
s = a(i,j)/sum(a(:,j));
guiyi(i,j) = s;
end
end
disp ("判断矩阵算数平均数计算的权重:")
suanshu = zeros(n,1);
for i = 1:n
suanshu(i) = sum(guiyi(i,:))/n;
end
suanshu
end
%几何平均数权重
if GoOn
s = 1;
xiangcheng = zeros(n,1);
for i = 1:n
for j = 1:n
s = s*a(i,j);
end
xiangcheng(i) = s^(1/n);
s = 1;
end
jihe = zeros(1,n);
for i = 1:n
jihe(i) = xiangcheng(i)/sum(xiangcheng);
end
disp ("判断矩阵几何平均数计算的权重:");
jihe
end
% 特征值法权重
eigenvalue = diag(d);
[M,I] = max(eigenvalue);
disp ("最大特征值为:");
M
disp ("对应的特征向量为:");
v(:,I)
tezheng = zeros(1,n);
for i = 1:n
tezheng(i) = v(i,I)/sum(v(:,I));
end
disp("判断矩阵特征值法的权重为:");
tezheng