1 层次分析法简介

1.1 概念

层次分析法(Analytic Hierarchy Process,AHP):是一种定性和定量相结合的、系统的、层次化的分析方法
这种方法的特点就是在对复杂决策问题的本质、影响因素及其内在关系等进行深入研究的基础上,利用较少的定量信息使决策的思维过程数学化,从而为多目标、多准则或无结构特性的复杂决策问题提供简便的决策方法。是对难以完全定量的复杂系统做出决策的模型和方法。

1.2 原理

层次分析法的原理:层次分析法根据问题的性质和要达到的总目标,将问题分解为不同的组成因素,并按照因素间的相互关联影响以及隶属关系将因素按不同的层次聚集组合,形成一个多层次的分析结构模型,从而最终使问题归结为最低层(供决策的方案、措施等)相对于最高层(总目标)的相对重要权值的确定或相对优劣次序的排定。

1.3 分析步骤

层次分析法的步骤,运用层次分析法构造系统模型时,大体可以分为以下四个步骤:

  • 建立层次结构模型;
    在深入分析实际问题的基础上,将有关的各个因素按照不同属性自上而下地分解成若干层次,同一层的诸因素从属于上一层的因素或对上层因素有影响,同时又支配下一层的因素或受到下层因素的作用。最上层为目标层,通常只有1个因素,最下层通常为方案或对象层,中间可以有一个或几个层 次,通常为准则或指标层。当准则过多时(譬如多于9个)应进一步分解出子准则层

    • 最高层(目标层):决策的目的、要解决的问题;
    • 中间层(准则层或指标层):考虑的因素、决策的准则;
    • 最低层(方案层):决策时的备选方案;
  • 构造判断(成对比较)矩阵;
    构造成对比较阵。从层次结构模型的第2层开始,对于从属于(或影响)上一层每个因素的同一层诸因素,用成对比较法和1—9比较尺度构造成对比较阵,直到最下层(见下图)
  • 层次单排序及其一致性检验;
  • 层次总排序及其一致性检验;
    计算某一层次所有因素对于最高层(总目标)相对重要性的权值,称为层次总排序。

1.4 涉及的定义及公式

1.4.1 定理

1.4.2 定义一致性指标 CI

1.4.3 随机一致性指标 RI

1.4.4 定义一致性比率 CR

1.4.5 一致性检验

利用一致性指标和一致性比率<0.1及随机一致性指标的数值表,对A 进行检验的过程。

2 源代码

2.1 python代码演示计算过程

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import numpy as npRI_dict = {1: 0, 2: 0, 3: 0.58, 4: 0.90, 5: 1.12, 6: 1.24, 7: 1.32, 8: 1.41, 9: 1.45}
# 矩阵
A_arr = [[1,       1/2,       4,    3,      3],[2,       1,         7,    5,      5],[1/4,     1/7,       1,    1/2,    1/3],[1/3,     1/5,       2,    1,      1],[1/3,     1/5,       3,    1,       1]]def main():# 矩阵A = np.array(A_arr)a_sum0 = A.sum(axis=0)B = A / a_sum0print('新矩阵:')print(B)b_sum = B.sum(axis=1)print('新矩阵行和: %s' % b_sum)W = b_sum.sum()w_arr = []for w in b_sum:w_arr.append(w / W)print('W: %s' % w_arr)AW = []for a in A:aa = a * w_arrAW.append(aa.sum())print('AW: %s' % AW)result = np.array(AW) / np.array(w_arr)print('AW/W: %s' % result)row = result.shape[0]Max = result.sum() / rowprint('λMax: %s' % Max)CI = (Max - row) / (row - 1)print('CI: %s' % CI)CR = CI / RI_dict[row]print('CR: %s' % CR)if __name__ == '__main__':main()

2.2 层次分析python封装源码

import numpy as npdef get_tezheng(array):'''get the max eigenvalue and eigenvector:param array: judgement matrix:return: max eigenvalue and the corresponding eigenvector'''# 获取最大特征值和对应的特征向量te_val, te_vector = np.linalg.eig(array)list1 = list(te_val)max_val = np.max(list1)index = list1.index(max_val)max_vector = te_vector[:, index]return max_val, max_vectordef RImatrix(n):'''get RI value according the the order:param n: matrix order:return: Random consistency index RI of a n order matrix'''n1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16]n2 = [0, 0, 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, 1.60]d = dict(zip(n1, n2))return d[n]def consitstence(max_val, RI, n):'''use the CR indicator to test the consistency of a matrix.:param max_val: eigenvalue:param RI: Random consistency index:param n: matrix order:return: true or false, denotes whether it meat the validation of consistency'''CI = (max_val - n) / (n - 1)if RI == 0:return Trueelse:CR = CI / RIif CR < 0.10:return Trueelse:return Falsedef minMax(array):result = []for x in array:x = float(x - np.min(array)) / (np.max(array) - np.min(array))result.append(x)return np.array(result)def normalize_vector(max_vector):'''normalize the vector, the sum of elements is 1.0:param max_vector: a eigenvector:return: normalized eigenvector'''vector = []for i in max_vector:vector.append(i.real)vector_after_normalization = []sum0 = np.sum(vector)for i in range(len(vector)):vector_after_normalization.append(vector[i] / sum0)vector_after_normalization = np.array(vector_after_normalization)return vector_after_normalizationdef get_weight(matrix_array,n):'''get weight vector according to personal score.:param score: a list, the item is the score range 1 to 10 means the importance of each sub-indicator.:return: a list, the item is the weight range 0.0 to 1.0.'''max_val, max_vector = get_tezheng(matrix_array)RI = RImatrix(n)if consitstence(max_val, RI, n) == True:feature_weight = normalize_vector(max_vector)return feature_weightelse:return [1 / n] * ndef get_judgement_matrix(scores):'''get judgement matrix  according to personal score.:param scores: a list, the item is the score range 1 to 10 means the importance of each sub-indicator.:return: judgement matrix, item range 1 to 9.- more: in judgement matrix:1 means two sub-indicators are the same important.3 means the first sub-indicator is a little important than another one.5 means the first sub-indicator is apparently important than another one.7 means the first sub-indicator is strongly significant than another one.9 means the first sub-indicator is extremely significant than another one.and 2, 4, 6, 8 are in the middle degree.'''# 评分1——10length = len(scores)array = np.zeros((length, length))for i in range(0, length):for j in range(0, length):point1 = scores[i]point2 = scores[j]deta = point1 - point2if deta < 0:continueelif deta == 0 or deta == 1:array[i][j] = 1array[j][i] = 1else:array[i][j] = detaarray[j][i] = 1 / detareturn arrayA_arr = [[1,       2,       1.0 / 3, 3],[1.0 / 2, 1,       1.0 / 3, 2],[3,       3,       1,       4],[1.0 / 3, 1.0 / 2, 1.0 / 4, 1]]get_weight(A_arr,4)

参考

层次分析法(AHP)
https://github.com/iLiuChang/AHP
层次分析法
Python实现AHP(层次分析法)

层次分析法(AHP)及源代码实现相关推荐

  1. 熵权法EW与层次分析法AHP之数学原理及实例

    1.概述 对于多指标或多目标决策问题,由于涉及到多个指标或属性,在对实测数据进行评价时,需要确定这些指标之间的相互权重,各指标权重的客观性与合理性也会大大影响到最终的评价结果.目前对于指标权重确定的方 ...

  2. R语言应用实战-基于R语言的综合评价(层次分析法AHP为例)

    一.综合评价的基本概念 对一个事物的评价往往会涉及多个因素或者多个指标,评价是在多个因素相互作用下的一个综合判断.多指标综合评价方法具有以下的特点:包含若干个指标,分别说明被评价对象的不同方面,评价方 ...

  3. 层次分析法AHP - 代码注释多 - ( 数据建模 Python代码)

    实际生活中,往往有一些很复杂的系统,我们没办法直观草率的确定权重,比如甲.乙.丙三人竞选总统,严谨的说,需要从三人的社交能力.管理能力.经济能力等方面来考虑,在每个方面,三位候选人的得分也不同,那么到 ...

  4. 2010年高教社杯全国大学生数学建模竞赛题目B题解析及层次分析法AHP在其中的应用

    2010年高教社杯全国大学生数学建模竞赛题目 B题 2010年上海世博会影响力的定量评估 2010年上海世博会是首次在中国举办的世界博览会.从1851年伦敦的"万国工业博览会"开始 ...

  5. MATLAB实现层次分析法AHP及案例分析

    层次分析法(Analytic Hierarchy Process, AHP) 1 模型背景 美国运筹学家匹兹堡大学教授Saaty在20世纪70年代初提出的一种层次权重决策分析方法. 层次分析法(Ana ...

  6. 数学建模之层次分析法AHP

    层次分析法(Analytic Hierarchy Process,AHP)这是一种定性和定量相结合的.系统的.层次化的分析方法.这种方法的特点就是在对复杂决策问题的本质.影响因素及其内在关系等进行深入 ...

  7. 层次分析法 AHP

    层次分析法(Analytic Hierarchy Process,简称 AHP)是对一些较为复杂.较为模糊的问题作出决策的简易方法,它特别适用于那些难于完全定量分析的问题.它是美国运筹学家 T. L. ...

  8. 层次分析法AHP原理、例题

    1 基本介绍 层次分析法(analytic hierarchy process,简称AHP)是解决多因素综合评价问题的常用方法,该方法是美国运筹学家,匹茨堡大学教授T.L. Saaty于20世纪70年 ...

  9. 层次分析法 计算机程序,层次分析法(AHP)程序的设计

    摘要: 层次分析法可将一些彼此间重要性不明确的因素加以条理化,并排出各因素间相对重要性的次序,使一些不能算出具体数量的决策问题,可取得较为理想的决策分析效果.*AHP*"5o FOR I=1 ...

  10. 【数学建模】层次分析法(AHP)-Python实现

    1 前言 本文主要讲解层次分析法(AHP)的python实现,后续会跟进实例分析 2 代码实现 导入包 import numpy as np 2.1 构造判断矩阵 判断矩阵一般采用专家意见法,也就是德 ...

最新文章

  1. 轻量级数据库Sqlite的使用
  2. spring扫描自定义注解并进行操作
  3. Tyznn人脸识别温度检测智能门禁系统现货发售,助力疫情防控
  4. github提交,却不显示提交记录
  5. .NET 项目中的单元测试
  6. LeetCode 399. 除法求值(图的DFS搜索)
  7. 只想在老家找份工作很难吗_当您只想完成工作时,为什么公开工作会很困难
  8. linux系统反应优化,细说Linux系统优化-实践篇【转载】
  9. 【Java程序设计】多线程进阶
  10. 获取对话框当前cfont_flutter根据控件位置弹出对话框
  11. 《电脑音乐制作实战指南:伴奏、录歌、MTV全攻略》——第1篇 获取伴奏篇 第1章 MIDI音乐伴奏的获取与制作 1.1 电脑MIDI音乐与设备的介绍...
  12. Hopper调试个人知识管理软件myBase
  13. 怎样训练左右手协调_吉他,左右手的协调,练习的方法原来这么简单!
  14. [XCTF-Reverse] 13-18
  15. 图标快速定位工具 ElementUI FontAwesome iView
  16. ROS资料----工业机器人 ROS-I Kinetic 培训课程
  17. 圣斗士星矢游戏抽奖计算机怎么计算,圣斗士星矢手游最划算抽奖方式推荐
  18. 基于cefsharp的浏览器应用开发(支持XP系统)
  19. Latex表格换行垂直居中对齐
  20. WIndow强制删除文件或文件夹

热门文章

  1. 震旦188e扫描_震旦ad188打印机无法扫描怎么处理
  2. 皮尔森相关系数_克莱姆相关系数的计算
  3. 中文界面blend_使用Blend设计出符合效果的WPF界面
  4. html5翻牌小游戏源码,html5记忆翻牌游戏实现思路及代码
  5. 六年级上学期计算机上册教案,最新人教版六年级上册数学全册教案
  6. Debian 8 安装BtSync
  7. 北京理工大学计算机学院放假时间,北理珠这个老师厉害了,竟然利用假期干了这么件事…...
  8. AI 全自动玩斗地主,靠谱吗?Douzero算法教程
  9. python语义分析_NLPIR语义分析系统——文本分析利器
  10. Learning to Generalize:Meta-Learning for Domain Geralization 深度理解(公式详细推导,包含二阶导)