【数模】层次分析法总结(附Matlab代码)

 新人小白课后总结,最近在按照清风学长的课程学习,因为学长的思路比较精炼,部分截图出自学长的ppt,特此声明。

有关该文涉及的Matlab基础知识笔记我会放在文章最后。

 层次分析法是评价类问题,中心思想是“确定评价指标,形成评价体系”。其本质为“将复杂问题分解成多个组成因素,又将这些因素按支配关系分别形成递阶层次结构,通过两两比较的方法确定决策方案相对重要度的总排序“。

  主要思路:

1.确定评价目标--目标层M

2.确定可选路径--准则层C

3.选取评价指标--方案层P

在实际情况中,根据准则层与方案层可能存在的关系,我们可以得到以下几种情况:

 

 发现不同之处了吗?在第一种情况当中,各方案只对应一个准则,各准则的方案不交叉;在第二种情况当中,每个准则都对应全部的方案,准则层与方案层之间是完全交叉的;而第三种情况当中,准则层与方案层部分交叉。

  三种情况的共性与区别:

相同点:

1.各准则层C之间的重要程度是不同的,因此我们需要确定C1、C2、C3的权重关系。由于Ci一般是由多个指标Pi构成,就如上图三种情况一样,较为复杂,无法直接计算Ci之间的权重关系,因此在实际操作中,我们往往是先计算P层各指标的权重关系,再向上计算

2.各准则层Ci对同一方案层P的重要程度也不同,因此也需要分别确定权重关系。比如上图的第二种情况,P1同时与C1、C2、C3有关联,但这些关联的程度肯定是有强有弱的,因此我们也需要考虑C1、C2、C3对于P1的权重关系

不同点:

1.分析C-P层时,可以将C1、C2、C3分别与所有的P联系起来,实际没有对应关系的,可以将Ci的权重记为0.(如:在第三种情况中,在列P2的权重时,可以将与P2无关的C3权重记为0)

2.情况1区别于情况23的不同:对于情况1来说,每个C的指标P不交叉,也就是P只与1个C有关,在上文我们得知,无关的可以将权重记为0,也就是对于P1来说,C1权重为1,C2、C3权重为0,此时从P层推C层就失去意义;另外,第一种情况往往P的个数较多,如果先统一计算P层各指标的权重关系,矩阵会过大,在后期的计算中会带来较大误差。

解决方法:对于情况1,可以从上向下推算,先计算C层之间的关系(C层指标不交叉,意味着P层权重关系对C层不会产生影响)再从C到P计算C-P的权重关系(即每个指标P对C层的影响程度强弱)

综上所述,整体解题思路:

打分法确定权重

那么表格中的权重应该如何填写呢?在层次分析法中一般用打分解决:

 (这里以情况2为例,表头为指标,即方案层P)

在进行两两比较之后,可以填出以下权重表:

多次比较之后,可以将该表填写完整。(这张表本来应该由专家填写,但一般都是自己填的,因此如果有数据转化的而来的话,可信度会高一些)

 接下来,我们需要用这个判断矩阵来计算各指标之间的权重,但是这个表格毕竟是由我们自己填写的,我们需要先检验它是否合理,因此在计算权重之前,我们应先进行一致性检验。

一致性检验

判断是否为一致矩阵

一致矩阵:各行(各列)之间成倍数关系

不满足上述关系的矩阵都需要进行一致性检验,比如下图中左下角的矩阵。而我们将(1,3)处的5和(3,1)处的1/5进行修正之后,就得到了右下角的一致矩阵,这是简单的排除不一致矛盾的办法。

 但在实际解题中,我们可以保留一定的不一致,不然就没有办法做一致性检验了,相当于少了一个增强可信度的步骤。

一致性检验:检验我们构造的判断矩阵和一致矩阵是否有太大的差别。

相关理论:

(理论部分不用太纠结,了解即可,感兴趣可以看一下原视频的讲解)

 下面是在论文中会用到的步骤:

首先,从理论部分我们知道,需要先知道最大特征值,才能计算一致性指标和一致性比例。这个最大特征值是在matlab中使用函数eig(A)求得的(A为矩阵)

求解步骤:

 这里的修正就是指像上一步那样微调就可以了,只要还保留一点不一致能计算就行。

注意我们看上图第二步”平均随机一致性指标RI“的表格,n=2处RI为0,也就是说如果你计算一个2x2的矩阵,是一定一致的,而且没有CR的值(因为分母为0),所以如果有需要检验的二阶矩阵,我们可以稍微修改一下Matlab中n=2的值,把它改成接近0的数,比如0.0001,这样我们就可以得到一个CR的值,方便后面做数据。

”整体解题思路“图中的第一步和第二步的所有表格都需要进行一致性检验。

Matlab代码实现:

%% 计算最大特征值,进行一致性检验
[r,c] = size(A);%求一下A的大小,r为列,c为行,这里我们求的矩阵是r = c的
[R, C] = eig (A); %求特征值和特征向量(R的每一列都是一个特征向量,C是用对角矩阵表示的特征值)
Max_eig = max(C(:)); %找出最大特征值
disp(['最大特征值入 = ' num2str(Max_eig)])
CI = (Max_eig - c) / (c - 1);
disp(['一致性指标CI = ' num2str(CI)])
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];%便于二阶矩阵也能通过一致性检验,改写了第二个数,原来应该为0
disp(['一致性指标RI = ' num2str(RI(c))])
CR = CI / RI(c);
if CR < 0.1 
    disp('CR < 0.1成立,该判断矩阵的一致性可以接受')
else
    disp('CR < 0.1不成立,该判断矩阵未通过一致性检验')
end

在我们的矩阵通过一致性检验之后,我们就可以开始计算权重了。

三种方法计算权重:

算术平均法:

 本人代码实现:

%% 算术平均法求权重
%第一步:归一化处理--把每一列权重处理成和为一的形式;
Sum_A = sum(A); %对A的每一列进行求和,得到一个行向量
RepA = repmat(Sum_A, c, 1); %将Sum_A重复拼接c次 使得A1与A大小相同,且元素对应位置为A该列的和
Stand_A = A ./ RepA;  %对应位置元素相除,对A进行归一化处理

%第二步:将各列相加
Sum_Stand_A = sum(Stand_A, 2); %按行求和

%第三步:将上一步所得向量每一个除以指标个数,得到权重向量
w = Sum_Stand_A ./ c;

 几何平均法:

  本人代码实现:

%% 几何平均法求权重

%第一步:按行相乘,得到一个列向量
for i = 1:c
    ComA = 1; %给新向量初始化一下
    temp = A(:,i); %取出每一列的元素
    ComA = ComA .* temp; %注意此处是点乘
end

%第二步:将列向量中每个元素开n次方
SqrA = ComA .^ (1/c);

%第三步:对该向量进行归一化处理,得到权重向量
%Stand_SqrA_1 = normalize(SqrA, 'range') 这个函数的归一化处理与本题的归一化不是一个意思
Sum_SqrA = sum(SqrA); %按列求和
SUM_SqrA = [];        %新建一个空矩阵
for k = 1:c 
    SUM_SqrA = [SUM_SqrA;Sum_SqrA]; %将按列求和的结果重复拼接c次 使得SUM_SqrA与SqrA为相同大小的列向量,且元素对应位置为该列的和
end
Stand_SqrA = SqrA ./ SUM_SqrA; %对应位置元素相除,对SqrA进行归一化处理

特征值法求权重:

%% 特征值法求权重

%第一步:求出矩阵A的最大特征值以及其对应的特征向量

C == Max_eig; %条件判断,最大特征值所处位置元素替换为1,其他位置元素替换为0
[r1, c1] = find(C, 1);%用find函数,找出最大特征值的位置

%第二步:对对应列的特征向量进行归一化处理,得权重向量
Sum_R = sum(R(:,c1));%按列求和
RepR = repmat(Sum_R, c, 1); %将Sum_A重复拼接c次 使得A1与A大小相同,且元素对应位置为A该列的和
Stand_R = R(:,c1) ./ RepR;  %对应位置元素相除,对A进行归一化处理

 到这里我们已经得到了三个权重向量,然后将这三个权重向量平均一下就可以得到最佳结果。

提醒:每个矩阵都要经过这些步骤,可以在论文中详略得当的写,比如我是把部分数据结果并列放置的

 到这里我们已经完成了所有计算步骤,也得到了所有需要的数据,接下来就是把各数据整理好,得到总权重表即可。

以下为本文代码所涉及的Matlab基础知识,是我在听清风学长的课时做的笔记,有看不懂的地方或者是缺漏的地方可以留言告诉我。

 

  • 6
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值