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

news/2025/9/24 14:50:45/文章来源:https://www.cnblogs.com/yxysuanfa/p/19109227
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.mzph.cn/news/915840.shtml

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

相关文章

CF932E Team Work

代数推导天地灭,组合意义保平安。其实啥也不会 将题目转化为,有 \(k\) 个带标号的奶龙,要分给 \(i\) 个带标号的树气,其中这 \(i\) 个树气是从 \(n\) 个树气中选出来的,求总方案数。 首先你考虑到会有很多树气选不…

襄阳市住房和城乡建设局官方网站网站服务器端口如何做防护

Trunc 在oracle中,可利用 trunc函数 查询当天数据,该函数可用于截取时间或者数值,将该函数与 select 语句配合使用可查询时间段数据 查询当天数据 --sysdate是获取系统当前时间函数 --TRUNC函数用于截取时间或者数值,返回指定的…

HTTP3与HTTP2的性能对比

HTTP/3 相对于 HTTP/2 的性能提升是显著的,但其优势并非在所有场景下都立竿见影。核心的差异源于底层传输协议从 TCP 切换到了 QUIC(基于 UDP)。 下面我们从几个关键维度进行详细对比,并总结适用场景。核心差异:T…

KubeSphere 社区版即将发布:开启云原生新篇章

各位社区朋友,大家好。最近 KubeSphere 社区版的消息引发了不少讨论。KubeSphere 社区版即将于国庆后和大家见面。今天,我们想先向大家介绍一下 KubeSphere 社区版。 为什么推出社区版 云原生技术发展至今,Kubernet…

从零开始:c#如何优雅的操作临时文件/数据?以ASP文件下载为例

从零开始:c#如何优雅的操作临时文件/数据?以ASP文件下载为例在程序开发中,我们经常需要处理临时文件,例如:安全替换大文件:先将内容写入临时文件,成功后再替换目标文件,避免写入过程中断导致数据损坏。 进程间数…

KDL - 金山云数据湖系统参数

KDL - 金山云数据湖系统参数 ${flow.name} ${flow.id} ${job.name} ${job.id} ${biz.date} #20250924 ${yyyyMM} #202509

表情网站源码网站里面内外链接如何做

最好的种树是十年前,其次是现在。歌谣 每天一个前端小知识 提醒你改好好学习了 知乎博主 csdn博主 b站博主 放弃很容易但是坚持一定很酷 我是歌谣 喜欢就一键三连咯 你得点赞是对歌谣最大的鼓励 编写一个函数来查找字符串数组中的最长公共前缀。 如果不存在公共前缀&…

wordpress搭建个人网站费用wordpress 8080

我们每天都在开发Java,每天都在使用JDK,那么我们了解JDK的发展史吗,这篇文章将带你深入了解JDK的发展史。 JDK(Java Development Kit)是Java开发者工具包,是用于编写Java程序和运行Java程序的软件开发工具集。自从1995年Java语言首次发布以来,JDK已经经历了数十年的发展…

内力网站建设深圳常平网站建设制作公司

哲哲是一位硬核游戏玩家。最近一款名叫《达诺达诺》的新游戏刚刚上市,哲哲自然要快速攻略游戏,守护硬核游戏玩家的一切! 为简化模型,我们不妨假设游戏有 N 个剧情点,通过游戏里不同的操作或选择可以从某个剧情点去往另…

大丰网站建设公司鞍山网站制作开发

由于最近比较忙,所以本周搞了一个相对简单的验证码,就是抖音Tiktok的滑块验证码,这也是接到客户的一个需求。这种验证码通常在电脑端登录抖音、巨量引擎的的时候出现。 首先看一下最终的效果: 验证码识别过程 1、利用爬虫采集图…

网上做外贸都有哪些网站做网站要多少

主要是安装一些插件,c/c开发常用的插件有如下几个: 插件名称功能C/CC 和 C的编译环境C/C SnippetsC/C重用代码块C/C Advanced LintC/C静态检测Code Runner代码运行Include AutoComplete自动头文件包含Rainbow Brackets彩虹花括号,有助于阅读…

建设网站建设什么挣钱织梦技术网站模版

0.按照步骤,快速进行python的开发准备工作 1. Python解释器的下载 下载地址 https://www.python.org/ 选择对应你的系统的安装包 2.记得勾选这里将python加入你的路径中 3.有如下四个程序表明安装成功 4.点击上图中的第二个程序打开窗口检查解释器能否正常工作 输…

乌海做网站网站开发服务费入什么科目

我们知道C的类应当是先定义,然后使用。但在处理相对复杂的问题、考虑类的组合时,很可能遇到俩个类相互引用的情况,这种情况称为循环依赖。 例如: class A { public:void f(B b);//以B类对象b为形参的成员函数//这里编译错位&…

房建设计网站excel+表格+做的网站

k8s subPathExpr作用 场景: 对于一个deployment或者job拉起的服务,所有pod都是一样的配置,如果都挂载了宿主机的同一个目录,那么就会互相干扰,我们希望挂载相同目录,且在这个目录下,每个pod建立…

答题互动网页收藏

<!DOCTYPE html> <html lang="zh-CN"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"&…

常见问题解决 --- windows软件运行报错MSVCP140 ATOMIC WAIT.dI

常见问题解决 --- windows软件运行报错MSVCP140 ATOMIC WAIT.dI解决方法: https://aka.ms/vs/17/release/vc_redist.x64.exe 下载安装即可 其他参考: https://www.dll-files.com/msvcp140_atomic_wait.dll.htmlhttps…

芯脉:面向高速接口的SoC架构与完整性设计<3> - 教程

芯脉:面向高速接口的SoC架构与完整性设计<3> - 教程pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas&q…

spring boot实现MCP服务器,及其cursor测试利用的手段

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

vscode插件开发,打包后不生效问题解决

原因:使用AI生成的vscode 插件代码,打包使用的tsc,没有将三方依赖打包进去,导致安装插件后,插件无法激活,仅注册了快捷键 解决:对比使用 yo生成的ts+pnpm 插件项目,切换为esbuild打包 注意发布的话,使用 @vsco…

streamlit构建dashboard

1.python numpy pandas plotly库三者不同的侧重点 | 内容1 | 内容2 | | 内容3 | 内容4 | | 内容5 | 内容6 |