一、层次分析法概述
层次分析法(Analytic Hierarchy Process,AHP)是一种决策方法,其核心思想是将一个复杂的决策问题层层分解为目标、准则、方案等不同层次,然后通过定性和定量的分析方法对各层次的元素进行比较和权衡。这方法由美国运筹学家萨蒂在20世纪70年代初提出,最初应用于为美国国防部研究电力分配问题。
传统的定性分析方法,如专家打分和专家判断,往往只能对指标进行简单的划分,例如非常重要、比较重要、一般等,容易导致相对重要但细微差别的指标被赋予相同的权重。由于受到主观因素的影响,这些方法难以提供更为准确和客观的决策支持。层次分析法通过对不同指标之间的逐一比较,巧妙地将主观和客观因素结合起来,有效地克服了传统方法的局限性,为最终决策提供更为科学和全面的分析。
二、层次分析法计算步骤及示例
针对套筒类零件表面质量视觉检测环节,提出三种以上的检测执行方案(含软硬件),利用AHP法,从时间、成本、质量、空间布局、可靠性五个方面对所提出的方案进行评价。
1.构造目标层次结构图
AHP经常将一个决策(一个决定)分解为目标层,准则层,方案层。
方案描述:
方案 1:使用2D视觉系统
描述: 该方案采用2D视觉系统对套筒类零件进行表面质量检测。通过2D相机、光源和图像处理软件,系统可以迅速捕捉零件表面图像。
软硬件: 使用2D相机、光源以及专业的图像处理软件,构建了一个相对简单而高效的系统。
成本: 中等成本。由于采用2D视觉技术,相较于其他高级系统,硬件和软件的成本相对较低。
时间: 检测速度快。由于使用2D图像,检测过程通常更加迅速,适用于对表面缺陷的快速筛查。
可靠性: 中等可靠性。对于一般表面质量检测任务,2D视觉系统通常能够提供高度可靠的结果。
空间布局: 需要适当的工作空间。相机和光源的布局需要合理设计,以确保能够捕捉到整个套筒表面。
质量:较低质量。
方案 2:使用3D视觉系统
描述: 该方案采用3D视觉系统对套筒类零件进行表面质量检测。通过3D相机、光源和专业的三维重建软件,系统可以获取零件表面的立体信息。
软硬件: 使用3D相机、光源以及高级的三维重建软件,构建了一个专业且精密的系统。
成本: 较高成本。由于采用了先进的3D视觉技术,硬件和软件的成本相对较高。
时间: 检测速度适中。相对于2D系统,3D系统可能需要更多的时间来获取更详细的表面信息。
可靠性: 非常高可靠性。适用于对表面质量要求较高,需要高精度检测的任务。
空间布局: 需要适当的工作空间“6”。与2D系统相似,布局需要合理设计,以确保获取完整的三维信息。
质量:中等质量。
方案 3:使用机器学习辅助视觉检测
描述: 该方案结合了机器学习算法,采用智能视觉系统对套筒类零件进行表面质量检测。通过智能视觉系统、机器学习算法、相机和光源,系统具备学习能力。
软硬件: 集成了智能视觉系统和机器学习算法,使用相机和光源进行表面质量检测。
成本: 较高成本。由于引入了机器学习技术,系统具备更高的智能化和学习能力,因此成本相对较高。
时间: 检测速度适中。相对于传统的2D系统,机器学习模型可能需要更多的时间进行训练和学习。
可靠性: 高可靠性且具备学习能力。适用于复杂表面质量检测,且能够逐步改进检测性能。
空间布局: 需要适当的工作空间。与前两个方案类似,需要合理设计布局。
质量:较高质量。
2.定义比例标度表及构建指标比对表
构造判断矩阵
即把准则层的指标进行两两判断,确定各准则层对目标层的权重
对于准则层A我们可以构建:
q其中A中的元素满足:
层次结构反映了因素之间的关系,但准则层中的各准则在目标衡量中所占的比重 并不一定相同, 在确定影响某因素的诸因子在该因素中所占的比重时,遇到的主要困难是这些比重常常不易定量化。
现在要n个因子对某因素Z的影响大小,可以采取对因子进行两两比较建立成对比较矩阵的办法,具体做法是每次取两个因子,,如果相比对Z的重要程度为,那么相比对Z的重要程度为.关于两个因子的重要程度可根据查找文献等方法获得。
判断矩阵:
简单来说如第一列7就是可靠性相较于时间来说强烈重要,1/3表示空间布局相较于时间来说不是那么重要。
平均随机一致性指标RI值是通过查表得出来的
3.构建方案-准则比对表
准则比对表(Criterion Comparison Matrix)是在层次分析法(AHP)中使用的一种工具,用于比较不同决策准则之间的相对重要性。在AHP中,一个决策问题通常被分解成一个层次结构,其中包含目标、准则和子准则等不同层次。准则比对表用于比较准则之间的相对重要性,以便进行权重分配。
依据每个方案在不同准则要素的表现进行比对,分别建立时间、成本、质量、空间布局、可靠性五个比对表
4. 权重计算程序
import numpy as np
judgment_matrix = np.array([
[1, 1/3, 1/3, 1/7, 3],
[3, 1, 1/5, 1/5, 2],
[3, 5, 1, 1/2, 2],
[7, 5, 2, 1, 3],
[1/3, 1/2, 1/2, 1/3, 1]])
eigenvalues, eigenvectors = np.linalg.eig(judgment_matrix)
max_eigenvalue = max(eigenvalues)
max_eigenvalue_index = np.argmax(eigenvalues)
eigenvector = eigenvectors[:, max_eigenvalue_index]
weights = eigenvector / np.sum(eigenvector)
n = len(weights)
consistency_ratio = (max_eigenvalue - n) / (n - 1)
random_index = {3: 0.58, 4: 0.90, 5: 1.12, 6: 1.24, 7: 1.32, 8: 1.41, 9: 1.45}
print("权重:")
for i in range(len(weights)):
print(f"评价指标 {i + 1}: {weights[i]:.3f}")
print(f"一致性比率: {consistency_ratio:.3f}")
if consistency_ratio < random_index[n]:
print("一致性检验通过,判断矩阵一致。")
else:
print("一致性检验未通过,判断矩阵不一致。")
权重:
评价指标 1: 0.092-0.000j
评价指标 2: 0.123-0.000j
评价指标 3: 0.270-0.000j
评价指标 4: 0.435-0.000j
评价指标 5: 0.079-0.000j
一致性比率: 0.172+0.000j
一致性检验通过,判断矩阵一致。
代码详解:
定义判断矩阵:
- judgment_matrix = np.array([
- [1, 1/3, 1/3, 1/7, 3],
- [3, 1, 1/5, 1/5, 2],
- [3, 5, 1, 1/2, 2],
- [7, 5, 2, 1, 3],
- [1/3, 1/2, 1/2, 1/3, 1]])
计算特征值和特征向量:
- eigenvalues, eigenvectors = np.linalg.eig(judgment_matrix)
确定最大特征值及其对应的特征向量:
- max_eigenvalue = max(eigenvalues)
- max_eigenvalue_index = np.argmax(eigenvalues)
- eigenvector = eigenvectors[:, max_eigenvalue_index]
计算权重:
- weights = eigenvector / np.sum(eigenvector)
计算一致性比率:
- consistency_ratio = (max_eigenvalue - n) / (n - 1)
进行一致性检验:
- if consistency_ratio < random_index[n]:
- print("一致性检验通过,判断矩阵一致。")
- else:
- print("一致性检验未通过,判断矩阵不一致。")
打印结果:
- print("权重:")
- for i in range(len(weights)):
- print(f"评价指标 {i + 1}: {weights[i]:.3f}")
- print(f"一致性比率: {consistency_ratio:.3f}")
5. 评价结果比较及差异分析
使用计算出的权重,我们可以对备选方案 1、2、3进行评估。在评价结果比较中,我们将每个备选方案在每个指标上的得分相乘,然后将所有指标的得分相加,以得出最终评分。最终得分越高,表示备选方案越有利。
random_index 是一个预先设定的随机一致性指数,它根据矩阵的阶数(大小)来确定。在你的例子中,是根据阶数 n 来选择对应的指数。
random_index = {3: 0.58, 4: 0.90, 5: 1.12, 6: 1.24, 7: 1.32, 8: 1.41, 9: 1.45}
对于五阶矩阵,对应的随机一致性指数是 1.12。代码中,如果计算出的一致性比率小于 1.12,就可以认为矩阵是相对一致的。可以根据实际情况调整这个阈值,但一般来说,1.12 是一个常见的默认值。
一致性比率的计算方式是:
consistency_ratio = (max_eigenvalue - n) / (n - 1)
其中,max_eigenvalue 是最大特征值,n 是矩阵的阶数。计算出的 consistency_ratio 与 random_index 进行比较,如果小于对应阶数的随机一致性指数,就认为一致性检验通过。
import numpy as np
def calculate_consistency_and_weight(matrix):
eigenvalues, eigenvectors = np.linalg.eig(matrix)
max_eigenvalue = max(eigenvalues)
max_eigenvalue_index = np.argmax(eigenvalues)
eigenvector = eigenvectors[:, max_eigenvalue_index]
weights = eigenvector / np.sum(eigenvector)
n = len(weights)
consistency_ratio = (max_eigenvalue - n) / (n - 1)
random_index = {3: 0.58, 4: 0.90, 5: 1.12, 6: 1.24, 7: 1.32, 8: 1.41, 9: 1.45}
if consistency_ratio < random_index[n]:
print("一致性检验通过,判断矩阵一致。")
else:
print("一致性检验未通过,判断矩阵不一致。")
return weights
b1 = np.array([[1, 3, 5], [1 / 3, 1, 2], [1 / 5, 1 / 2, 1]])
b2 = np.array([[1, 2, 3], [1 / 2, 1, 2], [1 / 3, 1 / 2, 1]])
b3 = np.array([[1, 1 / 3, 1 / 5], [3, 1, 1 / 3], [5, 3, 1]])
b4 = np.array([[1, 1 / 4, 1 / 6], [4, 1, 1 / 3], [5, 3, 1]])
b5 = np.array([[1, 3, 4], [1 / 3, 1, 2], [1 / 4, 1 / 2, 1]])
weights_b1 = calculate_consistency_and_weight(b1)
weights_b2 = calculate_consistency_and_weight(b2)
weights_b3 = calculate_consistency_and_weight(b3)
weights_b4 = calculate_consistency_and_weight(b4)
weights_b5 = calculate_consistency_and_weight(b5)
weights_criteria = np.array([0.092, 0.123, 0.270, 0.435, 0.079])
objectives_weights = np.array([weights_b1, weights_b2, weights_b3, weights_b4, weights_b5])
final_weights = np.dot(weights_criteria, objectives_weights)
print("\n最优选择方案权重:", final_weights)
print("最优选择方案:", np.argmax(final_weights) + 1)
代码分析:
导入NumPy库:
代码开始通过导入NumPy库,NumPy通常用于Python中的数值运算。
- import numpy as np
函数定义 (calculate_consistency_and_weight): 这个函数以一个矩阵作为输入,并执行以下步骤:
a. 使用NumPy的 np.linalg.eig 函数计算输入矩阵的特征值和特征向量。
b. 确定最大特征值及其对应的特征向量。
c. 计算特征向量中每个元素的权重。
d. 使用AHP一致性比率的公式计算一致性比率。
e. 进行一致性检查,打印矩阵是否一致。
f. 返回计算得到的权重。
- def calculate_consistency_and_weight(matrix):
- return weights
比较矩阵的定义 (b1, b2, b3, b4, b5): 这些矩阵表示在某些准则下对不同备选方案进行两两比较。每个矩阵对应于不同的决策情境。
- b1 = np.array([[1, 3, 5], [1 / 3, 1, 2], [1 / 5, 1 / 2, 1]])
# ...(类似地对b2、b3、b4、b5)
计算每个矩阵的权重: 对每个矩阵(b1到b5)调用calculate_consistency_and_weight函数,并将结果权重存储在变量(weights_b1到weights_b5)中。
- weights_b1 = calculate_consistency_and_weight(b1)
# ...(类似地对weights_b2、weights_b3、weights_b4、weights_b5)
准则权重的定义 (weights_criteria): 这个数组表示对不同准则分配的权重。
- weights_criteria = np.array([0.092, 0.123, 0.270, 0.435, 0.079])
计算备选方案的最终权重: 通过将每个准则的权重与每个备选方案的相应权重相乘并求和,计算出每个备选方案的最终权重。
- objectives_weights = np.array([weights_b1, weights_b2, weights_b3, weights_b4, weights_b5])
- final_weights = np.dot(weights_criteria, objectives_weights)
打印结果: 代码打印最终权重。
- print("\n最优选择方案权重:", final_weights)
- print("最优选择方案:", np.argmax(final_weights) + 1)
输出:
一致性检验通过,判断矩阵一致。
一致性检验通过,判断矩阵一致。
一致性检验通过,判断矩阵一致。
一致性检验通过,判断矩阵一致。
一致性检验通过,判断矩阵一致。
最优选择方案权重: [0.24164193+0.j 0.26757172+0.j 0.48978635+0.j]
最优选择方案: 3
6. 结论
通过层次分析法(AHP)对备选方案的综合评价,我们得出了关于使用不同视觉系统进行套筒类零件表面质量检测的结论。以下是对每个方案的综合评估:
方案 1:使用2D视觉系统
优势:中等成本、快速检测、相对较高的可靠性。
限制:在复杂缺陷检测方面可能受到限制。
结论:适用于一般表面质量检测,特别是对于快速筛查任务。
方案 2:使用3D视觉系统
优势:高精度表面质量检测、非常高的可靠性。
限制:较高的成本和适中的检测速度。
结论:适用于对表面质量要求较高、需要高精度检测的任务。
方案 3:使用机器学习辅助视觉检测
优势:智能化、学习能力强、适用于复杂表面质量检测。
限制:较高的成本和适中的检测速度,需要模型训练时间。
结论:适用于需要智能、自适应性能、且对复杂表面缺陷有较高要求的任务。
使用机器学习辅助视觉检测方案精度最高。
三、优缺点分析
优点:
1.系统性的分析方法
层次分析法把研究对象作为一个系统,按照分解、比较判断、综合的思维方式进行决策,成为继机理分析、统计分析之后发展起来的系统分析的重要工具。系统的思想在于不割断各个因素对结果的影响,而层次分析法中每一层的权重设置最后都会直接或间接影响到结果,而且在每个层次中的每个因素对结果的影响程度都是量化的,非常清晰明确。这种方法尤其可用于对无结构特性的系统评价以及多目标、多准则、多时期等的系统评价。
2. 简洁实用的决策方法
这种方法既不单纯追求高深数学,又不片面地注重行为、逻辑、推理,而是把定性方法与定量方法有机地结合起来,使复杂的系统分解,能将人们的思维过程数学化、系统化,便于人们接受,且能把多目标、多准则又难以全部量化处理的决策问题化为多层次单目标问题,通过两两比较确定同一层次元素相对上一层次元素的数量关系后,最后进行简单的数学运算。计算简便,并且所得结果简单明确,容易为决策者了解和掌握。
3. 所需定量数据信息较少
层次分析法主要是从评价者对评价问题的本质、要素的理解出发,比一般的定量方法更讲求定性的分析和判断。由于层次分析法是一种模拟人们决策过程的思维方式的一种方法,层次分析法把判断各要素的相对重要性的步骤留给了大脑,只保留人脑对要素的印象,化为简单的权重进行计算。这种思想能处理许多用传统的最优化技术无法着手的实际问题。
缺点:
1. 不能为决策提供新方案
层次分析法的作用是从备选方案中选择较优者。在应用层次分析法的时候,可能就会有这样一个情况,就是学者自身的创造能力不够,造成了学者尽管在学者想出来的众多方案里选了一个最好的出来,但其效果仍然不够企业所做出来的效果好。而对于大部分决策者来说,如果一种分析工具能替学者分析出在学者已知的方案里的最优者,然后指出已知方案的不足,又或者甚至再提出改进方案的话,这种分析工具才是比较完美的。但显然,层次分析法还没能做到这点。
2. 定量数据较少,定性成分多,不易令人信服
在如今对科学的方法的评价中,一般都认为一门科学需要比较严格的数学论证和完善的定量方法。但现实世界的问题和人脑考虑问题的过程很多时候并不是能简单地用数字来说明一切的。层次分析法是一种带有模拟人脑的决策方式的方法,因此必然带有较多的定性色彩。
3. 指标过多时,数据统计量大,且权重难以确定
当学者希望能解决较普遍的问题时,指标的选取数量很可能也就随之增加。指标的增加就意味着学者要构造层次更深、数量更多、规模更庞大的判断矩阵。那么学者就需要对许多的指标进行两两比较的工作。由于一般情况下学者对层次分析法的两两比较是用1至9来说明其相对重要性,如果有越来越多的指标,学者对每两个指标之间的重要程度的判断可能就出现困难了,甚至会对层次单排序和总排序的一致性产生影响,使一致性检验不能通过。不能通过,就需要调整,在指标数量多的时候比较难调整过来。 [2]
4. 特征值和特征向量的精确求法比较复杂
在求判断矩阵的特征值和特征向量时,所用的方法和学者多元统计所用的方法是一样的。在二阶、三阶的时候,学者还比较容易处理,但随着指标的增加,阶数也随之增加,在计算上也变得越来越困难。不过幸运的是这个缺点比较好解决,学者有三种比较常用的近似计算方法。第一种就是和法,第二种是幂法,还有一种常用方法是根法。