• 五、数学建模之层次分析法


    1.概念
    2.例题

    一、概念

    1.提出

      层次分析法(Analytic Hierarchy Process,AHP)是一种多标准决策分析方法,用于帮助人们在面对复杂的决策问题时进行定量和定性的比较和评估。它最初由美国运筹学家和管理学家托马斯·萨蒙(Thomas L. Saaty)于20世纪70年代提出,并在后来得到广泛应用。层次分析法项目选择、供应链管理、风险评估、资源分配等各种决策问题中都有广泛的应用

    2.步骤

      层次分析法的主要思想是将一个复杂的决策问题分解成多个层次,从总体目标到具体的决策方案,然后通过两两比较不同层次的元素,以确定它们相对于彼此的重要性权重。这些比较通常通过专家判断或调查问卷来完成,然后使用数学方法来计算出最终的权重。

    层次分析法的基本步骤

    (1)建立层次结构:首先,明确定义决策问题,然后构建一个层次结构,包括目标、准则(criteria)和备选方案(alternatives)等不同层次。

    (2)两两比较:专家或决策者需要对每个层次内的元素进行两两比较,以确定它们之间的相对重要性。这些比较通常使用一对一的比较矩阵来表示,其中数值表示相对重要性,例如1代表相等重要性,3代表一个元素比另一个元素重要3倍,以此类推。

    (3)构建权重矩阵:基于两两比较的数据,可以构建权重矩阵,用于计算每个元素相对于其他元素的权重。

    (4)一致性检验:进行一致性检验,以确保专家的两两比较是一致的。如果比较不一致,需要对比较矩阵进行调整。

    (5)计算权重:使用一致性检验通过的权重矩阵来计算每个元素的权重。

    (6)**综合评估:**将各个层次的权重综合起来,以得出最终的评估结果,通常是在备选方案层次上。

    (7)敏感性分析:进行敏感性分析,评估权重的变化对最终结果的影响,以确定决策的稳定性。

    二、例题

    例 1 假期旅游有 P1、 P2 、 P3 3 个旅游胜地供你选择,试确定一个最佳地点。

    根据诸如景色、费用、居住、饮食和旅途条件等一些准则去反复比较 3 个侯选地点。可以建立如图 1 的层次结构模型。

    在这里插入图片描述

    例 2 挑选合适的工作。经双方恳谈,已有三个单位表示愿意录用某毕业生。
    根据已有信息建立了一个层次结构模型,如图 2 所示。

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    解一 Matlab 程序如下

    
    clc,clear 
    fid=fopen('txt3.txt','r'); 
    n1=6;n2=3; 
    a=[]; 
    for i=1:n1 
     tmp=str2num(fgetl(fid)); 
     a=[a;tmp]; %读准则层判断矩阵
    end 
    for i=1:n1 
     str1=char(['b',int2str(i),'=[];']); 
     str2=char(['b',int2str(i),'=[b',int2str(i),';tmp];']); 
     eval(str1); 
     for j=1:n2 
     tmp=str2num(fgetl(fid)); 
     eval(str2); %读方案层的判断矩阵
     end 
    end 
    ri=[0,0,0.58,0.90,1.12,1.24,1.32,1.41,1.45]; %一致性指标
    [x,y]=eig(a); 
    lamda=max(diag(y)); 
    num=find(diag(y)==lamda); 
    w0=x(:,num)/sum(x(:,num)); 
    cr0=(lamda-n1)/(n1-1)/ri(n1) 
    for i=1:n1 
     [x,y]=eig(eval(char(['b',int2str(i)]))); 
     lamda=max(diag(y)); 
     num=find(diag(y)==lamda); 
     w1(:,i)=x(:,num)/sum(x(:,num)); 
     cr1(i)=(lamda-n2)/(n2-1)/ri(n2); 
    end 
    cr1, ts=w1*w0, cr=cr1*w0
    
    纯文本文件txt3.txt中的数据格式如下:
    1 1 1 4 1 1/2 
    1 1 2 4 1 1/2 
    1 1/2 1 5 3 1/2 
    1/4 1/4 1/5 1 1/3 1/3 
    1 1 1/3 3 1 1 
    2 2 2 3 3 1 
    1 1/4 1/2 
    4 1 3 
    2 1/3 1 
    1 1/4 1/5 
    4 1 1/2 
    5 2 1 
    1 3 1/3 
    1/3 1 1/7 
    3 7 1 
    1 1/3 5 
    3 1 7 
    1/5 1/7 1 
    1 1 7 
    1 1 7 
    1/7 1/7 1 
    1 7 9 
    1/7 1 1 
    1/9 1 1 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58

    解法二 python

    import pandas as pd
    df = pd.DataFrame({'A': [ 1,1,1,4,1,1/2 ], 
    'B': [1,1,2,4,1,1/2],
     'C': [1,1/2,1,5,3,1/2],
    'D': [1/4,1/4,1/5,1,1/3,1/3],
    'E': [1,1,1/3,3,1,1],
    'F':[2,2,2,3,3,1 ],'})
    print(df.corr(method='pearson'))
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
  • 相关阅读:
    20个实用的 TypeScript 单行代码汇总
    Linux界的老古董
    AE duik插件运用-人物行走动画
    本地搭建wamp服务器并内网穿透实现无公网IP远程访问
    用于物体识别和跟踪的下游任务自监督学习-2-(计算机视觉中的距离度量+损失函数)
    vue手动拖入和导入excel模版
    DockerCompose部署es和kibana
    【电力系统】含电热联合系统的微电网运行优化附matlab代码和复现论文
    【Node.js】02 —— Path模块全解析
    基于JAVA黑白图片和上色处理系统(Springboot框架+AI人工智能) 开题报告
  • 原文地址:https://blog.csdn.net/qq_55433305/article/details/132940663