层次分析法

层次分析法(The analytic hierarchy process,简称AHP)是建模比赛中最基础的模型之一,主要用于解决评价类问题(例如:选择哪种方案最好、哪个运动员或者员工表现更优秀)

目录

一、如何选择指标

二、如何确定指标权重(填写判断矩阵)

1、确定各指标权重

2、确定各方案在各指标中的得分

三、各表格的一致性检验

 1、问题

2、一致矩阵 

 3、一致性检验步骤

四、计算权重

 1、一致矩阵计算权重

2、非一致(判断)矩阵计算权重

五、计算各景点得分

六、画图

1、论文中需要展示的图片

 2、优秀论文中层次分析法图片展示

 七、层次分析法的局限

 八、层次分析法代码

1、一致性检验

2、算术平均法求权重

3、几何平均法求权重

4、特征值法求权重


例题:小明同学想出去旅游,在查阅网上的攻略后,初步选择苏杭、北戴河和桂林三地之一作为目标景点

解决评价类问题,大家首先要想到以下三个问题:

① 我们评价的目标是什么?

答:为小明同学选择最佳的旅游景点。

② 我们为了达到这个目标有哪几种可选的方案?

答:三种,分别是去苏杭、去北戴河和去桂林。

③ 评价的准则或者说指标是什么?(我们根据什么东西来评价好坏)

答:题目没给相关数据支撑,需要我们确定

一、如何选择指标

一般而言,前两个问题的答案是显而易见的,第三个问题的答案 需要我们根据题目中的背景材料、常识以及网上搜集到的参考资料进 行结合,从中筛选出最合适的指标

1、

2、

假设我们查询资料后选择了以下五个指标:

(1)景点景色

(2)旅游花费

(3)居住环境

(4)饮食习惯

(5)交通便利程度

故可以得到这张图:

二、如何确定指标权重(填写判断矩阵)

1、确定各指标权重

若直接填写每个指标的权重值,则会出现今天的填写值会和明天不一样的现象,故若自己填写权重时采用分而治之的思想,即根据比较两两指标来填写权重值。

两两比较的值对应的标度如下:

 如,此题中,进行权重的填写:

由此,可以得到表格

2、确定各方案在各指标中的得分

同理可得 

 

三、各表格的一致性检验

 1、问题

2、一致矩阵 

 一致矩阵特点:一致矩阵中各行(各列)成倍数关系

如以下矩阵为一致矩阵,其各行各列成倍数关系

 3、一致性检验步骤

 论文写作中,应先进行一致性检验,通过检验后再计算权重,若CR>=0.1,则需要对判断矩阵进行修正,往一致矩阵上调整,一致矩阵各行成倍数关系

 

四、计算权重

 1、一致矩阵计算权重

2、非一致(判断)矩阵计算权重

若用计算一致矩阵的方法计算判断矩阵,则使用每一行的计算结果可能都不同

 

 

数学语言的表述方法:

 

 

 

五、计算各景点得分

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

 

 

此处我们可以使用excel表格计算权重表格来大大减轻工作量:要点使用F4+Fn可以锁定单元格 

 (1)在第一个要计算的地方填写 “=....",其中指标对应的单元格要按Fn+F4锁定

 (2)剩余的结果通过拖动进行自动填写

六、画图

1、论文中需要展示的图片

 

 

 

 2、优秀论文中层次分析法图片展示

(1)

(2)

 

 七、层次分析法的局限

 

 八、层次分析法代码

1、一致性检验

clc
CI = (Max_eig - n) / (n-1);%Max_eig为最大特征值,n为矩阵的维数
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];  %注意哦,这里的RI最多支持 n = 15
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

2、算术平均法求权重

clc
disp('请输入判断矩阵A: ')
%A = input('判断矩阵A = ')
A =[1 1 4 1/3 3;
 1 1 4 1/3 3;
 1/4 1/4 1 1/3 1/2;
 3 3 3 1 3;
 1/3 1/3 2 1/3 1] 
%第一步:将判断矩阵A按照列归一化(每一个元素除以其所在列的和)
Sum_A = sum(A) %默认按列求和,按行求和:Sum_A = sum(A,2)
[n,n] = size(A)%第一个n返回矩阵的行数,第二个返回列数


Sum_A
Stand_A = A./Sum_A

%第二步:将归一化后的各列相加(按列求和)
sum(Stand_A,2)

%第三步:将相加后得到的向量中每一个元素除以n即可得到权重向量
disp('算术平均法求权重的结果为:')
disp(sum(Stand_A,2)/n)

3、几何平均法求权重

%第一步:将A的元素按照行相乘得到一个新的列向量
Prduct_A = prod(A,2) %prod函数是用于乘,加dim = 2维度是行
Prduct_n_A = Prduct_A.^(1/n)
% 这里对每个元素进行乘方操作,因此要加.号哦。  ^符号表示乘方哦  这里是开n次方,所以我们等价求1/n次方
disp('几何平均法的结果是:')
disp(Prduct_n_A./sum(Prduct_n_A))

4、特征值法求权重

%第一步:求出矩阵的最大特征值以及其对应的特征向量
%计算矩阵A的特征值和特征向量的函数是eig(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)))

注:该博客的图片和代码均来自b站清风建模,若侵权可联系删除

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值