数学建模模型学习(1)--层次分析法

前面我已经写了两篇博客,是关于matlab基础的,如果没有matlab基础,对于后面这些文章的代码来计算会比较吃力。
(一)matlab常用基本语法和函数总结
(二)用matlab求得矩阵的最大特征值
这上面是两个链接,可以跳转过去的。
下面是我学习的笔记和心得,希望你看完可以快速理解层次分析法。
数学建模模型学习(1)--层次分析法_第1张图片
层次分析法这个模型主要解决评价类问题,评价类问题可以用一种打分的形式作为一个解决方式,比如方案A6分,方案B8分(10分制)这里面就会涉及一个叫权重的东西,我们可以用重要程度来理解这个权重,这个是我们考虑的一个指标,最终我们的所有方案的权重之和为1,权重要进行归一化处理,

这个百度的例子和解释可以帮助我们理解归一化处理的含义
归一化是一个让权重变为统一的过程。
比如,大学生自习室安排问题中,宿舍距各教室路线长短,教室大小,照明质量,满座率等都是影响结果的因素,这些因素本身有一个相对值,可以在本身内作为权重去衡量某项安排的优化程度,但这些因素之间没有一个统一的标准去衡量他,到底是路线长短重要,还是满座率重要,还是别的,它们在最终的决策中怎么进行权重的分配,这就需要归一化来处理,使每个大因素下的小变量之间有一个桥梁,合理的去参与到对决策的影响中。

最基础的打分法来解决这个问题是用权重表来解决的。
评价类问题的思考方向
(1)评价的目标?(对应后来的目标层
常见的有选择旅游景点,学校挑选优秀学生,工作选出优秀员工,大学填写志愿等问题
(2)为了达到目标有几个方案?(对应后来的方案层
主要是为了解决这个目标的问题有几个解决方案,比如旅游,方案一去桂林,方案二去北京长城,方案三去杭州西湖。
(3)选择这些方案的标准或者说准则是什么?
(对应后面的准则层)
比如我选择旅游景点时考虑的准则是景色,居住环境,交通情况,当地饮食等情况。

这些指标的问题可以因人而异,但是为了使得自己建立模型有权威性,绝对不可以仅仅靠自己主观意识来设置这些指标(准则),所有我们最好是可以在网上查找资料,比如说中国知网等,看看别人解决这些问题考虑的准则有哪些,这样使得自己建立的模型更加具有理论和权威。

每个准则的权重不能说仅仅靠当事人来打分决定,而且当事人可能随时变卦,这里就会出现很多变动的可能,同时结果不易量化。这里就采用一种分而治之的思想,即指标之间两两比较,最终根据两两比较结果算出权重。
衡量权重的数字表:
数学建模模型学习(1)--层次分析法_第2张图片
在层次分析法中的矩阵有准则层关于目标的,有方案中根据每一个矩阵的。先看看目标层,准则层和方案层三者之间的流程图。
数学建模模型学习(1)--层次分析法_第3张图片
下面我们看看这个矩阵:
数学建模模型学习(1)--层次分析法_第4张图片
上面这个矩阵是层次分析法的判断矩阵,矩阵中的元素就是打分的结果,这个打分可以有专家打分(很大程度上没办法做到),基本上大部分是自己打分。每一个指标都可以制作一个判断矩阵。
判断矩阵的判断条件:
在这里插入图片描述
但是做权重的计算要求矩阵是一致矩阵,判断矩阵还没办法实现这种关系。
一致矩阵:各行各列成倍数关系的判断矩阵。
下面我们就进行一致矩阵的一致性检验条件:
数学建模模型学习(1)--层次分析法_第5张图片
一致性指标CI=(λmax -n)/(n-1);
一致性比例CR=CI/RI;

CR<0.1,则矩阵的一致性可以接受;
CR>0.1,则矩阵需要修改。
在使用判断矩阵求权重时必须对其
进行一致性检验。
λmax 是矩阵的最大特征向量,
n是矩阵最大特征值。
数学建模模型学习(1)--层次分析法_第6张图片
1.算数平均法求权重:
第一步:将判断矩阵按照归一化
(每个元素除以所在列的和)
第二步:将归一化的各列相加
(即为按行求和)
第三步:将相加后得到向量每个元素除以特征值,可以得到权重向量。
在这里插入图片描述

2.几何平均法求权重:
第一步:将A的元素按照行相乘得到新的一个列向量;
第二步:将新的向量的每个分量开n次方;
第三步:对该向量做归一化可得到权重。
数学建模模型学习(1)--层次分析法_第7张图片

3.特征值法求权重:
一致矩阵有一个为N的特征值,其余特征值为0.
第一步:求得矩阵的最大特征值以及对应的特征向量;
第二步:对求出特征向量进行归一化处理可以得到权重。
数学建模模型学习(1)--层次分析法_第8张图片

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

数学建模模型学习(1)--层次分析法_第9张图片这些内容是我对层次分析法的理解,这其中必定有很多不足,由于时间比较仓促,导致整篇博客写的比较粗糙。当然,这里也花费了我不少功夫,特别是那些公式和表格的制作。最后,如果你觉得我总结的还不错,希望你在文末可以点个赞,或者分享出去,让更多需要的人可以看到,谢谢!

你可能感兴趣的:(matlab)