IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 层次分析法(附代码) -> 正文阅读

[数据结构与算法]层次分析法(附代码)

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

步骤:

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

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

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

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

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

判断矩阵B1-C
B1C1C2C3
C1153
C20.210.3333
C30.333331

(判断矩阵中数据采用九分制标度法),记为 \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 会很大,判断矩阵和一致矩阵差异 可能会很大。
  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-06-14 22:53:04  更:2022-06-14 22:54:04 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 1:52:09-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码