码迷,mamicode.com
首页 > 其他好文 > 详细

数学建模-层次分析法

时间:2020-07-18 15:36:32      阅读:125      评论:0      收藏:0      [点我收藏+]

标签:proc   回避   可靠   构造   准则   family   mamicode   方案   pac   

层次分析法

介绍

层次分析法(The Analytic Hierarchy ProcessAHP)是由美国运筹学家、
匹兹堡大学教授T . L. Saaty20世纪70年代创立的一种系统分析与决策的综合
评价方法,是在充分研究了人类思维过程的基础上提出来的,它较合理地解
决了定性问题定量化的处理过程。
AHP的主要特点是通过建立递阶层次结构,把人类的判断转化到若干因
素两两之间重要度的比较上,从而把难于量化的定性判断转化为可操作的重
要度的比较上面。在许多情况下,决策者可以直接使用AHP进行决策,极大
地提高了决策的有效性、可靠性和可行性,但其本质是一种思维方式,它把
复杂问题分解成多个组成因素,又将这些因素按支配关系分别形成递阶层次
结构,通过两两比较的方法确定决策方案相对重要度的总排序。整个过程体
现了人类决策思维的基本特征,即分解、判断、综合,克服了其他方法回避
决策者主观判断的缺点。

评价类问题

 

解决评价类问题,大家首先要想到以下三个问题:
① 我们评价的目标是什么?
② 我们为了达到这个目标有哪几种可选的方案?
③ 评价的准则或者说指标是什么?(我们根据什么东西来评价好坏)
 

分而治之的思想

 
技术图片

 

 

分而治之:我们先来确定指标的权重吧~
问题:
一次性考虑这五个指标之间的关系,往往考虑不周。
解决方法:
两个两个指标进行比较,最终根据两两比较的结果来推算出权重。
 

填写判断矩阵

技术图片

 技术图片

 

 

 

一致矩阵的例子

各行(各列)之间成倍数关系
若矩阵中每个元素??ij > 0且满足??ij x ??ji = 1 ,则我们称该矩阵为正互反矩阵
在层次分析法中,我们构造的判断矩阵均是正互反矩阵。
若正互反矩阵满足??ij x ??jk = ??ik,则我们称其为一致矩阵
注意:在使用判断矩阵求权重之前,必须对其进行一致性检验。
当一致性>0.1时,可以对应一致矩阵进行调整
 

一致性检验的步骤

 

技术图片

 

 

技术图片

 

 特征值法求权重

假如我们的判断矩阵一致性可以接受,那么我们可以仿照一致矩阵权重的求法。
第一步:求出矩阵A的最大特征值以及其对应的特征向量
第二步:对求出的特征向量进行归一化即可得到我们的权重
技术图片

 

 

技术图片

 

 然后求出方案层对准则层的权重,汇总

技术图片

 

 

技术图片

 

2008年国赛实例

技术图片

 

 

技术图片

 

 技术图片

 

 三种解法代码

%% 注意:在论文写作中,应该先对判断矩阵进行一致性检验,然后再计算权重,因为只有判断矩阵通过了一致性检验,其权重才是有意义的。
%% 在下面的代码中,我们先计算了权重,然后再进行了一致性检验,这是为了顺应计算过程,事实上在逻辑上是说不过去的。
%% 因此大家自己写论文中如果用到了层次分析法,一定要先对判断矩阵进行一致性检验。
%% 而且要说明的是,只有非一致矩阵的判断矩阵才需要进行一致性检验。
%% 如果你的判断矩阵本身就是一个一致矩阵,那么就没有必要进行一致性检验。


disp(‘请输入判断矩阵A‘)
A=input(‘A=‘);
[n,n] = size(A);
% % % % % % % % % % % % %方法1: 算术平均法求权重% % % % % % % % % % % % %
Sum_A = sum(A);
SUM_A = repmat(Sum_A,n,1);
Stand_A = A ./ SUM_A;

disp(‘算术平均法求权重的结果为:‘);
disp(sum(Stand_A,2)./n)
% % % % % % % % % % % % %方法2: 几何平均法求权重% % % % % % % % % % % % %
Prduct_A = prod(A,2);
Prduct_n_A = Prduct_A .^ (1/n);
disp(‘几何平均法求权重的结果为:‘);
disp(Prduct_n_A ./ sum(Prduct_n_A))
% % % % % % % % % % % % %方法3: 特征值法求权重% % % % % % % % % % % % %
[V,D] = eig(A);
Max_eig = max(max(D));
[r,c]=find(D == Max_eig , 1);
disp(‘特征值法求权重的结果为:‘);
disp( V(:,c) ./ sum(V(:,c)) )
% % % % % % % % % % % % %下面是计算一致性比例CR的环节% % % % % % % % % % % % %
CI = (Max_eig - n) / (n-1);
RI=[0 0.0001 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];  %注意哦,这里的RI最多支持 n = 15
% 这里n=2时,一定是一致矩阵,所以CI = 0,我们为了避免分母为0,将这里的第二个元素改为了很接近0的正数
CR=CI/RI(n);
disp(‘一致性指标CI=‘);disp(CI);
disp(‘一致性比例CR=‘);disp(CR);
if CR<0.10
    disp(‘因为CR<0.10,所以该判断矩阵A的一致性可以接受!‘);
else
    disp(‘注意:CR >= 0.10,因此该判断矩阵A需要进行修改!‘);
end

% % 注意:代码文件仅供参考,一定不要直接用于自己的数模论文中
% % 国赛对于论文的查重要求非常严格,代码雷同也算作抄袭

  

 

 

 

数学建模-层次分析法

标签:proc   回避   可靠   构造   准则   family   mamicode   方案   pac   

原文地址:https://www.cnblogs.com/DWVictor/p/13335166.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!