Python实现层次分析法及自调节层次分析法的示例

Python实现层次分析法及自调节层次分析法的示例

本篇文章旨在介绍层次分析法(AHP)和自调节层次分析法(FAHP)的实现方式,并提供两个示例说明。

层次分析法(AHPPython)

层次分析法(AHP)是一种定量评价和决策的方法,特别适用于多因素、多目标的决策问题。下面是AHP的实现方法:

  1. 确定要分析的问题和参与者。
  2. 确定一组标准因素(即问题中的考虑因素)。
  3. 创建问题的层次结构,其中包括标准因素、子因素和决策因素。
  4. 建立每个因素对于其他因素的相对重要性的判断矩阵。
  5. 计算每个因素的权重矩阵。
  6. 通过相关计算方法计算最终权重,最终确定决策。

下面是一个例子来说明如何通过Python实现AHP。

示例一

问题描述:我需要为公司选择一台新的服务器,考虑价格,性能和可靠性三个因素。

步骤1&2

由于价格,性能和可靠性是三个考虑因素,所以我们可以列出问题、标准因素和参与者如下:

问题: 选择一台新的服务器

参与者:

标准因素:

  • 价格
  • 性能
  • 可靠性

步骤3

我们可以用树状图的形式表示问题的层次结构,其中包括标准因素、子因素和决策因素。

选择一台新的服务器
├── 价格
├── 性能
└── 可靠性

步骤4

为了确定三个因素之间的相对权重,我们需要创建一个判断矩阵,如下所示:

import numpy as np

# 构建判断矩阵
price = np.array([1, 3, 5])
performance = np.array([1/3, 1, 3])
reliability = np.array([1/5, 1/3, 1])

judgement_matrix = np.array([price, performance, reliability])

在这个例子中,价格被认为是最具有重要性的基准,而性能比价格重要三倍,可靠性比性能重要三倍。

步骤5

我们可以通过计算每个因素的权重矩阵来找出每个因素的重要性权重。计算每个因素的权重矩阵需要将判断矩阵的每列之和计算出来,然后将每个元素除以该列之和。

# 在判断矩阵中的每列中计算每个元素的总和
column_sums = judgement_matrix.sum(axis=0)

# 每列中的每个元素除以它的总和
normalised_matrix = judgement_matrix / column_sums

# 计算列的平均值
row_averages = normalised_matrix.mean(axis=1)

# 归一化行向量
normalized_weights = row_averages / row_averages.sum()

在这个例子中,我们得出的权重向量为 [0.667, 0.242, 0.091],即价格在三个因素中的权重最高。

步骤6

通过将权重向量与标准化得分相乘,相加并计算得出要选择的服务器。

自调节层次分析法(FAHPPython)

自调节层次分析法(FAHP)是AHP的改进版。与AHP不同的是,FAHP为每个参与者提供了一个属于自己的权重向量。在AHP中,只有一个人的判断矩阵,但在FAHP中,有多个判断矩阵。下面是FAHP的实现方式:

  1. 确定要分析的问题和参与者。
  2. 确定一组标准因素(即问题中的考虑因素)。
  3. 创建问题的层次结构,其中包括标准因素、子因素和决策因素。
  4. 建立每个参与者对于每个因素的相对重要性的判断矩阵。
  5. 建立每个参与者的权重向量,其中包括对每个因素的权重。
  6. 通过相关计算方法计算每个参与者的权重向量,然后计算最终的决策。

下面是一个例子来说明如何通过Python实现FAHP。

示例二

问题描述:我需要为公司选择一个最佳的Web框架,考虑性能和易用性两个因素。有三个参与者,我,开发者和用户。

步骤1&2

由于性能和易用性是两个考虑因素,我们可以列出问题、标准因素和参与者如下:

问题: 选择最佳的Web框架

参与者:

  • 开发者
  • 用户

标准因素:

  • 性能
  • 易用性

步骤3

我们可以用树状图的形式表示问题的层次结构,其中包括标准因素、子因素和决策因素。

选择最佳的Web框架
├── 性能
└── 易用性

步骤4

我们需要为每个参与者创建一个判断矩阵来确定他们对选定标准因素的观点。以下是每个参与者的判断矩阵:

# 判断矩阵
performance = np.array([[1, 3, 5],
                        [1/3, 1, 3],
                        [1/5, 1/3, 1]])

usability = np.array([[1, 1/3, 1/5],
                      [3, 1, 1/3],
                      [5, 3, 1]])

# 将矩阵存储在列表中
judgement_matrices = [performance, usability]

步骤5

对于每个参与者,我们需要建立一个权重向量来确定他们对于每个因素的重要性。同样需要将判断矩阵的每列求和,然后将每个元素除以和。

normalised_matrices = []

for judgement_matrix in judgement_matrices:
    # 在判断矩阵中的每列中计算每个元素的总和
    column_sums = judgement_matrix.sum(axis=0)

    # 每列中的每个元素除以它的总和
    normalised_matrix = judgement_matrix / column_sums
    normalised_matrices.append(normalised_matrix)

weights = []

for normalised_matrix in normalised_matrices:
    # 计算列的平均值
    row_averages = normalised_matrix.mean(axis=1)

    # 归一化行向量
    normalised_weights = row_averages / row_averages.sum()
    weights.append(normalised_weights)

步骤6

我们可以对每个参与者的权重向量求平均来获得最终权重。

final_weights = np.array(weights).mean(axis=0)

最终得出的权重向量为 [0.460, 0.540],其中易用性在两个因素中具有更高的权重。

结论

通过Python实现了层次分析法和自调节层次分析法,我们可以在多因素决策问题中使用这两种方法,从而确定最终的决策。在实际情况中,这两种方法在管理、市场营销和投资决策等领域都有广泛的应用。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python实现层次分析法及自调节层次分析法的示例 - Python技术站

(0)
上一篇 2023年6月3日
下一篇 2023年6月3日

相关文章

  • Python如何一行输入多个数,并存入列表

    当需要一次性输入多个数时,可以使用Python的input()函数配合列表推导式,来实现快速输入并存入列表。 具体的实现步骤如下: 使用input()函数来接收用户输入的数据。 将接收到的字符串数据转换为列表类型,这个时候,字符串中的每个数据都被当做一个元素,放到列表中。 # 示例1: str_nums = input(“请输入多个数,用逗号隔开:”) ls…

    python 2023年6月5日
    00
  • Python实现自动发消息自定义内容的操作代码

    实现Python自动发消息自定义内容的操作代码可以使用Python的第三方库通过调用API实现。其中比较常用的包括requests和telegram-bot-api。 确定使用的API和相关库 首先,需要确定使用的API和相关库。比较常见的有微信、Telegram、钉钉等,这里以Telegram为例。 然后,需要安装使用相关库。Python中有许多Teleg…

    python 2023年5月19日
    00
  • 【manim动画教程】–常用动画效果

    manim的主要功能就是制作动画,因此它提供了各类丰富的动画效果,本篇主要介绍其中最常用的几种动画效果。 至于特殊的动画效果,以及自定义动画效果的方法以后再另外介绍。 1. 创建效果 展示某个元素或者文字时,一下子就全显示出来会显得比较突兀,通过创建效果的动画,让各个元素的出现更加的自然。常用的创建效果动画主要有:Create,Write和FadeIn三个方…

    python 2023年4月17日
    00
  • python (logging) 日志按日期、大小回滚的操作

    下面是 Python 日志按日期、大小回滚的操作的完整攻略。 一、使用 logging 模块配置日志 在 Python 中,通常使用 logging 模块来记录日志。首先,我们需要通过 logging.basicConfig() 方法配置 logging 模块,以便在后续使用中直接调用。具体配置方式如下: import logging logging.bas…

    python 2023年6月3日
    00
  • 使用scrapy实现爬网站例子和实现网络爬虫(蜘蛛)的步骤

    使用Scrapy实现爬取网站例子和实现网络爬虫(蜘蛛)的步骤如下: 步骤一:创建Scrapy项目 使用命令行工具创建一个Scrapy项目: scrapy startproject <project_name> 这将创建一个默认的Scrapy项目,在项目目录下有一个名为scrapy.cfg的配置文件和一个名为<project_name>…

    python 2023年5月14日
    00
  • python3实现语音转文字(语音识别)和文字转语音(语音合成)

    Python3实现语音识别和语音合成 本文将分享如何使用Python3实现语音识别和语音合成的过程,主要使用的是Google Speech API和Google Text-to-Speech API。 安装依赖 在开始之前需要安装以下库: pip install google-cloud-speech google-cloud-texttospeech py…

    python 2023年5月19日
    00
  • Python实现随机选择元素功能

    下面是Python实现随机选择元素功能的详细攻略: 1. 使用random模块 Python内置的random模块提供了许多随机数生成相关的函数,包括从序列中随机选取元素的函数——random.choice(seq)。 示例代码: import random seq = [1, 2, 3, 4, 5] random_choice = random.choic…

    python 2023年6月3日
    00
  • python 用递归实现通用爬虫解析器

    Python用递归实现通用爬虫解析器 在爬虫编写过程中,解析器的编写是一个必不可少的环节。不同的网站页面结构可能会不一样,因此编写通用爬虫解析器可以提高代码的复用性。本文将介绍如何使用Python中的递归算法实现通用爬虫解析器的功能。 具体步骤 分析网页结构,确定爬取的目标元素的标签和类名。 使用Python中的Requests库获取网页的源代码。 使用Py…

    python 2023年5月14日
    00
合作推广
合作推广
分享本页
返回顶部