论文部分内容阅读
摘要:阐述了层次分析法的基本思想、方法和步骤,给出AHP的特征根计算方法,编写了C语言算法,并且算法通过了数据测试。
关键词:层次分析法;判断矩阵;一致性校验;C算法
中图分类号:TP312文献标识码:A文章编号:1009-3044(2007)12-21654-02
The C Algorithm on Consistent Rule Of Judgment Matrix in AHP
AN Li-kui1,HAN Li-yan2
(1.Department of Mathematics,Bohai University,JinZhou 121003,China; 2.Department of Public Computer,Bohai University,Jinhou 121003,China)
Abstract:Described the main idea,methodology,and approach of the analytic hierarchy process. Discuss the AHP calculation method using the latent root and give the C algorithm on the method, and the algorithm has been tested by the data.
Key words:the analytic hierarchy process;judgment matrix;consistency checking;C algorithm
層次分析法(TheAnalyticHierarchyProcess,简称AHP)[1]是美国著名运筹学家、匹兹堡大学教授T.L.Saaty于70年代中期提出的一种系统分析方法,是一种实用的多准则决策方法。该法能够定量与定性相结合,将人的主观判断用数量形式表达和处理,从本质上讲是一种思维方式,并具有高度的逻辑性、系统性、简洁性和实用性等优点.AHP在工程技术、能源系统分析、经济管理、城市规划和社会科学等众多领域中都得到了广泛的应用。本文编写了AHP的C算法,为层次分析法在更广阔领域的应用提供了有利的工具。
1 层次分析的基本思想和步骤[2-3]
1.1层次分析法的基本思想
把复杂问题分解为若干层次(如超过9个),可将该层次划分为若干层,在最低层次通过两两对比得出各因素的权重,通过由低到高的层层分析计算,最后计算出各方案对总目标的权数,权数最大的方案即为最优方案。层次分析法的基本假设:层次之间存在递进结构,即从高到低或从低到高递进。
1.2层次分析法的步骤
(1)明确问题,搞清楚涉及的因素以及因素相互之间的关系。
(2)建立层次结构模型。将决策问题层次化,划分为总目标层、分目标层和方案层。
(3)通过对各层元素的重要性进行两两比较,构造判断矩阵。以每两个方案(或子目标)的相对重要性为元素的矩阵称为判断矩阵,判断矩阵是层次分析法的核心。
判断矩阵的元素aij具有三条性质:
3 矩阵一致性校验的C实现
矩阵校验最主要的是随机一致性比例因子的求法,本算法最终求出 判断矩阵的C语言实现,从而可以判别矩阵具有满意的一致性。算法如下:
#include
#include
#include
/*输入n*n二维判断矩阵,为了输入分数,这里把分子与分母分别输入*/
void Input_matrix(float **matrix,int n)
{float nomi,denomi;
int i,j;
for(i=0;i for(j=0;j { scanf("%f%f",&nomi,&denomi);
*(*(matrix+i)+j)=nomi/denomi; } }
/*计算特征向量与最大特征值*/
float Caculate_engevalue(float **matrix,int n)
{ float g,emax=0.0;
float *w=(float *)malloc(sizeof(float)*n);
int i,j;
for(i=0;i { g=1.0;
for(j=0;j g*=*(*(matrix+i)+j);
w[i]=g; }
for(i=0;i w[i]=powl(w[i],1.0/n);
for(i=0,g=0.0;i g+=w[i];
for(i=0;i w[i]=w[i]/g;
printf("特征向量是:");
for(i=0;i printf("%f,",w[i]);
for(i=0;i { for(j=0,g=0.0;j g+=(*(*(matrix+i)+j))*w[j];
emax+=g/(n*w[i]); }
return emax; }
/*平均随机一致性指标矩阵*/
float Index_array[9]={0,0,0.58,0.90,1.12,1.024,1.32,1.41,1.45};
void main()
{float **matrix,max,CI=0,CR=0;
int n,i;
printf("请输入判断矩阵的层数(n):");
scanf("%d",&n);
matrix = (float **)malloc(sizeof(float *)*n);/*给二维数组动态分配地址空间*/
printf("请输入判断矩阵:\n");
for(i = 0;i matrix[i] = (float *)malloc(sizeof(float)*n);
printf("请输入判断矩阵:\n");
Input_matrix(matrix,n);/*输入n*n二维判断矩阵*/
max=Caculate_engevalue( matrix,n); /*计算最大特征值*/
printf("\n 最大特征值max=%f\n",max);
CI=(max-n)/(n-1); /*计算矩阵一致性指标*/
printf("\n矩阵一致性指标CI=:%f\n",CI);
CR=CI/Index_array[n-1];/*计算随机一致性比例*/
printf("\n矩阵随机一致性比例CR= %f\n",CR); }
在VC6.0环境下,对文献[4]中的判断矩阵C2-P进行程序测试。
请输入判断矩阵的层数(n):3
请输入矩阵:
11.013.017.0
31.011.013.0
71.031.011.0
特征向量是:0.087946,0.242637,0.669417
最大特征值max=3.007022
矩阵一致性指标CI=0.003511
矩阵随机一致性比例CR=0.006053
4 结论
经过检验,此程序最后输出的数据比对文献[4]的精度还要高,完全满足判定的需要。作者还进行了其他几组测试,结果完全正确。由于篇幅有限,这里不详述。此算法可以用于层次分析法理论的研究工作,为其在更广阔领域的应用提供了有利的工具。
参考文献:
[1][美]SATTY L,许树柏.等.译.层次分析法[M].北京:煤炭工业出版社,1988.
[2]姜启源.数学模型[M].北京:高等教育出版社,1993.305-335.
[3]王莲芬,许树柏.层次分析法引论[M].北京:中国人民大学出版社,1990.103-108,350-384.
[4]陈义华.数学建模的层次分析法[J].甘肃工业大学学报,1997(23):92-96.
“本文中所涉及到的图表、注解、公式等内容请以PDF格式阅读原文。”
关键词:层次分析法;判断矩阵;一致性校验;C算法
中图分类号:TP312文献标识码:A文章编号:1009-3044(2007)12-21654-02
The C Algorithm on Consistent Rule Of Judgment Matrix in AHP
AN Li-kui1,HAN Li-yan2
(1.Department of Mathematics,Bohai University,JinZhou 121003,China; 2.Department of Public Computer,Bohai University,Jinhou 121003,China)
Abstract:Described the main idea,methodology,and approach of the analytic hierarchy process. Discuss the AHP calculation method using the latent root and give the C algorithm on the method, and the algorithm has been tested by the data.
Key words:the analytic hierarchy process;judgment matrix;consistency checking;C algorithm
層次分析法(TheAnalyticHierarchyProcess,简称AHP)[1]是美国著名运筹学家、匹兹堡大学教授T.L.Saaty于70年代中期提出的一种系统分析方法,是一种实用的多准则决策方法。该法能够定量与定性相结合,将人的主观判断用数量形式表达和处理,从本质上讲是一种思维方式,并具有高度的逻辑性、系统性、简洁性和实用性等优点.AHP在工程技术、能源系统分析、经济管理、城市规划和社会科学等众多领域中都得到了广泛的应用。本文编写了AHP的C算法,为层次分析法在更广阔领域的应用提供了有利的工具。
1 层次分析的基本思想和步骤[2-3]
1.1层次分析法的基本思想
把复杂问题分解为若干层次(如超过9个),可将该层次划分为若干层,在最低层次通过两两对比得出各因素的权重,通过由低到高的层层分析计算,最后计算出各方案对总目标的权数,权数最大的方案即为最优方案。层次分析法的基本假设:层次之间存在递进结构,即从高到低或从低到高递进。
1.2层次分析法的步骤
(1)明确问题,搞清楚涉及的因素以及因素相互之间的关系。
(2)建立层次结构模型。将决策问题层次化,划分为总目标层、分目标层和方案层。
(3)通过对各层元素的重要性进行两两比较,构造判断矩阵。以每两个方案(或子目标)的相对重要性为元素的矩阵称为判断矩阵,判断矩阵是层次分析法的核心。
判断矩阵的元素aij具有三条性质:
3 矩阵一致性校验的C实现
矩阵校验最主要的是随机一致性比例因子的求法,本算法最终求出 判断矩阵的C语言实现,从而可以判别矩阵具有满意的一致性。算法如下:
#include
#include
#include
/*输入n*n二维判断矩阵,为了输入分数,这里把分子与分母分别输入*/
void Input_matrix(float **matrix,int n)
{float nomi,denomi;
int i,j;
for(i=0;i
*(*(matrix+i)+j)=nomi/denomi; } }
/*计算特征向量与最大特征值*/
float Caculate_engevalue(float **matrix,int n)
{ float g,emax=0.0;
float *w=(float *)malloc(sizeof(float)*n);
int i,j;
for(i=0;i
for(j=0;j
w[i]=g; }
for(i=0;i
for(i=0,g=0.0;i
for(i=0;i
printf("特征向量是:");
for(i=0;i
for(i=0;i
emax+=g/(n*w[i]); }
return emax; }
/*平均随机一致性指标矩阵*/
float Index_array[9]={0,0,0.58,0.90,1.12,1.024,1.32,1.41,1.45};
void main()
{float **matrix,max,CI=0,CR=0;
int n,i;
printf("请输入判断矩阵的层数(n):");
scanf("%d",&n);
matrix = (float **)malloc(sizeof(float *)*n);/*给二维数组动态分配地址空间*/
printf("请输入判断矩阵:\n");
for(i = 0;i
printf("请输入判断矩阵:\n");
Input_matrix(matrix,n);/*输入n*n二维判断矩阵*/
max=Caculate_engevalue( matrix,n); /*计算最大特征值*/
printf("\n 最大特征值max=%f\n",max);
CI=(max-n)/(n-1); /*计算矩阵一致性指标*/
printf("\n矩阵一致性指标CI=:%f\n",CI);
CR=CI/Index_array[n-1];/*计算随机一致性比例*/
printf("\n矩阵随机一致性比例CR= %f\n",CR); }
在VC6.0环境下,对文献[4]中的判断矩阵C2-P进行程序测试。
请输入判断矩阵的层数(n):3
请输入矩阵:
11.013.017.0
31.011.013.0
71.031.011.0
特征向量是:0.087946,0.242637,0.669417
最大特征值max=3.007022
矩阵一致性指标CI=0.003511
矩阵随机一致性比例CR=0.006053
4 结论
经过检验,此程序最后输出的数据比对文献[4]的精度还要高,完全满足判定的需要。作者还进行了其他几组测试,结果完全正确。由于篇幅有限,这里不详述。此算法可以用于层次分析法理论的研究工作,为其在更广阔领域的应用提供了有利的工具。
参考文献:
[1][美]SATTY L,许树柏.等.译.层次分析法[M].北京:煤炭工业出版社,1988.
[2]姜启源.数学模型[M].北京:高等教育出版社,1993.305-335.
[3]王莲芬,许树柏.层次分析法引论[M].北京:中国人民大学出版社,1990.103-108,350-384.
[4]陈义华.数学建模的层次分析法[J].甘肃工业大学学报,1997(23):92-96.
“本文中所涉及到的图表、注解、公式等内容请以PDF格式阅读原文。”