// ???óè¨??2010.cpp : ?¨ò?????ì¨ó|ó?3ìDòμ?è??úμ??£
#include "stdafx.h" //vs2010ò?é?°?±?óD′???
#include"stdio.h"
#include"math.h"
void sum(int N,double a[13][13])
{
double sum[13]={0},pro[13]={0};
int i,j,k;
for(i=0;i { for(j=0;j { sum[i]=sum[i]+a[j][i]; } for(k=0;k { a[k][i]=a[k][i]/sum[i]; } } for(i=0;i { for(j=0;j pro[i]=a[i][j]+pro[i]; pro[i]=pro[i]/N; } for (i=0;i printf("%4.4f \n ",pro[i]); } void mu(int N,double a[13][13]) { double m[13]={0}, temp=0.0,nn; int i,j,k; nn=double(N); for (i=0;i m[i]=1; for(i=0;i { for(j=0;j m[i]=m[i]*a[i][j]; m[i]=pow(m[i],1/nn); } for(k=0;k { temp=temp+m[k]; } for(i=0;i { m[i]=m[i]/temp; printf("%4.4f \n ",m[i]); } } double tran( int N,double x, double *p,double a[13][13] ) { int i,j,n,k,flag,r; double lin, c,b,temp[13][13],*q,sum=1; static int u=0; r=1; for(i=0;i for(j=0;j temp[i][j]=a[i][j]; for(i=0;i for(j=0;j if(i==j) temp[i][j]-=x; for (j=0;j { for (i=j+1;i { flag=0; c=temp[i][j]/temp[j][j]; if(temp[j][j]==0) { for (k=j;k { if(temp[k][j]!=0) { flag=1; for(n=j;n { temp[i][n]=temp[k][n]; } r=-r; } } if(flag==0) { break; } } for(n=j;n { b=temp[j][n]; temp[i][n]=temp[i][n]-c*b; } } } u++; for(n=0;n { sum=sum*temp[n][n]; } sum=r*sum; printf("\rtimes %d %4.4f",u,sum); //for(n=N-1;fabs(temp[n][n])<0.0001;n--) //k=n-1; k=N-1; for(i=0;i { lin=temp[i][i]; for(j=i;j { temp[i][j]=temp[i][j]/lin; } } for(i=0;i { q=p+i; *q=temp[i][N-1]; } return sum; /*???μ·μ??*/ } int tz(int N,double a[13][13]) { double min,h,w,s,x,x0,k,y,m,temp[13][13],fin[13]={0}; int n=0,i,j; for(i=0;i for(j=0;j temp[i][j]=a[i][j]; s=0.000000000001; x=100; do { x0=x; m=x+s; y=tran(N,x,fin,temp); k=(tran(N,m,fin,temp)-y)/s; x=x0-y/k; n++; }while(fabs(x-x0)>1e-10); // x=x0;y=tran(x,fin,temp); /* for(;fabs(y-0)>0.1;x=x-0.0001) { y=tran(N,x,fin,temp); } */ y=tran(N,x,fin,temp); printf("\n×?′óì??÷?μ?a£o%4.4f",x); switch(N) { case 3: w=(x-3)/2/0.52;break; case 4: w=(x-4)/3/0.89;break; case 5: w=(x-5)/4/1.12;break; case 6: w=(x-6)/5/1.26;break; case 7: w=(x-7)/62/1.36;break; case 8: w=(x-8)/7/1.41;break; case 9: w=(x-9)/8/1.46;break; case 10: w=(x-10)/9/1.49;break; case 11: w=(x-11)/10/1.52;break; case 12: w=(x-12)/11/1.54;break; case 13: w=(x-13)/12/1.56;break; } printf("\nCI/RI=%0.2f",w); if (w<0.1) { printf("\nò???D??ì?éí¨1y?£"); printf("\nì??÷?μ·¨μ?·?·¨:\n"); h=0; min=fabs(fin[0]); for(n=0;n { if(fabs(fin[n])>min) min=fabs(fin[n]);//h=h+fabs(fin[n]); } for(n=0;n { h=fabs(fin[n])/min+h; } for(n=0;n { printf("%4.4f \n ",fabs(fin[n])/min/h); } return 1; } else { printf("\nò???D??ì?é2?í¨1y\n"); return 0; } } void main() { int i,n,N=4; //N?a·??ó?éêy a ?a·??ó£? char s; double a[13][13]={ {1, 2 ,3, 3}, {0.5, 1, 2, 2}, {0.333333333, 0.5, 1, 1}, {0.333333333, 0.5, 1, 1 } }; /* printf("??ê?è??éêy\n");2 scanf("%d",&N); printf("??ê?è?é????????a??£¨2?°üà¨?÷??????£?D?è?: 22 34 45 56 34 \n"); for( i=0;i for( j=0;j { if(i scanf("%fl",&a[i][j]); else if(i==j) a[i][j]=1; else if(i>j) a[i][j]=1/a[j][i]; } for(i=0;i for(j=0;j { printf("%4.4fl ",a[i][j]); if(j==N-1) printf("\n"); }*/ n=tz(N,a); if(n==1) { printf("\n?ùμ?·?·¨:\n"); mu(N,a); printf("\noíμ?·?·¨£o\n"); sum(N,a); } printf("\n°′??3μ?ü?áê?"); s=getchar(); for(i=0;i<1e100;i++); } 表4-2 某厂运行部年度部门级绩效考核指标 (1)由1-9比例标度法分别对每一层次的评价指标的相对重要性进行定性描述,确定两两比较判断矩阵。 一级考核指标相对于总的考核指标所得两两比较判断矩阵如下: ????? ???? ???=13/17/1315/1751321321V V V V V V V A 二级考核指标相对于其所属一级考核指标所得的两两判断矩阵分别如下所示: ????? ???? ???=13/15/1313/153113121113121111v v v v v v V B ?? ? ?? ?? ?????????=12/14/15/1213/14/14313/15431242322212423222122v v v v v v v v V B 33132331321 31/31V v v B v v ????=?????? (2)运用和积法(方根法)求解各判断矩阵,得出单一准则下各级考核指标的相对权重。 1)一级指标两两判断矩阵A 的求解 一级指标的权重向量: w =(1w ,2w ,3w )T =(0.637,0.258,0.103)T 最大特征根:3 max 1()3i i i Aw w λ==∑ =3.037 一致性检验: 3.0373 0.018531 CI -= =-,0.58RI = 则0.0320.1CR =<,说明判断矩阵A 具有满意的一致性。 2)二级评价指标的两两判断矩阵的求解: ①判断矩阵1B 求解结果如下: 1B 下二级指标的权重向量: 1w =(11w ,21w ,31w )T =(0.6548,0.2499,0.0953)T 最大特征根:3 1max 1()3i i i B w w λ==∑ =3.0182 一致性检验: 3.01823 0.009131 CI -= =-,0.58RI = 则0.0160.1CR =<,这表明判断矩阵具有非常令人满意的一致性。 ②判断矩阵B 2求解结果如下: 权重向量: 2w =(21w ,22w ,32w ,24w )T =(0.5318,0.2701,0.1221,0.0760)T 最大特征根:4 2max 1()4i i i B w w λ==∑ =4.0753 一致性检验: 4.07534 0.025141 CI -= =-,0.9RI = 则0.0280.1C R =< ,这说明判断矩阵B 2具有令人满意的一致性。 ③判断矩阵B 3求解结果如下: 权重向量: // ???óè¨??2010.cpp : ?¨ò?????ì¨ó|ó?3ìDòμ?è??úμ??£ #include "stdafx.h" //vs2010ò?é?°?±?óD′??? #include"stdio.h" #include"math.h" void sum(int N,double a[13][13]) { double sum[13]={0},pro[13]={0}; int i,j,k; for(i=0;i } for(k=0;k 求矩阵特征值算法及程序简介 1.幂法 1、幂法规范化算法 (1)输入矩阵A、初始向量( 0),误差eps; (2) k 1; (3)计算V(k)A(k 1); (4)m k max(V(k)) ,m k1max( V ( k 1)); (5) (k)V(k)/m k; (6)如果m k m k 1eps,则显示特征值1和对应的特征向量x(1) ),终止; (7)k k 1, 转(3) 注:如上算法中的符号max(V )表示取向量V 中绝对值最大的分量。本算法使用了数据规范化处理技术以防止计算过程中出现益出错误。 2、规范化幂法程序 Clear[a,u,x]; a=Input[" 系数矩阵A="]; u=Input[" 初始迭代向量u(0)="]; n=Length[u]; eps=Input[" 误差精度eps ="]; nmax=Input[" 迭代允许最大次数nmax="]; fmax[x_]:=Module[{m=0,m1,m2}, Do[m1=Abs[x[[k]]]; If[m1>m,m2=x[[k]];m=m1], {k,1,Length[x]}]; m2] v=a.u; m0=fmax[u]; m1=fmax[v]; t=Abs[m1-m0]//N; k=0; While[t>eps&&k 二、权重的确定方法 在统计理论和实践中,权重是表明各个评价指标(或者评价项目)重要性的权数,表示各个评价指标在总体中所起的不同作用。权重有不同的种类,各种类别的权重有着不同的数学特点和经济含义,一般有以下几种权重。 按照权重的表现形式的不同,可分为绝对数权重和相对数权重。相对数权重也称比重权数,能更加直观地反映权重在评价中的作用。 按照权重的形成方式划分,可分为人工权重和自然权重。自然权重是由于变换统计资料的表现形式和统计指标的合成方式而得到的权重,也称为客观权重。人工权重是根据研究目的和评价指标的内涵状况,主观地分析、判断来确定的反映各个指标重要程度的权数,也称为主观权重。 按照权重形成的数量特点的不同划分,可分为定性赋权和定量赋权。如果在统计综合评价时,采取定性赋权和定量赋权的方法相结合,获得的效果更好。 按照权重与待评价的各个指标之间相关程度划分,可分为独立权重和相关权重。 独立权重是指评价指标的权重与该指标数值的大小无关,在综合评价中较多地使用独立权重,以此权重建立的综合评价模型称为“定权综合”模型。 相关权重是指评价指标的权重与该指标的数值具有函数关系,例如,当某一评价的指标数值达到一定水平时,该指标的重要性相应的减弱;或者当某一评价指标的数值达到另一定水平时,该指标的重要性相应地增加。相关权重适用于评价指标的重要性随着指标取值的不同而发生变化的条件下,基于相关权重建立的综合评价模型被称为“变权模型”。比如评估环境质量多采用“变权综合”模型。 确定权重的方法较多,这里介绍统计平均法、变异系数法和层次分析法,这些也是实际工作种常用的方法。 (一) 统计平均法 统计平均数法(Statistical average method)是根据所选择的各位专家对各项评价指标所赋予的相对重要性系数分别求其算术平均值,计算出的平均数作为各项指标的权重。其基本步骤是: 第一步,确定专家。一般选择本行业或本领域中既有实际工作经验、又有扎实的理论基础、并公平公正道德高尚的专家; 第二步,专家初评。将待定权数的指标提交给各位专家,并请专家在不受外界干扰的前提下独立的给出各项指标的权数值; 第三步,回收专家意见。将各位专家的数据收回,并计算各项指标的权数均值和标准差; 8.3.2 层次分析法的计算步骤 一、建立层次结构模型 运用AHP进行系统分析,首先要将所包含的因素分组,每一组作为一个层次,把问题条理化、层次化,构造层次分析的结构模型。这些层次大体上可分为3类 1、最高层:在这一层次中只有一个元素,一般是分析问题的预定目标或理想结果,因此又称目标层; 2、中间层:这一层次包括了为实现目标所涉及的中间环节,它可由若干个层次组成,包括所需要考虑的准则,子准则,因此又称为准则层; 3、最底层:表示为实现目标可供选择的各种措施、决策、方案等,因此又称为措施层或方案层。 层次分析结构中各项称为此结构模型中的元素,这里要注意,层次之间的支配关系不一定是完全的,即可以有元素(非底层元素)并不支配下一层次的所有元素而只支配其中部分元素。这种自上而下的支配关系所形成的层次结构,我们称之为递阶层次结构。 递阶层次结构中的层次数与问题的复杂程度及分析的详尽程度有关,一般可不受限制。为了避免由于支配的元素过多而给两两比较判断带来困难,每层次中各元素所支配的元素一般地不要超过9个,若多于9个时,可将该层次再划分为若干子层。 例如,大学毕业的选择问题,毕业生需要从收入、社会地位及发展机会方面考虑是否留校工作、读研究生、到某公司或当公务员,这些关系可以将其划分为如图8.1所示的层次结构模型。 图8.1 再如,国家综合实力比较的层次结构模型如图6 .2: 图6 .2 图中,最高层表示解决问题的目的,即应用AHP所要达到的目标;中间层表示采用某种措施和政策来实现预定目标所涉及的中间环节,一般又分为策略层、约束层、准则层等;最低层表示解决问题的措施或政策(即方案)。 然后,用连线表明上一层因素与下一层的联系。如果某个因素与下一层所有因素均有联系,那么称这个因素与下一层存在完全层次关系。有时存在不完全层次关系,即某个因素只与下一层次的部分因素有联系。层次之间可以建立子层次。子层次从属于主层次的某个因素。它的因素与下一层次的因素有联系,但不形成独立层次,层次结构模型往往有结构模型表示。 二、构造判断矩阵 任何系统分析都以一定的信息为基础。AHP的信息基础主要是人们对每一层次各因素的相对重要性给出的判断,这些判断用数值表示出来,写成矩阵形式就是判断矩阵。判断矩阵是AHP工作的出发点,构造判断矩阵是AHP的关键一步。 当上、下层之间关系被确定之后,需确定与上层某元素(目标A或某个准则Z)相联系的下层各元素在上层元素Z之中所占的比重。 假定A层中因素Ak与下一层次中因素B1,B2,…,Bn有联系,则我们构造的判断矩阵如表8.16所示。 表8.16 判断距阵 Ak B1 B2 …Bn 信息系统分析与设计作业 层次分析法确定绩效评价权重在matlab中的实现 小组成员:孙高茹、王靖、李春梅、郭荣1 程序简要概述 编写程序一步实现评价指标特征值lam、特征向量w以及一致性比率CR的求解。 具体的操作步骤是:首先构造评价指标,用专家评定法对指标两两打分,构建比较矩阵,继而运用编写程序实现层次分析法在MATLAB中的应用。 通过编写MATLAB程序一步实现问题求解,可以简化权重计算方法与步骤,减少工作量,从而提高人力资源管理中绩效考核的科学化电算化。 2 程序在matlab中实现的具体步骤 function [w,lam,CR] = ccfx(A) %A为成对比较矩阵,返回值w为近似特征向量 % lam为近似最大特征值λmax,CR为一致性比率 n=length(A(:,1)); a=sum(A); B=A %用B代替A做计算 for j=1:n %将A的列向量归一化 B(:,j)=B(:,j)./a(j); end s=B(:,1); for j=2:n s=s+B(:,j); end c=sum(s);%计算近似最大特征值λmax w=s./c; d=A*w lam=1/n*sum((d./w)); CI=(lam-n)/(n-1);%一致性指标 RI=[0,0,0.58,0.90,1.12,1.24,1.32,1.41,1.45,1.49,1.51];%RI为随机一致 性指标 CR=CI/RI(n);%求一致性比率 if CR>0.1 disp('没有通过一致性检验'); else disp('通过一致性检验'); end end 3 案例应用 我们拟构建公司员工绩效评价分析权重,完整操作步骤如下: 3.1构建的评价指标体系 我们将影响员工绩效评定的指标因素分为:打卡、业绩、创新、态度与品德。 3.2专家打分,构建两两比较矩阵 A = 1.0000 0.5000 3.0000 4.0000 2.0000 1.0000 5.0000 3.0000 0.3333 0.2000 1.0000 2.0000 0.2500 0.3333 0.5000 1.0000 3.3在MATLAB中运用编写好的程序实现 直接在MATLAB命令窗口中输入 [w,lam,CR]=ccfx(A) 继而直接得出 d = 1.3035 2.0000 0.5145 0.3926 w = 0.3102 0.4691 0.1242 0.0966 lam =4.1687 AHP层次分析法计算原理 一般地,可以选用三层结构对发展战略作出整体评价。 第一层为目标层,它是企业要实现的战略目标,第二层是评价因素层,它包括战略目标实现进行评价的所考虑的各种因素以及各因素之间的相对比值,并求出各要素实现总体目标所占的权重。第三层是指标层,即个评价因素需考虑的具体指标。 首先,根据总目标确定各要素之间的相对重要关系,构建两两比较判断矩阵,其基本形式为: 其中,a j表示对于C来说,A对A相对重要性的数值体现,通常a j可取1、2、3……、9以及它们的倒数作为标度。其中, 1――表示两个元素相比,具有同样的重要性; 3――表示两个元素相比,一个元素比另一个元素稍微重要; 5――表示两个元素相比,一个元素比另一个元素明显重要; 7――表示两个元素相比,一个元素比另一个元素强烈重要; 9――表示两个元素相比,一个元素比另一个元素极端重要。 2、4、6、8为上述相邻判断的中值。 矩阵中的元素具有以下特征:①a j >0,②a j二丄,③a H=1o a ji 然后,根据判断矩阵计算相对于战略目标各评价元素的相对重要 性次序的权重,首先计算判断矩阵A的最大特征根入max和其对应的经归一化后的特征向量W=[W i, W2 , W3, , W n ]T,计算的公式为:(8 - 1) 归一化后的特征向量W=[W i, W2, W3, , W n]T即为各评价因素对于总目标的权重。 (8 - 2)W i - n W i i J 其 1 n 中,W = a j (8 - 3) 入max为判断矩阵A的最大特征根,计算公式为: (8 - 4) 其中,(AW)i表示AW的第i个元素。 最后,对矩阵A进行一致性检验。当a q二空时,称判断矩阵为a jk 致性矩阵。判断一致性的指标为C.R.的取值。 C.R.嚅 (8 - 5) (8 - 6) R丄为随机一致性指标,其值是通过多次重复进行随机判断矩阵特征值的计算后得到的。随机一致性指标R丄的取值见表8-2。 表8-2随机一致性指标R.I?的取值表 维数12 345 6 7 8 9 10 J (AW)i i吕nw 9 矩阵特征值计算 在实际的工程计算中,经常会遇到求n 阶方阵 A 的特征值(Eigenvalue)与特征向量(Eigenvector)的问题。对于一个方阵A,如果数值λ使方程组 Ax=λx 即(A-λI n )x=0 有非零解向量(Solution Vector)x,则称λ为方阵A的特征值,而非零向量x为特征值λ所对应的特征向量,其中I n 为n阶单位矩阵。 由于根据定义直接求矩阵特征值的过程比较复杂,因此在实际计算中,往往采取一些数值方法。本章主要介绍求一般方阵绝对值最大的特征值的乘幂(Power)法、求对称方阵特征值的雅可比法和单侧旋转(One-side Rotation)法以及求一般矩阵全部特征值的QR 方法及一些相关的并行算法。 1.1 求解矩阵最大特征值的乘幂法 1.1.1 乘幂法及其串行算法 在许多实际问题中,只需要计算绝对值最大的特征值,而并不需要求矩阵的全部特征值。乘幂法是一种求矩阵绝对值最大的特征值的方法。记实方阵A的n个特征值为λi i=(1,2, …,n),且满足: │λ1 │≥│λ2 │≥│λ3 │≥…≥│λn │ 特征值λi 对应的特征向量为x i 。乘幂法的做法是:①取n维非零向量v0 作为初始向量;②对于 k=1,2, …,做如下迭代: 直至u k+1 ∞ - u k u k =Av k-1 v k = u k /║u k ║∞ <ε为止,这时v k+1 就是A的绝对值最大的特征值λ1 所对应的特征向∞ 量x1 。若v k-1 与v k 的各个分量同号且成比例,则λ1 =║u k ║∞;若v k-1 与v k 的各个分量异号且成比例,则λ1 = -║u k ║∞。若各取一次乘法和加法运算时间、一次除法运算时间、一次比较运算时间为一个单位时间,则因为一轮计算要做一次矩阵向量相乘、一次求最大元操作和一次规格化操作,所以下述乘幂法串行算法21.1 的一轮计算时间为n2+2n=O(n2 )。 算法21.1 单处理器上乘幂法求解矩阵最大特征值的算法 输入:系数矩阵A n×n ,初始向量v n×1 ,ε 输出:最大的特征值m ax Begin while (│diff│>ε) do (1)for i=1 to n do (1.1)sum=0 (1.2)for j= 1 to n do sum=sum+a[i,j]*x[j] end for v1.0 可编辑可修改层次分析法各权重计算的MATLAB程序 clc clear %修改对比矩阵、一致性检验就可以 a=[1,1,1,4,1,1/2 1,1,2,4,1,1/2 1,1/2,1,5,3,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]; [x,y]=eig(a);eigenvalue=diag(y);lamda=eigenvalue(1); ci1=(lamda-6)/5;cr1=ci1/ w1=x(:,1)/sum(x(:,1)) b1=[1,1/4,1/2;4,1,3;2,1/3,1]; [x,y]=eig(b1);eigenvalue=diag(y);lamda=eigenvalue(1); ci21=(lamda-3)/2;cr21=ci21/ w21=x(:,1)/sum(x(:,1)) b2=[1 1/4 1/5;4 1 1/2;5 2 1]; [x,y]=eig(b2);eigenvalue=diag(y);lamda=eigenvalue(1); ci22=(lamda-3)/2;cr22=ci22/ w22=x(:,1)/sum(x(:,1)) b3=[1 3 1/3;1/3 1 1/7;3 7 1]; v1.0 可编辑可修改[x,y]=eig(b3);eigenvalue=diag(y);lamda=eigenvalue(1); ci23=(lamda-3)/2;cr23=ci23/ w23=x(:,1)/sum(x(:,1)) b4=[1 1/3 5;3 1 7;1/5 1/7 1]; [x,y]=eig(b4);eigenvalue=diag(y);lamda=eigenvalue(1); ci24=(lamda-3)/2;cr24=ci24/ w24=x(:,1)/sum(x(:,1)) b5=[1 1 7;1 1 7;1/7 1/7 1]; [x,y]=eig(b5);eigenvalue=diag(y);lamda=eigenvalue(2); ci25=(lamda-3)/2;cr25=ci25/ w25=x(:,2)/sum(x(:,2)) b6=[1 7 9;1/7 1 1 ;1/9 1 1]; [x,y]=eig(b6);eigenvalue=diag(y);lamda=eigenvalue(1); ci26=(lamda-3)/2;cr26=ci26/ w26=x(:,1)/sum(x(:,1)) w_sum=[w21,w22,w23,w24,w25,w26]*w1 ci=[ci21,ci22,ci23,ci24,ci25,ci26]; cr=ci*w1/sum*w1) 专题:层次分析法 一般情况下,物流系统的评价属于多目标、多判据的系统综合评价。如果仅仅依靠评价者的定性分析和逻辑判断,缺乏定量分析依据来评价系统方案的优劣,显然是十分困难的。尤其是物流系统的社会经济评价很难作出精确的定量分析。 层次分析法(Analytical Hierarchy Process )由美国著名运筹学家萨蒂(T .L .Saaty )于1982年提出,它综合了人们主观判断,是一种简明、实用的定性分析与定量分析相结合的系统分析与评价的方法。目前,该方法在国内已得到广泛的推广应用,广泛应用于能源问题分析、科技成果评比、地区经济发展方案比较,尤其是投入产出分析、资源分配、方案选择及评比等方面。它既是一种系统分析的好方法,也是一种新的、简洁的、实用的决策方法。 ◆ 层次分析法的基本原理 人们在日常生活中经常要从一堆同样大小的物品中挑选出最重的物品。这时,一般是利用两两比较的方法来达到目的。假设有n 个物品,其真实重量用w 1,w 2,…w n 表示。要想知道w 1,w 2,…w n 的值,最简单的就是用秤称出它们的重量,但如果没有秤,可以将几个物品两两比较,得到它们的重量比矩阵A 。 如果用物品重量向量W =[w 1,w 2,…w n ]T 右乘矩阵A ,则有: 由上式可知,n 是A 的特征值,W 是A 的特征向量。根据矩阵理论,n 是矩阵A 的唯一非零解,也是最大的特征值。这就提示我们,可以利用求物品重量比判断矩阵的特征向量的方法来求得物品真实的重量向量W 。从而确定最重的物品。 将上述n 个物品代表n 个指标(要素),物品的重量向量就表示各指标(要 实验目的: 熟悉有关层次分析法模型的建立与计算,熟悉Matlab 的相关命令。 实验准备: 1. 在开始本实验之前,请回顾教科书的相关内容; 2. 需要一台准备安装Windows XP Professional 操作系统和装有Matlab 的计算机。 实验内容及要求 试用层次分析法解决一个实际问题。问题可参考教材P296第4大题。 实验过程: 某物流企业需要采购一台设备,在采购设备时需要从功能、价格与可维护性三个角度进行评价,考虑应用层次分析法对3个不同品牌的设备进行综合分析评价和排序,从中选出能实现物流规划总目标的最优设备,其层次结构如下图所示。以A 表示系统的总目标,判断层中1B 表示功能,2B 表示价格,3B 表示可维护性。1C ,2C ,3C 表示备选的3种品牌的设备。 解题步骤: 1、标度及描述 人们定性区分事物的能力习惯用5个属性来表示,即同样重要、稍微重要、较强重要、强烈重要、绝对重要,当需要较高精度时,可以取两个相邻属性之间的值,这样就得到9个数值,即9个标度。 为了便于将比较判断定量化,引入1~9比率标度方法,规定用1、3、5、7、9分别表示根据经验判断,要素i 与要素j 相比:同样重要、稍微重要、较强重要、强烈重要、绝对重要,而2、4、6、8表示上述两判断级之间的折衷值。 5 因素i 与j 较强重要 7 因素i 与j 强烈重要 9 因素i 与j 绝对重要 2、4、6、8 两个相邻判断因素的中间值 倒数 因素i 与j 比较得判断矩阵a ij ,则因素j 与i 相比的判断为a ji =1/a ij 设备采购层次结构图 注:a ij 表示要素i 与要素j 相对重要度之比,且有下述关系: a ij =1/a ji ;a ii =1; i ,j=1,2,…,n 显然,比值越大,则要素i 的重要度就越高。 2、构建判断矩阵A 判断矩阵是层次分析法的基本信息,也是进行权重计算的重要依据。 根据结构模型,将图中各因素两两进行判断与比较,构造判断矩阵: ●判断矩阵B A -(即相对于物流系统总目标,判断层各因素相对重要性比较)如表1所示; ●判断矩阵C B -1(相对功能,各方案的相对重要性比较)如表2所示; ●判断矩阵C B -2(相对价格,各方案的相对重要性比较)如表3所示; ●判断矩阵C B -3(相对可维护性,各方案的相对重要性比较)如表4所 示。 B A - 3、计算各判断矩阵的特征值、特征向量及一致性检验指标 一般来讲,在AHP 法中计算判断矩阵的最大特征值与特征向量,必不需要较高的精度,用求和法或求根法可以计算特征值的近似值。 ●求和法 1)将判断矩阵A 按列归一化(即列元素之和为1):b ij = a ij /Σa ij ; 2)将归一化的矩阵按行求和:c i =Σb ij (i=1,2,3….n ); 层次分析法各权重计算的MATLAB程序 clc clear %修改对比矩阵、一致性检验就可以 a=[1,1,1,4,1,1/2 1,1,2,4,1,1/2 1,1/2,1,5,3,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]; [x,y]=eig(a);eigenvalue=diag(y);lamda=eigenvalue(1); ci1=(lamda-6)/5;cr1=ci1/1.24 w1=x(:,1)/sum(x(:,1)) b1=[1,1/4,1/2;4,1,3;2,1/3,1]; [x,y]=eig(b1);eigenvalue=diag(y);lamda=eigenvalue(1); ci21=(lamda-3)/2;cr21=ci21/0.58 w21=x(:,1)/sum(x(:,1)) b2=[1 1/4 1/5;4 1 1/2;5 2 1]; [x,y]=eig(b2);eigenvalue=diag(y);lamda=eigenvalue(1); ci22=(lamda-3)/2;cr22=ci22/0.58 w22=x(:,1)/sum(x(:,1)) b3=[1 3 1/3;1/3 1 1/7;3 7 1]; [x,y]=eig(b3);eigenvalue=diag(y);lamda=eigenvalue(1); ci23=(lamda-3)/2;cr23=ci23/0.58 w23=x(:,1)/sum(x(:,1)) b4=[1 1/3 5;3 1 7;1/5 1/7 1]; [x,y]=eig(b4);eigenvalue=diag(y);lamda=eigenvalue(1); ci24=(lamda-3)/2;cr24=ci24/0.58 w24=x(:,1)/sum(x(:,1)) b5=[1 1 7;1 1 7;1/7 1/7 1]; [x,y]=eig(b5);eigenvalue=diag(y);lamda=eigenvalue(2); ci25=(lamda-3)/2;cr25=ci25/0.58 w25=x(:,2)/sum(x(:,2)) b6=[1 7 9;1/7 1 1 ;1/9 1 1]; [x,y]=eig(b6);eigenvalue=diag(y);lamda=eigenvalue(1); ci26=(lamda-3)/2;cr26=ci26/0.58 w26=x(:,1)/sum(x(:,1)) w_sum=[w21,w22,w23,w24,w25,w26]*w1 ci=[ci21,ci22,ci23,ci24,ci25,ci26]; cr=ci*w1/sum(0.58*w1) AHP 层次分析法计算原理 一般地,可以选用三层结构对发展战略作出整体评价。 第一层为目标层,它是企业要实现的战略目标,第二层是评价因素层,它包括战略目标实现进行评价的所考虑的各种因素以及各因素之间的相对比值,并求出各要素实现总体目标所占的权重。第三层是指标层,即个评价因素需考虑的具体指标。 首先,根据总目标确定各要素之间的相对重要关系,构建两两比 其中,ij a 表示对于C 来说,A i 对A j 相对重要性的数值体现,通常ij a 可 取1、2、3……、9以及它们的倒数作为标度。其中, 1——表示两个元素相比,具有同样的重要性; 3——表示两个元素相比,一个元素比另一个元素稍微重要; 5——表示两个元素相比,一个元素比另一个元素明显重要; 7——表示两个元素相比,一个元素比另一个元素强烈重要; 9——表示两个元素相比,一个元素比另一个元素极端重要。 2、4、6、8为上述相邻判断的中值。 矩阵中的元素具有以下特征:①ij a >0,② ji ij a a 1 = ,③ ii a =1。 然后,根据判断矩阵计算相对于战略目标各评价元素的相对重要性次序的权重,首先计算判断矩阵A 的最大特征根λmax 和其对应的经归一化后的特征向量W =[w 1,w 2,w 3,……,w n ]T ,计算的公式为: W AW max λ= (8 -1) 归一化后的特征向量W =[w 1,w 2,w 3,……,w n ]T 即为各评价因素对于总目标的权重。 ∑== n i i i i w w w 1 (8-2) 其中, n n j ij i a w X 1 == (8-3) λmax 为判断矩阵A 的最大特征根,计算公式为: max 1()n i i i AW nw λ==∑ (8-4) 其中,()i AW 表示AW 的第i 个元素。 最后,对矩阵A 进行一致性检验。当jk ik ij a a a = 时,称判断矩阵为一致性矩阵。判断一致性的指标为C.R.的取值。 . .....I R I C R C = (8-5) 其中, 1 ..max --= n n I C λ; (8-6) R.I.为随机一致性指标,其值是通过多次重复进行随机判断矩阵特征值的计算后得到的。随机一致性指标R.I.的取值见表8-2。 表8-2 随机一致性指标R.I.的取值表 第3章 矩阵特征值与特征向量的计算 一些工程技术问题需要用数值方法求得矩阵的全部或部分特征值及相关的特征向量。 3.1 特征值的估计 较粗估计ρ(A )≤ ||A || 欲将复平面上的特征值一个个用圆盘围起来。 3.1.1盖氏图 定义3.1-1 设A = [a ij ]n ?n ,称由不等式∑≠=≤-n i j j ij ii a a z 1 所确定的复区域为A 的第i 个盖氏图, 记为G i ,i = 1,2,…,n 。 >≤-=<∑≠=}:{1n i j j ij ii i a a z z G 定理3.1-1 若λ为A 的特征值,则 n i i G 1 =∈ λ 证明:设Ax = λx (x ≠ 0),若k 使得∞ ≤≤==x x x i n i k 1max 因为 k n j j kj x x a λ=∑=1 ?∑≠= -n k j j kj k kk x a x a )(λ ?∑∑∑ ≠=≠=≠≤≤= -n k j j kj n k j j k j kj n k j k j kj kk a x x a x x a a 11λ ? n i i k G G 1 =? ∈λ 例1 估计方阵????? ?? ?????----=41.03.02.05.013.012.01.035.03.02.01.01A 特征值的X 围 解: G 1 = {z :|z – 1|≤ 0.6};G 2 = {z :|z – 3|≤ 0.8}; G 3 = {z :|z + 1|≤ 1.8};G 4 = {z :|z + 4|≤ 0.6}。 注:定理称A 的n 个特征值全落在n 个盖氏圆上,但未说明每个圆盘内都有一个特征值。 3.1.2盖氏圆的连通部分 称相交盖氏圆之并构成的连通部分为连通部分。 孤立的盖氏圆本身也为一个连通部分。 定理3.1-2若由A 的k 个盖氏圆组成的连通部分,含且仅含A 的k 个特征值。 证明: 令D = diag(a 11,a 12,…,a nn ),M = A –D ,记 )10(00 0)(212211122211≤≤?? ?? ? ? ? ??+??????? ??=+=εεεε n n n n nn a a a a a a a a a M D A 则显然有A (1) = A ,A (0) = D ,易知A (ε)的特征多项式的系数是ε的多项式,从而A (ε)的特征 值λ1(ε),λ2(ε),…,λn (ε)为ε的连续函数。 A (ε)的盖氏圆为:)10(,}||||:{)(11≤≤?=≤ -=∑∑≠=≠=εεεεi n i j j ij n i j j ij ii i G a a a z z G 因为A (0) = D 的n 个特征值a 11,a 12,…,a nn ,恰为A 的盖氏圆圆心,当ε由0增大到1时,λi (ε)画出一条以λi (0) = a ii 为始点,λi (1) = λi 为终点的连续曲线,且始终不会越过G i ; 不失一般性,设A 开头的k 个圆盘是连通的,其并集为S ,它与后n –k 个圆盘严格分离,显然,A (ε)的前k 个盖氏圆盘与后n –k 个圆盘严格分离。 当ε = 0时,A (0) = D 的前k 个特征值刚好落在前k 个圆盘G 1,…,G k 中,而另n –k 个特征值则在区域S 之外,ε从0变到1时, k i i G 1 )(=ε与 n k i i G 1 )(+=ε始终分离(严格) 。连续曲线始终在S 中,所以S 中有且仅有A 的k 个特征值。 注:1) 每个孤立圆中恰有一个特征值。 2) 例1中G 2,G 4为仅由一个盖氏圆构成的连通部分,故它们各有一个特征值,而G 1,G 3构 一、指标权重的确定 1.综述 目前关于属性权重的确定方法很多,根据计算权重时原始数据的来源不同,可以将这些方法分为三类:主观赋权法、客观赋权法、组合赋权法。 主观赋权法是根据决策者(专家)主观上对各属性的重视程度来确定属性权重的方法,其原始数据由专家根据经验主观判断而得到。常用的主观赋权法有专家调查法(Delphi法)、层次分析法(AHP )[106-108]、二项系数法、环比评分法、最小平方法等。本文选用的是利用人的经验知识的有序二元比较量化法。 主观赋权法是人们研究较早、较为成熟的方法,主观赋权法的优点是专家可以根据实际的决策问题和专家自身的知识经验合理地确定各属性权重的排序,不至于出现属性权重与属性实际重要程度相悖的情况。但决策或评价结果具有较强的主观随意性,客观性较差,同时增加了对决策分析者的负担,应用中有很大局限性。 鉴于主观赋权法的各种不足之处,人们又提出了客观赋权法,其原始数据由各属性在决策方案中的实际数据形成,其基本思想是:属性权重应当是各属性在属性集中的变异程度和对其它属性的影响程度的度量,赋权的原始信息应当直接来源于客观环境,处理信息的过程应当是深入探讨各属性间的相互联系及影响,再根据各属性的联系程度或各属性所提供的信息量大小来决定属性权重。如果某属性对所有决策方案而言均无差异(即各决策方案的该属性值相同),则该属性对方案的鉴别及排序不起作用,其权重应为0;若某属性对所有决策方案的属性值有较大差异,这样的属性对方案的鉴别及排序将起重要作用,应给予较大权重.总之,各属性权重的大小应根据该属性下各方案属性值差异的大小来确定,差异越大,则该属性的权重越大,反之则越小。 常用的客观赋权法[109-110]有:主成份分析法、熵值法[111-112]、离差及均方差法、多目标规划法等。其中熵值法用得较多,这种赋权法所使用的数据是决策矩阵,所确定的属性权重反映了属性值的离散程度。 fun cti on [w,CR]=mycom(A,m,RI) [x,lumda]二eig(A); r=abs(sum(lumda)); n=fin d(r==max(r)); max_lumda_A=lumda( n,n); max_x_A=x(:,n); w=A/sum(A); CR=(max_lumda_A-m)/(m-1)/RI; end 本matlab程序用于层次分析法中计算判断矩阵给出的权值已经进行 致性检验。 其中A为判断矩阵,不同的标度和评定A将不同。 m为A的维数 RI为判断矩阵的平均随机一致性指标:根据m的不同值不同。 RI值 当CRV0.1时符合一致性检验,判断矩阵构造合理下面是层次分析法的简介,以及判断矩阵构造方法。 一?层次分析法的含义 层次分析法(The analytic hierarchy process )简称AHP,在20 世纪70年代中期由美国运筹学家托马斯塞蒂(「L.Saaty )正式提出。它是一种定性和定量相结合的、系统化、层次化的分析方法。由于它在处理复杂的决策问题上的实用性和有效性,很快在世界范围得到重视。它的应用已遍及经济计划和管理、能源政策和分配、行为科学、军事指挥、运输、农业、教育、人才、医疗和环境等领域。 二?层次分析法的基本思路与人对一个复杂的决策问题的思维、判断过程大体上是一样的。 (1)层次分析法的原理 层次分析法是将决策问题按总目标、各层子目标、评价准则直至具体的备投方案的顺序分解为不同的层次结构,然后得用求解判断矩阵特征向量的办法,求得每一层次的各元素对上一层次某元素的优先权重,最后再加权和的方法递阶归并各备择方案对总目标的最终权重,此最终权重最大者即为最优方案。这里所谓优先权重”是一种相对的量度,它表明各备择方案在某一特点的评价准则或子目标,标下优越程度的相对量度,以及各子目标对上一层目标而言重要程度的相对量度。层次分析法比较适合于具有分层交错评价指标的目标系统,而且目标值又难于定量 描述的决策问题。其用法是构造判断矩阵,求出其最大特征值。及其所对应的特征向量W,归一化后,即为某一层次指标对于上一层次某相关指标的相对重要性权值。 (2)层次分析法的步骤 a)建立系统的递阶层次结构; b)构造两两比较判断矩阵;(正互反矩阵)层次分析法确定绩效考核指标权重
层次分析法矩阵权重和,根,特征值法,c语言计算
求矩阵特征值算法及程序
变异系数_层次分析_各种权重求解法
层次分析法的计算步骤
层次分析法计算权重在matlab中的实现
AHP层次分析法计算原理
并行计算-矩阵特征值计算--
层次分析法各权重计算的MATLAB程序
层次分析法例题
(完整版)层次分析法例题
层次分析法各权重计算的MATLAB程序
AHP层次分析法计算原理
3矩阵特征值及特征向量的计算
权重的确定方法汇总
层次分析法判断矩阵求权值以及一致性检验程序