适用于决策变量主观,难以定量的评价问题

1. 定义

多目标
定性与定量相结合

2. 应用

最佳方案的选取
评价类问题
指标体系的优选

3. 步骤

(1) 建立层次结构模型

最高层:决策的目的、要解决的问题
中间层:考虑的因素、决策的准则
最底层:决策时的备选方案

示例
在这里插入图片描述

(2) 构造成对比较矩阵

标度Value
1两因素具有同样重要性
3一个因素比另一个因素稍微重要
5一个因素比另一个因素明显重要
7一个因素比另一个因素强烈重要
9一个因素比另一个因素极端重要
2,4,6,8重要性位于两程度之间
倒数变成同样程度的不重要
  • 对于一致阵
    存在唯一非零特征根n(矩阵的阶数)
    n所对应的特征向量归一化后即可作为权向量

定理:n阶一致阵的唯一非零特征根为n

  • 对于非一致阵
    选用最大特征根 λ \lambda λ的特征向量,经归一化后作为权向量 ω \omega ω

定理:非一致阵的最大特征根 λ > n \lambda > n λ>n

(3) 层次单排序及其一致性检验

根据成对比较矩阵算出最大特征根 λ \lambda λ

① 一致性指标
C I = λ − n n − 1 CI = \frac{\lambda - n}{n-1} CI=n1λn

  • C I = 0 CI = 0 CI=0,有完全的一致性
  • C I → 0 CI \to 0 CI0,有满意的一致性
  • C I CI CI越大,不一致越严重

② 随机一致性指标 R I RI RI

n1234567891011
RI000.580.901.121.241.321.411.451.491.51

③ 一致性比率 C R CR CR
C R = C I R I CR = \frac{CI}{RI} CR=RICI
C R < 0.1 CR<0.1 CR<0.1,则通过一致性检验;
若未通过检验,则需要重新构造成对比较矩阵A

根据特征根求出特征向量,并进行归一化处理,得到单层次排序。

(4) 层次总排序及其一致性检验

计算某一层所有因素对于最高层相对重要性的权值。

C R = a 1 C I 1 + a 2 C I 2 + ⋅ ⋅ ⋅ + a m C I m a 1 R I 2 + a 2 R I 2 + ⋅ ⋅ ⋅ + a m R I m CR = \frac{a_1CI_1 + a_2CI_2+···+a_mCI_m}{a_1RI_2 + a_2RI_2+···+a_mRI_m} CR=a1RI2+a2RI2++amRIma1CI1+a2CI2++amCIm

  • C I 1 CI_1 CI1:最底层对中间层中因素的层次单排序的一致性指标。
  • R I 1 RI_1 RI1:最底层对中间层中因素的层次单排序的随机一致性指标。
  • a i a_i ai:中间层对目标层的单层次排序

C R < 0.1 CR<0.1 CR<0.1,则通过检验;

只有通过检验后才可进行决策,否则需要重新考虑模型或重新构造成对比较矩阵。

求出最低层对中间层各因素的权向量,再求出各因素对目标的权向量,列表如下
在这里插入图片描述

对各方案求出一个量化值,比较大小,进行评价

4. 模型评价

(1) 优点

  • 系统性

  • 实用性
    定性与定量相结合
    无需大量数据
    两两比较

  • 简洁性

(2) 缺点

  • 主观性。需要大量分析,确定成对比较矩阵。
  • 不能给出新的方案,只能从原来的方案中选取最优的方案

代码示例

%主函数


clear;clc;
A=[1 5 4 3; 
    0.2 1 0.5 0.25;
    0.25 2 1 0.33;
    0.33 4 3 1];


B1 = [1,3,5,3,3,3,5,5,5;0.330000000000000,1,3,1,1,1,3,3,3;0.200000000000000,0.330000000000000,1,1,1,1,3,3,3;0.330000000000000,1,1,1,1,1,3,3,3;0.330000000000000,1,1,1,1,1,3,3,3;0.330000000000000,1,1,1,1,1,3,3,3;0.200000000000000,0.330000000000000,0.330000000000000,0.330000000000000,0.330000000000000,0.330000000000000,1,1,1;0.200000000000000,0.330000000000000,0.330000000000000,0.330000000000000,0.330000000000000,0.330000000000000,1,1,1;0.200000000000000,0.330000000000000,0.330000000000000,0.330000000000000,0.330000000000000,0.330000000000000,1,1,1];
B2 = [1,1,3,1,5,3,5,3,7;1,1,3,1,5,3,5,3,7;0.330000000000000,0.330000000000000,1,0.330000000000000,3,1,3,1,5;1,1,3,1,5,3,5,3,7;0.200000000000000,0.200000000000000,0.330000000000000,0.200000000000000,1,0.330000000000000,1,0.330000000000000,3;0.330000000000000,0.330000000000000,1,0.330000000000000,3,1,3,1,5;0.200000000000000,0.200000000000000,0.330000000000000,0.200000000000000,1,0.330000000000000,1,0.330000000000000,3;0.330000000000000,0.330000000000000,1,0.330000000000000,3,1,3,1,5;0.140000000000000,0.140000000000000,0.200000000000000,0.140000000000000,0.330000000000000,0.200000000000000,0.330000000000000,0.200000000000000,1];
B3 = [1,1,1,1,1,1,1,1,1;1,1,1,1,1,1,1,1,1;1,1,1,1,1,1,1,1,1;1,1,1,1,1,1,1,1,1;1,1,1,1,1,1,1,1,1;1,1,1,1,1,1,1,1,1;1,1,1,1,1,1,1,1,1;1,1,1,1,1,1,1,1,1;1,1,1,1,1,1,1,1,1]; 
B4 = [1,1,3,5,3,7,5,1,5;1,1,3,5,3,7,5,1,5;0.330000000000000,0.330000000000000,1,5,3,7,3,0.330000000000000,3;0.200000000000000,0.200000000000000,0.200000000000000,1,0.330000000000000,3,0.330000000000000,0.200000000000000,0.330000000000000;0.330000000000000,0.330000000000000,0.330000000000000,3,1,5,1,0.200000000000000,1;0.140000000000000,0.140000000000000,0.140000000000000,0.330000000000000,0.200000000000000,1,0.200000000000000,0.140000000000000,0.200000000000000;0.200000000000000,0.200000000000000,0.330000000000000,3,1,5,1,0.330000000000000,1;1,1,3,5,5,7,3,1,5;0.200000000000000,0.200000000000000,0.330000000000000,3,1,5,1,0.200000000000000,1];

[W0, Lmax0, CI0, CR0] = AHP(A);

wei0 = quan(A);

[W1, Lmax1, CI1, CR1] = AHP(B1);
[W2, Lmax2, CI2, CR2] = AHP(B2);
[W3, Lmax3, CI3, CR3] = AHP(B3);
[W4, Lmax4, CI4, CR4] = AHP(B4);

wei1 = quan(B1);
wei2 = quan(B2);
wei3 = quan(B3);
wei4 = quan(B4);

CI = [CI1,CI2,CI3,CI4];
RI = [0.52,0.52,0.52,0.52];
CR = sum(W0.*CI)/sum(W0.*RI);
% 实现单层次结构的层次分析法

function [W, Lmax, CI, CR] = AHP(A)
% 输入: A为成对比较矩阵
% 输出: W为权重向量, Lmax为最大特征值, CI为一致性指标, CR为一致性比率
 
[V,D] = eig(A);
[Lmax,ind] = max(diag(D));       % 求最大特征值及其位置
W = V(:,ind) / sum(V(:,ind));    % 最大特征值对应的特征向量做标准化
Lmax = mean((A * W) ./ W);       % 计算最大特征值
n = size(A, 1);                  % 矩阵行数
CI = (Lmax - n) / (n - 1);       % 计算一致性指标
% Saaty随机一致性指标值
RI = [0 0 0.58 0.90 1.12 1.24 1.32 1.41 1.45 1.49 1.51]; 
CR = CI / RI(n);                 % 计算一致性比率
%求特征向量

function ret = quan(A)
[n,n]=size(A);

[V,D]=eig(A);%求得特征向量和特征值
            %求出最大特征值和它所对应的特征向量
tempNum=D(1,1);
pos=1;
for h=1:n
    if D(h,h)>tempNum
        tempNum=D(h,h);
        pos=h;
    end
end    
w=abs(V(:,pos));
w=w/sum(w);

ret = w;
Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐