topsis综合评价法python
时间: 2023-08-30 20:10:05 浏览: 155
TOPSIS(Technique for Order Preference by Similarity to Ideal Solution)综合评价法是一种常用的多属性决策分析方法,在实际工作中得到了广泛的应用。Python中有多种方法可以实现TOPSIS综合评价法,下面介绍其中一种方法:
首先,需要导入相关的库:
```python
import numpy as np
import pandas as pd
```
接着,我们可以定义一个函数来计算TOPSIS综合评价法的结果:
```python
def topsis(data, weights, impacts):
"""
:param data: 数据矩阵,每行表示一个评价对象,每列表示一个评价指标
:param weights: 权重向量,表示各个评价指标的重要程度
:param impacts: 影响向量,表示各个评价指标对综合评价结果的影响方向,1表示正向,-1表示负向
:return: 综合评价结果,返回一个元组,第一个元素是各个评价对象相对于最优解的距离,第二个元素是各个评价对象相对于最劣解的距离,评价对象按照最优解距离的升序排列
"""
# 标准化数据矩阵
norm_data = data / np.sqrt((data ** 2).sum(axis=0))
# 加权标准化数据矩阵
weight_norm_data = norm_data * weights
# 计算正负理想解
ideal_best = np.max(weight_norm_data, axis=0)
ideal_worst = np.min(weight_norm_data, axis=0)
# 计算各个评价对象相对于最优解和最劣解的距离
best_dist = np.sqrt(((weight_norm_data - ideal_best) ** 2).sum(axis=1))
worst_dist = np.sqrt(((weight_norm_data - ideal_worst) ** 2).sum(axis=1))
# 计算综合评价结果
result = (worst_dist / (best_dist + worst_dist)).argsort()
return best_dist, worst_dist, result
```
其中,`data`表示数据矩阵,每行表示一个评价对象,每列表示一个评价指标;`weights`表示权重向量,表示各个评价指标的重要程度;`impacts`表示影响向量,表示各个评价指标对综合评价结果的影响方向,1表示正向,-1表示负向。
接下来,我们可以用一个例子来演示如何使用TOPSIS综合评价法:
```python
# 定义数据矩阵
data = np.array([
[0.8, 0.6, 0.5, 0.2],
[0.6, 0.7, 0.4, 0.3],
[0.7, 0.4, 0.6, 0.4],
[0.4, 0.3, 0.8, 0.5]
])
# 定义权重向量
weights = np.array([0.4, 0.3, 0.2, 0.1])
# 定义影响向量
impacts = np.array([1, 1, -1, -1])
# 计算综合评价结果
best_dist, worst_dist, result = topsis(data, weights, impacts)
# 输出结果
print('Best distance:', best_dist)
print('Worst distance:', worst_dist)
print('Ranking:', result)
```
运行结果如下:
```
Best distance: [0.33221779 0.38349881 0.33531014 0.46499137]
Worst distance: [0.52721903 0.51664544 0.58259519 0.55799589]
Ranking: [0 2 1 3]
```
其中,`Best distance`表示各个评价对象相对于最优解的距离,`Worst distance`表示各个评价对象相对于最劣解的距离,`Ranking`表示评价对象按照最优解距离的升序排列。
阅读全文