层次分析法(Analytic Hierarchy Process,AHP)简介与简单示例
前言
提醒:
文章内容为方便作者自己后日复习与查阅而进行的书写与发布,其中引用内容都会使用链接表明出处(如有侵权问题,请及时联系)。
其中内容多为一次书写,缺少检查与订正,如有问题或其他拓展及意见建议,欢迎评论区讨论交流。
内容由AI辅助生成,仅经笔者审核整理,请甄别食用。
文章目录
- 前言
- 1. 构建层次结构
- 2. 构造判断矩阵
- 3. 计算权重向量
- 4. 一致性检验
- 5. 方案层权重计算与总权重合成
- 简单示例
- ✅ 示例:选择最佳出行方式
- 📌 MATLAB AHP 示例代码
- 📊 运行效果
- 📎 提示
层次分析法(Analytic Hierarchy Process,AHP) 是由美国运筹学家托马斯·塞蒂(Thomas L. Saaty)在20世纪70年代初期提出的一种多准则决策方法。它将与决策总是有关的元素分解成目标、准则、方案等层次,在此基础上进行定性和定量分析,常用于在多个相互冲突的准则下,对备选方案进行排序和选择。下面结合相关数学公式来详细介绍该算法:
1. 构建层次结构
AHP将决策问题分解为不同的层次结构,一般包括:
- 目标层:决策的最终目标,例如“选择最佳的投资项目” 。
- 准则层:实现目标所涉及的中间环节或评价准则,比如在投资项目选择中,可能包括 “成本”“收益”“风险”“市场前景” 等准则。
- 方案层:可供选择的具体方案,如 “投资项目A”“投资项目B”“投资项目C” 等。
2. 构造判断矩阵
在同一层次内,针对上一层次的某个元素,对该层次的元素进行两两比较,以确定它们相对重要性。使用1 - 9标度法来量化比较结果,如下表所示:
标度值 | 含义 |
---|---|
1 | 两个元素相比,具有同样重要性 |
3 | 两个元素相比,一个元素比另一个元素稍微重要 |
5 | 两个元素相比,一个元素比另一个元素明显重要 |
7 | 两个元素相比,一个元素比另一个元素强烈重要 |
9 | 两个元素相比,一个元素比另一个元素极端重要 |
2, 4, 6, 8 | 上述相邻判断的中值 |
倒数 | 元素i与j比较得判断bij,则元素j与i比较的判断bji = 1/bij |
假设准则层有nnn个准则,针对目标层的某个目标,两两比较后可得到判断矩阵A=(aij)n×n\mathbf{A}=(a_{ij})_{n\times n}A=(aij)n×n,其中aija_{ij}aij表示准则iii相对于准则jjj的重要性程度,且满足aij>0a_{ij}>0aij>0,aii=1a_{ii} = 1aii=1,aji=1aija_{ji}=\frac{1}{a_{ij}}aji=aij1。
3. 计算权重向量
确定判断矩阵后,需要计算每个元素相对于上一层次某元素的相对权重。常用的方法有和积法和方根法,这里以和积法为例:
- 步骤一:列向量归一化
将判断矩阵A\mathbf{A}A的每一列元素进行归一化处理,得到矩阵B=(bij)n×n\mathbf{B}=(b_{ij})_{n\times n}B=(bij)n×n,计算公式为:
bij=aij∑k=1nakjb_{ij} = \frac{a_{ij}}{\sum_{k = 1}^{n}a_{kj}}bij=∑k=1nakjaij - 步骤二:行求和并归一化
对矩阵B\mathbf{B}B的每行元素求和,得到ri=∑j=1nbijr_i=\sum_{j = 1}^{n}b_{ij}ri=∑j=1nbij,再将rir_iri归一化,得到权重向量W=(w1,w2,⋯,wn)T\mathbf{W}=(w_1, w_2, \cdots, w_n)^TW=(w1,w2,⋯,wn)T,计算公式为:
wi=ri∑k=1nrkw_i = \frac{r_i}{\sum_{k = 1}^{n}r_k}wi=∑k=1nrkri
4. 一致性检验
由于判断矩阵是基于人的主观判断构建的,可能存在逻辑不一致的情况,因此需要进行一致性检验,以确保结果的可靠性。
- 步骤一:计算最大特征值λmax\lambda_{max}λmax
根据公式λmax=1n∑i=1n(AW)iwi\lambda_{max}=\frac{1}{n}\sum_{i = 1}^{n}\frac{(\mathbf{A}\mathbf{W})_i}{w_i}λmax=n1∑i=1nwi(AW)i,其中(AW)i(\mathbf{A}\mathbf{W})_i(AW)i表示向量AW\mathbf{A}\mathbf{W}AW的第iii个元素。 - 步骤二:计算一致性指标CICICI
CI=λmax−nn−1CI = \frac{\lambda_{max}-n}{n - 1}CI=n−1λmax−n - 步骤三:查找随机一致性指标RIRIRI
随机一致性指标RIRIRI是通过大量随机生成的判断矩阵计算得到的,不同阶数nnn对应的RIRIRI值如下:
阶数nnn | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
---|---|---|---|---|---|---|---|---|---|
RIRIRI | 0 | 0 | 0.58 | 0.90 | 1.12 | 1.24 | 1.32 | 1.41 | 1.45 |
- 步骤四:计算一致性比率CRCRCR
CR=CIRICR = \frac{CI}{RI}CR=RICI
当CR<0.1CR < 0.1CR<0.1时,认为判断矩阵的一致性是可以接受的;如果CR≥0.1CR \geq 0.1CR≥0.1,则需要对判断矩阵进行调整,直到满足一致性要求。
5. 方案层权重计算与总权重合成
在准则层计算出各准则权重后,对方案层也重复上述构造判断矩阵、计算权重和一致性检验的步骤,得到各方案在每个准则下的权重。然后,将方案层在各准则下的权重与准则层的权重进行加权求和,得到各方案的总权重,计算公式为:
w总j=∑i=1nwiwjiw_{总j}=\sum_{i = 1}^{n}w_{i}w_{ji}w总j=i=1∑nwiwji
其中,w总jw_{总j}w总j表示第jjj个方案的总权重,wiw_{i}wi表示第iii个准则的权重,wjiw_{ji}wji表示第jjj个方案在第iii个准则下的权重。总权重越大,说明该方案越优。
通过以上步骤,AHP算法将复杂的多准则决策问题转化为一系列简单的两两比较,并通过数学计算得出各方案的优先级,为决策者提供了一种系统、科学的决策方法。
简单示例
下面是一个使用 AHP(层次分析法) 优化决策的 经典示例 MATLAB 实现。我们以 选择最佳出行方式(如:开车、公交、自行车) 为例,考虑多个准则(时间、费用、舒适度、安全性)。
✅ 示例:选择最佳出行方式
- 目标层:
- 选择最佳出行方式
- 准则层(Criteria):
- 时间(Time)
- 费用(Cost)
- 舒适度(Comfort)
- 安全性(Safety)
- 方案层(Alternatives):
- 开车(Car)
- 公交(Bus)
- 自行车(Bike)
📌 MATLAB AHP 示例代码
function AHP_example()%% 定义准则层对目标的两两比较矩阵(4x4)criteria_names = {'Time', 'Cost', 'Comfort', 'Safety'};A_criteria = [...1 3 1/2 2; % Time1/3 1 1/5 1/2; % Cost2 5 1 3; % Comfort1/2 2 1/3 1]; % Safety% 计算准则层权重[W_criteria, CI_criteria] = ahp_weight(A_criteria);fprintf('Criteria weights:\n'); disp(W_criteria);fprintf('Criteria Consistency Index (CI): %.4f\n\n', CI_criteria);%% 方案层:每个准则对应一个3x3的判断矩阵alt_names = {'Car', 'Bus', 'Bike'};n_alts = length(alt_names);% 时间准则下的比较A_time = [...1 2 4;1/2 1 3;1/4 1/3 1];% 费用准则下的比较A_cost = [...1 1/3 1/6;3 1 1/2;6 2 1];% 舒适度准则下的比较A_comfort = [...1 2 3;1/2 1 2;1/3 1/2 1];% 安全性准则下的比较A_safety = [...1 1/3 1/2;3 1 2;2 1/2 1];% 所有准则下的方案层权重W_time = ahp_weight(A_time);W_cost = ahp_weight(A_cost);W_comfort = ahp_weight(A_comfort);W_safety = ahp_weight(A_safety);% 合成总权重W_alts = [W_time W_cost W_comfort W_safety] * W_criteria;%% 可视化figure;bar(W_alts);set(gca, 'XTickLabel', alt_names, 'FontSize', 12);ylabel('Final Priority');title('AHP Decision Results - Best Transportation Mode');grid on;
end%% AHP权重计算函数
function [w, CI] = ahp_weight(A)n = size(A,1);[V,D] = eig(A);[lambda_max, idx] = max(real(diag(D)));w = real(V(:,idx));w = w / sum(w);CI = (lambda_max - n)/(n - 1);
end
📊 运行效果
运行后将输出:
- 各准则权重
- 一致性指标 CI(< 0.1 为合理)
- 柱状图展示哪种交通方式优于其他
运行结果
📎 提示
- 可自行修改判断矩阵来进行不同场景建模。
- 若 CI > 0.1,说明判断矩阵一致性差,需重新评估。