前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >层次分析法在数学建模中的matlab实现【数学建模】

层次分析法在数学建模中的matlab实现【数学建模】

作者头像
巴山学长
发布于 2021-04-22 07:03:28
发布于 2021-04-22 07:03:28
2.8K00
代码可运行
举报
文章被收录于专栏:巴山学长巴山学长
运行总次数:0
代码可运行

前言:MATLAB是数学建模比赛中较受欢迎的一种编程语言,为了满足一些参加数学建模比赛小伙伴的需求,我们创建了这个专题,并会在接下来的一段时间里定期地为大家推送一些算法文章。

今天我们学习的是数学建模中的层次分析法。

一、层次分析法的介绍

层次分析法(Analytic Hierarchy Process,简称 AHP),最早是由美国运筹学家 T. L. Saaty 教授于上世纪 70 年代初期提出的一种决策方法。它的出现为我们处理决策类问题提供了一种新的思路。

在解决评价类问题时,我们通常采用的做法是对问题进行定量分析来对不同的方案做出不同的评价或是赋予不同的权重。

但当我们面对一些受主观因素影响的问题,如选择旅游目的地时,旅游地的景色、旅途、居住、饮食等都会影响着最终方案的选择。这些都受个人因素影响,而且往往缺少定量数据很难进行定量分析,这时我们就可以采用一种介于定性和定量之间分析的方法——层次分析法。

二、运用层次分析法建模过程:

运用层次分析法建模,大体上可按下面四个步骤进行:

(a)建立递阶层次结构模型; (b)构造出各层次中的所有判断矩阵; (c)层次单排序及一致性检验; (d)层次总排序及一致性检验。

下面通过具体实例介绍一下这种方法和实现代码。 问题:假期旅游有 3 个旅游胜地供你选择,试确定一个最佳地点。在此问题中,你需要根据景色、费用、居住、气候、饮食和旅途条件等一些准则去反复比较 3 个侯选地点,选择最适合的一种方案。

1、建立递阶层次结构模型

运用层次分析法解决问题首先将问题层次化,构造出一个有层次的模型。

一般分为三个层次:

目标层:只有一个元素,一般它是分析问题的预定目标或理想结果。

准则层:这一层次中包含了为实现目标所涉及的中间环节,它可以由若干个层次组成,包括所需考虑的准则、子准则。

措施层:这一层次包括了为实现目标可供选择的各种措施、决策方案等。

问题中构建的层次模型为:

2、构造出各层次中的所有判断矩阵

判断矩阵:因子进行两两比较建立的比较矩阵。构建方法为每次取两个因子

,以

表示

对因素Z的影响大小之比,全部比较结果即为判断矩阵

注意:判断矩阵必须为互反矩阵,即必须满足:

为了更好的确定

的值,层次分析法的创造者Saaty提出引用数字 1~9 及其倒数作为标度。

问题中所建立的判断矩阵为:

准则层中的判断矩阵

方案层中的判断矩阵

3、层次单排序及一致性检验

层次单排序:判断矩阵对应于最大特征值λ 的特征向量W ,经归一化后即为同一层次相应因素对于上一层次某因素相对重要性的排序权值,这一过程称为层次单排序。

一致性检验的步骤:

(i)计算一致性指标CI:

(ii)查找相应的平均随机一致性指标 RI

(ⅲ)计算一致性比例CR,当CR < 0.10 时,认为判断矩阵的一致性是可以接受的,否则应重新构造判断矩阵,直到满足条件为止

问题中的层次单排序及一致性检验:

准则层:

归一化处理后的特征向量

W=(0.1574 0.1871 0.1889 0.0492 0.1221 0.2953)

CR= 0.0567 一致性可以接受

措施层:

归一化处理后的特征向量

W1=(0.1365 0.6250 0.2385)

W2=(0.0974 0.3331 0.5695)

W3=(0.2426 0.0879 0.6694)

W4=(0.2790 0.6491 0.0719)

W5=(0.4667 0.4667 0.0667)

W6=(0.7986 0.1049 0.0965)

CR1=0.0158

CR2=0.0212

CR3=0.0061

CR4=0.0559

CR5=0.0000

CR6=0.0061 一致性可以接受

4、层次总排序及一致性检验

层次总排序:层次总排序是指自上而下地将层次单排序下的权重进行合成。

一致性检验:计算一致性比例CR,当CR < 0.10 时,认为判断矩阵的一致性是可以接受的

问题中的层次总排序结果:

问题中的层次总排序检验及一致性检验:

CR=0.0121 一致性可以接受

故最终旅游方案选择方案一。

层次分析法源代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
clc,clear
%准则层判断矩阵
z=[1 1 1 4 1 1/2;
   1 1 2 4 1 1/2;
   1 1/2 1 5 3 1/2;
   1/4 1/4 1/5 1 1/3 1/3;
   1 1 1/3 3 1 1/3;
   2 2 2 3 3 1 ];
%方案层判断矩阵
%景色
f1=[1 1/4 1/2;
    4 1 3;
    2 1/3 1];
%居住
f2=[1 1/4 1/5;
    4 1 1/2;
    5 2 1 ];
%旅途
f3=[1 3 1/3;
    1/3 1 1/7;
    3 7 1];
%饮食
f4=[1 1/3 5;
    3 1 7;
    1/5 1/7 1];
%费用
f5=[1 1 7;
    1 1 7;
    1/7 1/7 1];
%气候
f6=[1 7 9;
    1/7 1 1;
    1/9 1 1];
r=[0,0,0.58,0.90,1.12,1.24,1.32,1.41,1.45]; %一致性指标
n1=6;
n2=3;
f=[f1;f2;f3;f4;f5;f6];
[x,y]=eig(z);
lamda=max(diag(y));
num=find(diag(y)==lamda);
zw=x(:,num)/sum(x(:,num));
disp('层次单排序检验指标为:')
cr1=((lamda-6)/(n1-1))/r(n1)%层次单排序准则层一致性检验指标
if cr1>0.1
    error("一致性检验不通过")
end

fw=zeros(3,6);
crr=zeros(1,6);
cr2=zeros(1,6);
k=1;
for i=3:3:18
    a=f(i-2:i,:);
    [x,y]=eig(a);
    lamda=max(diag(y));
    num=find(diag(y)==lamda);
    fw(:,k)=x(:,num)/sum(x(:,num));
    cr=((lamda-n2)/(n2-1))/r(n2);%层次单排序方案层一致性检验指标
    if cr>0.1
    error("一致性检验不通过")
    end
    crrr=(lamda-n2)/(n2-1);
    cr2(1,k)=cr;
    crr(1,k)=crrr;
    k=k+1;
end
disp('层次总排序一致性检验指标:')
crr2=sum(crr*zw)/sum(r(n2)*zw)%层次总排序一致性检验指标检验
disp('准则层权值:')
zww = zw'
disp('方案层单排序权值:')
fw
w=fw*zw;%层次总排序
[m,n] = max(w);
disp((sprintf('最终选择的方案为方案%d',n)))

本期内容由小编编程手撰写,编程手有丰富的数学建模与matlab编程经验。鉴于此,matlab爱好者公众号计划推出【数学建模】系列,将逐一揭开数学建模的“神秘”面纱,与大家一起在数学建模的海洋里畅游。

若您有过数学建模的获奖经历,并有一定的matlab编程基础,欢迎将您的成功经验整理成文推送给我们与大家分享。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-04-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 巴山学长 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验