层次分析模型在MATLAB中的实现

层次分析模型在MATLAB中的实现

1、层次分析法(Analytic Hicrachy proccss 简记为AHP)是美国运筹家T.L.Saaty 在70 年代初提出来的,它是将半定性、半定量的问题转化为定量计算的一种行之有效的方法。把复杂的决策系统层次化通过逐层比较各种关联因素的重要性来为分析、决策提供定量的依据。它特别适用于那些难于完全用定量进行分析的复杂问题。因此在资源分配、选优排序、政策分析、冲突求解以及决策预报等领域得到广泛的应用。

2、数学建模中可能使用到层次分析模型的问题:

层次分析模型在MATLAB中的实现_第1张图片
层次分析模型在MATLAB中的实现_第2张图片

3、一致矩阵的定义

层次分析模型在MATLAB中的实现_第3张图片

4、关于aij 的确定T.L.Saaty 引用了数字1~9 及其倒数作为标度

层次分析模型在MATLAB中的实现_第4张图片
选择1~9 的标度方法是基于下述的一些事实和乘法根据:
1. 在估计事物质区别性时,人们常用五种判断来表示:即相等、较强、强、很强、绝对强,当需要更高精度时,还可以在相邻判断之间作出比较,这样,总共有九个数据,既保持了连贯性,又便于在实践中应用。
2. 心理学家认为,人们在同时比较若干对象时,能够区别差异的心理学极限为7±2 个对象,这样它们之间的差异正好可以用九个数字表示出来。
3. Saaty 还将1~9 的标度方法同另外26 种标度方法进行过比较,结果表明1~9 标度是可行的,并且能较好地将思维判断数量化。

5、层次分析模型在MATLAB中的实现_第5张图片

层次分析模型在MATLAB中的实现_第6张图片

6、MATLAB实现求CI、CR的代码。

%% 注意:在论文写作中,应该先对判断矩阵进行一致性检验,然后再计算权重,因为只有判断矩阵通过了一致性检验,其权重才是有意义的。
%% 在下面的代码中,我们先计算了权重,然后再进行了一致性检验,这是为了顺应计算过程,事实上在逻辑上是说不过去的。
%% 因此大家自己写论文中如果用到了层次分析法,一定要先对判断矩阵进行一致性检验。
%% 而且要说明的是,只有非一致矩阵的判断矩阵才需要进行一致性检验。
%% 如果你的判断矩阵本身就是一个一致矩阵,那么就没有必要进行一致性检验。

disp(‘请输入判断矩阵A’)
A=input(‘A=’);
[n,n] = size(A);
% % % % % % % % % % % % %方法1: 算术平均法求权重% % % % % % % % % % % % %
Sum_A = sum(A);
SUM_A = repmat(Sum_A,n,1);
Stand_A = A ./ SUM_A;

disp(‘算术平均法求权重的结果为:’);
disp(sum(Stand_A,2)./n)
% % % % % % % % % % % % %方法2: 几何平均法求权重% % % % % % % % % % % % %
Prduct_A = prod(A,2);
Prduct_n_A = Prduct_A .^ (1/n);
disp(‘几何平均法求权重的结果为:’);
disp(Prduct_n_A ./ sum(Prduct_n_A))
% % % % % % % % % % % % %方法3: 特征值法求权重% % % % % % % % % % % % %
[V,D] = eig(A);
Max_eig = max(max(D));
[r,c]=find(D == Max_eig , 1);
disp(‘特征值法求权重的结果为:’);
disp( V(:,c) ./ sum(V(:,c)) )
% % % % % % % % % % % % %下面是计算一致性比例CR的环节% % % % % % % % % % % % %
CI = (Max_eig - 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
% 这里n=2时,一定是一致矩阵,所以CI = 0,我们为了避免分母为0,将这里的第二个元素改为了很接近0的正数
CR=CI/RI(n);
disp(‘一致性指标CI=’);disp(CI);
disp(‘一致性比例CR=’);disp(CR);
if CR<0.10
disp(‘因为CR<0.10,所以该判断矩阵A的一致性可以接受!’);
else
disp(‘注意:CR >= 0.10,因此该判断矩阵A需要进行修改!’);
end

7、层次分析模型在MATLAB中的实现_第7张图片

层次分析模型在MATLAB中的实现_第8张图片
层次分析模型在MATLAB中的实现_第9张图片

二、层次分析法的基本步骤

可将层次分析法的基本步骤归纳如下:

1.分析系统中各因素之间的关系建立系统的递阶层次结构,这些层次大体上可以分为三类:

(1) 最高层:它是分析问题的预定目标或理想结果。
(2) 中间层:它包括为实现目标所涉及的中间环节,它也可以由若干个层次组成。
(3) 最低层:它是为实现目标而供选择的各种措施、决策方案。但是,每层包含的因素
个数不要超过9 个,过多的话,可考虑再分出层次来。

2.构造两两成对比的判断矩阵。

判断矩阵元素的值反映了人们对因素关于目标的相对重要性的认识,在相邻的两个层次
中,高层次为目标,低层次为因素。

3.层次单排序及其一致性检验。

判断矩阵 A 的特征根 Aw w
max   将w  归一化,即为诸因素对于目标的相对重要性的排
序数值,计算出CI 值,当CR<0.1 时,则认为层次单排序的结果有满意的一致性,否则
需要调整判断矩阵的元素取值。

4.层次总排序。

计算同一层次所有因素对于最高层(总目标)相对重要性的排序权值,称为层次总排序,
这一过程是最高层次到最低层次逐层进行的, 若上一层次A 包含m 个因素
1 2 , , , m A A  A ,其层次总排序的权值分别为a1 , a2 ,, am ,下一层次 B 包含 n 个因素
B1 , B2 ,, Bn ,它们对于因素Aj 的层次单排序的权值分别为b1 j ,b2 j ,,bnj ,当(Bk与 Aj
无联系时,取bkj  0),此时 B 层次总排序的权值由表 3 给出。层次分析模型在MATLAB中的实现_第10张图片

你可能感兴趣的:(数学建模,matlab,层次模型,数学建模)