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

news2024/11/27 23:33:08

问题背景

情人节来临之际,广大直男(女)同胞在给异性朋友选购礼物时会遇到难题——什么才是礼物好坏最重要的标准?基于层次分析法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.coloradmin.cn/o/952361.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Vector<T> 动态数组(模板语法)

C数据结构与算法 目录 本文前驱课程 1 C自学精简教程 目录(必读) 2 动态数组 Vector&#xff08;难度1&#xff09; 其中&#xff0c;2 是 1 中的一个作业。2 中详细讲解了动态数组实现的基本原理。 本文目标 1 学会写基本的C类模板语法&#xff1b; 2 为以后熟练使用 S…

java.lang.classnotfoundexception: com.android.tools.lint.client.api.vendor

Unity Android studio打包报错修复 解决方式 java.lang.classnotfoundexception: com.android.tools.lint.client.api.vendor 解决方式 在 launcherTemplate 目录下找到 Android/lintOptions 选项 加上 checkReleaseBuilds false lintOptions { abortOnError false checkRelea…

以GitFlow分支模型为基准的Git版本分支管理流程

以GitFlow分支模型为基准的Git版本分支管理流程 文章目录 以GitFlow分支模型为基准的Git版本分支管理流程GitFlow分支模型中的主要概念GitFlow的分支管理流程图版本号说明借助插件Git Flow Integration Plus实现分支模型管理其他模型TBD模型阿里AoneFlow模型 GitFlow分支模型中…

设计模式的使用——建造者模式+适配器模式

项目代码地址 一、需求介绍 现公司数据库有一张表中的数据&#xff0c;需要通过外部接口将数据推送到别人的系统中。现有的问题是&#xff1a; 数据字段太多&#xff0c;而且双方系统实体字段不一致&#xff0c;每次都要通过get、set方法去对数据取值然后重新赋值。如果后期需…

使用php实现微信登录其实并不难,可以简单地分为三步进行

使用php实现微信登录其实并不难&#xff0c;可以简单地分为三步进行。 第一步&#xff1a;用户同意授权&#xff0c;获取code //微信登录public function wxlogin(){$appid "";$secret "";$str"http://***.***.com/getToken";$redirect_uriu…

家政电子邮件营销怎么做?邮件营销的方案?

家政电子邮件营销的作用&#xff1f;企业如何利用营销邮件拓客&#xff1f; 随着科技的不断发展&#xff0c;家政服务行业也逐渐融入了电子邮件营销的方式&#xff0c;这为家政企业提供了与客户更紧密互动的机会。在本文中&#xff0c;我们将探讨家政电子邮件营销的几个关键步…

OLED透明屏显示技术:未来显示科技的领航者

OLED透明屏显示技术是一种创新性的显示技术&#xff0c;它的特殊性质使其成为未来显示科技的领航者。 OLED透明屏具有高对比度、快速响应时间、广视角和低功耗等优势&#xff0c;同时&#xff0c;其透明度、柔性和薄型设计使其成为创新设计的理想选择。 本文将深入探讨OLED透…

从零做软件开发项目系列之九——项目结项

前言 一个项目&#xff0c;经过前期的需求调研分析&#xff0c;软件设计&#xff0c;程序开发&#xff0c;软件测试、系统部署、试运行系统调试等过程&#xff0c;最后到了项目的验收阶段&#xff0c;也就是项目生命周期的最后一个阶段&#xff0c;即项目结项&#xff0c;它涉…

什么是浏览器缓存(browser caching)?如何使用HTTP头来控制缓存?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 浏览器缓存和HTTP头控制缓存⭐ HTTP头控制缓存1. Cache-Control2. Expires3. Last-Modified 和 If-Modified-Since4. ETag 和 If-None-Match ⭐ 缓存策略⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 记得点击…

什么是同源策略(same-origin policy)?它对AJAX有什么影响?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 同源策略&#xff08;Same-Origin Policy&#xff09;与 AJAX 影响⭐ 同源策略的限制⭐ AJAX 请求受同源策略影响⭐ 跨域资源共享&#xff08;CORS&#xff09;⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 记…

rrpc:实现熔断与限流

一、服务端的自我保护&#xff08;实现限流&#xff09; 为什么需要限流器&#xff1f; 我们先看服务端&#xff0c;举个例子&#xff0c;假如我们要发布一个 Rrpc 服务&#xff0c;作为服务端接收调用端发送过来的请求&#xff0c;这时服务端的某个节点负载压力过高了&#x…

ARM DIY(五)摄像头调试

前言 今天&#xff0c;就着摄像头的调试&#xff0c;从嵌入式工程师的角度&#xff0c;介绍如何从无到有&#xff0c;一步一步地调出一款设备。 摄像头型号&#xff1a;OV2640 开发步骤 分为 2 个阶段 5 个步骤 阶段一&#xff1a; 设备树、驱动、硬件 阶段二&#xff1a; 应…

多线程使用HashMap,HashMap和HashTable和ConcurrentHashMap区别(面试题常考),硬盘IO,顺便回顾volatile

一、回顾&#x1f49b; 谈谈volatile关键字用法 volatile能够保证内存可见性&#xff0c;会强制从主内存中读取数据&#xff0c;此时如果其他线程修改被volatile修饰的变量&#xff0c;可以第一时间读取到最新的值。 二、&#x1f499; HashMap线程不安全没有锁,HashTable线程…

二分搜索树(Java 实例代码)

目录 二分搜索树 一、概念及其介绍 二、适用说明 三、二分查找法过程图示 四、Java 实例代码 src/runoob/binary/BinarySearch.java 文件代码&#xff1a; 二分搜索树 一、概念及其介绍 二分搜索树&#xff08;英语&#xff1a;Binary Search Tree&#xff09;&#xff…

20.液体加载特效

效果 源码 <!doctype html> <html> <head><meta charset="utf-8"><title>Milk | Liquid Loader Animation</title><link rel="stylesheet" href="style.css"> </head> <body><div cl…

【Flutter】Flutter 使用 Equatable 简化对象比较

【Flutter】Flutter 使用 Equatable 简化对象比较 文章目录 一、前言二、Equatable 简介三、为什么需要 Equatable&#xff1f;四、如何使用 Equatable五、Equatable 的其他特性六、完整的业务代码示例七、总结 一、前言 在 Flutter 开发中&#xff0c;我们经常需要比较对象的…

Python基础以及代码

Python基础以及代码 1.第一个代码如下&#xff1a; # 项目&#xff1a;第一个项目 # 作者&#xff1a;Adair # 开放时间&#xff1a; 2023/8/15 21:52print("Hello,world!!")如图所示&#xff1a; 2.数字的代码如下&#xff1a; # 项目&#xff1a;演示第一个项…

什么是Web组件(Web Components)?它们有哪些主要特点?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ Web 组件&#xff08;Web Components&#xff09;⭐ Web 组件的主要特点1. 自定义元素&#xff08;Custom Elements&#xff09;2. Shadow DOM3. HTML 模板4. 封装性和重用性5. 生态系统6. 跨框架兼容性 ⭐ 写在最后 ⭐ 专栏简介 前端入门…

新能源技术是实现碳达峰碳中和的必然路径

在绿色经济发展的时代背景之下&#xff0c;光伏屋顶瓦顺势而生。集发电、环保功能于一体的光伏屋顶瓦&#xff0c;让每一栋建筑都能成为一座绿色发电站&#xff0c;实现建筑用电自给&#xff0c;有效降低建筑能耗&#xff0c;极大的推动生态建筑和生态城市的发展。 太阳能光伏瓦…

win10/11电脑中病毒后programdata文件夹不显示,其他文件夹不显示问题,文件夹存在不显示问题解决

首先出现这个问题确保是打开了显示隐藏文件夹 发现问题还是没有解决继续往下看 就是上边这个文件夹&#xff0c;我解决之前忘记截图了&#xff0c;这是解决后的图 这个文件夹是系统应用程序数据缓存文件夹&#xff0c;很重要 好多病毒就是优先隐藏此文件夹来监视系统数据&…