正在加载中...

展开本页目录
算法教程FuzzyVIKOR-模糊 VIKOR

FuzzyVIKOR-模糊 VIKOR

No.107 · 在线教程

FuzzyVIKOR-模糊 VIKOR 的真实核心主要位于:

FuzzyVIKOR-模糊 VIKOR

1. 方法概述

FuzzyVIKOR-模糊 VIKOR 的真实核心主要位于:

  • core/calculator.py

从源码实现看,这个模块的结构可以概括为:

  1. 指标同向化;
  2. 标准化;
  3. 权重准备;
  4. 对标准化值加上三角模糊扰动;
  5. 去模糊后计算 \(S,R,Q\);
  6. 按经典 VIKOR 规则输出折衷解与敏感性分析。

也就是说,它不是直接对语言型模糊偏好矩阵做 VIKOR,而是对数值型标准化矩阵先模糊化、再做 VIKOR。

2. 指标处理、权重与模糊化

2.1 指标方向

负向指标先做镜像同向化:

$$ u_{ij}=x_j^{\max}+x_j^{\min}-x_{ij} \tag{1} $$

适度指标则映射为目标接近度:

$$ u_{ij}=1-\frac{|x_{ij}-t_j|}{\max\left(|x_j^{\max}-t_j|,\ |x_j^{\min}-t_j|\right)} \tag{2} $$

之后统一进行 min-maxz-score + min-max 标准化。

2.2 权重来源

当前模块名义上支持:

  1. std
  2. custom

但代码里还有一个实际细节:若没有传入自定义权重而又走到了非 std 分支,最终会回退到等权。因此写论文说明时最好把“缺少自定义权重时可能退回等权”这一点单独写清楚。

2.3 三角模糊化

对标准化后的数值 \(n_{ij}\),代码构造

$$ l_{ij}=\max(0,n_{ij}-\delta) \tag{3} $$

$$ m_{ij}=n_{ij} \tag{4} $$

$$ u_{ij}=\min(1,n_{ij}+\delta) \tag{5} $$

其中 \(\delta\) 对应参数 fuzzy_delta

3. 去模糊与 VIKOR 主公式

3.1 去模糊

若选择 centroid

$$ d(\tilde x)=\frac{l+m+u}{3} \tag{6} $$

若选择 weighted

$$ d(\tilde x)=\frac{l+2m+u}{4} \tag{7} $$

得到去模糊后的确定性矩阵后,再进入标准 VIKOR。

3.2 模糊最优解与最劣解

代码先对每个指标在三角模糊数三个分量上分别取最大值和最小值,再去模糊得到:

$$ f_j^*=d(\tilde A_j^+),\qquad f_j^-=d(\tilde A_j^-) \tag{8} $$

3.3 \(S,R,Q\)

随后计算每个方案在每个指标上的相对差距:

$$ g_{ij}=w_j\frac{f_j^*-d(\tilde x_{ij})}{f_j^*-f_j^-+\varepsilon} \tag{9} $$

再得到

$$ S_i=\sum_{j=1}^{n}g_{ij} \tag{10} $$

$$ R_i=\max_{1\le j\le n}g_{ij} \tag{11} $$

以及

$$ Q_i=v\frac{S_i-S^*}{S^--S^*+\varepsilon}+(1-v)\frac{R_i-R^*}{R^--R^*+\varepsilon} \tag{12} $$

因此最终排序逻辑依然是:Q 越小越优。

4. 折衷解、敏感性与输出结果

4.1 折衷解

代码完整实现了 VIKOR 的折衷解判据,会输出:

  • best_by_q
  • best_by_s
  • best_by_r
  • compromise_set
  • rule

因此它不是只给一个单一排名,而是同时说明“是否满足可接受优势”和“是否满足可接受稳定性”。

4.2 敏感性分析

若启用 sensitivity=True,代码会对权重做扰动再重复计算,生成独立的敏感性结果表。

4.3 Excel 工作表

主要导出内容包括:

  • 原始数据
  • 处理后数据
  • 标准化矩阵
  • 权重
  • 模糊最优 / 最劣解
  • 去模糊矩阵
  • S/R/Q
  • 敏感性结果
  • 折衷解结果
  • 图表
  • 复现脚本

5. 实现说明与注意事项

5.1 这是“数值矩阵模糊化版” VIKOR

当前项目不是从模糊语言评价矩阵直接起步,而是对已经标准化好的数值矩阵加上三角模糊扰动后再做 VIKOR。

5.2 weighted 去模糊更偏中值

由于

$$ \frac{l+2m+u}{4} \tag{13} $$

会给中值更高权重,所以它比普通重心法更保守一些。

5.3 排名主键始终是 Q

即使结果页保留了 SR,最终的 排名 仍然来自 Q 升序,这一点与普通 VIKOR 保持一致。

6. 论文写作建议

论文结果部分建议同时报告 SRQ 和最终折衷解集合,而不要只给单一排名。若使用了模糊化和去模糊过程,最好在方法部分单独说明 fuzzy_delta 和去模糊方式,因为它们会直接影响后续的 S/R/Q 数值与折衷结论。

7. 单篇终审补充

7.1 图题与表题对齐建议

  • 原始数据 表可写为:表X Fuzzy VIKOR 原始评价数据。
  • 处理后数据 表可写为:表X Fuzzy VIKOR 处理后评价矩阵。
  • 标准化矩阵 表可写为:表X Fuzzy VIKOR 标准化结果。
  • 权重 表可写为:表X Fuzzy VIKOR 指标权重。
  • 模糊最优 / 最劣解 表可写为:表X Fuzzy VIKOR 模糊最优解与最劣解。
  • 去模糊矩阵 表可写为:表X Fuzzy VIKOR 去模糊矩阵。
  • S/R/Q 表可写为:表X Fuzzy VIKOR 群体效用、个体遗憾与折衷指标。
  • 敏感性结果 表可写为:表X Fuzzy VIKOR 敏感性分析结果。
  • 折衷解结果 表可写为:表X Fuzzy VIKOR 折衷解集合与排序。
  • 图表 表可写为:表X Fuzzy VIKOR 图表索引与路径。

7.2 终审说明

  • 当前实现的排名主键始终是 Q,即使程序同时展示 SR,正文里的最终排序表也应以 Q 升序为准。
  • 当前模块是“数值矩阵模糊化版” VIKOR,不是直接由模糊语言评价矩阵起步的传统模糊群决策版本,方法表述应与此一致。
  • weighted 去模糊方式会给中值更高权重,因此若论文比较不同去模糊方案,应明确当前项目默认口径,而不要泛写成任意去模糊。
  • 折衷解结果敏感性结果 是当前实现里最适合正文引用的结果表;模糊最优/最劣解去模糊矩阵 更适合放在附录支撑过程说明。

7.3 全量强化补充

本次全量强化绑定的真实结果目录为 具体的算法3/灰色系统与模糊理论/FuzzyVIKOR-模糊 VIKOR/results/FuzzyVIKOR-模糊 VIKOR分析结果_20260329_171536。主结果文件为 FuzzyVIKOR结果_20260329_171536.xlsx,实际工作表为 ParametersRawDataProcessedNormalizedFuzzyMatrixFuzzyBestWorstWeightsDefuzzifiedScoresCompromiseCharts

当前真实图文件位于 charts/ 子目录,包括 weights.pngq_scores.png。这说明正文中最适合与图配套引用的主结果表是 WeightsScores/Compromise,而不是泛写“图表”。

复现脚本为 repro_20260329_171536.py,输入候选路径包括 repro_inputs/FuzzyVIKOR_repro_data.csvrepro_inputs/fuzzy_vikor_ui_input_20260329_171536.csv 以及历史 pytest 临时路径。参数中显式包含 defuzzify = 'weighted'fuzzy_delta = 0.1。因此这篇文档在论文附录中应写成“基于结果目录内 repro_inputs 快照复现,且当前默认去模糊方式为 weighted”,不要把这些实现细节省略掉。

8. 软件实现核查补充(2026-07)

  • 当前主结果目录应写作 具体的算法3/灰色系统与模糊理论/FuzzyVIKOR-模糊 VIKOR/results/FuzzyVIKOR-模糊 VIKOR分析结果_20260329_171536
  • 正文应围绕 ParametersRawDataProcessedNormalizedFuzzyMatrixFuzzyBestWorstWeightsDefuzzifiedScoresCompromiseCharts 来写。
  • 图证应对应 weights.pngq_scores.png,并把 QSR 与折衷解结果的关系写清。
  • 复现脚本应按 repro_20260329_171536.py + repro_inputs/FuzzyVIKOR_repro_data.csv 的口径说明,且要明确默认去模糊方式是 weighted