数学建模常用算法—层次分析法(AHP)

解决问题

建模比赛中最基础的模型之一,其主要用于解决评价类问题(例如:选择哪种方案最好、哪位运动员或者员工表现的更优秀),用于确定每个目标及其指标所占权重。

优点

AHP的主要特点是通过建立递阶层次结构,把人类的判断转化到若干因 素两两之间重要度的比较上,从而把难于量化的定性判断转化为可操作的重 要度的比较上面。在许多情况下,决策者可以直接使用AHP进行决策,极大 地提高了决策的有效性、可靠性和可行性,但其本质是一种思维方式,它把 复杂问题分解成多个组成因素,又将这些因素按支配关系分别形成递阶层次 结构,通过两两比较的方法确定决策方案相对重要度的总排序。整个过程体 现了人类决策思维的基本特征,即分解、判断、综合,克服了其他方法回避决策者主观判断的缺点。

缺点

层次分析法最大的缺点在于判断矩阵的确定依赖于专家,如果专家的判断存在主观性的话, 会对结果产生很大的影响。

一般步骤

1. 分析系统中各因素之间的关系,建立系统的递阶层次结构

以旅游目的地选择为例
在这里插入图片描述

2. 对于同一层次的各元素关于上一层次中某一准则的重要 性进行两两比较,构造两两比较矩阵(判断矩阵)

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

3. 对判断矩阵进行一致性检验(检验通过权重才能用)

1. 计算一致性指标CI

在这里插入图片描述

2. 查找对应的平均随机一致性指标RI
在这里插入图片描述

3. 计算一致性比例CR
在这里插入图片描述

如果CR < 0.1, 则可认为判断矩阵的一致性可以接受,否则需要对 判断矩阵进行修正。

4. 修正时往一致矩阵上调整,一致矩阵各行成倍数关系

4. 由判断矩阵计算被比较元素对于该准则的相对权重

三种方法计算权重:
(1)算术平均法(2)几何平均法(3)特征值法
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
比赛时建议三种方法都使用,最终权重为三种方法计算后的平均值。

在论文中建议加上以下这段话:
“ 以往的论文利用层次分析法解决实际问题时,都是采用其中某一种方法 求权重,而不同的计算方法可能会导致结果有所偏差。为了保证结果的稳健性,本文采用了三种方法分别求出了权重后计算平均值,再根据得 到的权重矩阵计算各方案的得分,并进行排序和综合分析,这样避免了采用单一方法所产生的偏差,得出的结论将更全面、更有效。”

5. 根据权重计算得分并排序

在这里插入图片描述

模型拓展

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

代码

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
  • 12
    点赞
  • 54
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值