目录
一、简介及前言(层次分析法解决评价类问题)
二、构造判断矩阵(准则层、方案层)
三、一致性检验(CR=CI/RI)
四、计算权重(算数平均、几何平均、特征值)
五、计算得分(Excel)
六、论文写作(SmartArt、画图)
七、代码实现(MATLAB)
一、简介及前言
层次分析法(Analytic Hierarchy Process,简称AHP),是指将与 决策有关的元素分解成目标、准则、方案等层次,在此基础之上进行定性和定量分析的决策方法。
层次分析法是将决策问题按总目标、各层子目标、评价准则直至具体的备投方案的顺序分解为不同的层次结构,然后用求解判断矩阵特征向量的办法,求得每一层次的各元素对上一层次某元素的优先权重,最后再加权和的方法递阶归并各备择方案对总目标的最终权重,此最终权重最大者即为最优方案。
层次分析法比较适合于具有分层交错评价指标的目标系统,而且目标值又难于定量描述的决策问题。
层次分析法是建模比赛中最常用的模型,主要用于解决评价类问题。评价类问题可用打分解决。
如果直接打分问权重:
关键在于如何确定这些权重
二、构造判断矩阵
采用指标两两比较的方法确定最终权重
aij与列指标相比,行指标的重要程度(行是列的几倍)
满足主对角线全为1,aij*aji=1,则称正互反矩阵,也就是层次分析法中的判断矩阵。
准则层各个指标构造一次得出权重。
方案层针对准则层每个指标构造判断矩阵得出各个权重。
三、一致性检验
列与列成比例,比值为 ajk。 行与行成比例,比值为aij
一致性检验:检验我们构造的判断矩阵与一致矩阵的差距大小
四、计算权重
五、计算得分
六、论文写作
七、代码实现
clear;clc
%第一步:输入判断矩阵
A=input('请输入判断矩阵');
%A = [1,2,4;
1/2,1,2;
1/4,1/2,1];
%第二步:一致性检验(求CI、RI、CR)
E = eig(A);%得到一个所有特征值构成的列向量
lambda_max = max(E);%最大特征值
n = size(A,1);%指标数即行列数
CI = (lambda_max-n)/(n-1);
RI = [0 0.0001 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]; %注意哦,这里的RI最多支持 n = 15
CR = CI/RI(n);
disp(['一致性比例CR为' num2str(CR)]);
if CR<0.1
disp('一致性检验通过。')
else
disp('一致性检验不通过。')
end
%第三步:判断矩阵求权重
[n,n] = size(A);
%--------算数平均法--------%
sum_A = repmat(sum(A),n,1);%按列求和得到行向量,行向量向下复制成r行
average_A = A./sum_A;%按列归一化
average_A1 = sum(average_A,2)./n;%按行求和再除以指标数n
disp('算数平均法得出的权重:');
disp(average_A1);
%--------几何平均法--------%
product_A = prod(A,2).^(1/n);%按行求几何平均值得到列向量(和算数平均有区别!!)
product_A1 = product_A./sum(product_A);%归一化
disp('几何平均法得出的权重:');
disp(product_A1);
%--------特征值法--------%
[V,D] = eig(A);%V:一列列特征向量构成的矩阵D:特征值对角阵
eig_max = max(max(D));%最大特征值
[r,c] = find(D==eig_max,1);%最大特征值所在列find(logic,1)只找第一个不为0的
eig_vetor_max = V(:,c);%最大特征值对应的特征向量
eig_vetor_max1 = eig_vetor_max./sum(eig_vetor_max);%归一化
disp('特征值法得出的权重:');
disp(eig_vetor_max1);