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

数学建模--Topsis(Python)

import numpy as npimport pandas as pd

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

原始数据(3个方案,4个指标)data = np.array(\[    \[80, 90, 30, 20],    \[70, 85, 25, 15],    \[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):    m, n = data.shape    normalized\_data = np.zeros\_like(data, dtype=np.float64)    for j in range(n):        col = data\[:, j]        max\_val = np.max(col)        min\_val = np.min(col)        if indicator\_type\[j] == 1:  # 效益型指标            normalized\_data\[:, j] = (col - min\_val) / (max\_val - min\_val)        else:  # 成本型指标            normalized\_data\[:, j] = (max\_val - col) / (max\_val - min\_val)    return normalized\_datanormalized\_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):    m, n = weighted\_data.shape    distances = np.zeros(m)    for i in range(m):        distances\[i] = np.sqrt(np.sum((weighted\_data\[i, :] - ideal) \*\*2))    return distancesd\_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.dtcms.com/a/344999.html

相关文章:

  • 学习python第12天
  • 第5.3节:awk数据类型
  • gcc 和 make 命令
  • 机试备考笔记 17/31
  • 打工人日报20250822
  • Redis 部署模式深度对比与选型指南
  • 计算机毕设大数据方向:电信客户流失数据分析系统技术实现详解
  • ​如何用 Windows 10 ISO 文件重装系统?U盘安装教程(附安装包下载)
  • Kubernetes 调度器 详解
  • 加密货币与区块链:六大刑事重灾区
  • Vue3源码reactivity响应式篇之Reactive
  • 阿里云日志服务与Splunk集成方案(Splunk Add-on方式)实战
  • GitGithub相关(自用,持续更新update 8/23)
  • 通义万相:AI生视频提示词生成秘籍/指南
  • 高空作业智能安全带如何监控使用异常行为
  • Linux 下的网络编程
  • Linux笔记8——shell编程基础-2
  • ROS学习笔记1-幻宇机器人为模板
  • Windows11 家庭版永久解密BitLocker加密移动硬盘
  • 【Java并发编程】Java多线程深度解析:状态、通信与停止线程的全面指南
  • RK3506-PWM计数功能
  • c#实现鼠标mousemove事件抽稀,避免大数据阻塞网络
  • 【COMSOL】Comsol学习案例时的心得记录分享(三)
  • 罗技鼠标驱动下载教程 多种方法详细说明
  • 排序---插入排序
  • CS 创世 SD NAND 助力 T-BOX:破解智能汽车数字中枢的存储密码
  • 110、【OS】【Nuttx】【周边】效果呈现方案解析:查找最新构建件
  • C++/QT 开发技能树详解
  • 钉钉 Stream 模式SpringBoot接入配置与事件监听
  • Maxscript如何清理3dMax场景?