层次分析法算法及matlab和lingo求解一致性
资料来源:清风建模
目录
1.确定目标层、准则层和方案层:
2.构造出各层次中的所有判断矩阵[1]P105
3.lingo进行一致性检验[1]P105
参考文献
层次分析法matlab代码三种算法
一、相关函数
方法一:算数平均法
方法二:几何平均法
方法三:特征值法
1.一致性指标CI的计算
层次分析法处理问题类型:决策、评价、分析、预测等
AHP的主要特点是通过建立递阶层次结构,把人类的判断转化到若干因
素两两之间重要度的比较上,从而把难于量化的定性判断转化为可操作的重
要度的比较上面。在许多情况下,决策者可以直接使用AHP进行决策,极大
地提高了决策的有效性、可靠性和可行性,但其本质是一种思维方式,它把
复杂问题分解成多个组成因素,又将这些因素按支配关系分别形成递阶层次
结构,通过两两比较的方法确定决策方案相对重要度的总排序。整个过程体
现了人类决策思维的基本特征,即分解、判断、综合,克服了其他方法回避
决策者主观判断的缺点。
PS:在论文中用到层次分析法时一定要引入层次结构图。
整个过程流程图:
基本步骤:
(1)建立层次分析结构模型(将有关因素自上而下分层(目标—准则或指标—方案或对象),上层受下层影响,而层内各因素基本上相对独立)
(2)构造成对比较阵(用成对比较法和1~9标度,构造各层对上一层某一准则的重要性进行两两比较,构造判断矩阵)
(3)计算权向量并作一致性检验(计算最大特征根和特征向量)
(4)计算组合权向量(并进行排序)
思维过程:(定性分析与定量分析结合起来)
(1)将决策问题分为3个层次;每层有若干元素,各层元素间的关系用相连的直线表示;
(2)通过相互比较确定各准则对目标的权重,及各方案对每一准则的权重;
将上述两组权重进行综合,确定各方案对目标的权重。
1.确定目标层、准则层和方案层:
- 目标层:一个元素,一般是问题的预定目标和理想结果
- 准则层:包含为了实现目标所设计的中间环节,可以由若干个层次组成,包括所需考虑的准则和子准则
- 方案层:为实现目标可供选择的各种措施和决策方案等
三个问题:
(1)评价的目标是什么?
(2)为了达到这个目标有几种可选的方案?
(3)评价的准则(指标)是什么?
2.构造出各层次中的所有判断矩阵[1]P105
重要程度表格:
标度(定量结果) |
含义(定性结果) |
1 |
两个因素相比,具有同样重要性 |
3 |
一个因素比另一个因素稍微重要 |
5 |
一个因素比另一个因素明显重要 |
7 |
一个因素比另一个因素强烈重要 |
9 |
一个因素比另一个因素极端重要 |
2,4,6,8 |
两相邻判断的中值 |
倒数 |
若因素i与因素j的重要性之比为aij,那么因素j与因素i重要性之比为aij=1/aij |
如果写作,建议翻看《lingo培训基础教程》第P176~P179
如何科学地设定权重?(相对权重向量的确定)
对指标的重要性进行两两比较,构造判断矩阵,从而求出权重。矩阵中aij的意义是第i个指标相对于第j个指标的重要程度。
设想把一块大石头Z分成n个小块c1,c2,…,cn,其重量分别为w1,w2,…,wn,则将n块小石头作两两比较,记ci,cj的相对重量为
要注意比较的逻辑关系,如:A<B,B=C,那么C>A
3.一致性检验[1]P105
(1)判断矩阵A对应最大特征值λmax的特征向量W,经归一化后即为同一层次相应因素对于上一层次某因素相对重要性的排序权值,这一过程称为层次单排序。
归一化处理方法:
对正向序列x1,x2,x3…,xn进行变换,
则新序列y1,y2,…,yn∈[0,1]且无量纲,并且显然有
若A的最大特征值λmax对应的特征向量W=[w1,w2,…,wn],则aij=wi/wj,任意i,j=1,2,…,n,即(也为正互反矩阵)
(2)检验过程
①计算一致性指标CI,CI定义如下式所示:
②查找相应的平均随机一致性指标RI。对于n=1,…,9,Saay给出了RI的值,如下表:
不同n值对应的RI值
n |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
RI |
0 |
0 |
0.58 |
0.9 |
1.12 |
1.24 |
1.32 |
1.41 |
1.45 |
注:在实际运用中,n很少超过10,如果指标的个数大于10,则可以考虑建立二级指标体系。
如上表所示,RI值是通过统计计算而得,用随机方法构造1000个样本矩阵:随机从1~9及其倒数中抽取数字构造正互反矩阵,求得最大特征根的平均值λmax',并定义:
补充:当n的阶数较大也就是指标较多时,
不同n值对应的RI值
n |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
RI |
0 |
0 |
0.52 |
0.89 |
1.12 |
1.26 |
1.36 |
1.41 |
1.46 |
10 |
11 |
12 |
13 |
14 |
15 |
||||
1.49 |
1.52 |
1.54 |
1.56 |
1.58 |
1.59 |
注:在实际运用中,n很少超过10,如果指标的个数大于10,则可以考虑建立二级指标体系。
如上表所示,RI值是通过统计计算而得,用随机方法构造1000个样本矩阵:随机从1~9及其倒数中抽取数字构造正互反矩阵,求得最大特征根的平均值λmax',并定义:
③计算一致性比例CR,CR定义如下式所示:
当CR<0.1时,认为判断矩阵的一致性是可以接受的,否则应对判断矩阵做适当修正。
在判断矩阵具有完全一致性的条件下,我们可以通过解特征值问题
A*W=λmax*W
例题:lingo求解最大特征根,进行一致性检验[2]P175
model:sets:num/1..4/:w;!w表示权重link(num,num):a;endsetsdata:a=1 0.5 0.33333 0.22 1 0.5 0.333333 2 1 0.55 3 2 1;enddatamax=lambda;!最大特征根@for(num(i):@sum(num(j):a(i,j)*w(j))=lambda*w(i));@sum(num:w)=1;CI=(lambda-4)/3;CR=CI/0.9;end
注:矩阵的数字不能用分数表示
求解结果
利用lingo软件,求得矩阵A的最大特征值为λmax=4.0145,求得的权重向量为
w=[0.0882,0.1570,0.22720,0.4829]T(转置)
参考文献
- 《matlab数学建模经典实战案例分析》余胜威
- 《lingo基础培训教程》李汉龙
层次分析法matlab代码三种算法
资料来源:清风建模
一、相关函数
- size函数
size(A)函数是用来求矩阵大小的,它返回一个行向量,第一个元素是矩阵的行数,第二个元素是矩阵的列数。
如:
A=[1,2,3;4,5,6]
B=[1,2,3,4,5,6]
size(A)
ans=2 3 %表示2行3列
或者[r,c]=size(A)得出r=2,c=3
%将矩阵A的行数返回到第一个变量r,将矩阵的列数返回到第二个变量c
注意区分矩阵和行向量
2.repmat函数
B=repmat(A,m,n),即把A作为B的函数,B由m行×n列个A平铺而成
3.矩阵的运算
在matlab的矩阵运算中,“*”和“/”代表矩阵之间的乘法和除法(A/B=A*inv(B))
两个形状相同的矩阵对应元素之间的乘除法需要用“.*”“./”
矩阵中每个元素和常数相乘或相除两种方法都可以使用
矩阵的加法就是把对应的元素相加,矩阵的减法就是把对应的元素相减
注意:A^2表示A*A,而A.^2表示把矩阵中的元素进行平方
4.求特征值和特征向量
函数eig(A)
两种常见用法:
(1)A=[1,2,3;4,5,6;7,8,9]; E=eig(A)
求A的全部特征值,构成向量E
(2)[V,D]=eig(A)
求A的全部特征值,构成对角矩阵D,并求A的特征向量构成V的列向量
V的每一列都是D中与之相同列的特征值的特征向量
5.输出和输入函数
disp(a)屏幕输出函数,相当于c语言中的printf函数(后面的分号有无都可)
input(a)输入函数
如:disp('请输入判断矩阵A:')—>请输入判断矩阵A:
6.sum求和函数
(139条消息) Matlab函数学习---sum函数(计算矩阵、数组和向量元素总和)_亦我飞也的博客-CSDN博客_matlab中sum函数用法
S=sum(A,dim)沿维度计算A的所有元素的总和
如:S=sum(A,2)是包含每一列总和的列向量
7.if判断语句
Matlab的判断语句,if所在行后面不需要冒号,但最后一定要以end结尾,中间语句注意缩进
如:
a=input('请输入考试分数:')
请输入考试分数:100
if a>=90
disp('成绩优秀')
elseif a>=60
disp('成绩良好')
else
disp('成绩挂科')
end
输出:成绩优秀
8.for循环
不用repmat函数而用for循环n次,按行复制已经求和好的行向量
SUM_A=[]; for i=1:n %n指的是判断矩阵的行数或列数 SUM_A=[SUM_A;sum_A] end |
9.find函数
可以用来返回向量或矩阵中不为0的元素的位置索引
10.提取矩阵中指定位置的元素
二、判断矩阵计算权重
判断矩阵的由来:一般由专家填写或者问卷调查
方法一:算数平均法
disp('请输入判断矩阵A:') A=[1 0.5 0.3 0.2;2 1 0.5 0.3;3 2 1 0.5;5 3 2 1]%算数平均法求权重%①:将判断矩阵按照列归一化(每一个元素除以其所在列的和)% 方法一:sum_A=sum(A);[n,n]=size(A);SUM_A=repmat(sum_A,n,1);% 方法二:初始化SUM_A,再用for循环按行复制已经进行过按列求和的行向量% SUM_A=[];% for i=1:n %n指的是判断矩阵的行数或列数% SUM_A=[SUM_A;sum_A]% endB=A./SUM_A;% ②:将归一化的各列按行求和得到列向量,然后每个元素除以n即可得到权重向量disp('算数平均法求权重的结果为:')disp(sum(B,2)/n)
方法二:几何平均法
权重向量:
用两种方法得到的结果只有细微差别:
代码如下:
disp('请输入判断矩阵A:')
A=[1 0.5 0.3 0.2;
2 1 0.5 0.3;
3 2 1 0.5;
5 3 2 1]
[n,n]=size(A);
%几何平均法求权重
%①:将A的元素按照行相乘得到一个新的列向量,prod用法类似sum
multiply_A=prod(A,2);
%②:将新向量的每个分量开n次方根
multiply_n_A=multiply_A.^(1/n);
%③:对该列向量进行归一化即可得到权重向量
disp('几何平均法求权重的结果为:')
disp(multiply_n_A./sum(multiply_n_A))
方法三:特征值法
代码如下:
disp('请输入判断矩阵A:')A=[1 0.5 0.3 0.2;2 1 0.5 0.3;3 2 1 0.5;5 3 2 1]%①:求矩阵A的最大特征值及其对应的特征向量%特征值法求权重,V是特征向量,D是由特征值构成的对角矩阵[V,D]=eig(A)%找到最大特征值,先找D中每一列的最大值,然后再找最大特征值Max_eig=max(D(:)); %可改成max(max(D))%找出对角阵D中第一个和最大特征值相等的元素位置,记录它的行和列[r,c]=find(D==Max_eig,1); %最大特征值的位置记录为1%②:对求出的特征向量进行归一化处理即可得到权重disp('特征值法求权重的结果为:')disp(V(:,c)./sum(V(:,c)))
三、一致性检验
注意:在论文写作中,应该先对判断矩阵进行一致性检验,然后再计算权重,因为只有判断矩阵通过了一致性检验,其权重才是有意义的。在下面的代码中,我们先计算了权重,然后再进行了一致性检验,这是为了顺应计算过程,事实上在逻辑上是说不过去的。因此大家自己写论文中如果用到了层次分析法,一定要先对判断矩阵进行一致性检验。而且要说明的是,只有非一致矩阵的判断矩阵才需要进行一致性检验。如果你的判断矩阵本身就是一个一致矩阵,那么就没有必要进行一致性检验。一致性矩阵的特点:各行/各列之间成倍数关系。
代码如下:
[n,n]=size(A);CI=(Max_eig-n)/(n-1);RI=[0 0 0.58 0.9 1.12 1.24 1.32 1.41 1.32 1.41 1.45];CR=CI/RI(n)disp('一致性指标CI=');disp(CI);disp('一致性比例CR=');disp(CR);if CR<0.1disp('因为CR<0.1,所以判断矩阵A的一致性可以接受!');elsedisp('注意CR<0.1,所以判断矩阵A需要进行修改');end
1.一致性指标CI的计算
2.一致性比例CR的计算
例题:
《Matlab数学建模经典案例实战》余胜威P200:食堂用餐满意度问题
层次分析法算法及matlab和lingo求解一致性相关推荐
- 层次分析法2:Matlab实现层次分析法的代码详解
目录 读取数据 读取准则层判断矩阵 读取方案层的判断矩阵 一致性检验 求解权重值 寻找权重值最高的结果 代码分享及注释 例题:挑选合适的工作,经双方恳谈,已有三个单位表示愿意录用某毕业生.该生根据已有 ...
- MATLAB数学建模必备算法--层次分析法AHP
其主要用于解决评价类问题(例如:选择哪种方案最好.哪位运动员或者员工表现的更优秀) 一个很典型的层次分析法案例: 确定评价目标: 高考完后小明想要去旅游,有三个目的地供他选择: 苏杭 北戴河 桂林 确 ...
- matlab层次分析法代码_基于主成分分析法和层次分析法的工程项目经理胜任力评价研究...
摘 要:根据工程项目经理胜任力评价指标,运用主成分分析法和层次分析法相结合的数学方法对工程项目经理的胜任力进行合理公正的评价.首先运用主成分分析法筛选重要指标,再运用层次分析法对工程项目经理进行定量与 ...
- 层次分析法------小学生都会的算法~~~
文章目录 一.评价模型的种类 二.层次分析法 2.1层次分析法的原理及应用 2.1.1原理 2.1.2应用 一.评价模型的种类 二.层次分析法 2.1层次分析法的原理及应用 2.1.1原理 层次分析法 ...
- 【数学建模学习】matlab实现评价模型——层次分析法(AHP)
目录 1概述 2算法实现流程 3实例 4matlab实现层次分析法 5计算结果 1概述 层次分析法,简称AHP,是评价模型中的一种算法,指将与决策总是有关的元素分解成目标.准则.方案等层次,在此基础之 ...
- matlab层次分析法迅速求权重
层次分析法是一种用处非常广的决策算法 虽然内容等于拍脑袋,不过有时候我们就是需要为拍脑袋找到合适的说法. 虽然它往往用于解决多目标选择的问题,但我们也可对其因素进行分析,来得到一个因素权重. 当然对于 ...
- 层次分析法及matlab代码
数学建模算法(一) 层次分析法 The analytic hierarchy process(AHP) [清风数学建模课程笔记] 文章目录 数学建模算法(一) 层次分析法 The analytic h ...
- 层次分析法-基于节点关键度的DTN路由算法
当你看到一个知识点的时候,不是收藏和点赞,而是想办法转化成自己需要的知识,好记性不如烂笔头. 层次分析法 层次分析法(运筹学理论),简称AHP,是指将于决策总是有关的元素分解成目标.准则.方案等层次, ...
- matlab如何求指标的权向量_【Matlab】案例讲解层次分析法的Matlab实现
我写过层次分析法的Matlab实现:张敬信:[评价算法]层次分析法zhuanlan.zhihu.com 其中的ahp函数是来自<吴鹏. Matlab高效编程技巧与应用:25个案例分析>, ...
- Matlab基于SEIRD模型,NSIR预测模型,AHP层次分析法新冠肺炎预测与评估分析
全文链接:http://tecdat.cn/?p=32175 分析师:Jiahui Zhao 新型冠状病毒肺炎COVID-19 给中国乃至全世界都带来了深重的灾难,对世界经济也造成了不可逆的影响(点击 ...
最新文章
- [译]WPF 应用程序和MVVM设计模式 ——Josh Smith
- [NewLife.XCode]数据初始化
- JS新手入门自学笔记
- JS与Jquery学习笔记(一)
- 支持百万级TPS,Kafka是怎么做到的?
- qt读oracle时间戳,QT解析时间戳与微秒级精度
- FPGA_四选一数据选择器
- 飞机遭遇时空乱流离奇穿越到30年前
- Hbase数据库设计
- 吉几三的俺ら东京さ行ぐだ歌词
- 推荐一个logo免费设计的网站
- Tryhackme-Windows Exploitation Basics
- 工具党如何干掉某讯手游的反修改器功能
- mui 本地化后调试_MUI和LIP-如何用您的语言用中文编写和本地化Windows
- HTTP 请求头中的 X-Forwarded-For,X-Real-IP(nginx)
- CS:APP二进制炸弹phase5
- Q : office word 2007 段首按退格键无法退到上一行 -- 暂未解决
- JDBC 数据库编程基础
- React高级特性之Render Props
- DL4J的神经网络输入处理DataSet介绍
热门文章
- OpwnWrt 路由器MWAN3多线多拨实现方法
- java treemap的排序_Java TreeMap的排序(转)
- 调整Exchange接收连接器延迟参数解决SMTP代发送邮件问题
- 软件开发培训要学多久?怎么学?软件开发培训班多少钱?
- 吾爱破解python就业班_我吾 区别
- 在母亲节刷屏几天后,为母亲踏踏实实做点事
- php tracert,使用tracert查看网络状况
- php实现豆瓣isbn查询API接口制作
- 威胁猎人 | 2018年上半年短视频行业黑灰产研究报告
- BugKu-CTF(杂项篇MISC)--disordered_zip