层次分析法编程,层次分析法的算法区别,层次分析法编程实现

  层次分析法编程,层次分析法的算法区别,层次分析法编程实现

  

层次分析法(The analytic hierarchy process)简称AHP

是由美国运筹学家T.L.saaty在20世纪70年代中期正式提出的。它是一种定性和定量相结合的系统的层次分析法。由于其在处理复杂决策问题上的实用性和有效性,很快得到了全世界的关注。其应用已遍及经济规划与管理、能源政策与分配、行为科学、军事指挥、交通运输、农业、教育、人才、医疗、环境等领域。

  常见的场合是做决策,层次分析法是一种常见的多目标决策方法。其实在我看来,层次分析法是一种根据层次结构计算加权和的方法,主要是权重的选取。这里人为因素太多,很容易被人诟病。

  

具体的理论,可以参考wiki

,网址:https://wiki.mbalib.com/wiki/层次分析法

  

层次分析法的多级递阶层次模型分为三类

:完全相关结构,完全独立结构,混合结构。

  前两种分别对应下图1和图2(来自网络,侵删):

  图一。完全相关

  图二。完全独立性

  混合型有两个特点。其实不需要管这些,根据自己的需求构建层次结构就可以了。有了结构,就可以开始“编码”了。

  

示例:

这次我们实现了这样的层次结构,如图3所示。同时,我们假设两两比较矩阵已经根据标度表(标度表表示相对权重,可以在wiki中找到)进行了定义。在实际应用中,我们可以根据需要求解两两比较矩阵。

  图3。示例的层次结构图

  

python3 代码。

  #-*-编码:UTF-8-*- 创建于2018年11月13日15:37:12 @作者:用户层次分析法演示:一级:A,二级:B1 B2 B3,三级:C1 C2 C3,完整相关结构。将numpy作为NP 1导入。成对比较矩阵 DEF comparison (W0): # w是每个信息值的权重n=len (W0) f=NP。范围(n)中I的零([n,n]):范围(n)中J的:如果I==j J]=1否则:f [i,j]=W0 [i]/W0 [j]返回f 2。单级排序,相对重要性 def reimpo(f):N=NP . shape(f)[0]W=NP . zeros([1n])for I in range(N):T=1 for j in range(N):T=f[I,j] * t w [0,i]=t * * (1/n) w=w/sum (w [0,)#归一化w=[0.874 0.464] return W.T3。一致性检查 def为consist (f): n=np.shape (f) [0] a,B=np.linalg.eig (f) maxlam=a [0]。realci=(maxlam-n)/(n-1)ifci 0.1:return bool(1)else:return bool(0) 4。计算综合重要度 def comimpo W233): #综合重要度# F12=比较(W12) #在实际应用中,可以根据特征的权重求解成对比较矩阵。# F231=比较(W231)# F232=比较(W232)# F233=比较(W233) F12=np.array([[1,1/3,2],[3,1,5],[1/2,1/5,1])#这里直接假设成对比较矩阵F231=NP.array ([[1,1/3,1/5],[3,1/3],[5,3,1)return 0 n=len(W12) C=np.zeros([1,n]) for i in range(n): t=W23[i,] C[0,I]=sum((W12 . t * t)[0])return cdef main():print(这里是AHP的演示程序:)w=np.ones([3]) # W是两两比较矩阵的最佳方案C=comimpo (w,W,w) print(综合推荐指数是,max (c [0

层次分析法编程,层次分析法的算法区别,层次分析法编程实现