评价模型:层次分析法

2023-09-14 16:58:05

写在前面:
博主本人大学期间参加数学建模竞赛十多余次,获奖等级均在二等奖以上。为了让更多学生在数学建模这条路上少走弯路,故将数学建模常用数学模型算法汇聚于此专栏,希望能够对要参加数学建模比赛的同学们有所帮助。


1. 模型建立

1.1 建立层次结构模型

  在深入分析实际问题的基础上,将有关的各个因素按照不同属性自上而下地分解成若干层次,同一层的诸因素从属于上一层的因素或对上层因素有影响,同时又支配下一层的因素或受到下层因素的作用。最上层为目标层,通常只有1个因素,最下层通常为方案或对象层,中间可以有一个或几个层次,通常为准则或指标层,当准则过多时(一般为9个时)应进一步分解出子准则层。
  利用层次分析法,对大学生毕业后的选择进行排序:
层次结构图

1.2 构造判断矩阵

  层次结构反映了因素之间的关系,但准则层中的各准则在目标衡量中所占的比重 并不一定相同。设 x i x_i xi y i y_i yi z z z的影响之比为 a i j a_{ij} aij,则 x i x_i xi y i y_i yi z z z的影响之比 a j i = 1 / a i j a_{ji}=1/a_{ij} aji=1/aij
若矩阵 A = ( a i j ) m × n A=\left(a_{i j}\right)_{m\times n} A=(aij)m×n满足
( 1 )   a i j > 0 , ( 2 )   a j i = 1 a i j (1)\ a_{i j}>0, \quad (2)\ a_{j i}=\frac{1}{a_{i j}} (1) aij>0,(2) aji=aij1
则称之为正互反矩阵
若矩阵A还满足
a i j a j k = a i k , ∀ i , j , k = 1 , 2 , ⋯   , n a_{i j} a_{j k}=a_{i k}, \forall i, j, k=1,2, \cdots, n aijajk=aik,i,j,k=1,2,,n
则称之为一致矩阵。
n阶正互反矩阵A为一致矩阵当且仅当其最大特征根 λ max ⁡ = n \lambda_{\max }=n λmax=n ,且当正互反矩阵A非一致时,必有 λ max ⁡ > n \lambda_{\max }>n λmax>n
关于如何确定 a i j a_{ij} aij的值,建议引用数字 1-9 及其倒数作为标度。下表列出了 1-9 标度的含义。
在这里插入图片描述
现构造准则层的判断矩阵如下:

表 2 准则层的判断矩阵
AB1B2B3B4B5
B1121/215
B21/211/41/22
B324123
B4121/214
B51/51/21/31/41

接着构造方案层的判断矩阵如下:

表 3 方案层的判断矩阵

在这里插入图片描述

1.3 判断矩阵的一致性检验

对判断矩阵的一致性检验的步骤如下:
(1)计算一致性指标CI。
C I = λ max ⁡ − n n − 1 C I=\frac{\lambda_{\max }-n}{n-1} CI=n1λmaxn
(2) 查找相应的平均随机一致性指标 RI,对于 n = 1 , 2 , ⋯   , 9 n=1,2, \cdots, 9 n=1,2,,9,对应的RI值如下
在这里插入图片描述
(3) 计算一致性比例CR。
C R = C I R I C R=\frac{C I}{R I} CR=RICI
当CR < 0.10 时,认为判断矩阵的一致性是可以接受的,否则应对判断矩阵作适当修正。

1.4 层次总排序及一致性检验

  首先确定准则层对于目标层的权向量 ω 0 \omega_{0} ω0,由于目标层的数量是一个,所以准则层对于目标层的权向量也是一个。先找到准则层的判断矩阵的最大特征值对应的特征向量,然后将此特征向量标准化,使其中的值分布在0和1之间,得到的结果就是准则层对于目标层的权向量;然后确定方案层对于准则层的权向量 ω 1 \omega_{1} ω1,由于准则层有5个指标,所以方案层对于准则层的权向量也是5个,使用同样的方法即可确定方案层对于准则层的5个权向量 ω 11 , ω 12 , ω 13 , ω 14 , ω 15 \omega_{11}, \omega_{12}, \omega_{13}, \omega_{14}, \omega_{15} ω11,ω12,ω13,ω14,ω15,即 ω 1 = [ ω 11 , ω 12 , ω 13 , ω 14 , ω 15 ] \omega_{1}=[\omega_{11}, \omega_{12}, \omega_{13}, \omega_{14}, \omega_{15}] ω1=[ω11,ω12,ω13,ω14,ω15];最后使用方案层对于准则层的权向量 与准则层对于目标层的权向量 加权平均,即可得到方案层4个方案的得分。
  对层次总排序也需作一致性检验,总排序随机一致性比例为
C R = ∑ j = 1 m C I ( j ) ω 0 ( j ) ∑ j = 1 m R I ( j ) ω 0 ( j ) , j = 1 , ⋯ m C R=\frac{\sum_{j=1}^{m} C I(j) \omega_{0}(j)}{\sum_{j=1}^{m} R I(j) \omega_{0}(j)}, j=1, \cdots m CR=j=1mRI(j)ω0(j)j=1mCI(j)ω0(j),j=1,m
  其中m为准则层的个数。

2. 模型求解

利用Matlab编程求解得到准则层对于目标层的权向量 ω 0 \omega_{0} ω0

0.2320,0.1094,0.3721,0.2189,0.0675

方案层对于准则层的权向量 ω 1 \omega_{1} ω1

w1 = 4×5

0.4379    0.2437    0.3890    0.4385    0.3452

0.2437    0.2190    0.3609    0.1096    0.1850

0.0994    0.4379    0.1323    0.2652    0.0997

0.2190    0.0994    0.1177    0.1866    0.3701

准则层各指标的一致性检验结果为
cr1 = 1×5

0.0076    0.0076    0.0727    0.0225    0.0038

均小于0.1,认为判断矩阵的一致性是可以接受的。
  层次总排序得分为0.3923,0.2513,0.1850,0.1850,总排序一致性检验结果为0.0349<0.1,认为层次总排序结果具有较满意的一致性并接受该分析结果。
  Matlab程序如下:

clc,clear 
fid=fopen('ahp.txt','r'); 
n1=5;n2=4; 
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
更多推荐

Java基于SpringBoot的高校招生管理系统,附源码,教程

博主介绍:✌程序员徐师兄、7年大厂程序员经历。全网粉丝30W+,Csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌文章目录简介系统设计思路1数据库设计2系统整体设计2.1系统设计思想2.2系统流程图系统详细设计1系统功能模块2.管理员功能模块3学生功能模块六源码咨询

钉钉旧版服务端SDK支持异步方法的升级改造

最近项目中需要对接钉钉,有些钉钉API的访问需要使用旧版服务端SDK才能搞定,但是这个SDK使用的还是.NETFramework2.0框架,不能跨平台部署,也不支持async\await的异步操作方法,Nuget上也有其它用户改造的.NETCore版本,但是都不支持异步方法,于是就想自己改造一下,经过若干小时的改造,最

Stable Diffusion 系统教程 | 强大的ControlNet 控制网

2023年的2月13日,一款名叫ControlNet的插件横空出世,AI绘画变得更加可控ControlNet直译过来很简单,就叫做控制网,开发者是一名华裔,毕业于苏州大学,目前在斯坦福做读博士一年级,大佬大佬!在controlNet之前,基于扩散模型的绘画是极为难控制的,平时自嗨画画其实没有一点问题,随机就随机一点,但

Java 中的四种引用方式

文章目录Java中的四种引用方式1、强引用(StrongReference)(1)弱化方式1(2)弱化方式22、软引用(SoftReference)3、弱引用(WeakReference)4、虚引用(PhantomReference)Java中的四种引用方式1、强引用(StrongReference)强引用是最普遍的引

【Python】Python 模式匹配与正则表达式

Python模式匹配与正则表达式1.模式匹配与正则表达式你可能熟悉文本查找,即按下Ctrl-F,输入你要查找的词。“正则表达式”更进一步,它们让你指定要查找的“模式”。你也许不知道一家公司的准确电话号码,但如果你住在美国或加拿大,你就知道它有3位数字,然后是一个短横线,然后是4位数字(有时候以3位区号开始)。因此作为一

Android SurfaceFlinger导读(02)MessageQueue

该系列文章总纲链接:AndroidGUI系统之SurfaceFlinger系列文章目录说明:关于导读:导读部分主要是方便初学者理解SurfaceFlinger代码中的机制,为后面分析代码打下一个更好的基础,这样就可以把更多的精力放在surfaceFlinger的业务逻辑分析上。关于代码分支:以下代码分析均在androi

单元测试框架-pytest

单元测试框架-pytest官网常用插件pytest-html:生成html报告pytest-xdist:实现并发测试pytest-ordering:实现测试用例顺序设置pytest-rerunfailures:测试用例失败重试allure-pytest:生成测试报告引入依赖在项目根目录下创建:requirements.

RK3568开发笔记(七):在宿主机ubuntu上搭建Qt交叉编译开发环境,编译一个Demo,目标板运行Demo测试

若该文为原创文章,转载请注明原文出处本文章博客地址:https://hpzwl.blog.csdn.net/article/details/132733901红胖子网络科技博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬结合等等)持续更新中…瑞芯微开

Docker和debezium是什么关系,如何部署?

目录一、什么是Docker二、什么是debezium一、什么是DockerDocker是一种开源的容器化平台,用于构建、部署和运行应用程序。它通过将应用程序及其依赖项打包到一个称为容器的独立单元中,使应用程序能够在不同的环境中以一致的方式运行。以下是Docker的一些核心概念和特性:容器:Docker使用容器来封装应用

RK3568开发笔记(十):开发板buildroot固件移植开发的应用Demo,启动全屏显示

若该文为原创文章,转载请注明原文出处本文章博客地址:https://hpzwl.blog.csdn.net/article/details/133021990红胖子网络科技博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬结合等等)持续更新中…瑞芯微开

AI实战营第二期 第六节 《MMDetection代码课》——笔记7

文章目录什么是MMDetection?环境检测和安装1数据集准备和可视化2自定义配置文件3训练前可视化验证4模型训练5模型测试和推理6可视化分析MMYOLO环境和依赖安装特征图可视化1.可视化backbone输出的3个通道2.可视化neck输出的3个通道Grad-BasedCAM可视化检测新趋势总结什么是MMDetec

热文推荐