资源描述
层次分析法(AHP)及matlab程序
层次分析法是一种新的定性分析与定量分析相结合的系统分析方法,是将人的主观判断用数量形式表达和处理的方法,简称AHP(The Analytic Hierarchy Process)法。近年来,层次分析法在草地农业生态系统的系统分析、设计与决策中日益受到重视。
1层次分析法的基本方法和步骤
层次分析法是把复杂问题分解成各个组成因素,又将这些因素按支配关系分组形成递阶层次结构。通过两两比较的方式确定各个因素相对重要性,然后综合决策者的判断,确定决策方案相对重要性的总排序。运用层次分析法进行系统分析、设计、决策时,可分为4个步骤进行;
(1)分析系统中各因素之间的关系,建立系统的递阶层次结构;
(2)对同一层次的各元素关于上一层中某一准则的重要性进行两两比较,构造两两比较的判断矩阵;
(3)由判断矩阵计算被比较元素对于该准则的相对权重;
(4)计算各层元素对系统目标的合成权重,并进行排序,
2递阶层次结构的建立
首先把系统问题条理化、层次化,构造出一个层次分析的结构模型。在模型中,复杂问题被分解,分解后各组成部分称为元素,这些元素又按属性分成若干组,形成不同层次。同一层次的元素作为准则对下一层的某些元素起支配作用,同时它又受上面层次元素的支配。层次可分为三类;
(1)最高层:这一层次中只有一个元素,它是问题的预定目标或理想结果,因此也叫目标层;
(2)中间层:这一层次包括要实现目标所涉及的中间环节中需要考虑的准则。该层可由若干层次组成,因而有准则和子准则之分,这一层也叫准则层;
(3)最底层:这一层次包括为实现目标可供选择的各种措施、决策方案等,因此也称为措施层或方案层。
上层元素对下层元素的支配关系所形成的层次结构被称为递阶层次结构。当然,上一层元素可以支配下层的所有元素,但也可只支配其中部分元素。递阶层次结构中的层次数与问题的复杂程度及需要分析的详尽程度有关,可不受限制。每一层次中各元素所支配的元素一般不要超过9个,因为支配的元素过多会给两两比较判断带来困难。层次结构的好坏对于解决问题极为重要,当然,层次结构建立得好坏与决策者对问题的认识是否全面、深刻有很大关系。
3构造两两比较判断矩阵
在递阶层次结构中,设上一层元素C为准则,所支配的下一层元素为u1,u2,…,un对于准则C相对重要性即权重。这通常可分两种情况:
(1)如果u1,u2,…,un对C的重要性可定量(如可以使用货币、重量等),其权重可直接确定。
(2)如果问题复杂,u1,u2,…,un对于C的重要性无法直接定量,而只能定性,那么确定权重用两两比较方法。其方法是:对于准则C,元素ui和uj哪一个更重要,重要的程度如何,通常按1~9比例标度对重要性程度赋值,下表中列出了1~9标度的含义。
表1 标度的含义
标度
含义
1
表示两个元素相比,具有同样重要性
3
表示两个元素相比,前者比后者稍重要
5
表示两个元素相比,前者比后者明显重要
7
表示两个元素相比,前者比后者强烈重要
9
表示两个元素相比,前者比后者极端重要
2,4,6,8
表示上述相邻判断的中间值
倒数
若元素与的重要性之比为,那么元素与元素重
要性之比为
对于准则C,n个元素之间相对重要性的比较得到一个两两比较判断矩阵
其中就是元素和相对于C的重要性的比例标度。判断矩阵A具有下列性质:,,
由判断矩阵所具有的性质知,一个n个元素的判断矩阵只需要给出其上(或下)三角的n(n-1)/2个元素就可以了,即只需做n(n-1)/2个比较判断即可。
若判断矩阵A的所有元素满足,则称A为一致性矩阵。
不是所有的判断矩阵都满足一致性条件,也没有必要这样要求,只是在特殊情况下才有可能满足一致性条件。
4单一准则下元素相对权重的计算以及判断矩阵的一致性检验
已知n个元素u1,u2,…,un对于准则C的判断矩阵为A,求u1,u2,…,un对于准则C的相对权重写成向量形式即为
(1)权重计算方法。
①和法。将判断矩阵A的n个行向量归一化后的算术平均值,近似作为权重向量,即
计算步骤如下:
第一步:A的元素按行归一化;
第二步:将归一化后的各行相加;
第三步:将相加后的向量除以n,即得权重向量。
类似的还有列和归一化方法计算,即
②根法(即几何平均法)。将A的各个行向量进行几何平均,然后归一化,得到的行向量就是权重向量。其公式为
计算步骤如下:
第一步:A的元素按列相乘得一新向量;
第二步:将新向量的每个分量开n次方;
第三步:将所得向量归一化后即为权重向量。
③特征根法(简记EM)。解判断矩阵A的特征根问题
式中,是A的最大特征根,W是相应的特征向量,所得到的W经归一化后就可作为权重向量。
④对数最小二乘法。用拟合方法确定权重向量,使残差平方和为最小。
⑤最小二乘法。确定权重向量,使残差平方和
为最小。
(2)一致性检验.
在计算单准则下权重向量时,还必须进行一致性检验。在判断矩阵的构造中,并不要求判断具有传递性和一致性,即不要求严格成立,这是由客观事物的复杂性与人的认识的多样性所决定的。但要求判断矩阵满足大体上的一致性是应该的。如果出现“甲比乙极端重要,乙比丙极端重要,而丙又比甲极端重要”的判断,则显然是违反常识的,一个混乱的经不起推敲的判断矩阵有可能导致决策上的失误。而且上述各种计算排序权重向量(即相对权重向量)的方法,在判断矩阵过于偏离一致性时,其可靠程度也就值得怀疑了,因此要对判断矩阵的一致性进行检验,具体步骤如下:
①计算一致性指标C.L. (consistency index)
②查找相应的平均随机一致性指标R.I.(random index)
下表给出了1~15阶正互反矩阵计算1000次得到的平均随机一致性指标。
表2平均随机一致性指标R.I.
矩阵阶数
1
2
3
4
5
6
7
8
R.L
0
0
0.52
0.89
1.12
1.26
1.36
1.41
矩阵阶数
9
10
11
12
13
14
15
R.L.
1.46
1.49
1.52
1.54
1.56
1.58
1.59
③计算性一致性比例C.R.(consistency ratio)
当C.R.<0.1时,认为判断矩阵的一致性是可以接受的;当C.R.≥0.1时,应该对判断矩阵做适当修正。
为了讨论一致性,需要计算矩阵最大特征根,除常用的特征根方法外,还可使用公式
④计算各层元素对目标层的总排序权重。上面得到的是一组元素对其上一层中某元素的权重向量。最终要得到各元素,特别是最低层中各元素对于目标的排序权重,即所谓总排序权重,从而进行方案的选择。总排序权重要自上而下地将单准则下的权重进行合成,并逐层进行总的判断一致性检验。
设表示第k-1层上nk-1个元素相对于总目标的排序权重向量,用表示第k层上nk个元素对第k-1层上第j个元素为准则的排序权重向量,其中不受j元素支配的元素权重取为零。矩阵是nk×nk-1阶矩阵,它表示第k层上元素对k-1层上各元素的排序,那么第k层上元素对目标的总排序W(k) 为
或
并且一般公式为
其中(W2)是第二层上元素的总排序向量,也是单准则下的排序向量。
要从上到下逐层进行一致性检难,若已求得k-1层上元素j为准则的一致性指标C.I.j(k),平均随机一致性指标R.I.j(k),一致性比例C.R. j (k)(其中j=1,2,…,nk-1),则k层的综合指标
当C.R.(k)<0.1时,认为递阶层次结构在k层水平的所有判断具有整体满意的一致性。
AHP Matlab程序如下:
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);disp(t);
%以下是一致性检验
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
function AHPInit1(x,y)
%层次分析的初始化
%默认只有两层 x为准则数,y为方案数
%CToT为准则对目标生成的比较阵
%EigOfCri为准则层的特征向量
%EigOfOpt为选项层的特征向量
EigOfCri=zeros(x,1);%准则层的特征向量
EigOfOpt=zeros(y,x);
dim=x;%维度
RI=[0 0 0.58 0.90 1.12 1.24 1.32 1.41 1.45 1.49 1.51];%RI标准
%生成成对比较阵
for i=1:dim
CToT(i,:)=input('请输入数据:');
end
CToT %输出
pause,
tempmatrix=zeros(x+1);
tempmatrix=AHP1(dim,CToT);
EigOfCri=tempmatrix(1:x);
ci1=tempmatrix(1+x);
EigOfCri
ci1
pause,
matrix=cell(x);%元胞数组
ci=zeros(1,x);
dim=y;
for k=1:x
matrix{k}=zeros(dim,dim);
%生成成对比较阵
for i=1:dim
matrix{k}(i,:)=input('请输入数据:');
end
%判断该比较阵是不是一致阵
tempmatrix=zeros(y+1);
tempmatrix=AHP1(dim,matrix{k});
EigOfOpt(:,k)=tempmatrix(1:y);
ci(k)=tempmatrix(y+1);
EigOfOpt(:,k)
ci(k)
pause,
end
%下面进行组合一致性检查
RI=[0 0 0.58 0.90 1.12 1.24 1.32 1.41 1.45 1.49 1.51];
CR=ci1/RI(x)+ci*EigOfCri/RI(y);
CR
if CR>0.1
disp('组合一致性不通过,请重新评分')
return
end
%下面根据比较阵的结果进行组合
result=EigOfOpt*EigOfCri;
result
function f=AHP1(dim,CmpMatrix)
RI=[0 0 0.58 0.90 1.12 1.24 1.32 1.41 1.45 1.49 1.51];
%判断该比较阵是不是一致阵
%判断该比较阵是不是一致阵
[V,D]=eig(CmpMatrix);%求得特征向量和特征值
%求出最大特征值和它所对应的特征向量
tempNum=D(1,1);
pos=1;
for h=1:dim
if D(h,h)>tempNum
tempNum=D(h,h);
pos=h;
end
end
eigVector=V(:,pos);
maxeig=D(pos,pos);
maxeig
dim
CI=(maxeig-dim)/(dim-1);
CR=CI/RI(dim);
if CR>0.1
disp('准则对目标影响度评分生成的矩阵不是一致阵,请重新评分')
return
end
CI
%归一化
sum=0;
for h=1:dim
sum=sum+eigVector(h);
end
sum
pause,
for h=1:dim
eigVector(h)=eigVector(h)/sum;
end
f=[eigVector;CI];
展开阅读全文