层次分析法

对一些较为复杂、较为模糊的问题做出决策的简易方法,适用于难于完全定量分析的问题。

基本原理和步骤

  1. 建立递阶层次结构模型;
  2. 构造出各层次中的所有判断矩阵
  3. 层次单排序及一致性检验;
  4. 层次总排序及一致性检验;

    一、递阶层结构的建立与特点

    目标层:分析问题的预定目标或理想结果
    中间层(准则层):实现目标涉及的中间环节,包括所需考虑的准则、子准则
    最底层(措施层、方案层):为实现目标可供选择选择的各种措施
    image.png

    二、构造判断矩阵:

    层次分析法(评价类型) - 图2
    层次分析法(评价类型) - 图3
    层次分析法(评价类型) - 图4
    image.png
    一共进行层次分析法(评价类型) - 图6

    三、层次单排序及一次性检验

    定义:判断矩阵A对应于最大特征值层次分析法(评价类型) - 图7的特征向量W,经归一化后即为同一层次相应因素对于上一层次某因素相对重要性的排序权值
    完全一致矩阵A的元素应该满足:层次分析法(评价类型) - 图8,该矩阵为一致矩阵

    检验矩阵A是否严重非一致

    定理1 2 3
    image.png
    image.png
    由定理3得,可从层次分析法(评价类型) - 图11是否等于n来判断矩阵A是否为一致矩阵,层次分析法(评价类型) - 图12比n大得越多,A的非一致性程度也就越严重

    一次性检验步骤:
  5. 计算一致性指标CI:层次分析法(评价类型) - 图13

  6. 查找相应的平均随机一致性指标RI,对n=1,2…

    1. ![image.png](https://cdn.nlark.com/yuque/0/2021/png/12513000/1611976484992-e75692e7-eabe-44b8-ae00-d17efcdd2bc3.png#align=left&display=inline&height=75&margin=%5Bobject%20Object%5D&name=image.png&originHeight=149&originWidth=1244&size=34548&status=done&style=none&width=622)
  7. 计算一致性比例CR: 层次分析法(评价类型) - 图14,CR<0.1时,认为判断矩阵的一致性时可以接受的,否则应该适当修正

    四、层次总排序及一致性检验

    层次单排序算的是一组元素对其上一层中某元素的权重向量,最终要得到各元素,总排序权重要自上而下地将单准则下的权重进行合成
    image.png

    一致性检验:

    层次分析法(评价类型) - 图16

五、应用

image.png
image.png

  1. clc,clear
  2. fid = fopen('txt.txt','r'); %r是读出命令
  3. n1 = 6;
  4. n2 = 3;
  5. a = [];
  6. for i = 1:n1
  7. tmp = str2num(fgetl(fid)); %fgetl读一行并丢弃换行符
  8. a = [a;tmp]; %读准则层判断矩阵
  9. end
  10. for i = 1:n1
  11. str1 =char(['b',int2str(i),'=[];']);
  12. str2 =char(['b',int2str(i),'=[b',int2str(i),';tmp];']);
  13. eval(str1); %eval函数的功能是将字符串转换为matlab可执行语句。通俗而言,比如
  14. for j = 1:n2
  15. tmp = str2num(fgetl(fid));
  16. eval(str2);
  17. end
  18. end
  19. ri=[0,0,0.58,0.90,1.12,1.24,1.32,1.41,1.45];%一致化指标
  20. [x,y]=eig(a); %[V,D]=eig(A):求矩阵A的全部特征值,构成对角阵D,并求A的特征向量构成V的列向量
  21. lamda=max(diag(y)); %diag(y)返回列向量,每个元素为对角线的值
  22. num=find(diag(y)==lamda);
  23. w0=x(:,num)/sum(x(:,num));
  24. cr0=(lamda-n1)/(n1-1)/ri(n1)
  25. for i=i:n1
  26. [x,y]=eig(eval(char(['b',int2str(i)])));
  27. lamda=max(diag(y));
  28. num=find(diag(y)==lamda);
  29. w1(:,i)=x(:,num)/sum(x(:,num));
  30. cr1(i)=(lamda-n2)/(n2-1)/ri(n2);
  31. end
  32. cr1,ts=w1*w0,cr=cr1*w0

image.png
选择工作一

层次分析法(评价类型) - 图20