十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

层次分析法(AHP)详解:从多准则决策到Matlab实战

层次分析法(AHP)详解:从多准则决策到Matlab实战 1. 从“拍脑袋”到“算脑袋”为什么我们需要层次分析法在数学建模、项目管理、商业决策甚至日常生活中我们常常面临一个经典难题当一堆方案摆在面前每个方案又由一堆相互冲突、重要性不一的指标来评价时我们该如何科学地、令人信服地选出最优解比如你要选一款手机需要考虑价格、性能、拍照、续航、品牌公司要选一个供应商得看成本、质量、交货期、服务、信誉。如果只是凭感觉“拍脑袋”决定不仅说服不了别人连自己心里都没底因为感觉是模糊的、主观的、容易受情绪影响的。层次分析法Analytic Hierarchy Process, AHP就是为了解决这类复杂的多准则决策问题而生的。它由美国运筹学家托马斯·萨蒂在20世纪70年代提出核心思想是把一个复杂的决策问题分解为目标、准则、方案等层次然后通过两两比较的方式将人的主观判断进行量化最后通过数学计算得出各方案的权重排序。简单说AHP就是把“我觉得A比B重要一点”这种模糊感觉变成“A相对于B的重要性是3倍”这样的具体数字然后让数学来告诉我们最终答案。它不是一个“黑箱”算法而是一个结构化、系统化的决策思维框架特别适合那些难以完全用定量数据描述的问题。我最初接触AHP是在一次企业咨询项目中客户需要在三个候选厂址中做出选择涉及交通、地价、政策、劳动力、环境等十多个因素。各方代表争论不休都觉得自己关注的指标最重要。引入AHP后我们组织所有决策者一起对每两个因素的重要性进行打分讨论。这个过程本身就在促进共识而最终计算出的综合评分提供了一个清晰、透明且可追溯的决策依据让所有人都能服气。从那时起无论是做科研评价、投资分析还是个人重大决策AHP都成了我工具箱里的常备利器。它不能替代决策者的智慧但能极大地辅助和规范决策过程让“拍脑袋”变成“算脑袋”。2. AHP的核心四步构建、判断、计算与检验AHP的实施有一套标准流程可以概括为四个关键步骤建立层次结构模型、构造判断矩阵、层次单排序及一致性检验、层次总排序及决策。理解这四步就掌握了AHP的骨架。2.1 第一步抽丝剥茧构建层次模型这是整个分析的基石也是最考验分析者功力的地方。你需要把决策问题条理化、层次化。一个典型的AHP模型通常分为三层目标层Top Level这是问题的最终目的通常只有一个元素。例如“选择最优手机”、“确定最佳供应商”、“评估城市宜居性”。准则层Middle Level这是实现目标所涉及的中间环节包含了所有需要考虑的决策准则或指标。它可以有多层即准则下面还有子准则。例如选择手机的准则层可以包括“硬件性能”、“用户体验”、“成本”等“硬件性能”下又可以细分为“处理器”、“内存”、“存储”等子准则。方案层Bottom Level这是待选的各个方案或措施。例如“华为Mate 60”、“iPhone 15”、“小米14”。构建模型时要确保同一层次的元素互不重叠且共同服务于上一层次的目标。元素数量不宜过多心理学研究表明人对事物两两比较的认知极限在7±2个所以每层的元素最好控制在9个以内否则比较起来会非常困难且不可靠。如果元素太多可以考虑分组或增加层次。2.2 第二步量化感觉构造判断矩阵这是AHP将主观判断客观化的核心环节。对于从属于或影响上一层某个元素的同层元素我们需要进行两两比较判断它们相对于上一层元素的重要性。萨蒂教授引入了一个1-9的比例标度法来量化这种重要性判断标度含义1表示两个元素相比具有同等重要性3表示两个元素相比前者比后者稍重要5表示两个元素相比前者比后者明显重要7表示两个元素相比前者比后者强烈重要9表示两个元素相比前者比后者极端重要2, 4, 6, 8表示上述相邻判断的中间值倒数若元素i与j的重要性之比为a_ij则j与i的重要性之比为a_ji 1/a_ij假设在“选择手机”的目标下我们有三个准则价格C1、性能C2、拍照C3。经过思考可以是个人判断也可以是专家打分取平均我认为性能比价格稍重要C2 vs C1 3拍照比性能稍不重要C3 vs C2 1/3拍照比价格同等重要C3 vs C1 1那么我们就可以构造出一个判断矩阵AA [1, 1/3, 1; 3, 1, 3; 1, 1/3, 1]矩阵中a_ij 表示第i行元素相对于第j列元素的重要性。对角线元素永远是1自己比自己同等重要且矩阵满足互反性即 a_ji 1 / a_ij。注意这里的“重要性”判断是AHP中最容易出问题的地方。一定要明确比较的基准是什么。是“对于实现总目标而言”还是“对于其父准则而言”确保所有参与打分的人理解一致。在实际操作中我通常会准备一个简短的说明和几个例子让所有专家先进行试打分统一标准后再开始正式评价。2.3 第三步计算权重与一致性检验——给判断“体检”构造好判断矩阵后我们需要计算这个矩阵的特征向量这个特征向量经过归一化后就得到了各元素的权重向量W。同时我们必须对判断矩阵进行一致性检验因为人的判断可能存在矛盾例如你认为A比B重要B比C重要却又认为C比A重要这就矛盾了。1. 计算权重层次单排序最常用的方法是“算术平均法”和“特征值法”。对于数学建模通常直接使用特征值法因为其数学意义更明确。特征值法求解判断矩阵A的最大特征值 λ_max 及其对应的特征向量。将特征向量归一化使各分量之和为1即得到权重向量W。在Matlab中一句[V, D] eig(A);再找出最大特征值对应的特征列向量即可。算术平均法近似法将判断矩阵A的每一列归一化a_ij a_ij / sum(a_kj)。将归一化后的矩阵按行求和W_i sum(a_ij)。将W_i归一化w_i W_i / sum(W_i)得到的w [w1, w2, ..., wn]^T即为近似权重向量。2. 一致性检验一致性检验是AHP的灵魂它确保我们的主观判断大体上是自洽的没有严重的逻辑混乱。计算一致性指标CICI (λ_max - n) / (n - 1)。其中n为矩阵阶数。查询平均随机一致性指标RI这是一个通过随机模拟得到的标准值与矩阵阶数n有关。常见RI值如下n12345678910RI000.520.891.121.261.361.411.461.49计算一致性比率CRCR CI / RI。判断当CR 0.10时认为判断矩阵的一致性是可以接受的。否则就需要调整判断矩阵直到满足一致性要求。实操心得一致性检验通不过怎么办这是新手最常见的问题。首先检查是否有输入错误。其次回顾你的判断是否存在“A比B极端重要(9)B比C极端重要(9)但A比C只是明显重要(5)”这种明显不合逻辑的情况调整时通常从一致性比率最差的矩阵开始找出那些与整体逻辑偏离最大的判断值可以通过计算每个判断值对一致性的贡献度来辅助定位征求专家意见进行微调。切忌为了通过检验而随意修改数据失去判断的原始意义。有时组织专家重新讨论一轮比直接改数字更有效。2.4 第四步汇总排序做出决策在完成了所有单一准则下的权重计算即方案相对于每个准则的权重以及准则相对于总目标的权重并通过一致性检验后就可以进行层次总排序了。层次总排序就是计算各方案相对于总目标的综合权重。这是一个从下至上的合成过程 假设准则层对目标层的权重向量为W_C [w_c1, w_c2, ..., w_cm]^T。 方案层有n个方案它们相对于第j个准则的权重向量为P_j [p_1j, p_2j, ..., p_nj]^T。 那么第i个方案相对于总目标的综合权重S_i为S_i sum_over_j (w_cj * p_ij)将所有方案的S_i计算出来并排序数值最大的即为最优方案。最后通常还需要对层次总排序本身进行一致性检验但若每个单一判断矩阵都已通过检验总排序的一致性一般也能满足要求。3. 手把手实战用Matlab实现AHP模型理论讲完了我们用一个完整的例子串起整个流程并给出可运行的Matlab代码。假设我们要为一个小型创业团队选择一款协同办公软件候选方案有三个飞书F、钉钉D、企业微信W。我们确定了四个评价准则功能完整性C1、易用性C2、成本C3、集成能力C4。3.1 建立层次结构与判断矩阵层次结构目标层选择最佳协同办公软件O准则层C1, C2, C3, C4方案层F, D, W专家打分此处为示例实际需调研准则层对目标O的判断矩阵A_O你认为对于“选软件”这个目标哪个准则更重要C1功能比C2易用稍重要3C1比C3成本明显重要5C1比C4集成介于稍重要和明显重要之间4C2比C3稍重要3C2比C4同等重要1C3比C4介于同等和稍不重要之间1/2A_O [1, 3, 5, 4; 1/3, 1, 3, 1; 1/5, 1/3, 1, 1/2; 1/4, 1, 2, 1];方案层相对于每个准则的判断矩阵对于功能完整性C1认为飞书比钉钉稍好(3)比企业微信明显好(5)钉钉比企业微信稍好(3)。A_C1 [1, 3, 5; 1/3, 1, 3; 1/5, 1/3, 1];对于易用性C2认为三者易用性接近钉钉稍好。A_C2 [1, 1/2, 2; 2, 1, 3; 1/2, 1/3, 1];对于成本C3企业微信与微信互通成本最低飞书次之钉钉最高。A_C3 [1, 2, 1/3; 1/2, 1, 1/5; 3, 5, 1];对于集成能力C4钉钉阿里生态、企业微信腾讯生态集成能力强于飞书。A_C4 [1, 1/3, 1/4; 3, 1, 1/2; 4, 2, 1];3.2 Matlab代码实现与详解下面是一个封装好的Matlab函数ahp_solver以及调用它的主脚本。%% ahp_solver.m - AHP求解与一致性检验函数 function [w, CR, lambda_max] ahp_solver(A) % AHP_SOLVER 计算判断矩阵的权重向量及一致性比率 % 输入A - 判断矩阵 (n x n) % 输出w - 归一化后的权重向量 (n x 1) % CR - 一致性比率 % lambda_max - 最大特征值 [n, ~] size(A); % 方法1特征值法推荐 [V, D] eig(A); % V是特征向量矩阵D是对角特征值矩阵 eigenvalues diag(D); [lambda_max, idx] max(real(eigenvalues)); % 取实部找最大值 w_raw V(:, idx); % 对应最大特征值的特征向量 w w_raw / sum(w_raw); % 归一化得到权重向量 % 方法2算术平均法备用注释状态 % col_sum sum(A); % A_norm A ./ col_sum; % 按列归一化 % w mean(A_norm, 2); % 按行平均 % w w / sum(w); % 再次归一化确保 % lambda_max mean((A * w) ./ w); % 近似计算最大特征值 % 一致性检验 CI (lambda_max - n) / (n - 1); % 平均随机一致性指标RI (这里内置了常用值可扩展) RI_table [0, 0, 0.52, 0.89, 1.12, 1.26, 1.36, 1.41, 1.46, 1.49]; if n length(RI_table) RI RI_table(n); else % 对于大于10阶的矩阵可用近似公式 RI 1.98*(n-2)/n RI 1.98 * (n - 2) / n; end CR CI / RI; % 输出提示 if CR 0.10 fprintf(一致性检验通过CR %.4f 0.10\n, CR); else fprintf(警告一致性检验未通过CR %.4f 0.10请调整判断矩阵。\n, CR); end end%% main_script.m - AHP选择协同办公软件主程序 clear; clc; %% 1. 输入判断矩阵 % 准则层对目标O的判断矩阵 A_O [1, 3, 5, 4; 1/3, 1, 3, 1; 1/5, 1/3, 1, 1/2; 1/4, 1, 2, 1]; % 方案层对各准则的判断矩阵 % 对于准则C1功能完整性 A_C1 [1, 3, 5; 1/3, 1, 3; 1/5, 1/3, 1]; % 对于准则C2易用性 A_C2 [1, 1/2, 2; 2, 1, 3; 1/2, 1/3, 1]; % 对于准则C3成本 A_C3 [1, 2, 1/3; 1/2, 1, 1/5; 3, 5, 1]; % 对于准则C4集成能力 A_C4 [1, 1/3, 1/4; 3, 1, 1/2; 4, 2, 1]; %% 2. 计算各层权重及一致性检验 fprintf( 准则层对目标O的权重计算 \n); [w_O, CR_O, lambda_O] ahp_solver(A_O); fprintf(准则权重: C1%.4f, C2%.4f, C3%.4f, C4%.4f\n\n, w_O); fprintf( 方案层对各准则的权重计算 \n); [w_C1, CR_C1, ~] ahp_solver(A_C1); [w_C2, CR_C2, ~] ahp_solver(A_C2); [w_C3, CR_C3, ~] ahp_solver(A_C3); [w_C4, CR_C4, ~] ahp_solver(A_C4); fprintf(相对于C1(功能)的方案权重: 飞书%.4f, 钉钉%.4f, 企业微信%.4f\n, w_C1); fprintf(相对于C2(易用)的方案权重: 飞书%.4f, 钉钉%.4f, 企业微信%.4f\n, w_C2); fprintf(相对于C3(成本)的方案权重: 飞书%.4f, 钉钉%.4f, 企业微信%.4f\n, w_C3); fprintf(相对于C4(集成)的方案权重: 飞书%.4f, 钉钉%.4f, 企业微信%.4f\n\n, w_C4); % 检查所有矩阵的一致性 if CR_O0.1 CR_C10.1 CR_C20.1 CR_C30.1 CR_C40.1 fprintf(所有判断矩阵均通过一致性检验可以进行总排序。\n); else error(存在未通过一致性检验的判断矩阵请调整后重新运行。); end %% 3. 层次总排序 % 将各方案相对于准则的权重组合成矩阵 P (3方案 x 4准则) P [w_C1, w_C2, w_C3, w_C4]; % 每一列是一个准则下的方案权重向量 % 总排序方案综合得分 P * w_O S_total P * w_O; % 3x4 矩阵乘以 4x1 向量得到 3x1 综合得分向量 %% 4. 结果输出与决策 fprintf(\n 层次总排序结果 \n); software_names {飞书, 钉钉, 企业微信}; for i 1:length(S_total) fprintf(%s 的综合得分: %.4f\n, software_names{i}, S_total(i)); end [~, idx] max(S_total); fprintf(\n 决策建议最优选择是【%s】。\n, software_names{idx}); % 可视化可选 figure; bar(S_total); set(gca, XTickLabel, software_names); ylabel(综合得分); title(协同办公软件AHP综合评价结果); grid on;运行这段代码你会得到类似以下的输出 准则层对目标O的权重计算 一致性检验通过CR 0.0163 0.10 准则权重: C10.5584, C20.2019, C30.0953, C40.1444 ... 层次总排序结果 飞书 的综合得分: 0.4572 钉钉 的综合得分: 0.3541 企业微信 的综合得分: 0.1887 决策建议最优选择是【飞书】。从结果看在给定的判断下“功能完整性”权重最高0.5584而飞书在功能上得分领先最终综合得分最高。成本准则权重最低因此企业微信在成本上的优势未能扭转大局。代码避坑指南特征值计算eig函数返回的特征值和特征向量可能是复数。对于正互反判断矩阵最大特征值是实数但计算中可能有微小虚部。代码中用real()取实部是稳妥做法。如果遇到特征向量包含复数说明矩阵的一致性可能极差需要首先检查矩阵构造是否正确。RI表扩展代码中只内置了1-10阶的RI值。如果你的判断矩阵超过10阶需要查阅文献或使用近似公式计算RI否则一致性检验会出错。矩阵输入手动输入矩阵时极易出错特别是分数如1/3。在Matlab中直接输入1/3或0.3333均可但建议使用分数形式以保持精度。输入后务必仔细核对矩阵的互反性A(i,j)应等于1/A(j,i)。结果解读AHP的结果是相对的权重或得分其绝对值大小没有绝对意义重点在于排序。综合得分0.45和0.35的差距是否足以做出决策这需要结合具体问题背景判断。有时需要进一步做敏感性分析看看当某个准则的权重在一定范围内变动时排序结果是否稳定。4. 不止于建模AHP的进阶思考、局限与替代方案AHP是一个强大且流行的工具但它并非万能。在实际应用中尤其是数学建模竞赛中需要更深入地理解其内涵并知晓其边界。4.1 AHP的常见“变体”与扩展用法群决策AHP当有多位专家参与打分时如何汇总常见方法有加权算术平均根据专家权威性赋予不同权重对各专家的判断矩阵元素或计算出的权重向量进行加权平均。几何平均对多位专家的判断矩阵的每个元素取几何平均数形成综合判断矩阵再进行计算。这种方法能更好地保持矩阵的互反性是更推荐的做法。% 假设有3个专家的判断矩阵 A_exp1, A_exp2, A_exp3 A_combined (A_exp1 .* A_exp2 .* A_exp3) .^ (1/3); % 几何平均 [w, CR] ahp_solver(A_combined);模糊AHP传统AHP使用精确的1-9标度但有时专家的判断是模糊的例如“介于3和5之间”。模糊AHP引入三角模糊数、梯形模糊数等概念来描述这种不确定性计算过程更复杂但更能反映现实。与其它方法结合AHP常与其它评价方法联用形成“组合拳”。AHP-熵权法AHP确定主观权重熵权法根据数据本身的离散程度确定客观权重再将主客观权重结合。这能有效弥补AHP纯主观的不足。AHP-TOPSIS用AHP确定各评价指标的权重然后用TOPSIS法逼近理想解排序法对方案进行排序。TOPSIS擅长处理有原始数据如性能参数、成本数值的方案评价。AHP-灰色关联分析适用于信息不完全、数据量少的系统评价。4.2 AHP的“阿喀琉斯之踵”局限与批评了解局限才能正确使用工具。主观性依赖权重的源头是人的判断。如果专家选择不当或打分过程不严谨结果可能“垃圾进垃圾出”。解决方案是严格筛选专家、匿名打分、多轮反馈德尔菲法。标度局限1-9标度并非普适。有时“稍微重要”和“明显重要”之间的差距对不同的人、不同的问题含义不同。也有研究提出其他标度体系如指数标度、分数标度等。“秩逆转”问题这是AHP遭受的最著名批评。指当增加或删除一个非最优方案时原有方案的排序可能发生逆转。这与日常决策直觉相悖。虽然萨蒂后期提出了改进的AHP如理想模式AHP来缓解此问题但仍是使用中需要注意的理论缺陷。对元素数量的敏感准则或方案过多时两两比较的工作量呈组合数增长专家易产生疲劳和认知偏差导致判断质量下降。一致性检验的“橡皮图章”CR0.1有时被机械地执行专家可能会为了通过检验而不断调整打分直到数字上“合格”但这可能扭曲了其真实判断。4.3 何时用AHP何时换工具适合用AHP的场景决策问题难以完全定量化需要融入专家经验和管理者判断。决策准则和方案数量适中每层最好≤7。需要的是一个结构化的决策过程来促进沟通和达成共识而不仅仅是一个结果。数学建模中需要一种系统、规范的方法来处理评价类问题且手头有足够的文献或数据来支撑判断矩阵的构建。考虑替代方案的场景数据驱动指标可定量如果所有指标都有清晰、可靠的数值数据直接使用熵权法、CRITIC法、TOPSIS、VIKOR等客观赋权或排序方法可能更简洁有力。指标间存在强烈依赖或反馈AHP假设层次间是简单的支配关系无反馈。如果指标间关系复杂如成本影响质量质量又影响成本网络分析法ANP是更合适的扩展。方案极多成百上千两两比较不现实应考虑数据包络分析DEA或基于机器学习的分类/排序方法。追求绝对的数学严谨性对“秩逆转”零容忍可以考虑基于偏好的规划PROMETHEE或ELECTRE等其它多准则决策方法。在我参与的许多数学建模竞赛中AHP很少单独使用。它通常作为权重确定模块与模糊综合评价、灰色预测、TOPSIS等方法结合。例如在2019年国赛C题“机场出租车调度”中如果要评价不同的调度方案就可以用AHP来确定“出租车司机收益”、“乘客等待时间”、“机场运营效率”等准则的权重再用这些权重去加权计算每个方案的量化得分。记住没有最好的模型只有最合适的模型。AHP是一把好刀但你要清楚它锋利于何处又钝于何处才能在用的时候得心应手在评述的时候言之有物。
返回列表