当前位置: 首页 > news >正文

实用指南:数学建模--Topsis(Python)

import numpy as np
import pandas as pd

假设有 3 个方案,每个方案有 4 个评价指标,其中前 2 个为效益型指标,后 2 个为成本型指标

原始数据(3个方案,4个指标)
data = np.array(\[
&
#x20; \[80, 90, 30, 20],
&
#x20; \[70, 85, 25, 15],
&
#x20; \[90, 95, 35, 25]
])
指标类型(1表示效益型,0表示成本型)
indicator\_type = \[1, 1, 0, 0]
指标权重
weights = np.array(\[0.2, 0.3, 0.25, 0.25])

(三)数据标准化处理

def normalize\_data(data, indicator\_type):
&
#x20; m, n = data.shape
&
#x20; normalized\_data = np.zeros\_like(data, dtype=np.float64)
&
#x20; for j in range(n):
&
#x20; col = data\[:, j]
&
#x20; max\_val = np.max(col)
&
#x20; min\_val = np.min(col)
&
#x20; if indicator\_type\[j] == 1: # 效益型指标
&
#x20; normalized\_data\[:, j] = (col - min\_val) / (max\_val - min\_val)
&
#x20; else: # 成本型指标
&
#x20; normalized\_data\[:, j] = (max\_val - col) / (max\_val - min\_val)
&
#x20; return normalized\_data
normalized\_data = normalize\_data(data, indicator\_type)
print("标准化矩阵:")
print(normalized\_data)

此函数根据指标类型对数据进行标准化,对于效益型指标,采用公式zij=xij−min⁡jxijmax⁡jxij−min⁡jxijz_{ij}=\frac{x_{ij}-\min_j x_{ij}}{\max_j x_{ij}-\min_j x_{ij}}zij=maxjxijminjxijxijminjxij;对于成本型指标,采用公式zij=max⁡jxij−xijmax⁡jxij−min⁡jxijz_{ij}=\frac{\max_j x_{ij}-x_{ij}}{\max_j x_{ij}-\min_j x_{ij}}zij=maxjxijminjxijmaxjxijxij

(四)构建加权标准化矩阵

weighted\_normalized\_data = normalized\_data \* weights
print(weighted\_normalized\_data)

将标准化矩阵中的每个元素乘以对应的权重,得到加权标准化矩阵。

(五)确定正理想解和负理想解

\# 正理想解(每个指标取最大值)
positive\_ideal = np.max(weighted\_normalized\_data, axis=0)
\# 负理想解(每个指标取最小值)
negative\_ideal = np.min(weighted\_normalized\_data, axis=0)
print("正理想解:", positive\_ideal)
print("负理想解:", negative\_ideal)

(六)计算各方案与正、负理想解的距离

def calculate\_distance(weighted\_data, ideal):
&
#x20; m, n = weighted\_data.shape
&
#x20; distances = np.zeros(m)
&
#x20; for i in range(m):
&
#x20; distances\[i] = np.sqrt(np.sum((weighted\_data\[i, :] - ideal) \*\*2))
&
#x20; return distances
d\_plus = calculate\_distance(weighted\_normalized\_data, positive\_ideal)
d\_minus = calculate\_distance(weighted\_normalized\_data, negative\_ideal)
print("与正理想解的距离:", d\_plus)
print("与负理想解的距离:", d\_minus)

采用欧氏距离公式计算各方案与正、负理想解的距离。

(七)计算相对贴近度并排序

\# 计算相对贴近度
c\_values = d\_minus / (d\_plus + d\_minus)
print("相对贴近度:", c\_values)
\# 排序(从大到小)
sorted\_indices = np.argsort(c\_values)\[::-1]
print("方案排序(从优到劣):", sorted\_indices + 1) # +1是因为方案编号从1开始

根据相对贴近度Ci=di−di++di−C_i=\frac{d_i^-}{d_i^+ + d_i^-}Ci=di++didi计算值,并按照从大到小的顺序对方案进行排序

http://www.zskr.cn/news/10888.html

相关文章:

  • KubeSphere 社区版即将发布:开启云原生新篇章
  • 从零开始:c#如何优雅的操作临时文件/数据?以ASP文件下载为例
  • 答题互动网页收藏
  • 常见问题解决 --- windows软件运行报错MSVCP140 ATOMIC WAIT.dI
  • spring boot实现MCP服务器,及其cursor测试利用的手段
  • vscode插件开发,打包后不生效问题解决
  • 力扣 338题 比特位计数
  • 技术前瞻与个人发展 - 构建终身学习的手艺体系——AI大模型:从0手搓到∞——AI、大模型时代,如何学习?
  • 企业服务管理是做什么的?-ManageEngine卓豪
  • fastApi框架开发一个web端仓库管理系统 - 实践
  • 英伟达入资 11Labs,黄仁勋:语音 AI 带来情感、共情和联结;Qwen3-TTS-Flash:多语言,多音色,多方言丨日报
  • 【论文阅读】Uncertainty Modeling for Out-of-Distribution Generalization (ICLR 2022) - 详解
  • 数字孪生 + 碳痕追踪:MyEMS 给能源管理装了套 “全链路全景导航”
  • 基于IOS26的iOS 内存分析与必要内存界定
  • 深入解析:ARM架构学习9——LM75温度传感器+ADC转换器
  • P14062 【MX-X21-T7】[IAMOI R5] 若我不曾见过太阳 题解
  • 一套自用的git提交规范,可清晰的识别到关联的任务/bug - 实践
  • 撕开厂商锁定黑箱:MyEMS 如何用开源代码夺回能源管理的 “自主控制权”?
  • C造桥与砍树
  • Keil uVision5 MDK 5.42安装教程(支持ARM Cortex全系列开发)
  • 从Void到Task<PublishAggregateResult>:一次服务方法返回类型重构的纠结与决策
  • jenkins job的configure中配置git时 选择的credential为什么不能选择secret认证方式的数据
  • Day21继承
  • 实用指南:科研绘图Origin百度云盘下载与安装指南
  • 题解:P8300 [COCI 2012/2013 #2] INSPEKTOR
  • SuperHarness-3D低压柜机电协同设计方案!
  • 详细介绍:.NET驾驭Word之力:打造专业文档 - 页面设置与打印控制完全指南
  • vim 入门教学4(命令行模式教学)
  • 使用.NET标准库实现多任务并行处理的详细过程 - 实践
  • 模型训练中 平均损失值和平均准确率的深入理解