MATLAB实现AHP层次分析法——以情人节选取礼物为例

问题背景

情人节来临之际,广大直男(女)同胞在给异性朋友选购礼物时会遇到难题——什么才是礼物好坏最重要的标准?基于层次分析法AHP进行计算,得出最高权重的指标,给出各位朋友选购礼物的一种思路,指导大家选到更为贴切的礼物。

使用模型:

AHP层次分析法

反思与总结

  1. AHP算法的主观性还是很强,虽然较直男的主观臆断来说相对好些,但在构造判断矩阵时的主观臆断很难规避。
  2. 另外,对于性别、职业等问题,AHP的局限性更加明显。
  3. 解决方法,就是在大量的调查数据中取平均,构造尽可能客观的判断矩阵

目录

一.指标确定(建立准则层)

二.权值确定:

三.举例验证(建立方案层) 

四.AHP的理论知识

五.MATLAB代码实现


一.指标确定(建立准则层)

(1)问题分析

学生党在给自己的couple挑选礼物时,需要考虑哪些主要方面?根据知乎、b站、抖音等自媒体平台和知网上面的相关文献,得出以下几个比较主要的考虑指标:

  1. 实用性
  2. 纪念价值(心意):
  3. 价位
  4. 外观
  5. 主权(“有个人身份的象征标志:如戒指上面刻字”):
  6. 他(她)的喜好

        …………等

为了便于统计分析,选取其中“心意、价位、实用性、喜好”四项作为本次分析的指标。

接下来我们将计算各种指标的权值,具体有如下三种方式:

  1. 笔者角度:作为0.5倍的直男,对指标进行打分
  2. 统计分析:分别统计100+个男生、女生对权重的打分,取平均值
  3. 进行层次分析法思想:实现分而治之,对各种指标两两比较,理性计算权值

如上三种统计方式中:

  1. 对于男性,按照0.1、0.1,0.8的权重再取各自的加权,计算最终指标的权重。
  2. 对于女性,由于笔者是男性,出于减少主观性的角度考虑,第一项和第三项均无法计算,直接按照第二项——问卷取平均分即可。

(2)对于男性:

1.笔者自己赋予的权重

根据笔者的直男思想,赋予如下表中的权值:

2.统计分析13位男生:

由于调查方式有限,本次调查仅获取到13位男生的想法,为了保证结果的严谨性,首先对异常值进行剔除,最后有11名男生的数据认为真实有效,并使用算术平均计算各项的均分,结果经可视化处理后如下:

3.层次分析法思想:

  • 原理:

如果一次性考虑全部四个指标,往往会考虑不周;如果我们采取分而治之的思想,两两比较,最终根据结果推算权重,相比之下会周到很多。

  • 局限性:

出于笔者自身角度考虑,故赋予权值时主观性仍然很强。

(优化方法:调查问卷取平均,不过该方法比较专业化,面向大众调查时统计数据由一定的难度)。

4.具体实现步骤:

  • 首先,给出两两比较的重要程度表:

  • 进行判断:根据组合数原理C(4,2),一共需要比较6次。

       如下图:黄色越深代表越重要,蓝色越深代表越不重要

上图得到的结果,即为层次分析法中的判断矩阵。

  • 判断矩阵的一致性检验

在层次分析法的判断矩阵中,可能会出现这样的问题:不一致现象。

我们做出如下假设:A代表心意,B代表价位,C代表实用性。

在矩阵中的(2,1)号元素,我们发现,A之于B的重要程度为5——即心意远大于价位这件事是正确的。假设此时(3,1)号元素的值也为1,则有A=C成立——即心意和实用性一样重要。但当我们观察(2,3)号元素,会发现:实用性之于价位的重要程度为2,与心意之于价位的重要程度是不相同的,我们把这样的矛盾称为不一致现象。

在层次分析法中有如下的定义,若判断矩阵为完全一致矩阵,则必有(m,n)的元素与(n,k)的元素相乘的结果与(m,k)中的元素值相等。

且很容易得出结论:一致矩阵的行和列之间是成倍数关系的。

在层次分析法中,的要求各指标形成的判断矩阵必须一致,才可以进一步计算各指标的权值。然而,结合实际问题与主观因素的影响,构造绝对的一致性矩阵往往是不现实的。

因此我们采用一致性检验。所谓一致性检验,就是检查真实构造出的判断矩阵和一致性矩阵是否有较大差距。原理大致如下,这里不予证明。

使用MATLAB计算本文中判断矩阵的最大特征值,结果为4.1580,代码段在附录之中。

接下来开始一致性检验,步骤不再赘述,大致如下:

经计算,CR的值为0.5918,因为CR>0.1,所以上述判断矩阵未经过一致性检验,需要对判断矩阵进行修正!上述情况也一定程度体现出了AHP方法的局限性。

后经过6次修改,得到崭新的判断矩阵,如下图。

上述判断矩阵的一致性比例是0.0598<0.1,故我们可以认为其满足一致性检验,且上述矩阵为真正使用的矩阵。

  • 计算各项指标的权值

在满足一致性检验之后,即可对判断矩阵进行加权的计算。在计算加权时,我们有三种计算方法,分别是算术平均法、几何平均法以及特征值法,为了保证结果的严谨性,此处的三种计算方式将全部使用。此外,无论哪种计算权重的方法,在计算前先要对判断矩阵进行归一化处理。

经MATLAB计算,归一化处理的矩阵为上图。

接下来分别使用三种方式计算4项指标各自的权重:

算术平均法:

根据MATLAB软件,计算得权重为以下值:

指标

权值

心意

0.4091

价位

0.0825

实用性

0.1585

喜好

0.3499

几何平均法:

根据MATLAB软件,计算得权重为以下值:

指标

权值

心意

0.4094

价位

0.0827

实用性

0.1581

喜好

0.3498

特征值法:

根据MATLAB软件,计算得权重为以下值:

指标

权值

心意

0.4098

价位

0.0824

实用性

0.1579

喜好

0.3499

综上所述,三种方式求得的指标权值如下表所示:

指标

算术平均法

几何平均法

特征值法

心意

0.4091

0.4094

0.4098

价位

0.0825

0.0827

0.0824

实用性

0.1585

0.1581

0.1579

喜好

0.3499

0.3498

0.3499

从上表可以看出,三种方法求得的权值近乎相同,这与一致性指标较小——即矩阵一致性较强有关。这里我们采用进一步的算术平均法,为三种方式赋予相同的权重,计算最后的指标权重,如下图:

指标

AHP法权值

心意

0.4094

价位

0.0825

实用性

0.1582

喜好

0.3499

总和

1.0000

上表即为层次分析法APH所求得的指标权值。

(3)对于女生

由于笔者是男生,所以无法通过方法一及方法三计算权值,只能通过搜集问卷来统计分析。

问卷中调查了120位给出的结果,在去除异常值后,得到如下的权值分布(此处的饼图按照整数制作,具体数值在之后会给出):

二.权值确定:

对于男生,三种方式的计算结果分别如下:

指标

直男主观臆断

调查统计

层次分析法AHP

心意

0.5

0.38

0.4094

价位

0.1

0.26

0.0825

实用性

0.15

0.13

0.1582

喜好

0.25

0.23

0.3499

权值

0.1

0.1

0.8

则最终得到的男生选礼物时的权重为:

指标

最终权值

心意

0.4035

价位

0.1028

实用性

0.1545

喜好

0.3402

对于女生,直接按照统计结果,即可得出各项指标的权重。

指标

最终权值

心意

0.3208

价位

0.2025

实用性

0.2009

喜好

0.2758

三.举例验证(建立方案层) 

在问卷中,笔者还调查了两性在送另一半礼物时典型的几种选择,归纳整理后,大致如下(各四类):

男生:

  1. 零食
  2. 首饰类
  3. 小玩偶
  4. 护肤(化妆)品

女生:

  1. 自己亲手做的一类物品(画画,蛋糕等)
  2. 衣服
  3. 游戏
  4. 体育用品

1.男生选择礼物的最佳方案

对于男生,我们采用上述四种礼物作为方案层,计算各项指标的得分。

首先,我们使用同样的方式,建立各种物品在4种指标下的权重,并建立判断矩阵,并用MATLAB检验是否满足一致性,代码部分同样在附录之中。

为了节约篇幅,此处直接给出经计算过后的结果:

 


用CR1,CR2,CR3,CR4个变量分别代表四个判断矩阵的一致性指标,计算结果如下:

一致性指标

结果大小

CR1

0.0790

CR2

0.0536

CR3

0.0667

CR4

0.0380

由于4个一致性指标均小于0.1,则可认为上述4个判断矩阵均满足一致性。

接下来计算判断矩阵中的各项权值,计算结果如下表

心意

权值

零食

0.0759

首饰类

0.4428

小玩偶

0.2310

化妆品

0.2503

价位

权值

零食

0.5235

首饰类

0.0959

小玩偶

0.2951

化妆品

0.0856

实用性

权值

零食

0.5478

首饰类

0.1276

小玩偶

0.0751

化妆品

0.2496

喜好

权值

零食

0.1402

首饰类

0.5192

小玩偶

0.0810

化妆品

0.2596

计算完权值后,接下来将计算各个选择(方案)的得分,对应得分与权值相乘后再*100后得到最终得分:

如下表:

指标

权值

零食

首饰类

小玩偶

化妆品

心意

0.4035

0.0759

0.5235

0.5478

0.1402

价位

0.1028

0.4428

0.0959

0.1276

0.5192

实用性

0.1545

0.2310

0.2951

0.0751

0.0810

喜好

0.3402

0.2503

0.0856

0.2496

0.2596

得分

-------

19.698705

17.179195

34.253791

21.393074

根据上表可以得知,从男生送礼物的角度考虑,小玩偶是最合适的选择。

2.女生选择礼物的最佳方案:

由于笔者为男性,此处出于客观性考虑,无法建立判断矩阵,故女生的最佳选择这里不予以计算。

四.AHP的理论知识

1.建立层次结构

在本次模型建立过程中,目标层——即最终解决的问题是:出于自身情况考虑,哪种礼物更适合送给异性?准则层的4项指标,则是出于送礼物时需要考虑的方向。目标层的4个元素,是在统计分析后抽取出的典例,用于计算得分后给出最佳方案。故对于男生,建立的层次结构如下图所示:

 

对于女生,出于客观性考虑,本次不建立层次结构,只给出大众化的一个考虑指标权重。

2.构造判断矩阵

对于同一层次的各元素关于上一层次中某一准则的重要性进行两两比较,构造两两比较矩阵(判断矩阵)。

本文之前已经给出了准则层与方案层各个元素的判断矩阵,这里不再赘述。

3.计算指标权值

构造出一致性判断矩阵后,对结果进行计算,计算方式为方案层判断矩阵得分乘以准则层判断矩阵权值,此处同样省略计算步骤。

4.计算最终得分(得出目标层)

根据计算结果,选择得分最高的一项作为目标层的结果。本文中男生选礼物的最佳方案为小玩偶。

五.MATLAB代码实现

直接整合到一起了,大家根据注释自行阅读~

%%1.首先计算最大特征值  X= [1,5,3,0.333;0.2,1,0.5,0.2;0.333,2,1,0.333;3,5,3,1];  
[V,D] = eig(X);   
% 求出A的特征值矩阵D和特征向量V  
max_eig=max(max(D));  
%获得最大特征值max_eig(拉姆达):4.1580  
%%2.计算相关变量,并完成一致性检验  
CI = (max_eig - 4) / (4-1);  
%%计算一致性指标CI(此处n的值为4)  
RI=0.089;  
%查表得到随机平均一致性指标,本次总共有4个决策元素(即挑选礼物的指标)  
%查表得知n=4时,RI=0.089  
CR=CI/RI;  
%计算一致性指标  
%CR=0.5918,第一次写出的判断矩阵未通过一致性检验,故需要对判断矩阵进行修正。  
Y=[1    5   3   1;  
0.2 1   0.5 0.25;  
0.3333  2   1   0.5;  
1   4   2   1;  
];  
[VN,DN] = eig(Y);   
max_eigN=max(max(DN));  
CIN = (max_eigN - 4) / (4-1);  
RIN=0.089;  
CRN=CIN/RIN;  
%CR1的值为0.0580,符合一致性检验  
%%3.对矩阵进行归一化处理(每一个元素除以其所在列的和)  
Sum_Y = sum(Y);  
[~,n] = size(Y);    
SUM_Y = repmat(Sum_Y,4,1);     
%%定义矩阵Stand_Y,即为最后的归一化处理矩阵。  
Stand_Y = Y ./ SUM_Y;  
%%4.算术平均法计算权重  
disp('算术平均法求权重的结果为:');  
disp(sum(Stand_Y,2)./4);  
%%5.几何平均法计算权重  
Prduct_Y = prod(Y,2);  
Prduct_4_Y = Prduct_Y .^ (1/4);  
disp('几何平均法求权重的结果为:');  
disp(Prduct_4_Y ./ sum(Prduct_4_Y));  
%%6.特征值法求权重:  
[a,b] = eig(Y);  
Max_eigN2 = max(max(b));  
[r,c]=find(b == Max_eigN2 , 1);  
disp('特征值法求权重的结果为:');  
disp( a(:,c) ./ sum(a(:,c)) );  
%%7.对四个方案层的元素分别构造判断矩阵,并计算权值  
%1号矩阵  
X1= [1  0.2 0.3333  0.25;  5  1   2   2;  3  0.5 1   1;  4  0.5 1   1;  
];  
[V1,D1] = eig(X1);   
max_eig1=max(max(D1));  
CI1 = (max_eig1 - 4) / (4-1);  
RI1=0.089;  
CR1=CI1/RI1;  
Sum_X1 = sum(X1);  
[~,n] = size(X1);    
SUM_X1 = repmat(Sum_X1,4,1);     
Stand_X1 = X1 ./ SUM_X1;  
disp('1号矩阵算术平均法求权重的结果为:');  
disp(sum(Stand_X1,2)./4);  
%2号矩阵  X2= [1 5   2   6;  
0.2 1   0.333   1;  
0.5 3   1   4;  
0.1667  1   0.25    1;  
];  
[V2,D2] = eig(X2);   
max_eig2=max(max(D2));  
CI2 = (max_eig2 - 4) / (4-1);  
RI2=0.089;  
CR2=CI2/RI2;  
Sum_X2 = sum(X2);  
[~,n] = size(X2);    
SUM_X2 = repmat(Sum_X2,4,1);     
Stand_X2 = X2 ./ SUM_X2;  
disp('2号矩阵算术平均法求权重的结果为:');  
disp(sum(Stand_X2,2)./4);  
%3号矩阵  X3= [1 5   7   2;  0.2    1   2   0.5;  
0.1429  0.5 1   0.3333;  
0.5 2   3   1;  
];  
[V3,D3] = eig(X3);   
max_eig3=max(max(D3));  
CI3 = (max_eig3 - 4) / (4-1);  
RI3=0.089;  
CR3=CI3/RI3;  
Sum_X3 = sum(X3);  
[~,n] = size(X3);    
SUM_X3 = repmat(Sum_X3,4,1);     
Stand_X3 = X3 ./ SUM_X3;  
disp('3号矩阵用算术平均法求权重的结果为::');  
disp(sum(Stand_X3,2)./4);  
%4号矩阵  
X4=[ 1  0.25    2   0.5;  
4   1   6   2;  
0.5 0.1667  1   0.333;  
2   0.5 3   1;  
];  
[V4,D4] = eig(X4);   
max_eig4=max(max(D4));  
CI4 = (max_eig4 - 4) / (4-1);  
RI4=0.089;  
CR4=CI4/RI4;  
Sum_X4 = sum(X4);  
[~,n] = size(X4);    
SUM_X4 = repmat(Sum_X4,4,1);     
Stand_X4 = X4 ./ SUM_X4;  
disp('4号矩阵用算术平均法求权重的结果为:');  
disp(sum(Stand_X4,2)./4);  

结束语:本贴旨在通过该例说明AHP的思想,在选择礼物时要结合具体情况谨慎考虑,避免雷区~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/90600.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql 间隙锁原理深度详解

目录 一、前言 二、mysql之mvcc 2.1 什么是mvcc 2.2 mvcc组成 2.2.1 Undo log 多版本链 2.2.2 ReadView 2.2.3 快照读与当前读 三、RR级别下的事务问题 3.1 RR隔离级别解决的问题 3.1.1 幻读问题 3.2 幻读效果演示 3.2.1 准备测试表和数据 3.2.2 修改事务级别 3.…

修改linux中tomcat的端口

随便修改一个 以8055为例子 开放8081端口 firewall-cmd --permanent --add-port8081/tcp firewall-cmd --reload firewall-cmd --list-all

java基础-----第三篇

系列文章目录 文章目录 系列文章目录前言一、final二、String、StringBuffer、StringBuilder前言 一、final 最终的 修饰类:表示类不可被继承 修饰方法:表示方法不可被子类覆盖,但是可以重载 修饰变量:表示变量一旦被赋值就不可以更改它的值。 (1)修饰成员变量 如果fina…

CleanMyMac最新版4.14Mac清理软件下载安装使用教程

苹果电脑是很多人喜欢使用的一种电脑&#xff0c;它有着优美的外观&#xff0c;流畅的操作系统&#xff0c;丰富的应用程序和高效的性能。但是&#xff0c;随着时间的推移&#xff0c;苹果电脑也会产生一些不必要的文件和数据&#xff0c;这些文件和数据就是我们常说的垃圾。那…

【MySQL】4、MySQL备份与恢复

备份的主要目的是灾难恢复&#xff0c;备份还可以测试应用、回滚数据修改、查询历史数据、审计等 MySQL日志管理 MySQL 的日志默认保存位置为 /usr/local/mysql/data #配置文件 vim /etc/my.cnf 日志的分类 常见日志有&#xff1a; 错误日志&#xff0c;一般查询日志&…

2023年天府杯——C 题:码头停靠问题

问题背景&#xff1a; 某个港口有多个不同类型的码头&#xff0c;可以停靠不同种类的船只。每 艘船只需要一定的时间来完成装卸货物等任务&#xff0c;并且每个码头有容量 限制和停靠时间限制。港口需要在保证收益的情况下&#xff0c;尽可能地提高 运营效率和降低成本。同…

海关发布限制日本水产品进口,占据我国进口多少?

在福岛发生核电站事故后&#xff0c;我国就已经暂停进口包括福岛、宫城和长野等在内的10个县的所有食品&#xff0c;以及10个县以外的蔬菜等。而在日本宣布排放核污水并且已经实施之后&#xff0c;海关在24日发布全面暂停进口原产地为日本的水产品&#xff08;含食用水生动物&a…

Springboot+mybatis-plus+dynamic-datasource+Druid 多数据源 分布式事务

Springbootmybatis-plusdynamic-datasourceDruid 多数据源事务&#xff0c;分布式事务 文章目录 Springbootmybatis-plusdynamic-datasourceDruid 多数据源事务&#xff0c;分布式事务0.前言1. 基础介绍ConnectionFactoryAbstractRoutingDataSource 动态路由数据源的抽象类 Dyn…

嵌入式学习笔记(7)ARM汇编指令4-多寄存器指令

多寄存器访问指令 ldr/str每周期只能访问4字节内存&#xff0c;如果需要批量读取、写入内存的话太慢&#xff0c;解决方案就是ldm/stm&#xff0c;ldm(load register multiple)&#xff0c;stm(store register multiple) 举例&#xff1a; stmia sp, {r0 - r12} 将r0存入sp指…

Hive原理剖析

一、简介 Hive是建立在Hadoop上的数据仓库框架&#xff0c;提供大数据平台批处理计算能力&#xff0c;能够对结构化/半结构化数据进行批量分析汇总完成数据计算。提供类似SQL的Hive Query Language语言操作结构化数据&#xff0c;其基本原理是将HQL语言自动转换成MapReduce任务…

VBA技术资料MF50:VBA_在Excel中突出显示前3个值

【分享成果&#xff0c;随喜正能量】人受到尊重&#xff0c;不是因为权钱&#xff0c;而是他骨子里透出的&#xff0c;正直与善良。。 我给VBA的定义&#xff1a;VBA是个人小型自动化处理的有效工具。利用好了&#xff0c;可以大大提高自己的工作效率&#xff0c;而且可以提高…

openCV实战-系列教程7:轮廓检测2与模板匹配(轮廓检测/轮廓特征/轮廓近似/轮廓边界矩阵/轮廓边界圆/模版匹配)、原理解析、源码解读

&#x1f9e1;&#x1f49b;&#x1f49a;&#x1f499;&#x1f49c;OpenCV实战系列总目录 打印一个图片可以做出一个函数&#xff1a; def cv_show(img,name):cv2.imshow(name,img)cv2.waitKey()cv2.destroyAllWindows() 1、轮廓特征与近似 1.1 轮廓特征 前面我们计算了…