数学建模与数据分析中的层次分析法

层次分析法
这个方法主要用来解决评价类问题,具体来说,比如什么方案更优,更应当进行哪个项目等。

(1)解决评价类问题需要考虑的因素

  • 找到评价的目标,我们对谁进行评价,例如对高考报志愿的问题。
  • 我们为了达到这个目标一共有几种选项。比如要报志愿,985,211,一本,二本,三本,专科一起构成了6个选项。
  • 评价的准则和指标。针对报志愿的问题,学习环境,就业情况,住宿条件,男女比例,食堂饭菜,科研成果都可以构成评价的指标。(评价的来源:题目中的背景资料,个人的经验,网上的资料知网等)。

(2)层次分析法处理评价指标

1.完成判断矩阵填表

  • 进行评价时每一次都抽取出一个评价因素。
    例如,想要对下面的量进行评价:
    ⭐️表格 a a a

    指标的权重 北京大学 清华大学 复旦大学
    学习环境
    就业情况
    住宿条件
    男女比例
    科研成果
    指标的权重 学习环境 就业情况 住宿条件 男女比例 科研成果
    学习环境
    就业情况
    住宿条件
    男女比例
    科研成果
    学习环境 北京大学 清华大学 复旦大学
    北京大学 1 1 a \frac{1}{a} a1 1 b \frac{1}{b} b1
    清华大学 a 1 1 c \frac{1}{c} c1
    复旦大学 b c 1
  • 上面是一个 3 × 3 3\times3 3×3的矩阵,假设矩阵为 A A A,每一个元素为 a i j a_{ij} aij。则方阵有如下特性:

    • a i j a_{ij} aij表示与选项 i i i与选项 j j j相比,选项 i i i的重要程度。
    • 主对角线的元素均为1。(自己与自己相比同等重要)。
    • a i j > 0 a_{ij}>0 aij>0,并且 a i j × a j i = 1 a_{ij}\times a_{ji}=1 aij×aji=1。并且将这样的矩阵称为正互反矩阵

2.进行一致性检验

  • 产生不一致矩阵的原因,评价者评价完成后导致的逻辑错误。比如对上面的例子,取 a = 3 , b = 1 , c = 2 a=3,b=1,c=2 a=3,b=1,c=2。就会产生逻辑错误,由 a = 3 , b = 1 a=3,b=1 a=3,b=1清华大学比北京大学重要,复旦大学与北京大学一样重要,可以推出清华大学比复旦大学重要,但是由 c = 2 c=2 c=2推出复旦大学比清华大学重要,产生矛盾。
  • 一致性矩阵的充要条件:
    • a i j × a j k = a i k a_{ij}\times a_{jk}=a_{ik} aij×ajk=aik ∀ \forall a i j a_{ij} aij a j k ∈ A a_{jk}\in A ajkA都成立。
    • a 11 = a 22 = ⋯ = a n n = 1 a_{11}=a_{22}=\dotsb=a_{nn}=1 a11=a22==ann=1
    • [ a i 1 , a i 2 , ⋯   , a i n ] = k i [ a 11 , a 22 , ⋯   , a n n ] [a_{i1},a_{i2},\dotsb,a_{in}]=k_{i}[a_{11},a_{22},\dotsb,a_{nn}] [ai1,ai2,,ain]=ki[a11,a22,,ann]。说明每一行成比例。
  • 一致性检验的步骤:
    • 计算一致性指标 C I CI CI
      C I = λ m a x − n n − 1 CI=\dfrac{\lambda_{max}-n}{n-1} CI=n1λmaxn
    • 查找对应的平均随机一致性指标 R I RI RI
      在这里插入图片描述
      注意这里的 n n n最多为15,一般情况下当指标的数量超过10的时候,可以考虑建立二级指标体系。
    • 计算一致性比例 C R CR CR
      C R = C I R I CR=\dfrac{CI}{RI} CR=RICI
      C R = { < 0.1 , 判 断 矩 阵 一 阵 。 ≥ 0.1 , 判 断 矩 阵 不 一 致 。 CR =\begin{cases} <0.1,判断矩阵一阵。\\ \ge0.1,判断矩阵不一致。\end{cases} CR={ <0.1,0.1,

3.计算判断矩阵的权重

  • 算术平均法求权重
    ① ① 将判断矩阵按照列归一化(每一个元素除以其所在列的和)。

    学习环境 北京大学 清华大学 复旦大学
    北京大学 1 1 + a + b \dfrac{1}{1+a+b} 1+a+b1 1 a 1 a + 1 + c \dfrac{\frac{1}{a}}{\frac{1}{a}+1+c} a1+1+ca1 1 b 1 a + 1 + c \dfrac{\frac{1}{b}}{\frac{1}{a}+1+c} a1+1+cb1
    清华大学 a 1 + a + b \dfrac{a}{1+a+b} 1+a+ba 1 1 a + 1 + c \dfrac{1}{\frac{1}{a}+1+c} a1+1+c1 1 c 1 a + 1 + c \dfrac{\frac{1}{c}}{\frac{1}{a}+1+c} a1+1+cc1
    复旦大学 b 1 + a + b \dfrac{b}{1+a+b} 1+a+bb c 1 a + 1 + c \dfrac{c}{\frac{1}{a}+1+c} a1+1+cc 1 1 a + 1 + c \dfrac{1}{\frac{1}{a}+1+c} a1+1+c1

    ② ② 将归一化的各列相加(按行求和)。

    未归一化的权重
    北京大学 1 1 + a + b + 1 a 1 a + 1 + c + 1 b 1 a + 1 + c \dfrac{1}{1+a+b}+\dfrac{\frac{1}{a}}{\frac{1}{a}+1+c}+\dfrac{\frac{1}{b}}{\frac{1}{a}+1+c} 1+a+b1+a1+1+ca1+a1+1+cb1
    清华大学 a 1 + a + b + 1 1 a + 1 + c + 1 c 1 a + 1 + c \dfrac{a}{1+a+b}+\dfrac{1}{\frac{1}{a}+1+c}+\dfrac{\frac{1}{c}}{\frac{1}{a}+1+c} 1+a+ba+a1+1+c1+a1+1+cc1
    复旦大学 b 1 + a + b + c 1 a + 1 + c + 1 1 a + 1 + c \dfrac{b}{1+a+b}+\dfrac{c}{\frac{1}{a}+1+c}+\dfrac{1}{\frac{1}{a}+1+c} 1+a+bb+a1+1+cc+a1+1+c1

    ③ ③ 将相加后得到的向量中每个元素除以 n n n即可得到权重向量。

    权重
    北京大学 1 1 + a + b + 1 a 1 a + 1 + c + 1 b 1 a + 1 + c n \dfrac{\dfrac{1}{1+a+b}+\dfrac{\frac{1}{a}}{\frac{1}{a}+1+c}+\dfrac{\frac{1}{b}}{\frac{1}{a}+1+c}}{n} n1+a+b1+a1+1+ca1+a1+1+cb1
    清华大学 a 1 + a + b + 1 1 a + 1 + c + 1 c 1 a + 1 + c n \dfrac{\dfrac{a}{1+a+b}+\dfrac{1}{\frac{1}{a}+1+c}+\dfrac{\frac{1}{c}}{\frac{1}{a}+1+c}}{n} n1+a+ba+a1+1+c1+a1+1+cc1
    复旦大学 b 1 + a + b + c 1 a + 1 + c + 1 1 a + 1 + c n \dfrac{\dfrac{b}{1+a+b}+\dfrac{c}{\frac{1}{a}+1+c}+\dfrac{1}{\frac{1}{a}+1+c}}{n} n1+a+bb+a1+1+cc+a1+1+c1

    使用公式直接计算权重向量
    W e i g h t = [ ω 1 ω 2 ⋮ ω n ] Weight=\left[ \begin{matrix} \omega_1\\ \omega_2\\ \vdots\\ \omega_n \end{matrix} \right] Weight=ω1ω2ωn
    ω i = 1 n ∑ j = 1 n a i j ∑ k = 1 n a k j ( i = 1 , 2 , ⋯   , n ) \omega_i=\dfrac{1}{n} \displaystyle \sum_{j=1}^{n}\dfrac{a_{ij}}{\displaystyle \sum_{k=1}^{n}a_{kj}}(i=1,2,\dotsb,n) ωi=n1j=1nk=1nakjaij(i=1,2,,n)

  • 几何平均法求权重
    ① ① A A A的元素按照行相乘得到一个新的列向量。
    ② ② 将新的向量的每个分量开 n n n次方。
    ③ ③ 对该列向量进行归一化即可得到权重向量。
    W e i g h t = [ ω 1 ω 2 ⋮ ω n ] Weight=\left[ \begin{matrix} \omega_1\\ \omega_2\\ \vdots\\ \omega_n \end{matrix} \right] Weight=ω1ω2ωn
    ω i = ( ∏ j = 1 n a i j ) 1 n ∑ k = 1 n ( ∏ j = 1 n a k j ) ( i = 1 , 2 , ⋯   , n ) \omega_i=\dfrac{(\displaystyle \prod_{j=1}^{n}a_{ij})^{\frac{1}{n}}}{\displaystyle \sum_{k=1}^{n}(\prod_{j=1}^{n}{a_{kj}})}(i=1,2,\dotsb,n) ωi=k=1n(j=1nakj)(j=1naij)n1(i=1,2,,n)

  • 特征值法求权重
    ① ① 求出矩阵 A A A的最大特征值以及其对应的特征向量。
    ② ② 对求出的矩阵 A A A进行归一化处理。

4.计算各项得分,进行判断

  • 把求出的每一个向量填回到原来的表格a中。
  • 用指标的权重与每个选项对应的因素权重相乘再求和得到每个选项的总得分。
  • 将总得分进行比较,选出最好的选项。

(3)matlab代码附录

%%
%检测判断矩阵是否为正互反矩阵
limit=1e-6;
A=input('输入需要求权重的矩阵\n');
n=size(A,1);
A_Inspect=A.*A';
if all(abs(A_Inspect-ones(n,n))<limit)
    disp("该矩阵为正互反矩阵!");
else
    disp("该矩阵不为正互反矩阵!");
    return;
end
%%
%进行一致性检验
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]; 
lamda=eig(A);
max_lamda=max(lamda);
CI=(max_lamda-n)/(n-1);
CR=CI/RI(n);
if CR<0.1
    disp(['通过一致性检验,并且CR为',num2str(CR)]);
else
   disp(['未通过一致性检验,并且CR为',num2str(CR)]);
   return;
end
%%
%计算判断矩阵
%%
%使用算术平均法求权重。
B=sum(A,1);
C=repmat(B,n,1);
Weight_Average=sum(A./C,2)/n;
disp(['使用算术平均法求得的权重为:']);
Weight_Average
%%
%%使用几何平均法求权重。
B=prod(A,2);
C=B.^(1/n);
Weight_Geometry=C./sum(C);
disp(['使用几何平均法求得的权重为:']);
Weight_Geometry
%%
%使用特征值法求权重。
[vector,value]=eig(A);
[r,c]=find(value==max(max(value)));
B=vector(:,c,1);
Weight_Eigenvalue=B./sum(B);
disp(['使用特征值平均法求得的权重为:']);
Weight_Eigenvalue

猜你喜欢

转载自blog.csdn.net/weixin_44618906/article/details/104025409