文章目录
十大模型
评价类问题
任何评价类模型都是有主观性的
确定评价指标,形成评价体系以选择最佳方案
知网找相关文献
找不到文献就小组头脑风暴
层析分析法出场
层次分析法提供了一个很好的把定性问题定量化分析的方法,它本质上是一种思维方式,把复杂的问题拆解为多个影响因素的定量分析,克服了决策者主观判断的缺点,利用AHP可以进行更有效,高效和可靠可行的决策。
他的关键是把人类的判断转化为两两之间重要程度的比较上,通过两两比较的方法确定出所有影响因素的相对重要程度的总排序,从而把难于量化的定性判断量化为重要程度。
层次分析法的判断矩阵(正互反矩阵)
它是一个两两比较矩阵
一致矩阵
在使用判断矩阵求权重之前,必须对其进行一致性检验
线代中,一致矩阵就是要所有元素大于0,主对角线元素全为1,各行成倍数关系的方阵。
显然,rank肯定是1,只有1个非零特征值,因为所有特征值的和等于迹,所以这个非零特征值就是 n, 对应特征值实际上就是一致矩阵的第一列
A = [1,2,4;
1/2,1,2;
1/4,1/2,1]
[V,D] = eig(A) % 求出A的特征值D和特征向量V
A*[1;1/2;1/4] - 3*[1;1/2;1/4] % 验证[1;1/2;1/4]是否为特征值3对应的特征向量,即上图的最后一行,实际上就是一致矩阵的第一列
输出结果
>> EIG_consistent_matrix
A =
1.0000 2.0000 4.0000
0.5000 1.0000 2.0000
0.2500 0.5000 1.0000
V =
-0.9631 0.8729 0
0.2408 0.4364 -0.8944
0.1204 0.2182 0.4472
D =
-0.0000 0 0
0 3.0000 0
0 0 0
ans =
0
0
0
>>
a = [1:1:8]
b = []
for i = 1:size(a,2) % 列数
A = [1,2,a(i);1/2,1,2;1/a(i),1/2,1]
b = [b,max(eig(A))]
end
plot(a,b)
>> PPT_1
a =
1 2 3 4 5 6 7 8
b =
[]
A =
1.0000 2.0000 1.0000
0.5000 1.0000 2.0000
1.0000 0.5000 1.0000
b =
3.2174
A =
1.0000 2.0000 2.0000
0.5000 1.0000 2.0000
0.5000 0.5000 1.0000
b =
3.2174 3.0536
A =
1.0000 2.0000 3.0000
0.5000 1.0000 2.0000
0.3333 0.5000 1.0000
b =
3.2174 3.0536 3.0092
A =
1.0000 2.0000 4.0000
0.5000 1.0000 2.0000
0.2500 0.5000 1.0000
b =
3.2174 3.0536 3.0092 3.0000
A =
1.0000 2.0000 5.0000
0.5000 1.0000 2.0000
0.2000 0.5000 1.0000
b =
3.2174 3.0536 3.0092 3.0000 3.0055
A =
1.0000 2.0000 6.0000
0.5000 1.0000 2.0000
0.1667 0.5000 1.0000
b =
3.2174 3.0536 3.0092 3.0000 3.0055 3.0183
A =
1.0000 2.0000 7.0000
0.5000 1.0000 2.0000
0.1429 0.5000 1.0000
b =
3.2174 3.0536 3.0092 3.0000 3.0055 3.0183 3.0349
A =
1.0000 2.0000 8.0000
0.5000 1.0000 2.0000
0.1250 0.5000 1.0000
b =
3.2174 3.0536 3.0092 3.0000 3.0055 3.0183 3.0349 3.0536
>>
可以看到A为下面这个矩阵时一致性最好
A =
1.0000 2.0000 4.0000
0.5000 1.0000 2.0000
0.2500 0.5000 1.0000
然后终于要求解打分的权重求解方法了
评价类问题通过打分的方式求解,打分选定了几个指标,那么每个指标到底占多少权重,不好定量确定,可以通过层次分析法科学地计算权重。
首先把所有指标两两比较,写出判断矩阵,然后检查判断矩阵的一致性,即最大特征值和n的差别程度,定量是用 C R = C I R I CR=\frac{CI}{RI} CR=RICI和0.1比较。
经过检验,如果判断矩阵就是一致矩阵(最大特征值就等于n),那么每个指标在所有方案的权重直接使用第一列的归一化数据就可以,因为每一列归一化计算结果是一样的!!这是一致矩阵本身特性决定的。
如果判断矩阵不是一致矩阵但是一致性检验通过了(CI<0.1),则有下面三种方法求权重:
如何调整判断矩阵使之满足一致性检验
如果没通过一致性检验,则需要调整判断矩阵
1. 算术平均法
这时候每一列归一化结果就不一样了
抽象一点总结
2. 几何平均法
3. 特征值法
他的思想就是模仿一致性矩阵,非常好理解
每一个指标关于所有方案的最后的判断矩阵:
每一个指标关于所有方案的最后的计算结果
所有指标的判断矩阵
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;
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
输出
请输入判断矩阵A
A=[1 1/2 4 3 3;2 1 7 5 5;1/4 1/7 1 1/2 1/3;1/3 1/5 2 1 1;1/3 1/5 3 1 1]
算术平均法求权重的结果为:
0.2623
0.4744
0.0545
0.0985
0.1103
几何平均法求权重的结果为:
0.2636
0.4773
0.0531
0.0988
0.1072
特征值法求权重的结果为:
0.2636
0.4758
0.0538
0.0981
0.1087
一致性指标CI=
0.0180
一致性比例CR=
0.0161
因为CR<0.10,所以该判断矩阵A的一致性可以接受!
最终的权重矩阵
计算各个方案的得分
这里最好用excel计算,简单的多
AHP的一些应用
AHP的局限性
使用AHP方法,则不能使用太多评价指标,过多会导致判断矩阵很难满足一致性检验,导致无法计算权重
练习题目
总结
离建模国赛只有7天了,今天花了三个小时把层次分析法学习了,清风老师的资料确实非常有效,钱花的很值得,非常感谢他,代码和理论都特别好,明天继续学习其他模型,加深对建模的理解,希望能拿个好成绩
ps: 最后遗憾拿了国三,D题工矿曲线,告诫大家不要过于沉迷在写代码和解题上,论文是唯一呈现载体(附件的源代码和图片等不一定有人看),方案的创新和高大上,以及讲故事写问文章的能力是一样重要的。本人离提交作品还剩半小时还在颤抖着双手攻坚最后一点代码,结果我们队的方案不够高级,论文不够优美,品尝了遗憾的滋味······