层次分析法(Analytic Hierarchy Process,简称AHP)是二十世纪70年代,美国运筹学家T. L. Saaty教授提出的一种决策方法,该方法将定性与定量相结合。目前常被运用于多目标、多准则、多要素、多层次的非结构化的复杂决策问题,尤其是战略决策问题,具有十分广泛的实用性。
它的思想是将复杂问题中个因素分成相互联系的有序层次,运用数学方法分别计算每一层元素的权重,然后通过层次间总排序计算所有元素的权重,每层权重计算过程为根据专家意见和分析者客观判断,构建两两比较的矩阵进行定量表述。 层次分析法具有的优点是清楚呈现各层、各准则与各要素的关系,计算过程简单易懂,但仍具有一定问题,层次分析法在某层的评价指标较多时(如:4个指标及以上), 检验判断矩阵是否一致时将出现困难,且检验判断矩阵具有一致性的标准C.R.<0.1缺乏科学及数理的依据。
模糊层次分析法(fuzzy analytic hierarchy process,简称FAHP)将模糊数学和层次分析法结合起来,引入模糊数据是在层次分析法上的一种改进,能更好地确定层次分析法中的权重问题,FAHP建立的模糊矩阵满足一致性检验,弥补了缺陷。
定义1:设矩阵,若满足0≤≤1,(i=1,2,…,n;j=1,2,…,n),则称F是模糊矩阵。
定义2: 若模糊矩阵 满足,(i=1,2,…,n;j= 1,2,…,n),则称模糊矩阵F是模糊互补矩阵。
定义3:若模糊互补矩阵R=满足:i,j,k,,则称模糊矩阵R是模糊一致矩阵。
FAHP算法实现步骤:
(1) 建立层次结构模型
根据实际情况,需达到的目标、关键指标因素按他们之间的互相关系,可分为目标层、准则层和方案层,形成层次结构模型。
(2)构建模糊互补判断矩阵
使用 FAHP 赋权法的标度原则(表 4-1) ,对每一层两两要素的重要程度进行打分,构建判断矩阵构建模糊互补矩阵,即:
(4-1)
表4-2重要性标度含义
标度 含 义
0.5 两个元素相比,前者与后者具有同等重要性
0.6 两个元素相比,前者比后者稍微重要
0.7 两个元素相比,前者比后者明显重要
0.8 两个元素相比,前者比后者非常重要
0.9 两个元素相比,前者比后者极端重要
0.1-0.4 若元素i与元素j的重要性之比为aij,则元素j与元素i的重要性之比为aji=1-aij
(3)转换模糊一致性矩阵
将模糊判断矩阵F 做一致化处理,构造模糊一致性矩阵:
R= (4-2)
式中,, ,n为各准则层对应措施层个数。
(4)计算单层次权重
对于规整后的模糊一致矩阵, 利用特征根法(幂积法):
①对矩阵R每一行元素进行乘积,即
②计算的n次方根,即 ,对 归一化,得到单层的权重向量。
(4-3)
(5) 计算层次总权重
, (4-4)
其中,为准则层单层权重,为准则层对应措施层单层权重,为准则层对应措施层总权重。
#include<stdio.h>
#include<math.h>
#define N 5
int main(void)
{
int i,j; //A1记录模糊互补矩阵每行和,R1记录一致性矩阵每行积
double R[N][N],A1[N]= {0},R1[N]= {1},W[N],sum =0; //R[][]记录模糊一致性矩阵
double A[N][N]= {{0.5, 0.78, 0.625, 0.625, 0.5625},
{0.22, 0.5, 0.4 ,0.4, 0.3215},
{0.375, 0.6 ,0.5, 0.5, 0.495},
{0.375, 0.6, 0.5, 0.5, 0.495},
{0.4375, 0.6785, 0.505, 0.505, 0.5}
}; //模糊互补矩阵
for(i = 0; i < N; i++) //A1记录每行的和
{
A1[i]
= 0;
for(j = 0; j < N; j++)
A1[i]+=A[i][j];
}
for(i = 0; i < N; i++) //转换成模糊一致性矩
{
for(j = 0 ; j < N; j++)
R[i][j] = (A1[i]-A1[j])/(2*N) + 0.5;
}
printf("\n");
for(i = 0; i < N; i++) //幂积法求单层权重
{
R1[i]
= 1;
for(j = 0 ; j < N; j++)
R1[i] *= R[i][j]; //每行元素进行相乘
W[i] = pow(R1[i],0.2); //求n次方根
sum += W[i];
}
for(i = 0; i < N; i++) //权重归一化
{
W[i]
= W[i]/sum;
printf("%.4f ",W[i]);
}
printf("\n");
return 0;
}