TOPSIS方法

本文介绍了TOPSIS( Technique for Order of Preference by Similarity to Ideal Solution)方法,详细阐述了其概念、具体实施步骤,并提供了代码整理,剩余部分可在文件夹中查看。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

TOPSIS概念

在这里插入图片描述

具体步骤

  1. 将原始矩阵正向化
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  2. 正向化矩阵标准化
    在这里插入图片描述
  3. 计算得分并归一化
    在这里插入图片描述

代码整理

%% 第一步:把数据复制到工作区,并将这个矩阵命名为x
%1)在工作区右键,点击新建(Ctrl+N),输入变量名称为x
%2)Excel中复制数据,再回到Excel中右键,点击粘贴Excel数据,
%3)关掉这个窗口,点击x变量,右键另存为,保存为mat文件(下次就不用复制粘贴了,只需使用load命令即可加载数据)
%4)注意,代码和数据要放在同一个目录下

clear;clc
load data_water_quality.mat % 此处可修改

%% 第二步:判断是否需要正向化
[n,m] = size(X);
disp(['共有'num2str(n)'个评价对象,'num2str(m)'个评价指标']);
Judge = input (['这'num2str(m)'个指标是否需要经过正向化处理,需要请输入1,不需要请输入0:']);
if Judge == 1 
    Position = input('请输入需要正向化处理的指标所在的列,例如第2,3,6三列需要处理,则输入[2,3,6]: ');%[
### Topsis 方法概述 Topsis(Technique for Order Preference by Similarity to Ideal Solution)是一种多属性决策分析方法,其核心思想是通过计算备选方案与理想解和负理想解之间的距离来评估各方案的优劣。这种方法广泛应用于各种领域,尤其是在需要综合多个指标进行评价的情况下。 在 IT 领域中,Topsis 方法可以用于性能评估、项目选择、风险管理和资源分配等问题。例如,在软件开发过程中,可以通过该方法对不同的技术栈或工具集进行评分;在网络管理中,可以用它来优化网络节点的选择[^1]。 ### 实现步骤详解 以下是基于 Python 的 Topsis 方法实现: #### 数据预处理 首先,需标准化原始数据矩阵以消除量纲影响。假设我们有 \( m \) 个对象和 \( n \) 个属性,则标准化后的值可表示为: \[ z_{ij} = \frac{x_{ij}}{\sqrt{\sum_{i=1}^{m}{x_{ij}^2}}} \] 其中 \( x_{ij} \) 表示第 \( i \) 个对象在第 \( j \) 属性上的取值。 ```python import numpy as np def normalize_data(matrix): """ 对输入的数据矩阵进行标准化 """ norm_matrix = matrix / np.sqrt((matrix ** 2).sum(axis=0)) return norm_matrix ``` #### 权重向量化 权重反映了各个属性的重要性程度。如果已知权重分布可以直接赋值给每列;否则可通过熵权法或其他算法自动求得最优权重配置。 ```python def apply_weights(normalized, weights): """ 应用加权操作到规范化后的数组上 """ weighted_normalized = normalized * weights return weighted_normalized ``` #### 计算正负理想解 定义正理想解 (PIS) 和负理想解 (NIS),分别对应于每个属性的最大值和最小值组合而成的理想型态。 \[ A^* = [\max_j(w_jz_{j}), ..., \min_k(w_kz_{k})], A^-=[...] \] ```python def compute_ideal_solutions(weighted_norm): pis = weighted_norm.max(axis=0) nis = weighted_norm.min(axis=0) return pis, nis ``` #### 距离度量 利用欧几里德几何空间中的直线距离公式测量任意一点至 PIS 及 NIS 的远近关系。 \[ d_i^+ = \sqrt{\sum{(w_j(z_{ij}-a_j^*))}}, d_i^- = ... \] ```python def euclidean_distance(pis_nis_tuple, wnorm_matrx): pis, nis = pis_nis_tuple dist_pis = ((wnorm_matrx - pis)**2).sum(axis=1)**(1/2) dist_nis = ((wnorm_matrx - nis)**2).sum(axis=1)**(1/2) return dist_pis, dist_nis ``` #### 综合得分排名 最后依据相对接近系数 C 值大小排序得出最终优选顺序列表。 \[ C_i=\frac{d_i^-}{d_i^++d_i^-} \] ```python def closeness_coefficient(distances): dp, dn = distances ci_values = dn / (dp + dn) return ci_values ``` ### 结论 综上所述,Topsis 提供了一个结构化的框架来进行复杂系统的定量比较研究。尽管如此,实际运用时仍需要注意一些细节问题比如如何合理设定目标函数以及选取恰当的标准体系等等。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值