MCM520 ← 资料站首页 VIKOR 法 · 深度手册 打开交互阅读器 →

VIKOR 法 · 深度手册

分类:评价类 | 难度:★★☆ 进阶 | 编号:vikor

一、这是什么(一句话用途)

多指标折中排序,兼顾'最大群体效用'与'最小个别遗憾'

二、核心思想

VIKOR 与 TOPSIS 思路相近但哲学不同:TOPSIS 只关心"离理想解的距离",而 VIKOR 明确区分"群体效用"(所有指标的平均表现,越大越好)和"个别遗憾"(最差那一项的表现,越小越好)。很多决策场景我们不希望某一项特别拉垮(比如安全指标再差也不能接受),VIKOR 的"最小个别遗憾"正好刻画这种"短板思维",并能给出一个兼顾二者的折中解,还附带的稳定性条件可判断该解是否可靠。

三、数学原理与推导

加权规范化后,第 ii 方案的群体效用 SiS_i 与个别遗憾 RiR_i:

Si=∑j=1nwjfj+−fijfj+−fj−,Ri=max⁡j wjfj+−fijfj+−fj− S_i=\sum_{j=1}^n w_j\frac{f_j^+-f_{ij}}{f_j^+-f_j^-},\qquad R_i=\max_j\, w_j\frac{f_j^+-f_{ij}}{f_j^+-f_j^-}

其中 fj+=max⁡ifij, fj−=min⁡ifijf_j^+=\max_i f_{ij},\ f_j^-=\min_i f_{ij}。折中指数:

Qi=v(Si−S−)S+−S−+(1−v)(Ri−R−)R+−R− Q_i=\frac{v(S_i-S^-)}{S^+-S^-}+\frac{(1-v)(R_i-R^-)}{R^+-R^-}

v∈[0,1]v\in[0,1] 为群体效用权重,常取 0.50.5;S−=min⁡iSi, S+=max⁡iSiS^-=\min_i S_i,\ S^+=\max_i S_i(同理 R−,R+R^-,R^+)。按 QQ 升序排,QQ 越小越优。

稳定性条件(满意解可接受需满足):

  1. 优势条件:QQ 最小者与次小者之差 >1/(J−1)>1/(J-1)(JJ 为方案数);
  2. 决策可靠条件:QQ 最小者同时是 SS 或 RR 的最小者。

四、建模 / 求解步骤

  1. 标准化 + 加权
  2. 算群体效用 S_i 与个别遗憾 R_i
  3. 算折中指数 Q_i
  4. 按 Q 排序并做稳定性判别

五、关键公式速查

Q_i = v(S_i−S*)/(S^−−S*) + (1−v)(R_i−R*)/(R^−−R*)

六、典型示例

方案排序时 VIKOR 比 TOPSIS 更强调'不最坏'。

完整算例(数字演示,照着算一遍)

场景:3 个选址方案 A/B/C,指标 成本(成本型)/效益(效益型)/风险(成本型),权重 0.5/0.3/0.2。

规范化得群体效用 S=(0.42, 0.55, 0.38)、个体遗憾 R=(0.30, 0.22, 0.35),折中系数 v=0.5。

Q 值:Q_A=0.44、Q_B=0.31、Q_C=0.62。

结论:Q 最小且满足条件 → B 为折中最优(兼顾群体效用与最大遗憾)。

七、Python 实现示例

import os, numpy as np
import pandas as pd
HERE = os.path.dirname(os.path.abspath(__file__))
df = pd.read_csv(os.path.join(HERE,"..","datasets","vikor.csv"))
X = df.drop(columns=["alt"]).to_numpy(dtype=float)
typ = np.array([1,0,1,0])
w = np.array([0.3,0.25,0.25,0.2]); v = 0.5
fmax = np.where(typ==1, X.max(0), X.min(0))
fmin = np.where(typ==1, X.min(0), X.max(0))
S = (w*((fmax-X)/(fmax-fmin))).sum(1)
R = (w*((fmax-X)/(fmax-fmin))).max(1)
Ss, Splus = S.min(), S.max()
Rs, Rplus = R.min(), R.max()
Q = v*(S-Ss)/(Splus-Ss) + (1-v)*(R-Rs)/(Rplus-Rs)
for a,q in sorted(zip(df["alt"], Q), key=lambda t:t[1]):
    print(a, round(q,3))

配套文件:py_vikor.py(需 numpy / pandas;与下方数据集配套练习)

八、MATLAB 实现示例

%% VIKOR 示例(MATLAB/Octave)
df = readtable('..\datasets\vikor.csv');
X = table2array(df(:,2:end));
typ = [1,0,1,0]; w=[0.3,0.25,0.25,0.2]; v=0.5;
fmax=max(X,[],1); fmin=min(X,[],1);
fmax(typ==0)=min(X(:,typ==0),[],1);
fmin(typ==0)=max(X(:,typ==0),[],1);
S = sum(w.*((fmax-X)./(fmax-fmin)),2);
R = max(w.*((fmax-X)./(fmax-fmin)),[],2);
Ss=min(S); Splus=max(S); Rs=min(R); Rplus=max(R);
Q = v*(S-Ss)/(Splus-Ss) + (1-v)*(R-Rs)/(Rplus-Rs);
disp(Q)

配套文件:m_vikor.m(基础 MATLAB / Octave 即可运行)

九、练手数据集(可下载)

5 个方案在 4 个指标上的取值(c2、c4 为成本型)。用于 VIKOR 折中排序与稳定性判别。

  • 字段:alt, c1, c2, c3, c4
  • 行数:5 行
  • 下载:vikor.csv

十、常见误区与避坑清单

  • v 取 0.5 常规
  • S/R 分母为 0 要处理
  • 需做稳定性条件判断

十一、结果怎么解读

Q 越小越优;满足稳定性条件则解可靠。

十二、常与谁搭配

与 TOPSIS 互为补充。

十三、论文写作技巧(怎么把它写进论文)

把 VIKOR 法 写进论文,核心不是堆公式,而是讲清「为什么用它、结果怎么呈现、如何对比」三件事。

1. 动机怎么写(为什么用它而不是别的)

开篇点明研究对象存在「多指标、且指标间相互冲突」的取舍(如成本要低但质量要高),因此需要多准则决策方法(MCDM)。随后说明权重来源:可主观(专家两两比较 + 一致性检验)或客观(数据驱动赋权),并交代为什么选 VIKOR 法 而非简单加权平均——例如它能兼顾理想解距离 / 降低人为主观偏差。这样评审一眼看懂你的评价逻辑。

2. 结果怎么写(图表与指标)

结果页放两张图最稳:① 各方案指标权重条形图(或熵权贡献);② 方案贴近度 / 综合得分排序表。若指标权重敏感,补一张「权重扰动 → 排序是否变」的敏感性分析,能显著提升结论可信度。

3. 可直接套用的写作话术

  • 中文模板:针对<问题>,本文采用 VIKOR 法 进行多指标折中排序,兼顾'最大群体效用'与'最小个别遗憾'。该方法能够自动刻画<优势>,在处理<场景>时相较<对比方法>更具<特点>。
  • 英文模板:To address , we adopt VIKOR 法 to 多指标折中排序,兼顾'最大群体效用'与'最小个别遗憾'. Benefiting from its ability to , it outperforms on .

4. 同类易踩的写作坑

别只给最终排名,要写出每一层的权重与中间矩阵;避免「我觉得」这类主观表述,改用「依据 CR<0.1 的一致性检验」等客观依据。

5. 典型论文段落范例(可直接参考 / 改写)

下面是一段可直接套用的论文表述,已按本算法定制,填空处(…)替换成你的真实数值即可。

针对供应商选择中成本、质量与交期相互冲突的多准则决策问题,本文采用 VIKOR 法 计算各方案的贴近度并排序。为避免单一赋权带来的主观偏差,权重由熵权法给出,最终综合得分表明方案 S3 最优(C=0.82)。

To rank candidate suppliers under the conflicting criteria of cost, quality, and lead time, we adopt VIKOR 法 to compute the closeness coefficient. Weights are derived from the entropy method, and the aggregated score identifies S3 as the best alternative (C=0.82).

十四、相关手册(延伸阅读)

十五、本手册导航


本手册由「算法深度手册生成器」自动产出,配套提供 Python / MATLAB 双版本示例与可下载练手数据集。