数学建模:层次分析法

🔆 文章首发于我的个人博客:欢迎大佬们来逛逛

层次分析法

步骤描述

  1. 将问题条理化,层次化,构建出一个有层次的结构模型。层次分为三类:目标层,准则(指标)层,方案层
  2. 比较指标层中不同指标之间的相对重要程度,并且构建一个成对比较矩阵
    1. 自行判断两个不同指标的相对重要程度。
    2. 如果指标1重要程度大于指标2,并且赋予一个重要程度为3,因此得到其指标1的值为3,
    3. 同理指标2的重要程度小于指标1(不能存在矛盾),因此相对的指标2的值为 1 3 \frac{1}{3} 31
    4. 因此任意两个指标重要度之间存在的关系为: a i j > 0 , a i j = 1 a j i , i , j ∈ ( 1 , 2 , 3 , . . . n ) a_{ij}>0,a_{ij} = \frac{1}{a_{ji}},i,j\in(1,2,3,...n) aij>0,aij=aji1,i,j∈(1,2,3,...n)
    5. 接着构建出所有两个指标的这种关系,就可以得到一个关于所有指标两两之间的成对比较矩阵 A n n A_{nn} Ann,其中 n n n 为指标的数量。
  3. 在单一准则下计算指标相对排序的权重,以及进行判断矩阵(成对比较矩阵)的一致性检验
  4. 计算方案层中对于目标层的总排序权重,从而得到评价后的结果。

算法流程

  1. 通过分层与条理化后,我们得到了两两指标之间的成对比较矩阵(判断矩阵):

∣ 1 3 1 1 / 3 1 / 3 1 1 / 2 1 / 5 1 2 1 1 / 3 3 5 5 1 ∣ \left|\begin{array}{cccc}1 & 3 & 1 & 1 / 3 \\1 / 3 & 1 & 1 / 2 & 1 / 5 \\1 & 2 & 1 & 1 / 3 \\3 & 5 & 5 & 1\end{array}\right| 11/313312511/2151/31/51/31

  1. 首先得到判断矩阵的最大特征值对应的特征向量T:

T = t 1 t 2 ⋯ t n T=\begin{bmatrix}t_1&t_2&\cdots&t_n\end{bmatrix} T=t1t2⋯tn

  1. 得到权重向量W:

W = w 1 w 2 ⋯ w n w i = t i ∑ i = 1 n t i \begin{gathered}W=\begin{bmatrix}w_1&w_2&\cdots&w_n\end{bmatrix}\\\\w_i=\frac{t_i}{\sum_{i=1}^nt_i}\end{gathered} W=w1w2⋯wnwi=∑i=1ntiti

  1. 计算一致性指标 C I CI CI

C I = λ max ⁡ − n n − 1 C I=\frac{\lambda_{\max }-n}{n-1} CI=n−1λmax−n

  1. 查找相应的随机平均一致性指标 R I RI RI :如果 n = 5 n = 5 n=5 则表示有五个指标,则 R I = R I ( 1 , 5 ) = 1.12 RI = RI(1,5) = 1.12 RI=RI(1,5)=1.12
  1. 计算**一致性比例CR:**当 C R < 0.10 CR<0.10 CR<0.10 时,一致性接受,否则改矩阵应该适当修改参数。

C R = C I R I CR = \frac{CI}{RI} CR=RICI

  1. 计算评价对象的得分:其中 P P P 为归一化后的原始数据, W W W为权重向量

S c o r e = P ⋅ W Score = P \cdot W Score=P⋅W


完整代码

matlab 复制代码
function [Score,W] = mfunc_levelAnalysis(A,data)
    % 层次分析法:求解每个评价对象的综合得分与对应权重
    % paramts: 
    %      A: 两两指标之间的自定义的成对对角矩阵 Shape: (n,n)
    %      data: 原始数据矩阵,(m,n) m为评价对象,n为评价指标
    % returns:
    %      Score:每个评价对象的综合得分
    %      W: 所有指标的权重
    
    % 成对对角矩阵:A判别矩阵
    % A=[1,3,1,1/3;
    %     1/3,1,1/2,1/5;
    %     1,2,1,1/3;
    %     3,5,3,1];
    [n,~]=size(data);
    %Z=zscore(X);
    Z = data ./ repmat(sum(data.*data) .^ 0.5, n, 1); %矩阵归一化
    
    [n,~]=size(A);
    %求特征值特征向量,找到最大特征值对应的特征向量
    [V,D]=eig(A);
    tzz=max(max(D));     %找到最大的特征值
    c1=find(D(1,:)==tzz);%找到最大的特征值位置
    T=V(:,c1);%最大特征值对应的特征向量
    %赋权重
    W=zeros(n,1);
    for i=1:n
    W(i,1)=T(i,1)/sum(T);
    end
    %一致性检验
    CI=(tzz-n)/(n-1);
    RI=[0,0,0.58,0.9,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(1,n);
    if CR>=0.1
       fprintf('没有通过一致性检验\n');
    else
      fprintf('通过一致性检验\n');
    end
     score=Z*W;
     Score=100*score/max(score);
end

有关成对比较矩阵两两指标之间的的相关重要性的程度参考:

相关推荐
热心网友俣先生16 小时前
2026年华数杯赛题浅析-助攻快速选题
数学建模
数模竞赛Paid answer19 小时前
2019年深圳杯数学建模A题深圳居民健康水平评估与测控模型研究解题全过程文档及程序
数学建模·数据分析·深圳杯数学建模挑战赛
一只小小的土拨鼠21 小时前
2026 华数杯备考与决胜攻略:基于“数据清洗-特征归因-混合算法-多目标优化”的电动汽车营销精准决策全流程方案
数学建模
数模竞赛Paid answer21 小时前
2023年五一杯数学建模A题无人机定点投放问题求解全过程完整文档及程序
算法·数学建模·无人机·五一杯
数模竞赛Paid answer2 天前
2025年五一杯数学建模A题支路车流量推测问题求解全过程论文及程序
数学建模·数据分析·五一杯
Tasiorh2 天前
数学建模预测模型汇总
数学建模
数模竞赛Paid answer2 天前
2025年深圳杯数学建模B题LED显示屏颜色转换设计与校正解题全过程文档及程序
数学建模·数据分析·深圳杯
Tasiorh3 天前
《SVM支持向量机》在数学建模中实际运用
算法·机器学习·支持向量机·数学建模·svm
算法黑哥3 天前
2026数学建模Latex快速全局精讲
数学建模
维度攻城狮4 天前
基于状态空间方程的倒立摆控制方法详解——从数学建模到Python仿真实现
python·数学建模·倒立摆·状态空间