matlab---层次分析法
层次分析法根据问题的性质和要达到的总目标,将问题分解为不同的组成因素,并按照因素间的相互关联影响以及隶属关系将因素按不同层次聚集组合,形成一个多层次的分析结构模型,从而最终使问题归结为最底层(供决策的方案、措施等)相对于最高层(总目标)的 相对重要权值的确定或相对优劣次序的排序。
层次分析法步骤
运用层次分析法构造系统模型时,大体可以分为以下四个步骤:
- 建立层次结构模型 ;
- 构造判断(成对比较)矩阵 ;
- 层次单排序及一致性检验 ;
- 层次总排序及一致性检验 ;
如何构建层次结构模型
将决策的目标、考虑的因素(决策准则)和决策对象按它们之间的相互关系分为最高层、中间层和最底层,绘制层次结构图
- 最高层 :决策的目的、要解决的问题 ;
- 中间层 :决策时的备选方案 ;
- 最低层 :考虑的因素、决策的准则 ;
构建层次结构模型举例
案例:在苏杭、北戴河、桂林三处选择一个旅游点。要考虑景点的景色、居住的环境、饮食的特色、交通便利和旅游的费用。
下面根据案例画出目标层、准则层和方案层,如下:
成对比较矩阵标度表
成对比较矩阵
在确定各层次各因素的权重时,如果只是定性的结果,则常常不容易被别人接受,因而Santy等人提出:一致矩阵法,即:
- 不把所有因素放在一起比较,而是两两相互比较 ;
- 对此时采用相对尺度,以尽可能减少性质不同的诸因素相互比较的困难,以提高准确度;
成对比较矩阵是表示本层所有因素针对上一层某一个因素的相对重要性的比较。成对比较矩阵的元素aij用Santy的1-9标度方法给出。
如下是一个成对比较矩阵:
按照自己认为的重要性或者其他权威领域给出的重要性填好矩阵
一致性检验
成对比较矩阵允许不一致,但要确定不一致的允许范围
层次分析法举例
- 根据上面的去苏杭、北戴河、桂林旅游的案例,下面用层次分析法求解最后结果(选择哪个地方去旅游)。首先,画出层次结构模型;其次建立成对比较矩阵,如下:
在查找了大量数据,并综合了相关领域专家的意见之后,构造的这样一个成对比较矩阵(主对角线的数都是1,上下对角的地方互为相反数)
matlab中矩阵的表示方法如下,这里以B5为例:
[1,1,1/4;
1,1,1/4;
4,4,1]
- 在建立了层次分析模型和成对比较矩阵后,我们使用代码来实现权重的求解,代码如下所示:
disp('请输入判断矩阵A(n阶)');
A=input('A=');
[n,n]=size(A);
x=ones(n,100);
y=ones(n,100);
m=zeros(1,100);
m(1)=max(x(:,1));
y(:,1)=x(:,1);
x(:,2)=A*y(:,1);
m(2)=max(x(:,2));
y(:,2)=x(:,2)/m(2);
p=0.0001;
i=2;
k=abs(m(2)-m(1));
while k>p
i=i+1;
x(:,i)=A*y(:,i-1);
m(i)=max(x(:,i));
y(:,i)=x(:,i)/m(i);
k=abs(m(i)-m(i-1));
end
a=sum(y(:,i));
w=y(:,i)/a;
t=m(i);
disp(w);
%以下是一致性检验
CI=(t-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);
if CR<0.10
disp('此矩阵的一致性可以接受!');
disp('CI=');disp(CI);
disp('CR=');disp(CR);
end;
- 在matlab中运行程序,输入成对矩阵就能得到各矩阵的权重:输入成对比较矩阵A可以得到A1A2A3A4A5对Z的权重;输入矩阵B1可以得到B1B2B3对A1的权重,以此类推。最后得到的结果如下:
- 计算层次总排序权值和一致性检验
所以选最大的权向量的决策:0.455