目录
1.简介
解决评价类问题,该方法叫为主观。
2.模型
(1)本质
求解问题:
目标:问题实现的目标(如:19MCM的教育体系)
指标:衡量角度(如:经济,政治等)
方案:实现的方案(如:不同国家的教育体系)
总体模型如下图所示:
画出总的层次模型图,在按照下图求解各方案的得分。
其中相同颜色区域和为1,最后求解出各个方案的得分,选出最佳方案。
(2)步骤
STEP1:判断矩阵
为了避免过于主观,采取两两对比,分别对指标和每项指标下方案进行对比:
判断矩阵中的元素只能是1至9和它们的倒数
正互反矩阵:
对角元素为1,
STEP2:一致性检验
根据比较关系的递推性,判断矩yin阵应该满足以下关系:
满足上述关系的矩阵我们称之为一致性矩阵:
一致性矩阵的充要条件:
- 对角线元素为1
- ,即各行成比例
矩阵性质:
- 特征值为n,其他为0
- 特征值为n时,特征向量为
引理:
n阶正互反矩阵A为一致性矩阵,当且仅当特征值,
n阶正互反矩阵A不为一致性矩阵,。
- 计算一致性指标CI
- 查找对应平均随机一致性指标RI
n | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
RI | 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 |
注:在实际运用中,n很少超过10,如果指标的个数大于10,则可考虑建立 二级指标体系,或使用我们以后要学习的模糊综合评价模型。
- 计算一致性比例CR
注:特征值中有虚数,则比较的是特征值的模。
则判断矩阵一致,反之亦然。
注:二阶正互反矩阵一定是 一致矩阵
STEP3:求解权重
首先是求解每个判断矩阵的权重(n个指标,m个方案,共1+n个判断矩阵):
- 算术平均法:
- 几何平均法:
- 特征值法: 归一化特征向量---------
最后算出每个方案的总的得分,选取方案。
3.代码
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
INPUT: Judegement Matrix
OUTPUT:Weight Vector,Consistency
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
clear;clc
%% INPUT Matrix
disp('INPUT Matrix A: ');
% A = input('Matrix A=');
A =[1 1 4 1/3 3;
1 1 4 1/3 3;
1/4 1/4 1 1/3 1/2;
3 3 3 1 3;
1/3 1/3 2 1/3 1];
%% Judege Consistency of CR
[V,D] = eig(A); %V--eigenvector, D--diagnal matrix consist of eignvalue
Max_eig = max(max(D)); %maximal eigenvalue
CI = (Max_eig - n) / (n-1);
RI=[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]; %n<=15
CR=CI/RI(n);
disp('CI=');disp(CI);
disp('CR=');disp(CR);
if CR<0.10
disp('CR < 0.10,consistency of A is agreed!');
else
disp('CR >= 0.10,consistency of A is rejected!!!');
end
%% Compute weight vector
%%Method1:Arithmetic average method
A_Sum = sum(A)
[n,n] = size(A)
A_Sum = repmat(A_Sum,n,1) %repeat matrix的缩写
A_Standard = A ./ A_Sum;
weight1 = sum(A_Standard,2)/n;
%disp('Weight Vector:');
%disp(weight1);
%%Method2:Geometric mean method
Prduct_A = prod(A,2);
Prduct_n_A = Prduct_A .^ (1/n);
weight2 = Prduct_n_A ./ sum(Prduct_n_A);
%disp('Weight Vector:');
%disp(weight2);
%%Method3:Eigenvalue method
D == Max_eig;
[r,c] = find(D == Max_eig , 1)
weight3 = V(:,c) ./ sum(V(:,c))
%disp('Weight Vector:');
%disp(weight3);