层次分析法(附代码)

2023-11-07

        层次分析法(The Analytic Hierarchy Process即AHP)是一种系统分析与决策的综合评价方法,其较合理地解决了定性问题定量化的处理过程。AHP的主要特点是通过建立递阶层次结构,把人类的判断转化到若干因素两两之间重要度的比较上,从而把难以量化的定性判断转化为可操作的重要度的比较上面。

步骤:

  1. 建立递阶的层次结构,将因素分为目标层、准则层、方案层等多个层次。
  2. 建立两两判断矩阵
  3. 计算各元素权重

以层次分析法在太阳镜产品质量评价中的应用这篇文章中的评价数据为例展示计算过程:

下图是太阳镜产品质量评价体系结构图:左中右分别为目标层、准则层和方案层

为便于表述,将准则层六个因素记为B1,...,B6,将方案层的因素记为C1,...,C20。

随后列出判断矩阵,以外观与结构(B1)为例

判断矩阵B1-C
B1 C1 C2 C3
C1 1 5 3
C2 0.2 1 0.3333
C3 0.3333 3 1

(判断矩阵中数据采用九分制标度法),记为 \begin{Bmatrix} a_{ij} \end{Bmatrix}

  •  a_{ij} 表示与指标j相比,i的重要程度
  • 当i=j,两个指标相同,故记为1
  • a_{ij}> 0 且满足 a_{ij}\times a_{ji}=1 (我们称满足这一条件的矩阵为正互反矩阵)

在使用判断矩阵求权重之前,必须对其进行一致性检验。

若正互反矩阵满足a_{ij}\times a_{ji}=a_{ik} ,我们称其为一致矩阵。

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

引理:n阶正互反矩阵A为一致矩阵时当且仅当最大特征值 \lambda _{max}= n 且当正互反矩阵A非一致时,一定满足\lambda _{max}> n

一致性检验的步骤:

  1. 计算一致性指标CI:CI=\frac{\lambda _{max}-n}{n-1} (若特征值中有虚数,比较的是特征值的模长
  2. 查找对应的平均随机一致性指标RI
  3. 计算一致性比例CR:CR=\frac{CI}{RI}  如果CR<0.1,则可认为判断矩阵的一致性可以接受;否则需要对判断矩阵进行修正。
disp('请输入判断矩阵A')
A=input('A=');
[n,n] = size(A);
[V,D] = eig(A);
Max_eig = max(max(D));
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];
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

接下来用三种不同的方法求权重

算术平均法

第一步:将判断矩阵按照列归一化(每一个元素除以其所在列的和)
第二步:将归一化的各列相加 ( 按行求和 )
第三步:将相加后得到的向量中每个元素除以 n 即可得到权重向量
clc,clear
disp('请输入判断矩阵A')
A=input('A=');
[n,n]=size(A);
Sum_A=sum(A); %得到总和的列向量
SUM_A=repmat(Sum_A,n,1); %得到与原矩阵相匹配的总和矩阵
Stand_A = A ./ SUM_A; %得到权重向量
disp('算术平均法求权重的结果为:');
disp(sum(Stand_A,2)./n)

几何平均法

第一步:将 A 的元素按照行相乘得到一个新的列向量
第二步:将新的向量的每个分量开 n 次方
第三步:对该列向量进行归一化即可得到权重向量
clc,clear
disp('请输入判断矩阵A')
A=input('A=');
[n,n] = size(A);
Prduct_A = prod(A,2); %得到一个包含每一行乘积的列向量。
Prduct_n_A = Prduct_A .^ (1/n);
disp('几何平均法求权重的结果为:');
disp(Prduct_n_A ./ sum(Prduct_n_A))

特征值法

假如我们的判断矩阵一致性可以接受,那么我们可以仿照一致矩阵权重的求法。
第一步:求出矩阵A的最大特征值以及其对应的特征向量
第二步:对求出的特征向量进行归一化即可得到我们的权重
clc,clear
disp('请输入判断矩阵A')
A=input('A=');
[V,D] = eig(A); 
Max_eig = max(max(D)); %得到最大特征值
[r,c]=find(D == Max_eig , 1);  %得到最大特征值所在行列
disp('特征值法求权重的结果为:');
disp( V(:,c) ./ sum(V(:,c)) )

 

 

论文中采取数据与后两个方法相同,可根据需求进行选择。

将所有判断矩阵所得权重向量综合称一个权重矩阵,再乘以目标层到准则层得到的指标权重,可获得需要的结果。


为了保证结果的稳健性,本文采用了三种方法分别求出了权重后计算平均值,再根据得到的权重矩阵计算各方案的得分,并进行排序和综合分析,这样避免了采用单一方法所产生的偏差,得出的结论将更全面、更有效。

层次分析法的局限性: 评价的决策层不能太多,太多的话 n 会很大,判断矩阵和一致矩阵差异 可能会很大。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

层次分析法(附代码) 的相关文章

随机推荐

  • Ionic3开发教程 - 更新(5)

    Ionic3开发系列教程Ionic3开发教程 环境准备 1 Ionic3开发教程 开发 2 Ionic3开发教程 发布Android版本 3 Ionic3开发教程 发布IOS版本 4 Ionic3开发教程 更新 5 App新功能开发完成后
  • 示波器的使用总结

    任何好的示波器系统的关键点在于精确地重建波形的能力 称为信号完整性 不同的系统和不同性能的示波器 有不同的实现最高信号完整性的能力 探头也对测量系统的信号完整性有影响 数字示波器 DSO 基本结构 采样 gt A D转换 gt 信号分离器
  • 使用TypeScript重构Axios:让你的项目更加完善

    引言 如果你使用过或者了解过JavaScript 那么在使用其开发的过程中 势必会了解到Axios 我们都知道 它带来便捷与效率的同时 js本身也会伴随着一些不大不小的问题 当用JavaScript开发大型项目时 因为没有类型检查 所以很多
  • WebSocket的简单入门使用

    WebSocket WebSocket介绍 Java整合WebSocket SpringBoot整合WebSocket WebSocket介绍 1 什么是WebSocket WebSocket 是HTML5一种新的协议 它实现了浏览器与服务
  • C++面试题

    1 中高级C 工程师 2 空类占一个字节 含有虚函数的类占4字节 复制构造函数要传引用 3 为下面代码编写赋值运算符 class CMyString public CMyString char pData nullptr CMyString
  • 家用计算机 阵列,家用电脑如何建立RAID?

    组建RAID系统攻略 RAID全称为 Redundant Array of Inexpensive Disks 中文意思是 独立冗余磁盘阵列 简称磁盘阵列 简单地说 RAID是一种把多块独立的硬盘 物理硬盘 按不同方式组合起来形成一个硬盘组
  • 【Python】保姆级万字讲解:Python中的 pip 和 conda 的理解

    文章目录 一 pip的理解 1 1 安装 1 2 如何使用 1 3 升级 1 4 安装某个版本的包 1 5 卸载或者是更新包 1 6 查看某个包的信息 1 7 查看需要被升级的包 1 8 查看兼容问题 1 9 指定国内源来安装 1 10 下
  • 读懂Word2Vec之Skip-Gram

    本教程将介绍Word2Vec的skip gram神经网络体系结构 我这篇文章的目的是跳过对Word2Vec的一般的介绍和抽象见解 并深入了解其细节 具体来说 我正在深入skipgram神经网络模型 模型介绍 skip gram神经网络模型其
  • eclipse 安装后没有server 没有tomcat

    下载的是eclipse 4 7 M7 但是下载后要配置tomcat时 找不到tomcat 配置过程 1 window gt gt priferences gt gt server gt gt runtime environment gt g
  • JDBC连接数据库_增删改查

    JDBC基础操作 步骤 第一步 下载驱动 第二步 导入驱动 第三步 加载驱动 第四步 驱动管理器运行 获取链接Connection 第五步 通过链接Connection创建数据库操作对象Statement 第六步 通过数据库操作对象Stat
  • 学node的一点小笔记(十二) node+express上传文件,自定义路径

    upload js var express require express var app express var fs require fs 用于解析数据 var bodyParser require body parser 上传文件中间
  • online learning / continual learning / Incremental Learning / Lifelong learning相关论文列表

    2018 Knowledge Distillation by On the Fly Native Ensemble NIPS2018 Memory Replay GANs learning to generate images from n
  • Effective C++ 学习笔记 条款02 尽量以const、enum、inline替换#define

    宁可以编译器替换预处理器 因为或许 define不被视为语言的一部分 当你 define ASPECT RATIO 1 653 名字ASPECT RATIO从未被编译器看到 可能在编译器处理源码前它就被预处理器移走了 于是ASPECT RA
  • Window 对象

    解释 Window 对象表示浏览器中打开的窗口 如果文档包含框架 或 标签 浏览器会为 HTML 文档创建一个 window 对象 并为每个框架创建一个额外的 window 对象 Window 对象属性 属性 描述 closed 返回窗口是
  • 如何使用Aiseesoft Mac Video Enhancer让视频更加清晰

    Aiseesoft Mac它可以让视频更加清晰 并在Mac上旋转侧向视频以纠正角度 它还允许您使用提供的裁剪 剪裁和水印功能编辑视频 小编来教您如何使用Aiseesoft Mac Video Enhancer让视频更加清晰 1 在Mac上添
  • MySQL主从复制详解

    文章目录 1 简介 1 1 应用场景 1 2 复制形式 2 复制原理 3 复制类型 3 1 异步复制 3 2 同步复制 3 3 半同步复制 4 复制方式 4 1 语句复制 Statement格式 4 2 行数据复制 Row格式 4 3 混合
  • 3.Elasticsearch基础操作

    介绍ES的基本操作 如创建索引 mappings doc的一些基本操作 在doc操作中将分别介绍查询单条数据和多条数据 通过DSL的方式和JAVA api的方式体现 3 1 索引操作 索引操作是一种很危险的操作 索引就像相当于关系型数据库的
  • 浅浅谈Canvas和SVG的区别

    1 Canvas Canvas 中文名称叫 画布 它是游戏中所有UI组件的 容器 一个场景中 可以允许多个Canvas对象的存在 还允许Canvas之间可以进行 嵌套 使用 需要注意的是 场景中的任何一个UI对象 都肯定是某个Canvas对
  • idea web项目中java程序的配置文件放在resources目录下,但是读取不到配置文件

    每个人遇到的情况可能不一样 这个问题困扰我一天多 最后才发现是用错了加载器 可能是同样的加载器调用的方法不一样作用也不一样吧 直接获取系统类加载器 当使用系统类加载器加载配置文件时报空指针异常 当时没考虑到加载器问题 一味的修改路径 绝对路
  • 层次分析法(附代码)

    层次分析法 The Analytic Hierarchy Process即AHP 是一种系统分析与决策的综合评价方法 其较合理地解决了定性问题定量化的处理过程 AHP的主要特点是通过建立递阶层次结构 把人类的判断转化到若干因素两两之间重要度