Post

基于熵权法-TOPSIS的多目标优化决策分析

基于熵权法-TOPSIS的多目标优化决策分析

在现实世界的决策问题中,往往需要同时考虑多个相互冲突或关联的目标,这类问题被称为多目标优化决策问题。如何科学、客观地评价不同方案的优劣,并从中选出最优方案,是决策分析领域的核心议题。熵权法(Entropy Weight Method, EWM)作为一种客观赋权方法,能够依据数据本身的波动性确定指标权重,有效避免主观因素的干扰。TOPSIS法(Technique for Order Preference by Similarity to Ideal Solution)则是一种经典的逼近理想解的排序方法,通过计算评价对象与最优、最劣方案的相对接近程度来进行排序。

将熵权法与TOPSIS法相结合,首先利用熵权法确定各评价指标的客观权重,然后将这些权重应用于TOPSIS法中,对备选方案进行综合评价和排序。这种组合方法既发挥了熵权法客观赋权的优势,又利用了TOPSIS法对多方案进行综合排序的系统性,在项目评估、绩效评价、风险分析等多个领域得到了广泛应用。

熵权法

熵权法的主要目的是基于数据本身的特性对指标体系进行客观赋权。

基本原理: 熵权法是一种基于信息熵的客观赋权方法。信息熵用于度量系统的不确定性或混乱程度。在多指标评价中:

  • 若指标的观测值差异较大(变异程度大),则该指标包含更多有用信息,应赋予较大权重,其信息熵较小
  • 若指标的观测值差异较小(变异程度小),则该指标对决策的区分能力弱,应赋予较小权重,其信息熵较大

熵权法通过计算各指标的信息熵来确定权重。指标的信息熵越小,其效用值和权重就越大;反之则越小。这种方法完全依赖数据的客观属性。

计算步骤:

  1. 数据准备 假设有 $n$ 个评价对象(样本),$m$ 个评价指标,构成原始数据矩阵 $X$: \(\begin{equation} X=\left[\begin{array}{cccc} x_{11} & x_{12} & \cdots & x_{1 m} \\ x_{21} & x_{22} & \cdots & x_{2 m} \\ \vdots & \vdots & \ddots & \vdots \\ x_{n 1} & x_{n 2} & \cdots & x_{n m} \end{array}\right] \end{equation}\) 其中,$x_{ij}$ 表示第 $i$ 个评价对象在第 $j$ 个指标下的原始值。对于某项指标,其值的离散程度越大,则该指标在综合评价中所起的作用就越大。如果该指标的所有评价值都相等,则该指标在评价中不起作用,权重应为0。

  2. 数据预处理(正向化与标准化) 为消除因量纲不同及指标方向不一致对评价结果的影响,需要对各指标进行正向化和标准化处理,将所有指标转化为数值越大越优,且取值范围统一(通常为[0, 1])的形态。 指标类型一般有三种:
    • 正向指标(效益型指标): 越大越好,如收入、产量、评分、满意度等。
    • 负向指标(成本型指标): 越小越好,如成本、能耗、延误时间、故障率等。
    • 适度指标(区间型指标): 指标值落在某个特定区间或接近某个特定值最好,如水中的PH值(越接近7越好)、温度(某个范围最佳)。

    常用的处理方法是极差法(Min-Max Normalization),它同时完成正向化和标准化。处理后的矩阵记为 $Z’$,其中元素为 $z’_{ij}$。

    • 正向指标: \(\begin{equation} z'_{i j}=\frac{x_{i j}-x_j^{\min }}{x_j^{\max }-x_j^{\min }} \end{equation}\) 其中 $x_j^{\min }$ 和 $x_j^{\max }$ 分别为第 $j$ 个指标在所有对象中的最小值和最大值。

    • 负向指标: \(\begin{equation} z'_{i j}=\frac{x_j^{\max }-x_{i j}}{x_j^{\max }-x_j^{\min }} \end{equation}\)

    • 适度指标:

      • 若最佳值为一个点 $x_{best_j}$,可按如下公式转换: \(\begin{equation} z'_{i j}=1-\frac{\left|x_{i j}-x_{best_j}\right|}{\max_k \left(\left|x_{k j}-x_{best_j}\right|\right)} \end{equation}\)
      • 若最佳为一个区间 $[a_j, b_j]$,则: \(\begin{equation} z'_{i j}= \begin{cases} 1-\frac{a_j-x_{i j}}{\max \left(a_j-x_j^{\min }, x_j^{\max }-b_j\right)} & , x_{i j}<a_j \\ 1 & , a_j \leq x_{i j} \leq b_j \\ 1-\frac{x_{i j}-b_j}{\max \left(a_j-x_j^{\min }, x_j^{\max }-b_j\right)} & , x_{i j}>b_j \end{cases} \end{equation}\)

      处理后,所有 $z’_{ij}$ 的值都落在 $[0,1]$ 区间内,且都是正向化的。若出现 ${z’_{{ij}}=0}$ 的情况,在后续计算信息熵时,会涉及到 $\ln(p_{ij})$。为避免 $p_{ij}=0$ 导致 $\ln(p_{ij})$ 无意义,通常约定当 $p_{ij}=0$ 时,其在熵值计算中的贡献项 $p_{ij} \ln p_{ij} = 0$。另一种处理方式是对所有 $z’_{ij}$ 加上一个极小的正数 $\epsilon$ (例如0.0001),即 ${z’’}_{{ij}} = z’_{ij} + \epsilon$,然后再进行后续计算。但这种平移可能会轻微改变原始数据的相对差异,通常优先采用前一种约定。

  3. 计算第 $j$ 项指标下第 $i$ 个对象所占比重 $p_{ij}$ 对于标准化后的矩阵 $Z’$ ,计算第 $i$ 个评价对象在第 $j$ 个指标上的贡献度或比重: \(\begin{equation} p_{ij} = \frac{z'_{ij}}{\sum_{k=1}^{n} z'_{kj}} \end{equation}\)

  4. 计算第 $j$ 项指标的熵值 $e_j$ \(\begin{equation} e_j = -k \sum_{i=1}^{n} (p_{ij} \ln p_{ij}) \end{equation}\) 其中,常数 $k = \frac{1}{\ln n}$,$n$ 为评价对象的数量。$k$ 的作用是使得熵值 $e_j$ 规范化到 $[0,1]$ 区间。

  5. 计算第 $j$ 项指标的差异程度(信息冗余度) $d_j$ 指标的差异程度 $d_j$ 用 $1$ 减去其信息熵 $e_j$ 得到: \(\begin{equation} d_j = 1 - e_j \end{equation}\) $d_j$ 越大,表示第 $j$ 个指标的信息越多,其对于评价的重要性也越大,应赋予更大的权重。

  6. 计算第 $j$ 项指标的权重 $w_j$ 将各指标的差异程度进行归一化处理,得到各指标的最终权重: \(\begin{equation} w_j = \frac{d_j}{\sum_{k=1}^{m} d_k} \end{equation}\) 其中 $m$ 为指标的数量。确保所有指标权重之和为1,即 $\sum_{j=1}^{m} w_j = 1$。

  7. (可选)基于熵权法的初步综合评价 如果仅使用熵权法进行综合评价(不结合TOPSIS等其他方法),可以直接计算每个评价对象的加权综合得分 $F_i$: \(\begin{equation} F_i = \sum_{j=1}^{m} w_j z'_{ij} \end{equation}\) 然而,更常见的做法是将熵权法计算得到的权重 $w_j$ 作为后续多属性决策方法(如TOPSIS)的输入。此时,会构建加权标准化决策矩阵 $V$,其元素 $v_{ij} = w_j z’_{ij}$。这个矩阵 $V$ 是TOPSIS方法的重要起点。 \(\begin{equation} V = \left[\begin{array}{cccc} w_1 z'_{11} & w_2 z'_{12} & \cdots & w_m z'_{1m} \\ w_1 z'_{21} & w_2 z'_{22} & \cdots & w_m z'_{2m} \\ \vdots & \vdots & \ddots & \vdots \\ w_1 z'_{n1} & w_2 z'_{n2} & \cdots & w_m z'_{nm} \end{array}\right] \end{equation}\)

python实现如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
# --- 1. 数据预处理 (正向化与Min-Max标准化) ---
def normalize_and_positiveize_data(X, criteria_types, moderate_params=None, epsilon_norm_denominator=1e-9):
    """
    对原始数据进行正向化和Min-Max标准化处理。
    参数:
        X (np.ndarray): 原始数据矩阵 (n_samples, m_features/objectives)
        criteria_types (list of str): 指标类型列表。
            'positive': 正向指标 (越大越好)
            'negative': 负向指标 (越小越好)
            'moderate_point': 适度指标 (越接近某个点越好)
            'moderate_interval': 适度指标 (落在某个区间内最好)
        moderate_params (list, optional): 对应 'moderate_point''moderate_interval' 的参数。
            - For 'moderate_point': dict {'best_value': float}
            - For 'moderate_interval': dict {'lower_bound': float, 'upper_bound': float}
            - For 'positive'/'negative': None
            长度应与 criteria_types 一致。
        epsilon_norm_denominator (float): 防止Min-Max标准化分母为零的小常数。
    返回:
        np.ndarray: 正向化和标准化后的数据矩阵 Z' (n_samples, m_features), 值域 [0, 1]
    """
    n_samples, m_features = X.shape
    Z_prime = np.zeros_like(X, dtype=float)

    if moderate_params is None:
        moderate_params = [None] * m_features
    if len(criteria_types) != m_features or len(moderate_params) != m_features:
        raise ValueError("criteria_types and moderate_params must have length equal to number of features.")

    for j in range(m_features):
        col_data = X[:, j]
        crit_type = criteria_types[j]
        mod_param = moderate_params[j]

        min_val = np.min(col_data)
        max_val = np.max(col_data)
        range_val = max_val - min_val
        denominator = range_val if range_val > 0 else epsilon_norm_denominator

        if crit_type == 'positive':
            Z_prime[:, j] = (col_data - min_val) / denominator
        elif crit_type == 'negative':
            Z_prime[:, j] = (max_val - col_data) / denominator
        elif crit_type == 'moderate_point':
            if mod_param is None or 'best_value' not in mod_param:
                raise ValueError(f"Missing 'best_value' for moderate_point indicator at column {j}")
            best_val = mod_param['best_value']
            abs_diff = np.abs(col_data - best_val)
            max_abs_diff = np.max(abs_diff)
            if max_abs_diff == 0: # 所有值都等于最佳值
                Z_prime[:, j] = 1.0
            else:
                Z_prime[:, j] = 1 - (abs_diff / max_abs_diff)
        elif crit_type == 'moderate_interval':
            if mod_param is None or 'lower_bound' not in mod_param or 'upper_bound' not in mod_param:
                raise ValueError(f"Missing 'lower_bound' or 'upper_bound' for moderate_interval at col {j}")
            a_j = mod_param['lower_bound']
            b_j = mod_param['upper_bound']
            if a_j > b_j:
                raise ValueError(f"lower_bound > upper_bound for moderate_interval at col {j}")
            m_val_denom = np.max([a_j - min_val, max_val - b_j])
            if m_val_denom <= 0: # All data is within or exactly matches the optimal interval bounds
                                 # or the interval is wider than data range.
                m_val_denom = epsilon_norm_denominator # Effectively makes deviations outside optimal range highly penalized

            for i in range(n_samples):
                x_ij = col_data[i]
                if x_ij < a_j:
                    Z_prime[i, j] = 1 - (a_j - x_ij) / m_val_denom
                elif x_ij > b_j:
                    Z_prime[i, j] = 1 - (x_ij - b_j) / m_val_denom
                else: # a_j <= x_ij <= b_j
                    Z_prime[i, j] = 1.0
            # Clip to [0,1] as per formula structure, though 1-positive/positive should yield this.
            Z_prime[:, j] = np.clip(Z_prime[:, j], 0, 1)
        else:
            raise ValueError(f"Unknown criteria type: {crit_type} at column {j}")
    return Z_prime

def calculate_entropy_weights(Z_prime, zero_pij_treatment='shift', epsilon_p_log=1e-9, calculate_F_scores=False):
    """
    根据标准化后的数据矩阵 Z' 计算熵权。
    提供处理 p_ij = 0 的选项,并可选择计算初步综合评价得分 F_i。

    参数:
        Z_prime (np.ndarray): 正向化和标准化后的数据矩阵 (n_samples, m_features)
                              所有值应在 [0, 1] 区间,且越大越好。
        zero_pij_treatment (str, optional): 处理 p_ij = 0 的方法。默认为 'shift''shift': 对 Z_prime进行平移 (Z_prime + epsilon_p_log) 来计算 p_ij,
                     旨在避免 p_ij = 0。epsilon_p_log 应大于0。
                     对于 Z_prime 中恒为0的列,此方法将导致其 d_j = 0。
            'lnp_is_zero': 直接用 Z_prime 计算 p_ij。如果 p_ij = 0,则认为 p_ij * ln(p_ij) = 0。
                           对于 Z_prime 中恒为0的列,此方法将导致其 d_j = 1。
                           对于 Z_prime 中恒为正数的列,此方法将导致其 d_j = 0。
        epsilon_p_log (float, optional): 当 zero_pij_treatment='shift' 时,
                                         用于平移 Z_prime 中的值的小常数。默认为 1e-9。
        calculate_F_scores (bool, optional): 是否计算基于熵权法的初步综合评价得分 F_i。
                                             默认为 False。

    返回:
        np.ndarray: 各指标的权重 (m_features,)
        (可选) np.ndarray: 各评价对象的初步综合评价得分 F_i (n_samples,)
                          仅当 calculate_F_scores=True 时返回。
    """
    n_samples, m_features = Z_prime.shape

    # 1. 预处理Z_prime以处理p_ij=0的情况
    if zero_pij_treatment == 'shift':
        Z_prime_proc = Z_prime + epsilon_p_log  # 平移数据避免零值
    elif zero_pij_treatment == 'lnp_is_zero':
        Z_prime_proc = Z_prime  # 直接使用原始数据,零值后续特殊处理
    else:
        raise ValueError("Invalid zero_pij_treatment. Choose 'shift' or 'lnp_is_zero'.")

    # 2. 计算概率矩阵p_ij = z_proc_ij / sum(z_proc_kj)
    col_sums = Z_prime_proc.sum(axis=0, keepdims=True)  # 计算各列和 (1, m_features)
    p_matrix = np.zeros_like(Z_prime_proc, dtype=float)  # 初始化概率矩阵
    
    # 筛选有效列(列和>1e-12的列),避免除以零
    valid_cols_mask = col_sums[0] > 1e-12  # (m_features,)布尔掩码
    # 仅对有效列计算概率分布
    if np.any(valid_cols_mask):
        p_matrix[:, valid_cols_mask] = Z_prime_proc[:, valid_cols_mask] / col_sums[:, valid_cols_mask]

    # 3. 计算信息熵e_j
    if n_samples == 1:  # 单样本时无法计算熵,返回均匀权重
        weights = np.full(m_features, 1.0 / m_features)
        if calculate_F_scores:
            F_scores = Z_prime @ weights
            return weights, F_scores
        return weights

    k = 1 / np.log(n_samples)  # 熵计算系数

    # 安全计算log(p_matrix):仅处理p>0的位置,避免log(0)
    log_p_safe = np.zeros_like(p_matrix, dtype=float)
    p_matrix_pos_mask = p_matrix > 0  # 找出p>0的元素位置
    if np.any(p_matrix_pos_mask):
        log_p_safe[p_matrix_pos_mask] = np.log(p_matrix[p_matrix_pos_mask])
    
    # 计算熵项:p_ij * log(p_ij),p=0时项为0
    entropy_terms = p_matrix * log_p_safe
    entropy_values = -k * np.sum(entropy_terms, axis=0)  # 各列熵值

    # 4. 计算信息效用值d_j
    d_j = 1 - entropy_values  # 差异系数

    # 5. 计算权重
    sum_d_j = np.sum(d_j)
    if sum_d_j < 1e-12:  # 所有差异系数接近零时,均匀赋权
        weights = np.full(m_features, 1.0 / m_features)
    else:
        weights = d_j / sum_d_j  # 归一化权重

    # 6. 可选计算综合得分
    if calculate_F_scores:
        F_scores = Z_prime @ weights  # 使用原始Z_prime计算得分
        return weights, F_scores
    return weights

TOPSIS法

TOPSIS法,全称为“逼近理想解排序法”,是一种常用的多属性决策(MADM)方法。

核心思想: TOPSIS法的核心思想是基于评价对象与“理想解”和“负理想解”的相对接近程度来进行排序。

  • 正理想解 ($V^+$): 一个虚拟的最佳方案,其每个指标值都达到所有备选方案中的最优水平。
  • 负理想解 ($V^-$): 一个虚拟的最劣方案,其每个指标值都达到所有备选方案中的最差水平。

通过计算每个评价对象到正理想解和负理想解的(加权)欧氏距离,如果一个评价对象越接近正理想解,同时越远离负理想解,则该对象越优。

与熵权法的结合点:

  1. 数据标准化: TOPSIS的第一步通常也是数据正向化和标准化,可以直接采用熵权法步骤2得到的标准化矩阵 $Z’$。
  2. 指标权重: TOPSIS在计算距离或构建加权决策矩阵时需要各指标的权重,这可以直接采用熵权法步骤6计算得到的权重向量 $W = [w_1, w_2, \dots, w_m]$。

计算步骤:

  1. 构建加权标准化矩阵 $V$ 使用熵权法得到的权重 $w_j$ 和标准化后的数据 $z’_{ij}$,构建加权标准化矩阵 $V$: \(\begin{equation} v_{ij} = w_j z'_{ij} \end{equation}\) 矩阵形式如下: \(V=\left[\begin{array}{cccc} v_{11} & v_{12} & \cdots & v_{1 m} \\ v_{21} & v_{22} & \cdots & v_{2 m} \\ \vdots & \vdots & \ddots & \vdots \\ v_{n 1} & v_{n 2} & \cdots & v_{n m} \end{array}\right]\)

  2. 确定正理想解 $V^+$ 和负理想解 $V^-$ 由于所有指标都已正向化(越大越好),正理想解由加权标准化矩阵 $V$ 中每列的最大值构成,负理想解由每列的最小值构成。
    • 正理想解 $V^+$: \(\begin{equation} V^+ = (V_1^+, V_2^+, \dots, V_m^+) = (\max_i v_{i1}, \max_i v_{i2}, \dots, \max_i v_{im}) \end{equation}\)
    • 负理想解 $V^-$: \(\begin{equation} V^- = (V_1^-, V_2^-, \dots, V_m^-) = (\min_i v_{i1}, \min_i v_{i2}, \dots, \min_i v_{im}) \end{equation}\)
  3. 计算各评价对象到正、负理想解的距离 通常使用欧氏距离来计算第 $i$ 个评价对象与正理想解 $V^+$ 的距离 $D_i^+$ 和与负理想解 $V^-$ 的距离 $D_i^-$: \(\begin{equation} D_i^{+} = \sqrt{\sum_{j=1}^m (v_{ij} - V_j^{+})^2} \end{equation}\) \(\begin{equation} D_i^{-} = \sqrt{\sum_{j=1}^m (v_{ij} - V_j^{-})^2} \end{equation}\)

  4. 计算各评价对象的相对接近度 $C_i$ (也称综合评价值或贴近度) 第 $i$ 个评价对象的相对接近度 $C_i$ 定义为: \(\begin{equation} C_i = \frac{D_i^{-}}{D_i^{+} + D_i^{-}} \end{equation}\) $C_i$ 的取值范围为 $[0, 1]$。$C_i$ 越大,表示评价对象 $i$ 越接近正理想解且越远离负理想解,因此其综合评价越优。根据 $C_i$ 的值对所有评价对象进行排序,即可得到方案的优劣次序。

python实现如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
def apply_topsis_on_normalized_data(Z_prime, weights):
    """
    在已正向化和标准化的数据上应用TOPSIS方法。
    参数:
        Z_prime (np.ndarray): 正向化和标准化后的数据矩阵 (n_samples, m_features)
                               (即熵权法中使用的 Z' 矩阵)
        weights (np.ndarray): 各指标的权重 (m_features,)
    返回:
        np.ndarray: 各方案的相对贴近度 C_i
        np.ndarray: 各方案的排名 (1是最好)
    """
    n_samples, m_features = Z_prime.shape

    # 1. 构建加权标准化矩阵
    V = Z_prime * weights  # 逐列乘以权重

    # 2. 确定正负理想解
    V_plus = np.max(V, axis=0)  # 每列最大值构成正理想解
    V_minus = np.min(V, axis=0)  # 每列最小值构成负理想解

    # 3. 计算欧氏距离
    D_plus = np.sqrt(np.sum((V - V_plus)**2, axis=1)  # 到正理想解的距离
    D_minus = np.sqrt(np.sum((V - V_minus)**2, axis=1) ) # 到负理想解的距离

    # 4. 计算相对贴近度(添加极小值处理除零异常)
    sum_D = D_plus + D_minus
    relative_closeness = np.zeros(n_samples)
    for i in range(n_samples):
        if sum_D[i] == 0:  # 极端情况处理
            if D_plus[i] == 0 and D_minus[i] == 0:
                relative_closeness[i] = 0.5  # 同时为最优最劣时的折中值
            elif D_plus[i] == 0:
                relative_closeness[i] = 1.0  # 完全匹配正理想解
            elif D_minus[i] == 0:
                relative_closeness[i] = 0.0  # 完全匹配负理想解
        else:
            relative_closeness[i] = D_minus[i] / sum_D[i]

    # 5. 生成排名
    sorted_indices = np.argsort(-relative_closeness)  # 降序排列索引
    ranks = np.empty_like(sorted_indices)
    ranks[sorted_indices] = np.arange(1, n_samples + 1)  # 赋予排名

    return relative_closeness, ranks

熵权法 + TOPSIS 结合应用

熵权法与TOPSIS法的结合应用展现出独特的优势:

  • 熵权法优势:提供客观的指标权重计算方法,避免主观赋权可能带来的偏差,使评价结果更具科学性。
  • TOPSIS法优势:构建了系统化的多方案评价框架,通过与理想解的距离度量实现方案的科学排序。

在实际应用中,首先运用熵权法计算得到各指标的客观权重,然后将这些权重作为TOPSIS法的输入参数,对评价对象进行系统性分析和排序。这种结合不仅保证了权重确定的客观性,也确保了最终评价结果的可靠性。

论文中存在的不同做法:

  1. 最常见做法:
    • 先用熵权法计算出权重 $w_j$。
    • 然后用 $w_j$ 和标准化数据 $z’_{ij}$ 构建加权标准化矩阵 $V = (w_j z’_{ij})$。
    • 基于 $V$ 确定正负理想解 $V^+, V^-$。
    • 计算各方案到 $V^+, V^-$ 的距离(此时距离公式中不再显式出现 $w_j$,因为它已包含在 $v_{ij}$ 中)。
    • 这是逻辑最清晰、应用最广泛的方式。
  2. 权重在距离计算中体现:
    • 先对原始数据进行标准化处理得到 $Z’$。
    • 基于标准化矩阵 $Z’$ 确定正理想解 $Z’^+$ 和负理想解 $Z’^-$。
    • 在计算各方案到 $Z’^+, Z’^-$ 的距离时,引入熵权法得到的权重 $w_j$: \(\begin{equation} \begin{aligned} D_i^{+} & =\sqrt{\sum_{j=1}^m w_j (z'_{ij} - Z_j'^{+})^2} \\ D_i^{-} & =\sqrt{\sum_{j=1}^m w_j (z'_{ij} - Z_j'^{-})^2} \end{aligned} \end{equation}\)

      这种方法在数学上与第一种方法中的距离计算有所不同(例如,如果 $w_j$ 是比例,那么第一种方法的 $V_j^+$ 是 $\max(w_j z’_{ij})$,而第二种方法的 $Z_j’^+$ 是 $\max(z’_{ij})$)。通常认为第一种方法更为标准,因为它在构建理想解时就考虑了权重的影响。但这种加权欧氏距离也是一种有效的方式。

  3. 权重在两处均使用:
    • 先构建 $V=({w_j} z^{\prime}_{{ij}})$,然后确定 $V^+, V^-$,之后计算距离时再用 $D_i^{+} =\sqrt{\sum_{j=1}^m w_j (v_{ij} - V_j^{+})^2}$。这种做法相当于权重被应用了两次(一次在 $v_{ij}$ 中,一次在距离公式的 $w_j$ 中),可能会导致权重的过度放大或不合理解释,除非有特殊的理论依据(例如,外部的 $w_j$ 可能是 $w_j$ 的某个函数,如 $w_j^2$)。一般不推荐这种重复加权。

总结

基于熵权法-TOPSIS的多目标优化决策分析方法,通过熵权法客观确定指标权重,再结合TOPSIS法对方案进行排序,是一种实用且有效的决策支持工具。它能够较好地处理具有多个评价指标的复杂决策问题,结果相对客观、科学。

优势:

  • 客观性强: 熵权法赋权完全依赖于数据本身,排除了主观因素。
  • 综合性好: TOPSIS法同时考虑了与最优和最劣方案的距离,能全面反映方案的综合表现。
  • 原理简单,易于理解和实现: 计算过程相对直观,便于编程实现和应用。

局限性与注意事项:

  • 熵权法的敏感性: 当样本数据量较少或数据波动性不大时,熵权法计算的权重可能不够稳定或区分度不高。
  • TOPSIS法的排序稳定性: 与某些多属性决策方法类似,TOPSIS在增加或删除备选方案时,可能会出现排序逆转的现象(尽管其稳定性相对较好)。
  • 指标独立性假设: 传统熵权法和TOPSIS法通常假设指标之间是相互独立的,未充分考虑指标间的相关性。
  • 对极端值敏感: 标准化过程中的最大最小值易受极端数据点影响。

展望: 未来可以探索熵权法-TOPSIS与其他方法的进一步融合,例如:

  • 结合主观赋权法(如AHP)与熵权法,形成组合权重,兼顾专家经验与数据客观性。
  • 改进TOPSIS法,如考虑不同距离度量、引入前景理论等,以适应更复杂的决策场景。
  • 研究处理指标相关性的方法,如结合主成分分析(PCA)或灰色关联分析(GRA)等。
This post is licensed under CC BY 4.0 by the author.