AHP层次分析法(附matlab程序)
Ⅰ.问题引入
张三决定从三种车型中选购一种,选择标准主要有:价格、耗油量、舒适程度、外表。经过反复思考,构造它们之间的成对比较判断矩阵如下:
三种车型a、b、c关于价格、耗油量、舒适程度、外表的成对比较判断矩阵如下:
问题:
i. 根据上述矩阵可以看出四项指标在张三心中的比重是不同的,请按由重到轻顺序将它们排列;
ii. 哪辆车型最便宜,哪辆车型最省油,哪辆车型最舒适,哪辆车型最漂亮?
iii. 用层次分析法确定张三对这三种车型的喜欢程度。
Ⅱ.问题分析与求解
根据题意,建立模型结构图如下:
根据成对比较判断矩阵,对矩阵具体数值标度作出说明如下:
标度 |
含义 |
1 |
表示两个因素相比,具有相同重要性 |
3 |
表示两个因素相比,一个因素比另一个因素稍微重要 |
5 |
表示两个因素相比,一个因素比另一个因素明显重要 |
7 |
表示两个因素相比,一个因素比另一个因素强烈重要 |
9 |
表示两个因素相比,一个因素比另一个因素极端重要 |
2,4,6,8 |
上述两相邻标度判断的中值 |
倒数 |
因素i与j比较的判断aij,则因素j与i比较的判断aji=1/aij |
符号说明如下:
符号 |
符号说明 |
λmax |
最大特征值 |
n |
成对比矩阵的阶数 |
w1 |
准则层对目标层的特征向量 |
wi |
方案层对目标层的特征向量 |
CI |
一致性指标 |
RI |
随机一致性指标 |
CR |
一致性比率 |
A |
车型选购 |
B1 |
价格 |
B2 |
耗油量 |
B3 |
舒适程度 |
B4 |
外表 |
数据处理如下:
查询随机一致性指标RI:
阶数 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
RI |
0 |
0 |
0.52 |
0.89 |
1.12 |
1.26 |
1.36 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
1.41 |
1.46 |
1.49 |
1.52 |
1.54 |
1.56 |
1.58 |
1.59 |
对于正互反矩阵A,阶数n=4,可得RI=0.89
计算一致性比率CR:
CR=CI/RI
按照规定,若CR=0,有完全的一致性;若CR接近0(一般以CR≤0.1为参照),有较好的一致性;若CR>0.1,则偏离一致性。
解得:CR=0.0743<0.1,通过一致性检验。同理,分别检验矩阵B1、B2、B3、B4的一致性。
汇总各指标权重如下:
B1 |
B2 |
B3 |
B4 |
|
w1 |
0.5755 |
0.2761 |
0.0965 |
0.0518 |
wi |
0.5390 |
0.1109 |
0.6194 |
0.1932 |
0.2973 |
0.7311 |
0.2842 |
0.7235 |
|
0.1638 |
0.1580 |
0.0964 |
0.0833 |
|
λmax |
3.0092 |
3.1190 |
3.0858 |
3.0649 |
Ⅲ.结果说明
i. 对于问题一,可知准则层对目标层的特征向量w1=[0.5755,0.2761,0.0965,0.0518],因此,四项指标在心中的比重从重到轻顺序为B1>B2>B3>B4,即价格>耗油量>舒适程度>外表。
ii. 对于问题二,方案层对目标层的特征向量
可知各方案在不同指标中的权重
价格由便宜到昂贵:
车型a(0.5390)>车型b(0.2973)>车型c(0.1638)
耗油量由少到多:
车型b(0.7311)>车型c(0.1580)>车型a(0.1109)
舒适程度由舒适到不适:
车型a(0.6194)>车型b(0.2842)>车型c(0.0964)
外表由漂亮到一般:
车型b(0.7235)>车型a(0.1932)>车型c(0.0833)
因此,在价格这一指标中,车型a最便宜;在耗油量这一指标中,车型b最省油;在舒适程度这一指标中,车型a最舒适;在外表这一指标中,车型b最漂亮。
iii. 对于问题三,各方案对目标的组合权重如下:
车型a对目标的组合权重为:
0.5755*0.5390+0.2761*0.1109+0.0965*0.6194+0.0518*0.1932=0.4106
车型b对目标的组合权重为:0.5755*0.2973+0.2761*0.7311+0.0965*0.2842+0.0518*0.7235=0.4379
车型c车型c对目标的组合权重为:
0.5755*0.1638+0.2761*0.1580+0.0965*0.0964+0.0518*0.0833=0.1515
因此,方案层对目标的组合向量为:
(0.4106,0.4379,0.1515)T
转换为百分比,即对车型a的喜欢程度为41.06%,对车型b的喜欢程度为43.79%,对车型c的喜欢程度为15.15%。综合各指标的权重后,对车型的喜欢程度排序为:车型b>车型a>车型c。
Ⅳ.matlab程序实现
此处提供3种matlab程序作为参考:
%第一种matlab程序
function result=AHP(mat)
%% 数据加载(判断矩阵载入)
A=mat;
n=size(A,1);
%% 特征值法求权重
% 第一步:求出矩阵A的最大特征值以及其对应的特征向量[V,D]=eig(A);%V是特征向量, D是由特征值构成的对角矩阵(除了对角线元素外,其余位置元素全为0)
Max_eig=max(max(D)); D==Max_eig;
[r,c]=find(D == Max_eig,1);%找到D中第一个与最大特征值相等的元素的位置,记录其行和列%对求出的特征向量进行归一化即可得到权重
V(:,c);
disp('特征值法求权重的结果为:');
disp(V(:,c)./sum(V(:,c)));
%找到的最大特征值的列数c找到对应的特征向量,然后再进行标准化。
result=V(:,c)./sum(V(:,c));CI=(Max_eig - 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('一致性比例CR=');disp(CR);
if CR<0.10disp('因为CR < 0.10,所以该判断矩阵A的一致性可以接受!');
elsedisp('注意:CR >= 0.10,因此该判断矩阵A需要进行修改!');
end
end%% 在命令窗口输入判断矩阵
clc;clear;
%% 4指标评价
A=[ 1 3 7 8;1/3 1 5 5;1/7 1/5 1 3;1/8 1/5 1/3 1]
AHP_A=AHP(A);%% 价格
A1=[1 2 3;1/2 1 2;1/3 1/2 1]
AHP_A1=AHP(A1);%% 耗油量
A2=[1 1/5 1/2;5 1 7 ;2 1/7 1]
AHP_A2=AHP(A2);%% 舒适程度
A3=[1 3 5;1/3 1 4;1/5 1/4 1]
AHP_A3=AHP(A3);%% 外表
A4=[1 1/5 3;5 1 7;1/3 1/7 1]
AHP_A4=AHP(A4);%% 计算
s=[AHP_A1 AHP_A2 AHP_A3 AHP_A4] %汇总
s1=[s(:,1)*AHP_A(1) s(:,2)*AHP_A(2) s(:,3)*AHP_A(3) s(:,4)*AHP_A(4)] %乘比例evaluate=[sum(s1(1,:)) sum(s1(2,:)) sum(s1(3,:))]
%第二种matlab程序
clc,clear
fid=fopen('C:/Users/Administrator/Desktop/txt3.txt','r');
n1=4;n2=3; 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
%第三种matlab程序
clear,clc
A=[1 3 7 8;
1/3 1 5 5;
1/7 1/5 1 3;
1/8 1/5 1/3 1];
v=sum(A); %列求和
d=diag(v); %生成以向量v为对角的对角矩阵
norm_a=A*(d^-1); %列归一化矩阵
norm_a=sum(norm_a,2); %行求和
w_a=norm_a./sum(norm_a) %求特征向量
Aw_a=A*w_a %求权重向量
eigenvalue=diag(eig(A)); %求特征值
lambda_a=eigenvalue(1) %求最大特征值
ci_a=(lambda_a-4)/3 %求一致性指标
cr_a=ci_a/0.89 %求一致性比率 B1=[1 2 3;
1/2 1 2;
1/3 1/2 1];
v=sum(B1);
d=diag(v);
norm_b1=B1*(d^-1);
norm_b1=sum(norm_b1,2);
w_b1=norm_b1./sum(norm_b1)
B1w_b1=B1*w_b1
eigenvalue=diag(eig(B1));
lambda_b1=eigenvalue(1)
ci_b1=(lambda_b1-3)/2
cr_b1=ci_b1/0.52B2=[1 1/5 1/2;
5 1 7;
2 1/7 1];
v=sum(B2);
d=diag(v);
norm_b2=B2*(d^-1);
norm_b2=sum(norm_b2,2);
w_b2=norm_b2./sum(norm_b2)
B2w_b2=B2*w_b2
eigenvalue=diag(eig(B2));
lambda_b2=eigenvalue(1)
ci_b2=(lambda_b2-3)/2
cr_b2=ci_b2/0.52B3=[1 3 5;
1/3 1 4;
1/5 1/4 1];
v=sum(B3);
d=diag(v);
norm_b3=B3*(d^-1);
norm_b3=sum(norm_b3,2);
w_b3=norm_b3./sum(norm_b3)
B3w_b3=B3*w_b3
eigenvalue=diag(eig(B3));
lambda_b3=eigenvalue(1)
ci_b3=(lambda_b3-3)/2
cr_b3=ci_b3/0.52B4=[1 1/5 3;
5 1 7;
1/3 1/7 1];
v=sum(B4);
d=diag(v);
norm_b4=B4*(d^-1);
norm_b4=sum(norm_b4,2);
w_b4=norm_b4./sum(norm_b4)
B4w_b4=B4*w_b4
eigenvalue=diag(eig(B4));
lambda_b4=eigenvalue(1)
ci_b4=(lambda_b4-3)/2
cr_b4=ci_b4/0.52
AHP层次分析法(附matlab程序)相关推荐
- MATLAB AHP AHP层次分析法code 自写代码 完美运行。 权重设计
MATLAB AHP AHP层次分析法code 自写代码 完美运行. 权重设计 ID:5150612144581085YouthOG
- Matlab基于SEIRD模型,NSIR预测模型,AHP层次分析法新冠肺炎预测与评估分析
全文链接:http://tecdat.cn/?p=32175 分析师:Jiahui Zhao 新型冠状病毒肺炎COVID-19 给中国乃至全世界都带来了深重的灾难,对世界经济也造成了不可逆的影响(点击 ...
- AHP层次分析法matlab实现
AHP层次分析法的步骤和matlab实现方法 AHP (Analytic Hierarchy Process)层次分析法是美国运筹学家T. L. Saaty教授于二十世纪70年代提出的一种实用的多方案 ...
- matlab如何求指标的权向量_【Matlab】案例讲解层次分析法的Matlab实现
我写过层次分析法的Matlab实现:张敬信:[评价算法]层次分析法zhuanlan.zhihu.com 其中的ahp函数是来自<吴鹏. Matlab高效编程技巧与应用:25个案例分析>, ...
- 数学建模之AHP层次分析法
一.定义 层次分析法,简称AHP,是指将与决策总是有关的元素分解成目标.准则.方案等层次,在此基础之上进行定性和定量分析的决策方法.该方法是美国运筹学家匹茨堡大学教授萨蒂于20世纪70年代初,在为美国 ...
- 用AHP层次分析法挑选最佳结婚对象
为了使文章读起来比较有趣,假设屏幕前的你现在中了彩票头奖,奖金5亿RMB.于是你彻底解放不用再写代码啦,天天开辆法拉利到处玩,来给你介绍对象的媒人踏破家门.经过初赛.复赛.泳装.晚装.才艺展示之后,仍 ...
- AHP层次分析法(Analytic Hierarchy Process)——个人学习笔记
目录 一.相关知识与例子 二.代码实现 一.相关知识与例子 层次分析法是数学建模过程中最基础的模型之一,主要应用于评价问题.层次分析法是对一些较为复杂.较为模糊的问题作出决策的简易方法,其适用于那些难 ...
- AHP层次分析法与python代码讲解(处理论文、建模)
目录 AHP是啥 题目 ①构建阶梯层次结构 ②构建判断矩阵 ④综合算术平均法 .几何平均法.特征值法求权重 方法1:算术平均法求权重 一般步骤 表达式解释 代码实现 方法2:几何平均法求权重 一 ...
- 层次分析法matlab_建模开讲课程回放2:层次分析法及其MATLAB
建模开讲:层次分析法及其MATLAB实践 主讲人:于晶贤老师 课程回放地址如下,大家可以复制链接到地址栏即可观看,也可以直接点击左下角的观看: https://ke.qq.com/webcourse/ ...
- 【AHP层次分析法python部分实现】
提示:仅用到AHP层次分析法的部分功能因此只完成了python的部分实现 目录 前言 一.AHP是什么? 层次分析法的特点: 层次分析法的原理: 二.使用步骤 参考视频 前言 提示:这里可以添加本文要 ...
最新文章
- iOS 依次执行 异步网络请求的一种实现
- omnicppcomplete - a Vim plugin [转载]
- ECshop二次开发 ECSHOP首页显示积分商城里的商品
- mysql怎么返回上一行_月球上并没有发射基地,阿波罗飞船是怎么返回地球的?...
- 101 Free VMware Tools
- org.apache.commons.lang.StringUtils中常用的方法
- java对象比较排序
- 连续两天,8 大技术论坛,微软超 60 个烧脑议题等你来战
- 用批处理读取特定注册表项的路径值
- 学习java 第三天 数据类型以及存储大小取值范围 (one 大白 (●—●))
- 34.卷1(套接字联网API)---常用函数
- opencv画框显示python_Python OpenCV实现鼠标画框效果
- QT应用SQL数据库,简单全面的应用,增删改查。
- php混淆解密,php混淆加密解密实战
- 智能驾驶大数据前沿研究进展与典型应用
- HJL-93/AY AC220V数字式交流三相电流继电器
- 关于运维的标准(ITSS信息技术服务-运行维护)介绍
- matlab三大数组之构架数组
- 实战第一步:市场调研
- 会计----会计凭证
热门文章
- [已解决]安装MPICH2(x64)时显示需要安装NET FRAMEWORK 2.0.50727
- 直播源列表转换php,电视直播源列表制作、转换工具Telelist(可以DPL、M3U、TXT等互转)...
- android直播弹幕开发,Android上专为视屏直播打造的轻量级弹幕库(100多kb)
- matlab安装软件 Matlab视频教程李大勇 MATLAB程序开发入门课程 MATLAB神经网络30个案例分析及源程序
- android大作业源代码,大作业源代码.doc
- 某车企笔试题解答(2)
- 微软MSDN原版所有系统合集我告诉你,Windows历史操作系统索引
- Java学习教程,Java基础教程(从入门到精通)
- 这一年,这些书:2020年读书笔记
- 更换卡巴斯基6授权许可文件的方法