Matlab求解层次分析法程序代码【求解步骤+代码】

合集下载

MatLab层次分析法代码

MatLab层次分析法代码
>>A=[12564724;1/21242712;1/51/215151/22;1/61/41/511/331/21/4;1/41/2131512;1/71/71/51/31/511/71/5;1/21221712;1/41/21/241/251/21];
>>d=eig(A)%求全部特征值所组成的向量
e=max(eig(A));%最大特征值
v=null(A-e*eye(length(A)));%e对应特征向量
>>e
>>A=[13365957;1/31134746;1/31134746;1/61/31/311/241/22;1/51/41/421412;1/91/71/71/41/411/31/2;1/51/41/421312;1/71/61/61/21/221/21];
e=max(eig(A));%最大特征值
v=null(A-e*eye(length(A)));%e对应特征向量
>>e
e=
8.4243
>>v
v=
-0.7427
-0.3893
-0.2579
-0.0985
-0.2588
-0.0519
-0.3352
-0.1966
>>A=[13365957;1/31134746;1/31134746;1/61/31/311/241/22;1/51/41/421412;1/91/71/71/41/411/31/2;1/51/41/421312;1/71/61/61/21/221/21];
0.2579-0.0614+0.3195i-0.0614-0.3195i-0.0739-0.0916i-0.0739+0.0916i-0.1506-0.0176i-0.1506+0.0176i

层次分析法及matlab程序

层次分析法及matlab程序

层次分析法建模层次分析法(AHP -Analytic Hierachy process )---- 多目标决策方法70 年代由美国运筹学家T ·L ·Satty 提出的,是一种定性与定量分析相结合的多目标决策分析方法论。

吸收利用行为科学的特点,是将决策者的经验判断给予量化,对目标(因素)结构复杂而且缺乏必要的数据情况下,采用此方法较为实用,是一种系统科学中,常用的一种系统分析方法,因而成为系统分析的数学工具之一。

传统的常用的研究自然科学和社会科学的方法有:机理分析方法:利用经典的数学工具分析观察的因果关系;统计分析方法:利用大量观测数据寻求统计规律,用随机数学方法描述(自然现象、社会现象)现象的规律。

基本内容:(1)多目标决策问题举例AHP 建模方法(2)AHP 建模方法基本步骤(3)AHP 建模方法基本算法(3)AHP 建模方法理论算法应用的若干问题。

参考书: 1、姜启源,数学模型(第二版,第9章;第三版,第8章),高等教育出版社2、程理民等, 运筹学模型与方法教程,(第10章),清华大学出版社3、《运筹学》编写组,运筹学(修订版),第11章,第7节,清华大学出版社一、问题举例:A .大学毕业生就业选择问题获得大学毕业学位的毕业生,“双向选择”时,用人单位与毕业生都有各自的选择标准和要求。

就毕业生来说选择单位的标准和要求是多方面的,例如:① 能发挥自己的才干为国家作出较好贡献(即工作岗位适合发挥专长); ② 工作收入较好(待遇好);③ 生活环境好(大城市、气候等工作条件等); ④ 单位名声好(声誉-Reputation ); ⑤ 工作环境好(人际关系和谐等)⑥ 发展晋升(promote, promotion )机会多(如新单位或单位发展有后劲)等。

问题:现在有多个用人单位可供他选择,因此,他面临多种选择和决策,问题是他将如何作出决策和选择?——或者说他将用什么方法将可供选择的工作单位排序?暑假有3个旅游胜地可供选择。

层次分析法MATLAB编程

层次分析法MATLAB编程

层次分析法机器期望获得信息和所获得的信息是多层次的,属于多目标问题,对于多目标问题,由于各目标重要程度不同,决策者对于目标重要程度所进行的比较及量化称为价值权衡,最终体现为各个目标的加权系数,那么确定权重系数,目前最广的使用方法为层次分析法。

层次分析法的步骤:①确定层次结构模型②构造判断矩阵A,决策者对多个属性的重要程度作比较,同时进行比较和判断的属性不能过多,最多不能超过七个因素。

比较法是在一个属性中只对两个属性进行比较,对i,j两个因素进行比较时做如下约定。

同时,矩阵A=()mxn满足以下特征:(1) >0(2)=1/(3)=1③求矩阵A的最大特征根,然后求矩阵A的最大特征相应的特征向量W,AW=W。

④一致性检验。

为了检验矩阵的一致性,需要计算它的一致性指标CI,CI 的定义为显然,当判断矩阵具有完全一致性时,CI=0。

越大,CI越大,判断矩阵的一致性越差。

注意到矩阵A的n个特征值之和恰好等于n, 所以CI相当于除max外其余n-1个特征根的平均值。

为了检验判断矩阵是否具有满意的一致性,需要找出衡量矩阵A的一致性指标CI的标准,引入修正值CR概念。

当阶数大于2时,判断矩阵的一致性指标CI,与同阶平均随机一致性的指标RI之比。

取CR=CI/RI,当CR=<0.01时,就认为矩阵具有满意的一致性,否则就需对判断矩阵进行调整。

程序:A=[]; %矩阵自行输入[m,n]=size(A); %获取指标个数RI=[0 0 0.58 0.96 1.12 1.24 1.32 1.41 1.45 1.49 1.51];R=rank(A); %判断矩阵的秩[V,D]=eig(A); %判断矩阵的特征值和特征向量,V特征值,D特征向量;tz=max(D);B=max(tz); %最大特征值[row,col]=find(D==B); %查询最大特征值所在位置C=V(:,col); %求对应特征向量CI=(B-n)/(n-1);CR=CI/RI(1,n); %计算一致性检验指标CI,CRif CR<0.10disp('CT=');disp(CI);disp('对比矩阵A通过一致性检验,各向量权重向量Q为:');Q=zeros(n,1);for i=1:nQ(i,1)=C(i,1)/sum(C(i,1)); %特征向量标准化endQ %输出权重向量elsedisp('对比矩阵A未通过一致性检验,需重新构造');end。

matlab计算AHP层次分析法

matlab计算AHP层次分析法

matlab计算AHP层次分析法第一篇:matlab计算AHP层次分析法用matlab解决层次分析法AHP1、求矩阵最大特征值及特征向量用matlab求:输入:A=[1 1/2 2 1/4;2 1 1 1/3;1/2 1 1 1/3;4 3 3 1][x,y]=eig(A)得出:特征向量x=[0.2688 0.3334 0.2373 0.8720]最大特征值λmax=4.19642、一致性检验CI=(λmax-n)/(n-1)=(4.1964-4)/(4-1)=0.0655 CR=CI/RI=0.0655/0.9=0.0727(注:维数为4时,RI=0.9)CR=0.0727<0.1,矩阵一致性通过检验3、对最大特征值进行归一化处理,即可得到各指标权重(归一化:分项/分项之和)W=[0.157 0.195 0.139 0.510]第二篇:AHP层次分析法层次分析法层次分析法(The analytic hierarchy process,简称AHP),也称层级分析法什么是层次分析法层次分析法(The analytic hierarchy process)简称AHP,在20世纪70年代中期由美国运筹学家托马斯·塞蒂(T.L.Saaty)正式提出。

它是一种定性和定量相结合的、系统化、层次化的分析方法。

由于它在处理复杂的决策问题上的实用性和有效性,很快在世界范围得到重视。

它的应用已遍及经济计划和管理、能源政策和分配、行为科学、军事指挥、运输、农业、教育、人才、医疗和环境等领域。

层次分析法的基本思路与人对一个复杂的决策问题的思维、判断过程大体上是一样的。

不妨用假期旅游为例:假如有3个旅游胜地A、B、C供你选择,你会根据诸如景色、费用和居住、饮食、旅途条件等一些准则去反复比较这3个候选地点.首先,你会确定这些准则在你的心目中各占多大比重,如果你经济宽绰、醉心旅游,自然分别看重景色条件,而平素俭朴或手头拮据的人则会优先考虑费用,中老年旅游者还会对居住、饮食等条件寄以较大关注。

使用Matlab程序实现层次分析法(AHP)的简捷算法

使用Matlab程序实现层次分析法(AHP)的简捷算法

使用Matlab程序实现层次分析法(AHP)的简捷算法作者:于晶来源:《科技风》2016年第16期摘要:层次分析法简便易懂,可操作性和实用性强,但是构造判断矩阵往往不容易,计算判断矩阵的特征值特别繁琐且易出错,得到的一致性检验不易调整,这些都给使用层次分析法带来困难,以往使用办公软件电子表格(Excel)的方法计算单层次排序和总层次排序,这种方法使得计算和一致性检验变得容易,文本使用Matlab程序使得计算变得更容易,也使得层次分析法在多个领域得到推广和应用。

关键词:层次分析法;Excel;matlab1 层次分析法(AHP法)的原理和解决思路层次分析法是对定性问题进行定量分析的一种简便、灵活而又实用的多准则决策方法。

它的原理是模拟人的决策过程,具有思路清晰、方法简便、适用面广、系统性强等特点。

是解决多目标、多准则、多层次复杂问题决策或者大型工程风险分析的有力工具。

层次分析法解决问题的思路就是用下一次因素的相对排序求得上一次因素的相对排序。

按照因素之间的相互影响和隶属关系将各层次因素聚类组合,形成一个递进有序的层次结构模型。

2 层次分析法的应用难点2.1合适的判断矩阵构造不易模型确定后,按照模型层次结构和模型的各因素的相对重要性,综合专家群体咨询意见,采用标度法[ 1 ],从数字1/9一9中选取恰当值,构造各层的判断矩阵,并使之尽量符合一致性检验,这一步成为问题的关键。

但实际上系统越复杂,判定矩阵的阶数就会越高,计算就会越困难。

2.2计算量大,步骤繁琐层次分析法首先要求的就是判断矩阵的最大特征值?姿max,及其正规化的特征向量w,向量w的分量wi是相应因素的单层次权值,这部分计算理论上基于线性代数知识,不用计算机也可以将其计算出来。

但实际上,当矩阵的阶数高于4阶时,人工计算就变得相当困难且易出错,如使用计算机计算,就容易得多,常用的方法有Basic语言,电子表格Excel等方法。

但计算量都有待改进。

层次分析法及matlab程序

层次分析法及matlab程序

层次分析法及Matlab程序一、层次分析法简介层次分析法(Analytic Hierarchy Process,简称AHP)是一种用于决策分析的工具,由美国数学家托马斯·L·萨蒂(Thomas L. Saaty)在1970年代创立。

AHP通过将决策问题划分为多个层次和多个因素,将主要因素和次要因素划分归纳,以定量化的方法分析各因素间优先级的关系,从而对决策方案进行综合评价。

AHP的基本原理是通过构造判断矩阵、计算判断矩阵的特征向量、确定权重,最终得到决策方案的优先级,从而找到最终的最优决策方案。

其主要优点是可定量化、简单易行,适用于大部分决策问题。

二、层次分析法的步骤AHP的具体步骤如下:1.确定决策目标;2.确定影响决策的因素,并将它们分成若干类别,即形成层次结构;3.为每个因素构建判断矩阵,评估每个因素的重要程度(用1~9的数字表示);4.将各判断矩阵进行一致性检验,并计算其权重;5.对计算得到的权重进行优先级排序,选出最优决策方案。

三、Matlab程序实现AHP计算在Matlab中,可以通过编写程序实现AHP的计算。

以下是一份简单的Matlab 程序,用于计算AHP的权重:% 输入判断矩阵A = [1 4 5;1/4 1 2;1/5 1/2 1];% 计算特征向量[V, D] = eig(A);[m, idx] = max(max(D));w = V(:,idx)';w = w/sum(w);% 一致性检验RI = [0 0 0.58 0.9 1.12 1.24 1.32 1.41 1.45 1.49];CR = (max(D) - 3)/2/RI(length(A));CI = sum(CR)/length(A);if CI < 0.1disp('一致性较好,权重为:');disp(w);elsedisp('一致性差,需重新评估判断矩阵!');end该程序用于计算一个3x3的判断矩阵的权重,并输出一致性检验的结果。

层次分析matlab代码(全)

层次分析matlab代码(全)
8.3 8.1 8.6 6.9 8.5 9.4 4;
9.0 8.2 8.0 7.8 9.0 9.5 5;
9.6 9.1 8.1 9.9 8.7 9.7 6;
9.5 9.6 8.3 8.1 9.0 9.3 7;
8.6 8.3 8.2 8.1 9.0 9.0 5;
A=[1 2 3 4 5 6 7;
1/2 1 2 3 4 5 6;
1/3 1/2 1 2 3 4 5;
1/4 1/3 1/2 1 2 3 4;
1/5 1/4 1/3 1/2 1 2 3;
1/6 1/5 1/4 1/3 1/2 1 2;
1/7 1/6 1/5 1/4 1/3 1/2 1;];
Evalues4=diag(Eigenvalues4);
Evalues5=diag(Eigenvalues5);
Evalues6=diag(Eigenvalues6);
Evalues7=diag(Eigenvalues7);
%最大特征值lamdaMax,及其一次性指标ci和一次性检验cr
[maxEvalue1,point1]=max(Evalues1);lamdaMax1=maxEvalue1;
for i=1:20
for j=1:20
p6(i,j)=B(i,6)/B(j,6);
end
end
p6;
for i=1:20
for j=1:20
p7(i,j)=B(i,7)/B(j,7);
end
end
p7;
%特征值矩阵Eigenvalues 特征向量Eigenvector
%判断矩阵阶数 n
n=size(A,1)

Matlab求解层次分析法程序代码【求解步骤代码】

Matlab求解层次分析法程序代码【求解步骤代码】

性判断矩阵, 每一列归一化后近似其相应的权重, 在对这 n 个列向量求取算术平均值作为最
后的权重。具体的公式是:
a 1 n
ij
Wi
a n j 1 n kl
k1
需要注意的是,在层层排序中,要对判断矩阵进行一致性检验。 在特殊情况下, 判断矩阵可以具有传递性和一致性。 一般情况下, 并不要求判断矩阵 严格满足这一性质。 但从人类认识规律看, 一个正确的判断矩阵重要性排序是有一定逻辑规 律的,例如若 A 比 B 重要, B 又比 C重要,则从逻辑上讲, A 应该比 C 明显重要,若两两比 较时出现 A 比 C 重要的结果,则该判断矩阵违反了一致性准则,在逻辑上是不合理的。 因此在实际中要求判断矩阵满足大体上的一致性, 需进行一致性检验。 只有通过检验, 才能说明判断矩阵在逻辑上是合理的,才能继续对结果进行分析。
层排序, 其排序权重记为 b1 j , b2 j , ,bmj j 1,2, , n ,则方案层 P 中第 i 个方案 Pi 的总
n
排序权重为
a jbij ,见下表:
j1层Leabharlann CC1C2Cn
层次 P
a1
a2
an
P1
b11
b12
b1n
P2
b21
b22
b2n
P 层总排序权重
n
a j b1 j
j1
n
a jb2 j
设填写后的判断矩阵为 A=(aij ) n×n,判断矩阵具有如下性质:
网络
(1) a ij 〉0
(2) a ji =1/ a ji
(3) a ii =1
根据上面性质,判断矩阵具有对称性,因此在填写时,通常先填写
aii =1 部分,然后

层次分析法matlab实现

层次分析法matlab实现

层次分析法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>pi=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));enda=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.10disp('此矩阵的一致性可以接受!');disp('CI=');disp(CI);disp('CR=');disp(CR);endfunction 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:dimCToT(i,:)=input('请输入数据:');endCToT %输出pause,tempmatrix=zeros(x+1);tempmatrix=AHP1(dim,CToT); EigOfCri=tempmatrix(1:x);ci1=tempmatrix(1+x);EigOfCrici1pause,matrix=cell(x);%元胞数组ci=zeros(1,x);dim=y;for k=1:xmatrix{k}=zeros(dim,dim);%生成成对比较阵for i=1:dimmatrix{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,%下面进行组合一致性检查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);CRif CR>0.1disp('组合一致性不通过,请重新评分')returnend%下面根据比较阵的结果进行组合result=EigOfOpt*EigOfCri;resultfunction 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:dimif D(h,h)>tempNumtempNum=D(h,h);pos=h;endeigVector=V(:,pos);maxeig=D(pos,pos);maxeigdimCI=(maxeig-dim)/(dim-1);CR=CI/RI(dim);if CR>0.1disp('准则对目标影响度评分生成的矩阵不是一致阵,请重新评分') returnendCI%归一化sum=0;for h=1:dimsum=sum+eigVector(h);endsumpause,for h=1:dimeigVector(h)=eigVector(h)/sum;endf=[eigVector;CI];层次分析法的应用在应用层次分析法研究问题时,遇到的主要困难有两个:(i )如何根据实际情况抽象出较为贴切的层次结构;(ii )如何将某些定性的量作比较接近实际定量化处理。

层次分析法matlab实现

层次分析法matlab实现

层次分析法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>pi=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));enda=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.10disp('此矩阵的一致性可以接受!');disp('CI=');disp(CI);disp('CR=');disp(CR);endfunction 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:dimCToT(i,:)=input('请输入数据:');endCToT %输出pause,tempmatrix=zeros(x+1);tempmatrix=AHP1(dim,CToT); EigOfCri=tempmatrix(1:x);ci1=tempmatrix(1+x);EigOfCrici1pause,matrix=cell(x);%元胞数组ci=zeros(1,x);dim=y;for k=1:xmatrix{k}=zeros(dim,dim);%生成成对比较阵for i=1:dimmatrix{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,%下面进行组合一致性检查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);CRif CR>0.1disp('组合一致性不通过,请重新评分')returnend%下面根据比较阵的结果进行组合result=EigOfOpt*EigOfCri;resultfunction 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:dimif D(h,h)>tempNumtempNum=D(h,h);pos=h;endeigVector=V(:,pos);maxeig=D(pos,pos);maxeigdimCI=(maxeig-dim)/(dim-1);CR=CI/RI(dim);if CR>0.1disp('准则对目标影响度评分生成的矩阵不是一致阵,请重新评分') returnendCI%归一化sum=0;for h=1:dimsum=sum+eigVector(h);endsumpause,for h=1:dimeigVector(h)=eigVector(h)/sum;endf=[eigVector;CI];层次分析法的应用在应用层次分析法研究问题时,遇到的主要困难有两个:(i )如何根据实际情况抽象出较为贴切的层次结构;(ii )如何将某些定性的量作比较接近实际定量化处理。

层次分析法MATLAB源程序解析

层次分析法MATLAB源程序解析

A=[ 1 2; 1/2 1];[n,n]=size(A;% 计算 A 矩阵的维度,行与列元素个数 ;B=A;%变量分配空间,加快编译速度for i=1:n;B(:,i=A(:,i/sum(A(:,i; %A矩阵各列元素除以各列均值 , 各列归一化 ; endC=ones(n,1;%建立 n 行 ,1列的单位矩阵 ;for i=1:nC(i,:=sum(B(i,:; %B矩阵各行求和 ;endw=ones(n,1;%建立 n 行 ,1列的单位矩阵 ;w=C(:,1/sum(C(:,1; %C矩阵各列元素除以各列均值 , 各列归一化 ; disp('权向量 ';disp(w;% 显示权向量 wD=ones(n,1;%建立 n 行 ,1列的单位矩阵 ;D=A*w;t=sum(D(:,1./w(:,1/n;disp('最大特征值 ';disp(t;% 显示最大特征值 t%一致性检验CI=(t-n/(n-1;% t-维度 n 再除以维度 n-1的值赋给 CIRI=[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;% 计算一致性disp(['一致性值 :CR=',num2str(CR]if CR<0.10disp('此矩阵的一致性可以接受 !';disp('CI=';disp(CI;disp('CR=';disp(CR;elsedisp('此矩阵的一致性不可以接受 !';end。

层次分析法和两种matlab实现方法

层次分析法和两种matlab实现方法

层次分析法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=;i=2;k=abs(m(2)-m(1));while k>pi=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));enda=sum(y(:,i));w=y(:,i)/a;t=m(i);disp(w);disp(t);%以下是一致性检验CI=(t-n)/(n-1);RI=[0 0 ]; CR=CI/RI(n);if CR<disp('此矩阵的一致性可以接受!');disp('CI=');disp(CI);disp('CR=');disp(CR);endfunction AHPInit1(x,y)%层次分析的初始化%默认只有两层x为准则数,y为方案数%CToT为准则对目标生成的比较阵%EigOfCri为准则层的特征向量%EigOfOpt为选项层的特征向量EigOfCri=zeros(x,1);%准则层的特征向量EigOfOpt=zeros(y,x);dim=x;%维度RI=[0 0 ];%RI标准%生成成对比较阵for i=1:dimCToT(i,:)=input('请输入数据:'); endCToT %输出pause,tempmatrix=zeros(x+1); tempmatrix=AHP1(dim,CToT); EigOfCri=tempmatrix(1:x);ci1=tempmatrix(1+x);EigOfCrici1pause,matrix=cell(x);%元胞数组ci=zeros(1,x);dim=y;for k=1:xmatrix{k}=zeros(dim,dim);%生成成对比较阵for i=1:dimmatrix{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 ];CR=ci1/RI(x)+ci*EigOfCri/RI(y);CRif CR>disp('组合一致性不通过,请重新评分') returnend%下面根据比较阵的结果进行组合result=EigOfOpt*EigOfCri;function f=AHP1(dim,CmpMatrix)RI=[0 0 ];%判断该比较阵是不是一致阵%判断该比较阵是不是一致阵[V,D]=eig(CmpMatrix);%求得特征向量和特征值%求出最大特征值和它所对应的特征向量tempNum=D(1,1);pos=1;for h=1:dimif D(h,h)>tempNumtempNum=D(h,h);pos=h;endendeigVector=V(:,pos);maxeig=D(pos,pos);maxeigdimCI=(maxeig-dim)/(dim-1);CR=CI/RI(dim);disp('准则对目标影响度评分生成的矩阵不是一致阵,请重新评分')returnendCI%归一化sum=0;for h=1:dimsum=sum+eigVector(h);endsumpause,for h=1:dimeigVector(h)=eigVector(h)/sum;endf=[eigVector;CI];层次分析法(Analytic Hierarchy Process,简称AHP)是对一些较为复杂、较为模糊的问题作出决策的简易方法,它特别适用于那些难于完全定量分析的问题。

层次分析法matlab程序举例

层次分析法matlab程序举例

层次分析法程序举例:A=[1 1/7 1/5 2 4 1/3;7 1 3 5 5 3;5 1/3 1 5 5 3;1/2 1/3 1/5 1 2 1/3;1/4 1/5 1/5 1/2 1 1/5;3 1/3 1/3 3 5 1];[v,d]=eig(A);eigenvalue=diag(d);lamda=max(eigenvalue);cil=(lamda-6)/5;crl=cil/1.26;w1=v(:,1)/sum(v(:,1))挑选合适的工作。

经双方恳谈,已有三个单位表示愿意录用某毕业生。

该生根据已有信息建立了一个层次结构模型,如下图所示。

程序:A=[1 1/7 1/5 2 4 1/3;7 1 3 5 5 3;5 1/3 1 5 5 3;1/2 1/3 1/5 1 2 1/3;1/4 1/5 1/5 1/2 1 1/5;3 1/3 1/3 3 5 1];[v,d]=eig(A);eigenvalue=diag(d);lamda=max(eigenvalue);ci=(lamda-6)/5cr=ci/1.26w1=v(:,1)/sum(v(:,1))B1=[1 1/4 1/2;4 1 3;2 1/3 1]; [v,d]=eig(B1);eigenvalue=diag(d);lamda=max(eigenvalue);cil1=(lamda-3)/2cr1=cil1/0.52b1w=v(:,1)/sum(v(:,1))B2=[1 1/4 1/5;4 1 1/2;5 2 1]; [v,d]=eig(B2);eigenvalue=diag(d);lamda=max(eigenvalue);cil2=(lamda-3)/2cr2=cil2/0.52b2w=v(:,1)/sum(v(:,1))B3=[1 1/2 2; 2 1 3;1/2 1/3 1]; [v,d]=eig(B3);eigenvalue=diag(d);lamda=max(eigenvalue);cil3=(lamda-3)/2cr3=cil3/0.52b3w=v(:,1)/sum(v(:,1))B4=[1 1/3 5; 3 1 7;1/5 1/7 1]; [v,d]=eig(B4);eigenvalue=diag(d);lamda=max(eigenvalue);cil4=(lamda-3)/2cr4=cil4/0.52b4w=v(:,1)/sum(v(:,1))B5=[1 1 7;1 1 7;1/7 1/7 1]; [v,d]=eig(B5);eigenvalue=diag(d);lamda=max(eigenvalue);cil5=(lamda-3)/2cr5=cil5/0.52b5w=v(:,1)/sum(v(:,1))B6=[ 1 7 9;1/7 1 1;1/9 1 1]; [v,d]=eig(B6);eigenvalue=diag(d);lamda=max(eigenvalue);cil6=(lamda-3)/2cr6=cil6/0.52b6w=v(:,1)/sum(v(:,1))q=[0.0091 0.0123 0.0046 0.0324 -6.6613e-016 0.0035 0.0068];r=[cr1 cr2 cr3 cr4 cr5 cr6];pp=w1'.*qqq=w1'.*r欢迎您的下载,资料仅供参考!致力为企业和个人提供合同协议,策划案计划书,学习资料等等打造全网一站式需求。

层次分析法matlab源程序

层次分析法matlab源程序

层次分析法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=;i=2;k=abs(m(2)-m(1));while k>pi=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));enda=sum(y(:,i));w=y(:,i)/a;t=m(i);disp(w);disp(t);%以下是一致性检验CI=(t-n)/(n-1);RI=[0 0 ]; CR=CI/RI(n);if CR<disp('此矩阵的一致性可以接受!');disp('CI=');disp(CI);disp('CR=');disp(CR);endfunction AHPInit1(x,y)%层次分析的初始化%默认只有两层x为准则数,y为方案数%CToT为准则对目标生成的比较阵%EigOfCri为准则层的特征向量%EigOfOpt为选项层的特征向量EigOfCri=zeros(x,1);%准则层的特征向量EigOfOpt=zeros(y,x);dim=x;%维度RI=[0 0 ];%RI标准%生成成对比较阵for i=1:dimCToT(i,:)=input('请输入数据:'); endCToT %输出pause,tempmatrix=zeros(x+1); tempmatrix=AHP1(dim,CToT); EigOfCri=tempmatrix(1:x);ci1=tempmatrix(1+x);EigOfCrici1pause,matrix=cell(x);%元胞数组ci=zeros(1,x);dim=y;for k=1:xmatrix{k}=zeros(dim,dim);%生成成对比较阵for i=1:dimmatrix{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 ];CR=ci1/RI(x)+ci*EigOfCri/RI(y);CRif CR>disp('组合一致性不通过,请重新评分')returnend%下面根据比较阵的结果进行组合result=EigOfOpt*EigOfCri;function f=AHP1(dim,CmpMatrix)RI=[0 0 ];%判断该比较阵是不是一致阵%判断该比较阵是不是一致阵[V,D]=eig(CmpMatrix);%求得特征向量和特征值%求出最大特征值和它所对应的特征向量tempNum=D(1,1);pos=1;for h=1:dimif D(h,h)>tempNumtempNum=D(h,h);pos=h;endendeigVector=V(:,pos);maxeig=D(pos,pos);maxeigdimCI=(maxeig-dim)/(dim-1);CR=CI/RI(dim);disp('准则对目标影响度评分生成的矩阵不是一致阵,请重新评分') returnendCI%归一化sum=0;for h=1:dimsum=sum+eigVector(h);endsumpause,for h=1:dimeigVector(h)=eigVector(h)/sum;endf=[eigVector;CI];。

数学建模——层次分析法

数学建模——层次分析法

用matlab求层次分析法的特征向量,特征值,检验一致性的程序:clc,clearA=input('A=');n=length(A(1,:))lambdamax=max(eig(A))CI=(lambdamax-n)/(n-1)i=1:n;M=[prod(A,2)];M1=M.^(1/n);W=(M1./sum(M1))'if n==1;RI=0.00elseif n==2;RI=0.00elseif n==3;RI=0.58elseif n==4;RI=0.90elseif n==5;RI=1.12elseif n==6;RI=1.24elseif n==7;RI=1.32elseif n==8;RI=1.41elseif n==9;RI=1.45endCR=CI/RI层次分析法(The Analytic Hierarchy Process ,简记AHP)是美国著名的运筹学家T .L .Satty 等人在20世纪70年代提出的一种定性与定量分析相结合的多准则决策方法。

它是指将决策问题的有关元素分解成目标、准则、方案等层次,在此基础上进行定性分析和定量分析的一种决策方法。

它把人的思维过程层次化、数量化,并用数学为分析、决策、预报或控制提供定量的依据。

这一方法的特点,是在对复杂决策问题的本质、影响因素以及内在关系等进行深入分析之后,构建一个层次结构模型,然后利用较少的定量信息,把决策的思维过程数学化,从而为求解多目标、多准则或无结构特性的复杂决策问题,提供一种简便的决策方法。

尤其适合于人的定性判断起重要作用的、对决策结果难于直接准确计量的场合。

应用层次分析法分析问题时,首先要把问题层次化。

根据问题的性质和要达到的总目标,将问题分解为不同组成因素,并按照因素间的相互关联影响以及隶属关系将因素按不同层次聚集组合,形成一个多层次的分析结构模型。

并最终把系统分析归结为最底层(供决策的方案、措施等),相对于最高层(总目标)的相对重要性权值的确定或相对优劣次序的排序问题。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

层次分析法1)建立层次结构模型:(2)构造判断矩阵判断矩阵()ij A a =应为正互反矩阵,而且ij a 的判断如下(1~9尺度法):(3)单层排序及一致性检验1、单层排序求解判断矩阵A 的最大特征值max λ,再由最大特征值求出对应的特征向量ω()max A ωλω=,并将ω标准化,即为同一层相对于上一层某一因素的权重,根据此权重的大小,便可确定该层因素的排序。

2、一致性检验取一致性指标max 1nCI n λ-=-,(n 为A 的阶数)令CR RI=,若0.1CR <,则认为A 具有一致性。

否则,需要对A 进行调整,直到具有满意的一致性为止。

(4)层次总排序及一致性检验假定准则层12,,,n C C C 排序完成,其权重分别为12,,,n a a a ,方案层P 包含m 个方案:12,,,m P P P 。

其相对于上一层的()1,2,,j C j n =对方案层P 中的m 个方案进行单层排序,其排序权重记为12,,,j j mj b b b ()1,2,,j n =,则方案层P 中第i 个方案Pi 的总排序权重为1nj ijj a b=∑,见下表:从而确定层的排序。

例:纯文本文件txt3.txt 中的数据格式如下:1 1 1 4 1 1/2 1 1 2 4 1 1/2 1 1/2 1 53 1/2 1/4 1/4 1/5 1 1/3 1/3 1 1 1/3 3 1 1 2 2 2 3 3 1 1 1/4 1/24 1 32 1/3 11 1/4 1/54 1 1/25 2 11 3 1/31/3 1 1/73 7 11 1/3 53 1 71/5 1/7 11 1 71 1 71/7 1/7 11 7 91/7 1 11/9 1 1matlab程序:>> fid=fopen('txt3.txt','r');n1=6;n2=3;a=[];for i=1:n1tmp=str2num(fgetl(fid));a=[a;tmp]; %读准则层判断矩阵endfor i=1:n1str1=char(['b',int2str(i),'=[];']);str2=char(['b',int2str(i),'=[b',int2str(i),';tmp];']); eval(str1);for j=1:n2tmp=str2num(fgetl(fid));eval(str2); %读方案层的判断矩阵endendri=[0,0,0.58,0.90,1.12,1.24,1.32,1.41,1.45]; %一致性指标[x,y]=eig(a);lamda=max(diag(y));num=find(diag(y)==lamda);w0=x(:,num)/sum(x(:,num));cr0=(lamda-n1)/(n1-1)/ri(n1)for i=1:n1[x,y]=eig(eval(char(['b',int2str(i)])));lamda=max(diag(y));num=find(diag(y)==lamda);w1(:,i)=x(:,num)/sum(x(:,num));cr1(i)=(lamda-n2)/(n2-1)/ri(n2);endcr1, ts=w1*w0, cr=cr1*w0层次分析法层次分析法层次分析法层次分析法层次分析法层次分析法层次分析法层次分析法层次分析法层次分析法层次分析法层次分析法层次分析法层次分析法层次分析法层次分析法层次分析法层次分析法层次分析法实例与步骤结合一个具体例子,说明层次分析法的基本步骤和要点。

【案例分析】市政工程项目建设决策:层次分析法问题提出市政部门管理人员需要对修建一项市政工程项目进行决策,可选择的方案是修建通往旅游区的高速路(简称建高速路)或修建城区地铁(简称建地铁)。

除了考虑经济效益外,还要考虑社会效益、环境效益等因素,即是多准则决策问题,考虑运用层次分析法解决。

1. 建立递阶层次结构应用AHP解决实际问题,首先明确要分析决策的问题,并把它条理化、层次化,理出递阶层次结构。

AHP要求的递阶层次结构一般由以下三个层次组成:●目标层(最高层):指问题的预定目标;●准则层(中间层):指影响目标实现的准则;●措施层(最低层):指促使目标实现的措施;通过对复杂问题的分析,首先明确决策的目标,将该目标作为目标层(最高层)的元素,这个目标要求是唯一的,即目标层只有一个元素。

然后找出影响目标实现的准则,作为目标层下的准则层因素,在复杂问题中,影响目标实现的准则可能有很多,这时要详细分析各准则因素间的相互关系,即有些是主要的准则,有些是隶属于主要准则的次准则,然后根据这些关系将准则元素分成不同的层次和组,不同层次元素间一般存在隶属关系,即上一层元素由下一层元素构成并对下一层元素起支配作用,同一层元素形成若干组,同组元素性质相近,一般隶属于同一个上一层元素(受上一层元素支配),不同组元素性质不同,一般隶属于不同的上一层元素。

在关系复杂的递阶层次结构中,有时组的关系不明显,即上一层的若干元素同时对下一层的若干元素起支配作用,形成相互交叉的层次关系,但无论怎样,上下层的隶属关系应该是明显的。

最后分析为了解决决策问题(实现决策目标)、在上述准则下,有哪些最终解决方案(措施),并将它们作为措施层因素,放在递阶层次结构的最下面(最低层)。

明确各个层次的因素及其位置,并将它们之间的关系用连线连接起来,就构成了递阶层次结构。

【案例分析】市政工程项目进行决策:建立递阶层次结构在市政工程项目决策问题中,市政管理人员希望通过选择不同的市政工程项目,使综合效益最高,即决策目标是“合理建设市政工程,使综合效益最高”。

为了实现这一目标,需要考虑的主要准则有三个,即经济效益、社会效益和环境效益。

但问题绝不这么简单。

通过深入思考,决策人员认为还必须考虑直接经济效益、间接经济效益、方便日常出行、方便假日出行、减少环境污染、改善城市面貌等因素(准则),从相互关系上分析,这些因素隶属于主要准则,因此放在下一层次考虑,并且分属于不同准则。

假设本问题只考虑这些准则,接下来需要明确为了实现决策目标、在上述准则下可以有哪些方案。

根据题中所述,本问题有两个解决方案,即建高速路或建地铁,这两个因素作为措施层元素放在递阶层次结构的最下层。

很明显,这两个方案于所有准则都相关。

将各个层次的因素按其上下关系摆放好位置,并将它们之间的关系用连线连接起来。

同时,为了方便后面的定量表示,一般从上到下用A、B、C、D。

代表不同层次,同一层次从左到右用1、2、3、4。

代表不同因素。

这样构成的递阶层次结构如下图。

目标层A准则层B准则层C措施层D图1 递阶层次结构示意图2. 构造判断矩阵并赋值根据递阶层次结构就能很容易地构造判断矩阵。

构造判断矩阵的方法是:每一个具有向下隶属关系的元素(被称作准则)作为判断矩阵的第一个元素(位于左上角),隶属于它的各个元素依次排列在其后的第一行和第一列。

重要的是填写判断矩阵。

填写判断矩阵的方法有:大多采取的方法是:向填写人(专家)反复询问:针对判断矩阵的准则,其中两个元素两两比较哪个重要,重要多少,对重要性程度按1-9赋值(重要性标度值见下表)。

表1 重要性标度含义表设填写后的判断矩阵为A=(a ij)n ×n ,判断矩阵具有如下性质:(1) a ij 〉0 (2) a ji =1/ a ji (3) a ii =1根据上面性质,判断矩阵具有对称性,因此在填写时,通常先填写a ii =1部分,然后再仅需判断及填写上三角形或下三角形的n(n-1)/2个元素就可以了。

在特殊情况下,判断矩阵可以具有传递性,即满足等式:a ij *a jk =a ik 当上式对判断矩阵所有元素都成立时,则称该判断矩阵为一致性矩阵。

【案例分析】市政工程项目建设决策:构造判断矩阵并请专家填写 接前例,征求专家意见,填写后的判断矩阵如下:表2 判断矩阵表3. 层次单排序(计算权向量)与检验对于专家填写后的判断矩阵,利用一定数学方法进行层次排序。

层次单排序是指每一个判断矩阵各因素针对其准则的相对权重,所以本质上是计算权向量。

计算权向量有特征根法、和法、根法、幂法等,这里简要介绍和法。

和法的原理是,对于一致性判断矩阵,每一列归一化后就是相应的权重。

对于非一致性判断矩阵,每一列归一化后近似其相应的权重,在对这n 个列向量求取算术平均值作为最后的权重。

具体的公式是:∑∑===nj n k klij i aa n W 111需要注意的是,在层层排序中,要对判断矩阵进行一致性检验。

在特殊情况下,判断矩阵可以具有传递性和一致性。

一般情况下,并不要求判断矩阵严格满足这一性质。

但从人类认识规律看,一个正确的判断矩阵重要性排序是有一定逻辑规律的,例如若A 比B 重要,B 又比C 重要,则从逻辑上讲,A 应该比C 明显重要,若两两比较时出现A 比C 重要的结果,则该判断矩阵违反了一致性准则,在逻辑上是不合理的。

因此在实际中要求判断矩阵满足大体上的一致性,需进行一致性检验。

只有通过检验,才能说明判断矩阵在逻辑上是合理的,才能继续对结果进行分析。

一致性检验的步骤如下。

第一步,计算一致性指标C.I.(consistency index )1..max --=n nI C λ第二步,查表确定相应的平均随机一致性指标R.I.(random index )据判断矩阵不同阶数查下表,得到平均随机一致性指标R.I.。

例如,对于5阶的判断矩阵,查表得到R.I.=1.12表3 平均随机一致性指标R.I.表(1000次正互反矩阵计算结果)第三步,计算一致性比例C.R.(consistency ratio )并进行判断......I R I C R C当C.R.<0.1时,认为判断矩阵的一致性是可以接受的,C.R.>0.1时,认为判断矩阵不符合一致性要求,需要对该判断矩阵进行重新修正。

【案例分析】市政工程项目建设决策:计算权向量及检验 上例计算所得的权向量及检验结果见下:表4 层次计算权向量及检验结果表可以看出,所有单排序的C.R.<0.1,认为每个判断矩阵的一致性都是可以接受的。

4. 层次总排序与检验总排序是指每一个判断矩阵各因素针对目标层(最上层)的相对权重。

这一权重的计算采用从上而下的方法,逐层合成。

很明显,第二层的单排序结果就是总排序结果。

假定已经算出第k-1层m 个元素相对于总目标的权重w (k-1)=(w 1(k-1),w 2(k-1),…,w m (k-1))T,第k 层n 个元素对于上一层(第k 层)第j个元素的单排序权重是p j (k)=(p 1j (k),p 2j (k),…,p nj (k))T,其中不受j 支配的元素的权重为零。

相关文档
最新文档