VIKOR 法
一、直观理解:在“群体效用”与“最大遗憾”之间找妥协解
VIKOR(VlseKriterijumska Optimizacija I Kompromisno Resenje)面向多准则妥协排序:既希望整体加权绩效好(群体效用 小),又希望最差的那项指标别太惨(个体遗憾 小)。用参数 折中二者,得到 值排序,并检验稳定条件,给出妥协解集。
像谈判:不能只看总分,也不能只盯着最不满的人;VIKOR 找大家都能接受的折中方案。
二、适用场景与优缺点
| 类型 | 说明 |
|---|---|
| 适用场景 | 冲突准则;需要妥协解;权重已知;与 TOPSIS 对照。 |
| 核心优点 | 明确处理冲突;有 三重信息;有可接受优势/稳定条件。 |
| 局限与缺点 | 主观;条件不满足时妥协集扩大;计算依赖正负理想。 |
三、核心原理
正向化后,正理想 、负理想 。
其中 ,, 类似。 常用 0.5。
越小越好。设按 排序第一为 ,第二 :
- 条件 C1:可接受优势 ;
- 条件 C2: 在 或 上也最好。
都满足则 唯一最优;否则给出妥协解集合。
四、关键决策
| 决策点 | 建议 |
|---|---|
| 0.5 默认;0–1 敏感分析 | |
| 权重 | 组合赋权 |
| 理想点 | 样本最优或绝对理想 |
| 报告 | 与 C1/C2 |
| 对照 | TOPSIS 贴近度 |
五、MATLAB 示例
X = [
80 70 90;
75 88 70;
90 65 85;
70 90 75
];
w = [0.4 0.3 0.3]; w = w/sum(w);
% 极大型
fstar = max(X); fminus = min(X);
den = fstar - fminus; den(den==0)=eps;
[n, m] = size(X);
S = zeros(n,1); R = zeros(n,1);
for i = 1:n
t = w .* (fstar - X(i,:)) ./ den;
S(i) = sum(t);
R(i) = max(t);
end
v = 0.5;
Sstar = min(S); Sminus = max(S);
Rstar = min(R); Rminus = max(R);
Q = v*(S - Sstar)/(Sminus - Sstar + eps) + ...
(1-v)*(R - Rstar)/(Rminus - Rstar + eps);
T = table((1:n)', S, R, Q, "VariableNames", {"方案","S","R","Q"});
T = sortrows(T, "Q", "ascend");
disp(T);
% 条件检验
nAlt = n;
DQ = 1/(nAlt-1);
A1 = T.方案(1); A2 = T.方案(2);
okC1 = (T.Q(2) - T.Q(1)) >= DQ - 1e-12;
% C2: A1 在 S 或 R 最优
okC2 = (S(A1) <= min(S)+1e-12) || (R(A1) <= min(R)+1e-12);
fprintf("C1=%d, C2=%d\n", okC1, okC2);
if okC1 && okC2
fprintf("唯一妥协解:方案 %d\n", A1);
else
disp("妥协解集需扩大,请按 VIKOR 规则纳入后续方案");
end
六、如何解释结果
- 小=整体好, 小=最大短板可控;
- 含义:偏群体还是偏遗憾;
- C1/C2 是否成立;
- 妥协解集;
- 与 TOPSIS 异同(VIKOR 更强调遗憾)。
七、常见误区
1. 只按 排序不检验条件
可能夸大唯一最优。
2. 指标方向错误
全反。
3. 调参凑结论
应敏感分析公开。
4. 与 TOPSIS 公式混用
理想距离 vs 不同。
5. 权重未归一
的 max 项尺度乱。
附:建模论文中的写法要点
- 问题对应:用一两句话说明为何该方法匹配题目数据结构与目标(分类/分群/排序/效率)。
- 符号与步骤:按“输入 → 预处理 → 核心计算 → 输出指标”列出编号步骤,公式与代码变量名一致。
- 参数表:列出全部可调参数、取值、选取依据(CV、信息准则、业务约束或灵敏度)。
- 结果呈现:主结果用表格;辅以 1–2 张图(边界、树状图、得分条形图、效率分解等)。
- 稳健性:至少做一种扰动——删点、换权重、换距离、换初值或换阈值,观察结论是否保持。
- 局限:主动写明假设(球状簇、线性可分、CRS、完全补偿等)及适用边界,避免被质询时被动。
若主方法结论与合理基线(如 K-means 对 GMM、加权和对 TOPSIS、CCR 对 BCC)严重冲突,应回到数据质量与指标方向检查,而不是只报告“更好看”的一种结果。
附:计算检查清单
在提交结果前,建议按下列清单快速自检:
- 输入矩阵:行/列含义是否与正文一致,有无缺失、重复行、单位混用。
- 方向与尺度:极小型是否已正向化;聚类/距离类是否已标准化;评价类权重是否归一。
- 参数来源:所有阈值、簇数、核宽、理想解定义能否在正文找到依据。
- 数值稳定:协方差/相关是否接近奇异;DEA 线性规划是否全部求解成功;对数/除零是否加保护。
- 随机性:涉及随机初值的算法是否固定种子并报告多次结果的稳定性。
- 验证协议:分类任务是否严格隔离测试集;重采样/SMOTE 是否仅用于训练折。
- 图表编号:主结论表与图在正文中被引用,而不是只放附录。
- 可复现:给出软件版本(如 MATLAB R20xx)与关键函数名,使读者能重跑最小示例。
不满足清单中任一项时,优先修正流程,再讨论“方法先进性”。对综合评价题,额外检查:更换一种合理权重后,前三名是否大体稳定;若剧烈跳动,应降低对精细名次的措辞强度。
八、小结
VIKOR 在群体效用与最大遗憾之间构造 值,并通过优势与稳定条件给出妥协解,适合冲突型多准则决策。
当“不能让最差指标太差”是刚性关切时,VIKOR 比单纯加权和更贴切。