原理小结
问题的主要困难
- 难以完全定量分析
- 当影响某因素的因子较多时,直接考虑因子的影响程度常常考虑不周全、顾此失彼,从而得出一组与实际不相一致甚至隐含矛盾的数据
解决办法
对指标进行两两比较,进而推算出权重
层次分析法
帮助解决较为复杂、模糊的问题作出决策的方法
步骤:
a. 建立递阶层次结构模型;
b. 构造出各层次中的所有判断矩阵;
c. 层次单排序及一致性检验;
d. 层次总排序及一致性检验。
局限
评价的决策不能太多,RI表格中n最大为15
步骤a 建立梯阶层次结构模型
注:
每一层次中各元素所支配的元素一般不要超过9 个。这是因为支配
的元素过多会给两两比较判断带来困难。
步骤b 构造判断矩阵 (两两比较建立成对比较矩阵)
定义:若矩阵 A = ( a i j ) n n A=(a_{ij})_{n\ n} A=(aij)n n满足
( 1 ) a i j > 0 , ( 2 ) a j i = 1 a i j , i , j = 1 , 2 , ⋯ , n (1)a_{ij} > 0,(2)a_{ji}=\frac{1}{a{ij}},i,j=1,2,\cdots,n (1)aij>0,(2)aji=aij1,i,j=1,2,⋯,n
则称之为正互反矩阵
a i j a_{ij} aij的值:1~9及其倒数作为标度
标度 | 含义 |
---|---|
1 | 重要性相同 |
3 | 前者比后者稍重要 |
5 | 前者比后者明显重要 |
7 | 前者比后者强烈重要 |
9 | 前者比后者极端重要 |
2、4、6、8 | 上述相邻判断的中间值 |
倒数 | a i j a_{ij} aij的值 |
矩阵的具体书写:对 n n n 个准则,列写 n n n 个判断矩阵,用于两两比较各测量的值
如之前所建立模型所列判断矩阵(需列 n n n 个):
方案 n n n | 策略1 | 策略2 | 策略3 |
---|---|---|---|
策略1 | 1 | 2 | 3 |
策略2 | 1/2 | 1 | 4 |
策略3 | 1/3 | 1/4 | 1 |
注:此表中数值随意编写,实际写论文过程中,文字用字母替换如下:方案—C、策略—P,且命名:判断矩阵 C n − P C_{n}-P Cn−P
步骤c 层次单排序及一致性检验
基本概念:
- 满足关系式 a i j ⋅ a j k = a i k , ∀ i , j , k = 1 , 2 , ⋯ , n a_{ij}\cdot a_{jk}=a_{ik}, \forall i,j,k=1,2,\cdots,n aij⋅ajk=aik,∀i,j,k=1,2,⋯,n 的正互反矩阵称为一致矩阵
- 一致矩阵常用性质(据此判断是否为一致矩阵):
- 任意两行(列)成比例,矩阵秩为1
- 最大特征值 λ m a x = n \lambda _{max}=n λmax=n,其余特征根为0。当矩阵非一致时, λ m a x > n \lambda _{max}>n λmax>n,偏差越大,其非一致程度越大
- 线性代数补充:设A是n阶方阵,若数 λ \lambda λ 和 n n n 维非零列向量x,使得 A x = λ x Ax = \lambda x Ax=λx 成立,则称 λ \lambda λ 是方阵A的一个特征值, x x x为方阵 A A A 的对应于特征值 λ \lambda λ 的一个特征向量。
由判断矩阵计算被比较元素对于该准则的相对权重,并进行一致性检验
三种计算权重的方法:
- 算数平均法
- 几何平均法
- 特征值法(最常用)
详细计算过程由代码部分汇总展示
一致性检验步骤:
- 计算一致性指标 C I CI CI: C I = λ m a x − n n − 1 CI=\frac{\lambda_{max}-n}{n-1} CI=n−1λmax−n
- 查找相应随机一致性指标 R I RI RI:
n n n | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
---|---|---|---|---|---|---|---|---|---|
R I RI RI | 0 | 0 | 0.58 | 0.90 | 1.12 | 1.24 | 1.32 | 1.41 | 1.45 |
计算一致性比例CR: C R = C I R I CR=\frac{CI}{RI} CR=RICI
代码汇总
%%%%%%%%%%%%%%%%% 代码1:函数清单 %%%%%%%%%%%%%%%%%%%
help disp
help input
help strcat
help num2st
help sum
help prod
help size
help repmat % 重点
help eig % 重点
help find % 重点
%%%%%%%%%% 代码2:求判断矩阵权重——算数平均法 %%%%%%%%%%%
%% 思路:先对每一列求和,再将对应列每一元素除以该和,
%% 得每一列的权重,最后按行求平均,得权重向量
clear, clc
lsum_A = sum(A); % A为权重矩阵
n = size(a,1); % 判断矩阵为方阵
sum_A = repmat(lsum_A, n, 1);
lweight_A = A./sum_A;
weight_A1 = sum(weight_A, 2)/3 % 按行对列权重求平均
%%%%%%%%%% 代码3:求判断矩阵权重——几何平均法 %%%%%%%%%%%
%% 思路类似与代码2
clc
multi_A = prod(A, 2); %按行相乘,得一列向量
root_A = power(multi_A, 1/n);
weight_A2 = root_A ./sum(root_A)%即为所求
%%%%%%%%%%% 代码4:求判断矩阵——权重特征值法 %%%%%%%%%%%%
%% 依据定理:判断矩阵 A 对应于最大特征值的特征向量,
%% 归一化后即为相应因素对于上一层次某因素相对重要性的排序权值
clc
[V, D] = eig(A); %特征向量&特征值构成的对角阵
lambda_max = max(max(D));
[row, col] = find(D==lambda_max, 1);%最大特征值位置
weight_A3 = V(:, col)./sum(V(:, col));
%%%%%%%%%%%%%% 代码5:计算一致性比例CR %%%%%%%%%%%%%%%
clc
CI = (lambda_max - 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];%注意续行符
CR=CI/RI(n) %可直接输入RI的值
if CR<0.10
disp('判断矩阵的一致性可以接受。');
else
disp('应对判断矩阵作适当修正');
end