层次分析法模型(数学建模学习)

2023-11-02

本系列参考清风老师的数学建模课程

层次分析法模型

一、模型介绍

(一)模型引入

对于方案选择类问题,评价类问题采用层次分析法(The ayalytic hierarchy process / AHP)模型进行评分,之后评分高的就是最佳方案。

(二)模型详解

(1)建立层次结构
分析系统中各因素之间的关系,建立系统的递阶层次结构。
该层次结构分为:
1.目标层(Objective)
回答问题:评价目标是什么?
2.准则层(Criterion)
回答问题:评价指标是什么?
3.方案层(Plan)
回答问题:可选方案是什么?
将其绘制成层次清晰的示意图。

(2)构造判断矩阵
针对于准则层构造一个判断矩阵。
若有n个可选方案,则可以构造n个判断矩阵。
参考填表的准则:

标度 含义
1 两个因素相比具有同等重要性
3 一个因素比另一个因素稍微重要
5 一个因素比另一个因素明显重要
7 一个因素比另一个因素强烈重要
9 一个因素比另一个因素极端重要
2、4、6、8 介于奇数之间重要性
倒数 与之对应

填写判断矩阵的数据一定要有材料支撑

(3)一致性检验
原理:检验我们构造的判断矩阵和一致矩阵是否有太大差别(定量角度)。
若正互反矩阵中的元素有性质: a i j × a j k = a i k a_{ij}×a_{jk}=a_{ik} aij×ajk=aik则可以成为一致矩阵。(换句话说就是上下两行必须是成倍数的关系)
但在绝大多数情况下成为严格的一致矩阵不太可能,因此可以规定某个偏离范围,即使偏了一点也行,但不能偏太大,就有了一致性检验。(这块直接跑现成的程序出结果就行了,不介绍计算过程了)
一致性检验的通用步骤为:
1.计算一致性指标CI
C I = λ m a x − n n − 1 CI=\frac {\lambda_{max}-n}{n-1} CI=n1λmaxn
2.查找对应的平均随机一致性指标RI
3.计算一致性比例CR
C R = C I R I CR=\frac {CI}{RI} CR=RICI
4.判断CR是否<0.1,若是则认为一致性可以被接受,否则需要调整判断矩阵。

(4)求指标权重
求解指标权重时需要通过一致性检验,通过后就可以求出了,一共有三种求法。

1.算术平均法求权重
step1:将判断矩阵按照列归一化。
step2:将归一化的各列相加。
step3:将相加后得到的向量中每个元素除以n即可得到权重向量。

2.几何平均法求权重
step1:将判断矩阵元素按照行相乘得到一个新的列向量。
step2:将新的向量的每个分量开n次方。
step3:对该列向量进行归一化即可得到权重向量。

3.特征值法求权重
step1:求出判断矩阵的最大特征值以及其对应的特征向量。
step2:对求出的特征向量进行归一化即可得到权重。

(5)计算得分
每一个方案的任意评价指标最终得分=该评价指标在准则层的权重×方案在方案层的权重。
因此任意一个方案的最终得分=各项评价指标之和。

(三)模型举例

(1)举例
从苏杭、北戴河和桂林三个中选择一个作为旅游目的地。

(2)思路
本题属于方案选择类问题,因此使用层次分析法进行分析,考虑以下重要问题:
1.评价目标(目标层)?选择最佳旅游目的地。
2.评价指标(准则层)?(查阅资料后)景点景色、旅游花费、居住环境、饮食情况、交通便利程度。
3.可选方案(方案层)?苏杭、北戴河、桂林。
由以上思路可以得出下图:

(3)整理
设计数据表格,参考层次分析法的通用表格:

指标权重 方案1 方案2
指标1
指标2
指标3

将以上思路内容填入上述通用表格中:

指标权重 苏杭 北戴河 桂林
景色
花费
居住
饮食
交通

解释:指标权重表示各个指标在准则层所占的权重大小值,而之后则代表该指标在方案层所占的权重大小值,因此若要最终评分,一定是准则层(Criterion)中指标权重×方案层(Plan)中指标权重得到最终得分。

(4)数据
之后就可以填写这张表格了。

step1:填写准则层判断矩阵:

景色 花费 居住 饮食 交通
景色 1 1 2 \frac 12 21 4 3 3
花费 2 1 7 5 5
居住 1 4 \frac 14 41 1 7 \frac 17 71 1 1 2 \frac 12 21 1 3 \frac 13 31
饮食 1 3 \frac 13 31 1 5 \frac 15 51 2 1 1
交通 1 3 \frac 13 31 1 5 \frac 15 51 3 1 1

解释:比如对于第三行第四列的单元格数据可以解释为花费比居住强烈重要。

step2:填写五个方案层判断矩阵:

(景色) 苏杭 北戴河 桂林
苏杭 1 2 5
北戴河 1 2 \frac 12 21 1 2
桂林 1 5 \frac 15 51 1 2 \frac 12 21 1
(花费) 苏杭 北戴河 桂林
苏杭 1 1 3 \frac 13 31 1 8 \frac 18 81
北戴河 3 1 1 3 \frac 13 31
桂林 8 3 1
(居住) 苏杭 北戴河 桂林
苏杭 1 1 3
北戴河 1 1 3
桂林 1 3 \frac 13 31 1 3 \frac 13 31 1
(饮食) 苏杭 北戴河 桂林
苏杭 1 3 4
北戴河 1 3 \frac 13 31 1 1
桂林 1 4 \frac 14 41 1 1
(交通) 苏杭 北戴河 桂林
苏杭 1 1 1 4 \frac 14 41
北戴河 1 1 1 4 \frac 14 41
桂林 4 4 1

step3:填好表格后开始进行一致性检验。

1.检验准则层判断矩阵:

一致性指标CI=
0.0180
一致性比例CR=
0.0161
因为CR<0.10,所以该判断矩阵A的一致性可以接受!

2.检验方案层判断矩阵:

一致性指标CI=0.0028
一致性比例CR=0.0053
因为CR<0.10,所以该判断矩阵A的一致性可以接受!

一致性指标CI=7.7081e-04
一致性比例CR=0.0015
因为CR<0.10,所以该判断矩阵A的一致性可以接受!

一致性指标CI=-4.4409e-16
一致性比例CR=-8.5402e-16
因为CR<0.10,所以该判断矩阵A的一致性可以接受!

一致性指标CI=0.0046
一致性比例CR=0.0088
因为CR<0.10,所以该判断矩阵A的一致性可以接受!

一致性指标CI=0
一致性比例CR=0
因为CR<0.10,所以该判断矩阵A的一致性可以接受!
可以发现之前所有判断矩阵均通过了一致性检验。(若有没通过的判断矩阵需要对其中元素进行修改直到通过检验为止)

step4:计算各项指标对应的权重,有三种计算方法,最好三种方法取平均值,也可只采纳特征值法所算出的数据。(这块直接跑现成的程序出结果就行了,不介绍计算过程了)

填入数据:

指标权重 苏杭 北戴河 桂林
景色 0.2636 0.5954 0.2764 0.1283
花费 0.4758 0.0819 0.2363 0.6817
居住 0.0538 0.4286 0.4286 0.1429
饮食 0.0981 0.6337 0.1919 0.1744
交通 0.1087 0.1667 0.1667 0.6667

(5)结论
计算各个方案的最终得分。(这块Excel拉表出结果)
苏杭:0.299
北戴河:0.245
桂林:0.455

结论:桂林得分最高,因此选择去桂林。

二、模型实现

本模型采用多种软件实现。

(1)层次分析模型示意图
采用Office自带的SmartArt绘图。

(2)判断矩阵一致性检验代码

A=input('判断矩阵:')
clc;
[n,n]=size(A);
[X,Y]=eig(A);
lambda_max=max(Y(:));
CI=(lambda_max-n)/(n-1);
RI=[0 0 0.52 0.89 1.12 1.26 1.36 1.41 1.46 1.49 1.52 1.54 1.56 1.58 1.59];
CR=CI/RI(n);
disp('CI=');disp(CI);
disp('RI=');disp(CR);
if CR<0.1
    disp('可以接受!');
else
    disp('需要修改!');
end

(3)算术平均法求权重代码

A=input('判断矩阵:');
Sum=sum(A);
[n,n]=size(A);
Sum=repmat(Sum,n,1);
clc;
res=A./Sum;
disp('结果1:');
disp(sum(res,2)/n);

(4)几何平均法求权重代码

A=input('判断矩阵:');
Pro=prod(A,2);
Res=Pro.^(1/n);
disp('结果2:');
disp(Res/sum(Res));

(5)特征值法求权重代码

A=input('判断矩阵:');
[X,Y]=eig(A);
lambda_max=max(Y(:));
Y==lambda_max;
[x,y]=find(Y==lambda_max,1);
X(:,y);
disp('结果3:');
disp(X(:,y)./sum(X(:,y)));

(6)为方案评分
此处将数据导入到Excel表中,按F4锁定第一行作为乘数拉表计算。

三、模型应用

(一)题目描述

近年来,电动汽车在世界各国的生产和销售发展势头猛烈。这一方面与各国政府的大力扶持有关系,另一方面也与电动汽车本身的一些特定优势有关,比如充电而非耗油、运行耗能低等。不考虑牌照限制等问题,建立数学模型解决如下问题:

  1. 从用户的角度出发,比较电动汽车和燃油汽车的总体拥有成本。
  2. 一对年龄在 25 岁左右的年轻夫妇,参加工作不久,都在一家杭州软件公司工作,目前家庭年收入 20 万元,没有房产。考虑日常通勤、周末和假期出游等需求,他们准备
    买一辆 15 万元左右的车。帮他们决定该买电动车还是燃油车。

(二)模型实战

第一问是有一个对应的总体拥有成本的公式,通过查阅各大网站或者书籍资料可得到公式中对应的参数值,从而计算出对应的总体拥有成本。(可能会用到Excel)没有模型。

第二问给了一个具体的场景,并且属于评价决策类问题,使用AHP层次分析法再合适不过了。于是按照AHP流程走。

参考一等奖论文思路

(1)建立层次结构(考虑五种准则,在这块可以变)

(2)构造判断矩阵(忽略计算与检验过程)
支撑材料1:
一对年龄在 25 岁左右的年轻夫妇,参加工作不久,都在一家杭州软件公司工作,目前家庭年收入 20 万元,没有房产。考虑日常通勤、周末和假期出游等需求,他们准备买一辆 15 万元左右的车。帮他们决定该买电动车还是燃油车。

总结信息:收入中等,工作频繁,闲暇时间不多。
1、使用成本时第一个要考虑的因素,不能负担不起。
2、通勤时使用车辆的第一理由。
3、很少有假期,因此驾车远游不重要。

目标层-准则层判断矩阵:

准则层-方案层判断矩阵:
支撑材料2:
通过查阅资料可得出年使用成本公式
A A C = P T + C I + M + F i + M V I + V V AAC=PT+CI+M+F_i+MVI+VV AAC=PT+CI+M+Fi+MVI+VV
根据具体情况查阅对应指标的值可得到:

如果有一个年使用成本占总生活支出比例就更加直观了,因此也可以查阅资料求出对应比例。

总结信息:年使用成本上,与燃油车相比,电动车具有明显的令人满意程度。


支撑材料3:
通过查阅资料可以得到通勤主要成本

同时根据常识可知在路上不开车等候更费油。

总结信息:通勤上,与燃油车相比,电动车具有强烈的令人满意程度。



支撑材料4:
与通勤情况类似。满足“短距离低速”特点。


支撑材料5:
电动车长距离开车要充电,然而查阅资料(摆上地图之类的)可知充电桩都在繁华地带,造成充电不方便。

总结信息:可知在燃料费上,与燃油车相比,电动车具有强烈的令人满意程度。



支撑材料6:
通过查阅资料将两种类型的车(一定注意控制变量,比如价格不能相差太远)的性能指标罗列出来逐一对比,可以自己设定一套定量评分规则,进而最终确定性能判断矩阵。

总结信息:在车身性能上,与电动车相比,燃油车具有明显的令人满意程度。



(3)评价方案
逐一填入对应权重:

由此得出最终结论:

1、方案E1权重为0.4155
2、方案E2权重为0.5845
故购买电动车(E2)更合适。

(三)总结思考

1、分析由层次分析法得到各项评价指标权重,并从实际意义进行评价。比如说:通过层次分析法得出的权重值,XXX的权重最大,这也符合XXX的实际功能/实际意义…

2、模型评价:利用层次分析法决定XXX使得评价具有一定的客观性、准确性,避免了过于偏重某个需求而忽略其他的需求。但在给予各个准则相应的权重以及比较XXX的各个指标时不可避免地带有一定的主观性,使得评价结果的客观性及准确性降低。

3、模型贡献:通过层次分析法计算各项指标权重,总结出了XXX控制的重点因素,为XXX提供了明确的数据指导,为XXX指明了未来发展的重点方向与道路。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

层次分析法模型(数学建模学习) 的相关文章

  • 服务器里的文件启动失败404,云表服务器启动失败问题汇总

    这是在安装本地版时经常发生的问题 10个人 就有7个人都会出现这样的问题 出现这样的问题 怎么解决呢 首先 想要连接服务器 必须要开启数据库的服务 其次 服务器其实是 锁 住的 那么你要连接服务器 肯定得有钥匙 这里的钥匙可以看成是授权文件

随机推荐

  • Qt之布局管理——停靠窗口

    QDockWidget类继承与QWidget类 用于停靠窗口的管理 在主窗口中 先设置中心控件 然后实例化QDockWidget对象 通过setFeatures 设置停靠窗口的窗体特性 通过 setAllowedAreas 设置窗体可停靠的
  • 1200*C. Stripe

    题意翻译 给定一整数n 下面有n个数a i 求将该数列分割成两个非空数列且两个数列内数字的和相等的方案数 1 lt n lt 10 5 a i 的绝对值不大于10000 解析 前缀和 include
  • QT 实现16进制与字符串互转

    QT 实现16进制与字符串互转 文章目录 QT 实现16进制与字符串互转 前言 一 字符串QString转换16进制 二 16进制转换为字符串QString 三 正则表达式限制输入16进制 四 文本自动补全空格功能的实现 前言 QT在界面时
  • matlab图像处理——直方图及直方图均衡化

    imhist 对rice png和增强亮度后的 增强对比度后的图进行直方图展示 imhist 对于brightness 和 contrast的不同 clear all brightness I imread rice png J imadd
  • 洛谷Java入门代码之分苹果

    题目描述 八尾勇喜欢吃苹果 她现在有 m m 100 m m le 100 m m 100 个苹果 吃完一个苹果需要花费 t t 100 t t le100 t t 100 分钟 吃完一个后立刻开始吃下一个 现在时间过去了 s s 1000
  • LevelDB简介

    LevelDB简介 综述 leveldb整体架构 提供接口 db h 技术 memtable WAL sstable Manifest cache LRU cache LRU的优缺点 filter levelDB初始化 compaction
  • 专治疑难系列 - 无法激活网络的解决方法

    博客主页 Passerby Wang的博客 CSDN博客 系统运维 云计算 Linux基础领域博主 所属专栏 转治疑难系列 上期文章 无 如觉得博主文章写的不错或对你有所帮助的话 还望大家多多支持呀 关注 点赞 收 藏 评论 目录 一 问题
  • Python将txt文件内容转换成列表

    参考 Python将txt文件内容转换成列表 云 社区 腾讯云 方法一 coding utf 8 f open r ip txt r a list f print a f close 方法二 coding utf 8 f open r ip
  • Sublime Text 3 安装Go语言相关插件gosublime《小白也能学会的教程》

    Sublime Text 3 安装Go语言相关插件gosublime 序言 这篇文章是自己的亲身体会 今天为了安装gosublime可是找了一堆教程 但大部分都无功于返 有些甚至点开后都是直接复制粘贴过来的 一度心灰意冷 就在我快要暴躁的时
  • Java 实现 QQ 登陆

    点击上方蓝色字体 选择 标星公众号 优质文章 第一时间送达 1 前言 个人网站最近增加了评论功能 为了方便用户不用注册就可以评论 对接了 QQ 和微博这 2 大常用软件的一键登录 总的来说其实都挺简单的 可能会有一点小坑 但不算多 完整记录
  • C++ Primer Exercise 5.18

    Understanduing the difference between C and C therefore know the computer language deeper vector
  • MySQL数据库锁的实现原理(面试)

    mysql的锁类型 一般其实就是表锁 行锁和页锁 一般myisam会加表锁 就是myisam引擎下 执行查询的时候 会默认加个表共享锁 也就是表读锁 这个时候别人只能来查 不能写数据的 然后myisam写的时候 也会加个表独占锁 也就是表写
  • 如何查看宝塔面板入口?

    终端输入 bt default
  • 【实例】python中简单分句,通过替代句号 &给句尾(不是句首)添加序号

    gt gt gt fn open E 西方哲学史 txt read gt gt gt fn fn replace t r n gt gt gt s open E 西方哲学史分句 txt w gt gt gt s s write fn 想要给
  • 蓝桥杯2018年第九届真题——乘积尾零

    乘积尾零 一 题目内容 本题为填空题 只需要算出结果后 在代码中使用输出语句将所填结果输出即可 如下的 10 行数据 每行有 10 个整数 请你求出它们的乘积的末尾有多少个零 5650 4542 3554 473 946 4114 3871
  • docker : unable to prepare context: context must be a directory

    1 美图 2 背景 创建了一个dockerfile base lcc lcc negix ll total 8 drwxr xr x 3 lcc staff 96 4 8 08 47 drwxr xr x 4 lcc staff 128 4
  • 介绍两种常见软件开发模式:“敏捷”和“瀑布”

    写在最前面 敏捷开发模式更加适合项目型的系统 瀑布开发模式更适合产品型系统 设计后多次迭代 以上属于个人理解 有不同的见解欢迎大家一起讨论 在软件开发时 经常面对的第一个项目实现决策是 我们应该使用哪种开发方法 这是一个引起很多讨论 和激烈
  • 图解Flink内核源码-尚硅谷大数据培训

    大佬硬核手撕Flink源码 首发内核源码图解 Flink内核源码大汇总 关注公众号 回复 Flink 还能获取全部内核讲解视频以及文档资料 1 Flink任务提交流程 相关文章 重磅 Flink源码解析环境准备及提交流程之环境准备重磅 Fl
  • XAMPP Mysql/MariaDB 忘记密码

    对于本地的本地的phpMyAdmin 忘记登录密码怎么办哪 看看下文 能省去你不少时间和精力 首先进入DOS 开一个cmd 第一步 先停掉MySQL服务 cmd命令行 c gt sc stop mysql XAMPP 手动点击MySQL g
  • 层次分析法模型(数学建模学习)

    本系列参考清风老师的数学建模课程 层次分析法模型 一 模型介绍 一 模型引入 对于方案选择类问题 评价类问题采用层次分析法 The ayalytic hierarchy process AHP 模型进行评分 之后评分高的就是最佳方案 二 模