层次分析法中判断矩阵一致性校验的C算法实现

时间:2022-08-29 03:39:18

层次分析法中判断矩阵一致性校验的C算法实现

摘要:阐述了层次分析法的基本思想、方法和步骤,给出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格式阅读原文。”

上一篇:药学本体构建实践 下一篇:大型ORACLE数据库优化设计方案