1.基本概念
层次分析法(Analytic Hierarchy Process,AHP)是一种多准则决策方法,由美国运筹学家托马斯·L·萨亚德(Thomas L. Saaty)于20世纪70年代提出。它通过对问题进行层次化结构化,将复杂的决策问题分解为多个层次,并对各个层次的因素进行比较和权重的确定,最终得出决策结果。
层次分析法基于以下几个核心概念:
-
层次结构:将复杂的决策问题分解为多个层次,从目标层次到准则层次,再到备选方案层次,形成一个层次化的结构。每个层次包含若干个因素或者准则,形成了一个决策网络。
-
两两比较:在每个层次下,通过两两比较各个因素或准则之间的重要程度,使用专家判断或者问卷调查等方式,构建一个判断矩阵。专家需要对每对因素进行比较,给出相对重要性的判断,通常以1~9的标度表示。
-
权重计算:根据判断矩阵,通过数学计算得到每个因素或准则的权重,表示其在决策中的重要性。通常采用特征向量法或特征值法进行计算。
-
一致性检验:为了保证比较矩阵的合理性和准确性,需要对专家的两两比较结果进行一致性检验。判断矩阵的一致性通过计算一致性指标和一致性比率来评估,以确保专家的判断是可靠的。
-
最终决策:根据各个层次的权重计算结果,将其进行综合,得出最终的决策结果。通常是从备选方案中选择具有最高综合评分的方案作为最佳决策。
层次分析法能够有效地处理具有多个因素和多个层次的复杂决策问题,它提供了一种量化的决策方法,并且可以结合专家的经验和主观判断进行权衡。层次分析法在管理决策、项目评估、供应链管理等领域得到了广泛的应用。
2.实现步骤
层次分析法主要包括以下五个步骤:
1.建立层次结构:将复杂的决策问题分解为多个层次,并明确每个层次中的因素或准则。从目标层开始到备选方案层,逐层进行划分和组织,形成一个层次化的结构。
2.构建判断矩阵:在每个层次中,通过两两比较各个因素或准则之间的重要程度。为每对因素或准则创建一个判断矩阵,根据专家的判断或者问卷调查等方式,使用1~9的标度进行评定。比较不同因素之间的相对重要性,填写判断矩阵。
标度 | 定 义 | 含 义 |
1 | 同样重要 | 两元素对某准则同样重要 |
3 | 稍微重要 | 两元素对某准则,一元素比另一元素稍微重要 |
5 | 明显重要 | 两元素对某准则,一元素比另一元素明显重要 |
7 | 强烈重要 | 两元素对某准则,一元素比另一元素强烈重要 |
9 | 极端重要 | 两元素对某准则,一元素比另一元素极端重要 |
2,4,6,8 | 相邻标度中值 | 表示相邻两标度之间折衷时的标度 |
上列标度倒数 | 反比较 | 元素i对元素j的标度为aij,反之为l/aij |
3.计算权重:根据判断矩阵,通过数学计算方法得出每个因素或准则的权重,表示其在决策中的相对重要程度。常用的计算方法包括特征向量法和特征值法。其中特征向量法是最常用的,可以通过归一化处理得到权重。
4.一致性检验:为了保证比较矩阵的一致性和可靠性,需要对判断矩阵进行一致性检验。通过计算一致性指标(Consistency Index,CI)和一致性比率(Consistency Ratio,CR)来评估判断矩阵的一致性。如果CR值小于预设的阈值(通常为0.1),则说明一致性较好;如果CR值大于阈值,则需要重新进行比较调整。
一致性指标:
随机平均一致性指标:
阶数 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
R.I. | 0 | 0 | 0.52 | 0.89 | 1.12 | 1.26 | 1.36 | 1.41 |
阶数 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | |
R.I. | 1.46 | 1.49 | 1.52 | 1.54 | 1.56 | 1.58 | 1.59 |
一致性比率:
5.综合评估与决策:根据各个层次的权重计算结果,将其进行综合,得出最终的决策结果。通常是从备选方案中选择具有最高综合评分的方案作为最佳决策。
3.matlab实现
判断矩阵如下:
clc
clear all
A=[1 3 5;1/3 1 2;1/5 1/2 1];
[n,n]=size(A);
[v,d]=eig(A);
r=d(1,1);
CI=(r-n)/(n-1);
RI=[0 0 0.58 0.89 1.12 1.24 1.32 1.41 1.45 1.49 1.52 1.54 1.56 1.58 1.59];
CR=CI/RI(n);
if CR<0.10
CR_Result='通过';
else
CR_Result='不通过';
end
w=v(:,1)/sum(v(:,1));
w=w';
disp(['一致性指标CI' num2str(CI)]);
disp(['一致性比例' num2str(CR)]);
disp(['一致性检验结果CR' CR_Result]);
disp(['特征值' num2str(r)]);
disp(['权向量' num2str(w)]);
结果: