基于距离的多指标决策——TOPSIS
文章目录
- TOPSIS方法概述
- 计算步骤
- 1. 数据标准化
- 2. 确定权重
- 3. 计算加权标准化决策矩阵
- 4. 确定理想解和负理想解
- 5. 计算各评价对象与理想解和负理想解的距离
- 6. 计算相对贴近度
- 7. 根据相对贴近度进行排序
- 示例
- 结论
在多指标决策分析中,TOPSIS(逼近理想解排序法)因其直观和易于理解而广受欢迎。本文将深入探讨TOPSIS方法的计算步骤,并通过一个具体示例来演示其应用。
TOPSIS方法概述
TOPSIS是一种基于距离的多指标决策方法,它通过计算各备选方案与理想解和负理想解之间的距离来评价方案的优劣。理想解是所有指标最优值的集合,而负理想解则是所有指标最差值的集合。
计算步骤
1. 数据标准化
首先,需要对原始数据进行标准化处理,以消除不同指标量纲的影响。标准化公式如下:
r i j = x i j ∑ i = 1 m x i j 2 r_{ij} = \frac{x_{ij}}{\sqrt{\sum_{i=1}^{m}x_{ij}^2}} rij=∑i=1mxij2xij
其中,( r_{ij} ) 是第 ( i ) 个评价对象在第 ( j ) 个指标上的标准化值,( x_{ij} ) 是原始数据。
2. 确定权重
接下来,确定各指标的权重。权重可以通过熵权法、专家打分法等方法获得。
3. 计算加权标准化决策矩阵
将标准化后的决策矩阵与权重相乘,得到加权标准化决策矩阵:
r ~ i j = w j r i j \tilde{r}_{ij} = w_j r_{ij} r~ij=wjrij
其中, w j w_j wj 是第 j j j 个指标的权重。
4. 确定理想解和负理想解
根据加权标准化决策矩阵,确定正理想解 A + A^+ A+和负理想解 A − A^- A−:
A + = { max ( r ~ i j ∣ j ∈ J ) , min ( r ~ i j ∣ j ∈ J ′ ) } A^+ = \{ \max(\tilde{r}_{ij}|j \in J), \min(\tilde{r}_{ij}|j \in J') \} A+={max(r~ij∣j∈J),min(r~ij∣j∈J′)}
A − = { min ( r ~ i j ∣ j ∈ J ) , max ( r ~ i j ∣ j ∈ J ′ ) } A^- = \{ \min(\tilde{r}_{ij}|j \in J), \max(\tilde{r}_{ij}|j \in J') \} A−={min(r~ij∣j∈J),max(r~ij∣j∈J′)}
其中, J J J 表示效益型指标的集合, J ′ J' J′ 表示成本型指标的集合。
- 正理想解是所有效益型指标最大化和成本型指标最小化的解。
- 负理想解是所有效益型指标最小化和成本型指标最大化的解。
5. 计算各评价对象与理想解和负理想解的距离
计算每个评价对象与正理想解和负理想解的距离:
d i + = ∑ j = 1 n ( r ~ i j − r j ∗ ) 2 d_i^+ = \sqrt{\sum_{j=1}^{n}(\tilde{r}_{ij} - r_j^*)^2} di+=∑j=1n(r~ij−rj∗)2
d i − = ∑ j = 1 n ( r ~ i j − r j − ) 2 d_i^- = \sqrt{\sum_{j=1}^{n}(\tilde{r}_{ij} - r_j^-)^2} di−=∑j=1n(r~ij−rj−)2
6. 计算相对贴近度
相对贴近度是评价对象与理想解的距离与评价对象与理想解和负理想解距离之和的比值:
C i = d i − d i + + d i − C_i = \frac{d_i^-}{d_i^+ + d_i^-} Ci=di++di−di−
7. 根据相对贴近度进行排序
根据相对贴近度对评价对象进行排序,贴近度越大的评价对象越优。
示例
假设有3个评价对象A、B、C,2个指标X1和X2,原始数据如下:
评价对象 | X1 | X2 |
---|---|---|
A | 4 | 10 |
B | 6 | 8 |
C | 8 | 6 |
假设通过某种方法(例如熵权法)确定了以下权重:
- X1的权重为 w 1 = 0.5 w_1 = 0.5 w1=0.5
- X2的权重为 w 2 = 0.5 w_2 = 0.5 w2=0.5
示例计算
-
数据标准化:
r A 1 = 4 4 2 + 1 0 2 , r A 2 = 10 4 2 + 1 0 2 r_{A1} = \frac{4}{\sqrt{4^2 + 10^2}}, r_{A2} = \frac{10}{\sqrt{4^2 + 10^2}} rA1=42+1024,rA2=42+10210
r B 1 = 6 6 2 + 8 2 , r B 2 = 8 6 2 + 8 2 r_{B1} = \frac{6}{\sqrt{6^2 + 8^2}}, r_{B2} = \frac{8}{\sqrt{6^2 + 8^2}} rB1=62+826,rB2=62+828
r C 1 = 8 8 2 + 6 2 , r C 2 = 6 8 2 + 6 2 r_{C1} = \frac{8}{\sqrt{8^2 + 6^2}}, r_{C2} = \frac{6}{\sqrt{8^2 + 6^2}} rC1=82+628,rC2=82+626 -
计算加权标准化决策矩阵:
r ~ A 1 = 0.5 × r A 1 , r ~ A 2 = 0.5 × r A 2 \tilde{r}_{A1} = 0.5 \times r_{A1}, \tilde{r}_{A2} = 0.5 \times r_{A2} r~A1=0.5×rA1,r~A2=0.5×rA2
r ~ B 1 = 0.5 × r B 1 , r ~ B 2 = 0.5 × r B 2 \tilde{r}_{B1} = 0.5 \times r_{B1}, \tilde{r}_{B2} = 0.5 \times r_{B2} r~B1=0.5×rB1,r~B2=0.5×rB2
r ~ C 1 = 0.5 × r C 1 , r ~ C 2 = 0.5 × r C 2 \tilde{r}_{C1} = 0.5 \times r_{C1}, \tilde{r}_{C2} = 0.5 \times r_{C2} r~C1=0.5×rC1,r~C2=0.5×rC2 -
确定理想解和负理想解:
A ∗ = ( max ( r ~ A 1 , r ~ B 1 , r ~ C 1 ) , max ( r ~ A 2 , r ~ B 2 , r ~ C 2 ) ) A^* = \left( \max(\tilde{r}_{A1}, \tilde{r}_{B1}, \tilde{r}_{C1}), \max(\tilde{r}_{A2}, \tilde{r}_{B2}, \tilde{r}_{C2}) \right) A∗=(max(r~A1,r~B1,r~C1),max(r~A2,r~B2,r~C2))
A − = ( min ( r ~ A 1 , r ~ B 1 , r ~ C 1 ) , min ( r ~ A 2 , r ~ B 2 , r ~ C 2 ) ) A^- = \left( \min(\tilde{r}_{A1}, \tilde{r}_{B1}, \tilde{r}_{C1}), \min(\tilde{r}_{A2}, \tilde{r}_{B2}, \tilde{r}_{C2}) \right) A−=(min(r~A1,r~B1,r~C1),min(r~A2,r~B2,r~C2)) -
计算距离和相对贴近度:
根据上述公式计算每个评价对象的 d i + d_i^+ di+, d i − d_i^- di−,和 C i C_i Ci。
import numpy as np# 原始数据
data = np.array([[4, 10], # 对象A[6, 8], # 对象B[8, 6] # 对象C
])# 权重,假设X1和X2都是0.5
weights = np.array([0.5, 0.5])# 1. 数据标准化
sum_squared = np.sum(data**2, axis=0)
r = data / np.sqrt(sum_squared)# 2. 计算加权标准化决策矩阵
r_weighted = r * weights# 3. 确定理想解和负理想解
# 假设所有指标都是效益型指标
A_star = np.max(r_weighted, axis=0)
A_neg = np.min(r_weighted, axis=0)# 4. 计算各评价对象与理想解和负理想解的距离
distance_to_ideal = np.sqrt(np.sum((r_weighted - A_star) ** 2, axis=1))
distance_to_negative_ideal = np.sqrt(np.sum((r_weighted - A_neg) ** 2, axis=1))# 5. 计算相对贴近度
closeness_values = distance_to_negative_ideal / (distance_to_ideal + distance_to_negative_ideal)# 6. 根据相对贴近度进行排序
sorted_indices = np.argsort(closeness_values)[::-1] # 从大到小排序# 输出结果
print("评价对象排序索引:", sorted_indices)
print("相对贴近度:", closeness_values[sorted_indices])# 将排序结果与评价对象关联
sorted_objects = ['A', 'B', 'C']
print("评价对象排序结果:", [sorted_objects[i] for i in sorted_indices])
结论
TOPSIS方法通过计算评价对象与正理想解和负理想解的距离来评价其优劣,是一种简单、直观且易于实现的方法。
在实际应用中,应注意合理选择权重,并对数据进行适当的预处理,以确保评价结果的准确性和可靠性。如果你有任何问题或需要进一步的指导,请随时联系我们。