数学建模学习(130):使用Python基于模糊TOPSIS算法的多准则决策分析

news2024/10/25 22:13:59

目录

  1. 引言
  2. 模糊TOPSIS算法原理与步骤
    • 2.1 MCDA背景与模糊TOPSIS的适用性
    • 2.2 模糊TOPSIS算法的详细步骤解析与数学公式
  3. 案例背景与应用场景
  4. 数据说明与标准化处理
    • 4.1 数据
    • 4.2 数据标准化步骤与权重选择
  5. 代码实现
    • 5.1 代码
    • 5.2 结果分析

1. 引言

在当前信息密集和快速变化的商业环境中,决策者经常面对多维度、多准则的复杂决策问题。例如,在供应链管理中,选择合适的供应商不仅需要考虑成本,还要综合考虑质量、交货周期、信誉等多个因素。这类问题通常涉及到多准则决策分析(MCDA),而TOPSIS(Technique for Order of Preference by Similarity to Ideal Solution)算法作为MCDA方法中的经典代表,以其直观、计算简洁的特点被广泛应用于供应链、项目选择、风险管理等多个领域。

然而,在现实场景中,许多评价标准往往不是精确的数值,存在主观性或不确定性。模糊TOPSIS结合了模糊集理论,能够有效地处理模糊数据,帮助决策者在不确定条件下选择最优方案。本文将详细探讨模糊TOPSIS算法的原理与应用,并结合真实案例,通过Python代码演示其实际效果。


2. 模糊TOPSIS算法原理与步骤

2.1 MCDA背景与模糊TOPSIS的适用性

多准则决策分析(MCDA)是一类用于帮助决策者在多个相互冲突的评价标准下选择最优方案的方法。TOPSIS算法提出的核心思想是通过计算每个备选方案与理想解和负理想解的距离进行排序。其基本假设是:最佳方案应该尽可能接近理想解(Positive Ideal Solution, PIS),同时远离负理想解(Negative Ideal Solution, NIS)。

传统TOPSIS算法处理的是精确数据,而模糊TOPSIS通过模糊数来表达不确定信息,能够有效处理模糊条件下的决策问题。适用的场景包括:

  • 供应商选择:需要综合考虑价格、质量、交货期等模糊标准。
  • 风险管理:风险指标无法精确量化。
  • 项目选择:多个模糊评价指标,如成本、收益和可行性。

2.2 模糊TOPSIS算法的详细步骤解析与数学公式

模糊TOPSIS算法的具体步骤如下:

第一步:构建模糊决策矩阵

根据每个备选方案在各个评价指标上的表现,将专家打分数据转化为三角模糊数,形成模糊决策矩阵 D = [ x ~ i j ] D = [\tilde{x}_{ij}] D=[x~ij],其中 x ~ i j \tilde{x}_{ij} x~ij 表示第 i i i 个方案在第 j j j 个指标上的模糊数,以三元组 ( a , b , c ) (a, b, c) (a,b,c) 表示, a ≤ b ≤ c a \leq b \leq c abc 分别为最小值、均值、最大值。

第二步:构建模糊权重矩阵

根据每个指标的重要性,分配权重向量 W = [ w ~ j ] W = [\tilde{w}_j] W=[w~j],其中 w ~ j \tilde{w}_j w~j 表示第 j j j 个指标的模糊权重。

第三步:标准化模糊决策矩阵

模糊标准化将指标的尺度统一,保证不同单位下的指标具有相同量纲。标准化分为效益型和成本型两种:

  • 效益型指标(值越大越好)标准化公式:
    r ~ i j = ( x ~ i j x ~ j max ⁡ , x ~ i j x ~ j max ⁡ , x ~ i j x ~ j max ⁡ ) \tilde{r}_{ij} = \left(\frac{\tilde{x}_{ij}}{\tilde{x}_{j}^{\max}}, \frac{\tilde{x}_{ij}}{\tilde{x}_{j}^{\max}}, \frac{\tilde{x}_{ij}}{\tilde{x}_{j}^{\max}}\right) r~ij=(x~jmaxx~ij,x~jmaxx~ij,x~jmaxx~ij)
  • 成本型指标(值越小越好)标准化公式:
    r ~ i j = ( x ~ j min ⁡ x ~ i j , x ~ j min ⁡ x ~ i j , x ~ j min ⁡ x ~ i j ) \tilde{r}_{ij} = \left(\frac{\tilde{x}_{j}^{\min}}{\tilde{x}_{ij}}, \frac{\tilde{x}_{j}^{\min}}{\tilde{x}_{ij}}, \frac{\tilde{x}_{j}^{\min}}{\tilde{x}_{ij}}\right) r~ij=(x~ijx~jmin,x~ijx~jmin,x~ijx~jmin)
第四步:构建加权标准化决策矩阵

将标准化矩阵中的元素与权重相乘,得到加权标准化决策矩阵 v ~ i j = w ~ j × r ~ i j \tilde{v}_{ij} = \tilde{w}_j \times \tilde{r}_{ij} v~ij=w~j×r~ij

第五步:确定正理想解和负理想解

正理想解和负理想解分别表示各指标的最优和最劣表现。定义如下:

  • 正理想解(PIS) A + = ( v ~ 1 + , v ~ 2 + , . . . , v ~ n + ) A^+ = (\tilde{v}_1^+, \tilde{v}_2^+, ..., \tilde{v}_n^+) A+=(v~1+,v~2+,...,v~n+)
  • 负理想解(NIS) A − = ( v ~ 1 − , v ~ 2 − , . . . , v ~ n − ) A^- = (\tilde{v}_1^-, \tilde{v}_2^-, ..., \tilde{v}_n^-) A=(v~1,v~2,...,v~n)

其中:
v ~ j + = max ⁡ i v ~ i j , v ~ j − = min ⁡ i v ~ i j \tilde{v}_j^+ = \max_{i} \tilde{v}_{ij}, \quad \tilde{v}_j^- = \min_{i} \tilde{v}_{ij} v~j+=imaxv~ij,v~j=iminv~ij

第六步:计算每个方案与正负理想解的距离

采用欧几里得距离计算每个方案与正理想解和负理想解的距离:
d i + = ∑ j = 1 n ( v ~ i j − v ~ j + ) 2 , d i − = ∑ j = 1 n ( v ~ i j − v ~ j − ) 2 d_i^+ = \sqrt{\sum_{j=1}^n (\tilde{v}_{ij} - \tilde{v}_j^+)^2}, \quad d_i^- = \sqrt{\sum_{j=1}^n (\tilde{v}_{ij} - \tilde{v}_j^-)^2} di+=j=1n(v~ijv~j+)2 ,di=j=1n(v~ijv~j)2

第七步:计算贴近度系数(Closeness Coefficient)

计算每个方案的贴近度系数 C C i CC_i CCi,公式为:
C C i = d i − d i + + d i − CC_i = \frac{d_i^-}{d_i^+ + d_i^-} CCi=di++didi
贴近度越大,方案越优。


3. 案例背景与应用场景

以某制造公司选择供应商为例。该公司需综合考虑成本、质量、交货时间、信誉四个评价标准,以确保选择的供应商在长期合作中能够提供性价比高的产品和优质服务。每个供应商在这些标准上的表现具有一定的主观性和模糊性,因此采用模糊TOPSIS方法更为适宜。


4. 数据说明与标准化处理

4.1 数据

在本案例中,某制造公司正在评估四个潜在供应商,以便在长期合作中选择出最具性价比和可靠性的一家。由于选择供应商是一个多维度的决策问题,公司采用四个主要评价标准,即成本质量交货期信誉,以便更全面地衡量每家供应商的表现。

各标准的定义如下:

  • 成本(万元):供应商提供的产品或服务的价格,单位为万元。成本越低对公司越有利,因此此项为“成本型”指标。

  • 质量评分:供应商提供的产品质量的评价,评分范围从低到高,越高表示质量越好。质量直接影响公司的生产效率和成品质量,因此公司优先考虑质量高的供应商,此项为“效益型”指标。

  • 交货期(天):供应商的交货速度,单位为天。交货期越短越好,可以有效保障公司的生产进度,此项为“成本型”指标。

  • 信誉评分:供应商在行业中的声誉和信用评分。信誉反映了供应商的稳定性和可靠性,是评价供应商长期合作潜力的关键。信誉评分越高越好,此项为“效益型”指标。

在本案例中,为了更好地处理数据中的主观性和不确定性,公司采用了三角模糊数来表达每个供应商在各标准上的表现。三角模糊数用三元组表示,分别为最低值、可能值和最高值,用以涵盖评价的模糊性和不确定性。

供应商成本(万元)质量评分交货期(天)信誉评分
A(75, 80, 85)(80, 85, 90)(20, 25, 30)(85, 90, 95)
B(65, 70, 75)(75, 80, 85)(15, 20, 25)(80, 85, 90)
C(85, 90, 95)(90, 95, 100)(25, 30, 35)(90, 95, 100)
D(55, 60, 65)(65, 70, 75)(10, 15, 20)(75, 80, 85)

4.2 数据标准化步骤与权重选择

为了统一数据量级,对模糊数矩阵进行标准化。假设各标准权重相等(即[0.25, 0.25, 0.25, 0.25]),标准化后矩阵消除了各标准量纲的影响。


5. 代码实现

5.1 代码

基于上述的数据,以下是模糊TOPSIS算法的Python代码实现,使用 pyDecision 库中 topsis_method 函数完成TOPSIS分析。

import numpy as np
from pyDecision.algorithm import topsis_method

# 原始数据矩阵 (未标准化)
# 四个供应商在成本、质量、交货期和信誉上的评分
matrix = np.array([
    [80, 85, 25, 90],  # 供应商A
    [70, 80, 20, 85],  # 供应商B
    [90, 95, 30, 95],  # 供应商C
    [60, 70, 15, 80]   # 供应商D
])

# 数据标准化
# 使用向量归一化方法,对每列(每个标准)进行标准化,以消除量纲差异
matrix_standardized = matrix / np.sqrt((matrix ** 2).sum(axis=0))

# 定义权重向量
# 假设四个标准同等重要,权重均为0.25
weights = [0.25, 0.25, 0.25, 0.25]

# 定义标准类型
# 成本和交货期为成本型指标(min),质量和信誉为效益型指标(max)
criteria_types = ['min', 'max', 'min', 'max']

# 运行TOPSIS算法
# verbose=True 以输出详细计算过程
topsis_results = topsis_method(matrix_standardized, weights, criteria_types, graph=False, verbose=True)

# 输出结果
print("TOPSIS相对接近度结果:", topsis_results)

5.2 结果分析

运行代码后,得到的各供应商相对接近度为:

TOPSIS相对接近度结果: [0.3876707  0.6123293  0.31356661 0.68643339]
各供应商分析
  • 供应商A (A1):接近度为0.39

    • 供应商A的相对接近度为0.39,说明其表现相对较弱,距离理想解较远。这表明供应商A在成本、质量、交货期和信誉等方面的综合表现不理想,处于劣势地位。
  • 供应商B (A2):接近度为0.61

    • 供应商B的相对接近度为0.61,处于中等偏上的水平,靠近理想解。尽管其表现不如供应商D,但在多个标准上表现较优,是一个可行的备选供应商,尤其在成本和交货期等方面可能具备优势。
  • 供应商C (A3):接近度为0.31

    • 供应商C的相对接近度最低,仅为0.31,显示其在各标准上的表现较差。该结果表明,供应商C的成本较高或质量和信誉相对不佳,是四个供应商中最不理想的选择。
  • 供应商D (A4):接近度为0.69

    • 供应商D的接近度最高,为0.69,最接近理想解。供应商D在各个关键标准上表现优异,尤其是在质量和信誉等对决策者至关重要的标准上具备明显优势,因此被评为最优供应商,是企业的最佳选择。
供应商表现的进一步分析
  • 较差供应商:供应商A和供应商C的接近度较低,显示其在关键标准上表现不佳。成本较高、交货期较长、或信誉较低可能是导致其整体表现不佳的原因。
  • 较优供应商:供应商B和供应商D的接近度较高,尤其是供应商D,它接近理想解。这说明供应商D在各标准上表现更好,特别是在质量和信誉方面的优势使其脱颖而出。
结果的商业意义
  • 最佳选择:供应商D
    供应商D的相对接近度最高,说明其在各项关键标准上均表现优秀。企业可以优先考虑与供应商D建立长期合作关系,以确保供应链的稳定和优质。

  • 备选供应商:供应商B
    虽然供应商B的接近度不如供应商D,但仍是一个可以考虑的次优选择。如果供应商D因库存不足、价格波动等原因不可用,供应商B可作为替代选项。

  • 次优选择和放弃选项
    供应商A和供应商C的接近度较低,不建议作为优先合作伙伴。特别是供应商C,其接近度最低,显示其在多个关键标准上表现不佳,选择该供应商可能存在质量或信誉风险。

结果的敏感性分析

在实际应用中,TOPSIS算法的结果会对标准的权重设置产生一定的敏感性。如果决策者调整标准的权重(如增加成本或交货期的权重),结果的排序可能发生变化。因此,企业可以根据实际需求对各标准权重进行调整,重新运行算法,以测试排序结果的稳定性与敏感性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2223589.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Openpyxl--学习记录

1.工作表的基本操作 1.1 工作表的新建打开与保存 1.1.1 创建工作簿 from openpyxl import Workbook from pathlib import Pathfile_path Path.home() / "Desktop" / "123.xlsx"# 1.创建工作簿 wb Workbook() # 2.访问默认工作簿 ws wb.active # 3.填充…

pytorh学习笔记——cifar10(六)MobileNet V1网络结构

基础知识储备: 一、深度可分离卷积(Depthwise Separable Convolution) MobileNet的核心是深度可分离卷积(Depthwise Separable Convolution),深度可分离卷积是卷积神经网络(CNN&#xf…

低代码开发详解与行业应用指南

低代码开发简化软件开发,助力企业数字化转型。ZohoCreator应用于零售、制造、教育、IT、医疗、房地产等行业,提升效率、降低成本。灵活定价,支持免费试用,助力企业快速实现数字化。 一、低代码开发是什么? 低代码开发…

CSS3 动画相关属性实例大全(三)(columns、filter、flex、flex-basis 、flex-grow、flex-shrink属性)

CSS3 动画相关属性实例大全(三) (columns、filter、flex、flex-basis 、flex-grow、flex-shrink属性) 本文目录: 一、columns属性(设置元素的列宽和列数) 二、filter属性(调整图像、背景和边…

打造充电场站:场地选择与合规运营详解

建设一座充电站需要六步流程:准备工作 → 备案 → 土地审核 → 规划审核 → 电力申请 → 验收确认 一、准备工作 在确定建设前,要考察待选的场地,例如空地、停车场等,与场地所有方签订充电站建设合作协议。根据场地和车流量等实际…

Docker 部署 EMQX 一分钟极速部署

部署 EMQX ( Docker ) [Step 1] : 拉取 EMQX 镜像 docker pull emqx/emqx:latest[Step 2] : 创建目录 ➡️ 创建容器 ➡️ 拷贝文件 ➡️ 授权文件 ➡️ 删除容器 # 创建目录 mkdir -p /data/emqx/{etc,data,log}# 创建容器 docker run -d --name emqx -p 1883:1883 -p 1808…

H7-TOOL的LUA小程序教程第15期:电压,电流,NTC热敏电阻以及4-20mA输入(2024-10-21,已经发布)

LUA脚本的好处是用户可以根据自己注册的一批API(当前TOOL已经提供了几百个函数供大家使用),实现各种小程序,不再限制Flash里面已经下载的程序,就跟手机安装APP差不多,所以在H7-TOOL里面被广泛使用&#xff…

在矩池云使用智谱情感语音模型GLM-4-Voice,详细指南

GLM-4-Voice 是智谱 AI 推出的端到端语音模型。GLM-4-Voice 能够直接理解和生成中英文语音,进行实时语音对话,并且能够遵循用户的指令要求改变语音的情感、语调、语速、方言等属性。 本文将详细介绍,如何在GPU算力租赁平台矩池云上快速复现、…

MongoDB安装配置及配置和启动服务

MongoDB 安装配置 附:MongoDB官网下载地址: https://www.mongodb.com/download-center/community 注: 官网可以下载最新版的MongoDB安装包,有MSI安装版和ZIP安装版。我们课堂上使用4.4.4的ZIP安装版。安装版参考博客&#xff1…

使用rust实现类似C#中的Convert数据转换类

// 编写一个模块&#xff08;好比是C#的一个类&#xff09; pub mod Convert {// 定义函数&#xff08;好比C#中的方法&#xff09;pub fn ToInt32(s:&str) -> i32 {s.parse::<i32>().unwrap()}pub fn ToInt64(s:&str) -> Result<i64,std::num::ParseIn…

Maven入门到实践:从安装到项目构建与IDEA集成

目录 1. Maven的概念 1.1 什么是Maven 1.2 什么是依赖管理 1.3 什么是项目构建 1.4 Maven的应用场景 1.5 为什么使用Maven 1.6 Maven模型 2.初识Maven 2.1 Maven安装 2.1.1 安装准备 2.1.2 Maven安装目录分析 2.1.3 Maven的环境变量 2.2 Maven的第一个项目 2.2.1…

AUTOSAR CP 中 BswM 模块功能与使用介绍(2/2)

三、 AUTOSAR BswM 模块详解及 ARXML 示例 BswM 模块的主要功能 BswM&#xff08;Basic Software Mode Manager&#xff09;模块在 AUTOSAR 架构中扮演着模式管理的核心角色。它负责管理车辆的各种模式&#xff08;如启动、运行、停车等&#xff09;&#xff0c;并根据不同的…

stm32入门教程--ADC模拟-数字转换器

ADC&#xff08;Analog-Digital Converter&#xff09;模拟-数字转换器 ADC可以将引脚上连续变化的模拟电压转你换位内存中存储的数字变量&#xff0c;建立模拟电路到数字电路的桥梁。 12位逐次逼近型ADC&#xff0c;1us转换时间 输入电压范围&#xff1a;0-3.3V转换结果范围…

MCK主机加固与防漏扫的深度解析

在当今这个信息化飞速发展的时代&#xff0c;网络安全成为了企业不可忽视的重要议题。漏洞扫描&#xff0c;简称漏扫&#xff0c;是一种旨在发现计算机系统、网络或应用程序中潜在安全漏洞的技术手段。通过自动化工具&#xff0c;漏扫能够识别出系统中存在的已知漏洞&#xff0…

基于大型语言模型的智能网页抓取

Google Gemini 是 Google AI 创建的大型语言模型 (LLM) 系列&#xff0c;可提供最先进的 AI 功能。Gemini 模型包括&#xff1a; Gemini Ultra — 最大、最强大的模型&#xff0c;擅长处理编码、逻辑推理和创意协作等复杂任务。可通过 Gemini Advanced&#xff08;原名 Bard&a…

使用QT绘图控件QCustomPlot绘制波形图

使用QT绘图控件QCustomPlot绘制波形图 下载QCustomPlot 下载QCustomPlot,链接路径 解压之后就能看到源代码了 在Qt中添加QCustomPlot的帮助文档 在Qt Creator的菜单:工具–>选项–>帮助–>文档–>添加qcustomplot\documentation\qcustomplot.qch文件。

《PP-OCRv1》论文精读:PaddleOCR是目前SOTA级别的OCR开源技术(截止2024年10月)

PP-OCR: A Practical Ultra Lightweight OCR System论文地址PP-OCRv2: Bag of Tricks for Ultra Lightweight OCR System论文地址PP-OCRv3: More Attempts for the Improvement of Ultra Lightweight OCR System论文地址PaddleOCR Github OCR工具库 43.5K个star PP-OCRv1由百度…

CMU生成式人工智能大模型:从入门到放弃(四)

引言 在之前的系列博客中&#xff0c;我们深入探讨了生成式AI的基础知识、大型语言模型的发展&#xff0c;以及如何通过递归神经网络&#xff08;RNN&#xff09;和Transformer模型来学习语言模型。今天&#xff0c;我们将转向计算机视觉领域&#xff0c;探讨预训练与微调的概…

STM32--SPI原理及应用

1.什么是SPI SPI&#xff0c;Serial Peripheral interface&#xff0c;串行外围设备接口。是Motorola(摩托罗拉)首先在其MC68HCXX系列处理器上定义的。 2.SPI基本特性 SPI&#xff0c;是一种高速全双工的通信总线。广泛地应用在ADC、LCD等设备与MCU间&#xff0c;适用于对通…

微前端架构新选择:micro-app 框架一文全解析

目录 前言技术方案沙箱withiframe 环境变量主应用生命周期子应用生命周期初始化更新卸载缓存 JS 沙箱样式隔离元素隔离路由系统⭐数据通信⭐资源系统预加载umd 模式其他功能调试工具 前言 https://micro-zoe.github.io/micro-app/ micro-app 是由京东前端团队推出的一款微前端…