FAHP-模糊 AHP
FAHP-模糊 AHP 的真实核心主要位于:
FAHP-模糊 AHP
1. 方法概述
FAHP-模糊 AHP 的真实核心主要位于:
core/calculator.py
从当前源码看,这个模块实现的不是任意一种模糊层次分析法,而是比较明确的 Buckley fuzzy geometric mean 路线:
- 读取成对比较矩阵;
- 强制补全互反结构;
- 把 Saaty 标度映射成三角模糊数;
- 计算每一行的模糊几何平均;
- 归一化得到模糊权重;
- 用重心法或加权均值法去模糊;
- 再做一致性检验、敏感性分析与导出。
2. 成对比较矩阵与模糊化
2.1 互反矩阵
设判断矩阵为
$$ A=(a_{ij})_{n\times n} \tag{1} $$
代码会强制其满足互反关系:
$$ a_{ji}=\frac{1}{a_{ij}} \tag{2} $$
这意味着即使用户输入不完全规范,核心也会尽量整理为标准 AHP 结构。
2.2 Saaty 标度转三角模糊数
对 \(a_{ij}\ge 1\) 的情形,代码实际采用:
$$ \tilde a_{ij}=\big(\max(1,a_{ij}-1),\ a_{ij},\ \min(9,a_{ij}+1)\big) \tag{3} $$
若 \(a_{ij}<1\),则通过上式的互反模糊数得到对应的三角模糊数。也就是说,这个模块并不是用一张固定查表,而是用“中心值前后各偏移 1,再做截断”的工程口径。
3. Buckley 模糊几何平均
3.1 行几何平均
对第 \(i\) 行的三角模糊数,代码分别对下界、中值、上界做几何平均:
$$ \tilde g_i= \left( \prod_{j=1}^{n}l_{ij} \right)^{1/n}, \left( \prod_{j=1}^{n}m_{ij} \right)^{1/n}, \left( \prod_{j=1}^{n}u_{ij} \right)^{1/n} \tag{4} $$
3.2 模糊权重归一化
项目随后按 Buckley 口径做归一化:
$$ w_i^{(l)}=\frac{g_i^{(l)}}{\sum_{k=1}^{n}g_k^{(u)}}, \qquad w_i^{(m)}=\frac{g_i^{(m)}}{\sum_{k=1}^{n}g_k^{(m)}}, \qquad w_i^{(u)}=\frac{g_i^{(u)}}{\sum_{k=1}^{n}g_k^{(l)}} \tag{5} $$
这一点非常关键:代码不是把三角模糊数三个分量分别除以同一个和,而是使用交叉分母来保持模糊区间的一致性。
4. 去模糊与一致性
4.1 去模糊方法
当前模块支持两种去模糊方式。
若选择 centroid,则
$$ w_i=\frac{l_i+m_i+u_i}{3} \tag{6} $$
若选择 mean,则
$$ w_i=\frac{l_i+4m_i+u_i}{6} \tag{7} $$
之后再统一归一化,得到最终权重。
4.2 一致性检验
尽管主权重是模糊权重,但项目的一致性检验仍然基于清晰化的判断矩阵进行特征值法检验,计算:
$$ CI=\frac{\lambda_{\max}-n}{n-1} \tag{8} $$
$$ CR=\frac{CI}{RI_n} \tag{9} $$
其中 \(RI_n\) 由代码内置随机一致性指标表给出。
5. 输出结果与实现细节
5.1 输出内容
模块会输出:
- 模糊权重
- 去模糊权重
- 一致性指标
- 敏感性分析结果
- 图表
- Excel
- 复现脚本
5.2 图表不是 matplotlib 生成
一个容易忽略的细节是:当前项目的部分图表是通过 PIL 生成的,而不是常见的 matplotlib。这说明该模块在图表层也做了独立封装。
6. 与代码实现的对应关系
就本项目当前可运行版本而言,真正控制结果文件、图表与复现脚本的核心路径是:
具体的算法3/灰色系统与模糊理论/FAHP-模糊 AHP/core/calculator.py具体的算法3/灰色系统与模糊理论/FAHP-模糊 AHP/ui/results_widget.py具体的算法3/灰色系统与模糊理论/FAHP-模糊 AHP/utils/excel_handler.py
其中应以 core/calculator.py 的导出逻辑为准,因为当前主流程最终调用的是该文件中的结果保存函数。
6.1 结果目录、结果文件与图表
当前程序会在模块 results/ 下创建形如
FAHP-模糊 AHP分析结果_<YYYYMMDD_HHMMSS>/
的结果目录,并在其中生成:
FAHP结果_<时间戳>.xlsxcharts/weights.pngcharts/scores.pngrepro_<时间戳>.pyrepro_inputs/
同时,复现脚本再次运行后,默认会产生:
FAHP_repro_output_<时间戳>.xlsx
因此,这个模块已经不是“只在界面里算一遍权重”,而是形成了完整的“主结果 + 图表 + repro + repro 输出”链条。
6.2 当前 Excel 工作簿与公式步骤的对应关系
根据 core/calculator.py 的实际实现,主结果工作簿当前包含:
ParametersRawDataNormalizedPairwise_CrispPairwise_Fuzzy_LPairwise_Fuzzy_MPairwise_Fuzzy_UFuzzyMatrixWeights_FuzzyWeightsScoresConsistencySensitivityCharts
因此,文中各公式与代码导出表的对应关系可以直接写为:
- 式(1)至式(3):对应
Pairwise_Crisp与Pairwise_Fuzzy_* - 式(4)至式(5):对应
Weights_Fuzzy - 式(6)至式(7):对应
Weights - 式(8)至式(9):对应
Consistency - 方案综合评价结果:对应
Scores - 图件路径索引:对应
Charts
6.3 当前 repro 的真实行为
core/calculator.py 与 ui/results_widget.py 都会生成 repro_<时间戳>.py。该脚本会:
- 优先把原始输入复制到
repro_inputs/; - 若原始文件不可直接复制,则落一份
fahp_repro_data.csv; - 重建参数;
- 再次调用同一核心计算逻辑输出
FAHP_repro_output_<时间戳>.xlsx。
因此,当前 FAHP 文档在论文或交接中不应只写“支持复现”,而应明确说明复现脚本与 repro_inputs/ 是标准产物。
7. 实现说明与注意事项
7.1 这里的模糊化规则是“区间偏移型”
很多 FAHP 文献会用固定语言变量表,而该项目实际采用的是
- 中心值取原 Saaty 标度;
- 下界约为
x-1; - 上界约为
x+1; - 再限制在
[1,9]内。
7.2 一致性检验仍是清晰矩阵口径
因此该模块更准确的说法是:“模糊权重 + 清晰一致性检验”的组合实现。
7.3 敏感性分析是真正接进主流程的
它不是单独附带的说明页,而是会在结果与导出表中给出权重扰动后的变化结果,适合分析指标权重是否稳定。
8. 论文写作建议
论文中建议把模糊权重、去模糊权重和一致性检验结果分成三张表呈现。若采用 centroid 或 mean 两种不同去模糊方式,也应在方法部分写明。对于读者更关心决策解释的场景,可以把最终清晰权重放在正文,把模糊三角权重细表放到附录。
9. 单篇终审补充
9.1 图题与表题对齐建议
Parameters表可写为:表X FAHP 参数设置与去模糊方式。RawData表可写为:表X FAHP 原始评价数据。Normalized表可写为:表X FAHP 归一化评价矩阵。Pairwise_Crisp表可写为:表X FAHP 清晰判断矩阵。Pairwise_Fuzzy_L、Pairwise_Fuzzy_M、Pairwise_Fuzzy_U表可写为:表X FAHP 三角模糊判断矩阵上下界与中值。FuzzyMatrix表可写为:表X FAHP 模糊判断矩阵汇总。Weights_Fuzzy表可写为:表X FAHP 模糊权重结果。Weights表可写为:表X FAHP 去模糊后清晰权重。Scores表可写为:表X FAHP 综合得分与排序结果。Consistency表可写为:表X FAHP 一致性检验结果。Sensitivity表可写为:表X FAHP 敏感性分析结果。Charts表可写为:表X FAHP 图表索引与路径。weights.png建议写为:图X FAHP 指标权重图。scores.png建议写为:图X FAHP 综合得分图。
9.2 终审说明
- 当前实现的核心口径是“模糊权重 + 清晰一致性检验”,论文中不要把一致性检验误写成完全基于模糊判断矩阵的检验。
Weights_Fuzzy和Weights应分开引用:前者对应模糊三角权重,后者对应去模糊后的清晰权重,正文不要混写。Sensitivity不是附加说明,而是当前主流程可导出的正式结果;如果论文讨论权重稳健性,应直接引用该表。- 当前图表固定为
weights.png与scores.png两张,且通过Charts索引表管理;论文中若给图件来源,应直接对应结果目录和该索引表。
9.3 全量强化补充
本次全量强化绑定的真实结果目录为 具体的算法3/灰色系统与模糊理论/FAHP-模糊 AHP/results/FAHP-模糊 AHP分析结果_20260329_171526。其中主工作簿为 FAHP结果_20260329_171526.xlsx,实际工作表为 Parameters、RawData、Normalized、Pairwise_Crisp、Pairwise_Fuzzy_L、Pairwise_Fuzzy_M、Pairwise_Fuzzy_U、FuzzyMatrix、Weights_Fuzzy、Weights、Scores、Consistency、Charts。从实物可见,这一轮导出并未生成 Sensitivity 工作表,因此正文若讨论敏感性分析,必须先说明该轮运行参数下未启用对应输出,不能把其写成固定存在页签。
同一目录下还存在 FAHP_repro_output_20260329_171527.xlsx,其工作表集合与主工作簿一致;这说明当前 repro 不是只生成一个简化结果,而是重新产出一套同构工作簿。目录内 charts/ 下真实图件为 weights.png 与 scores.png,与 Charts 表管理的图件口径一致。
该目录同时具备 repro_20260329_171527.py 与 repro_inputs/。脚本当前真实参数写法为 SRC_CANDIDATES = ['repro_inputs/fahp_ui_input_1774775726_1774775727.csv'],并显式绑定 object_col = '对象'、indicators = ['指标1', '指标2', '指标3']、indicator_types、standard_values = {'指标3': 120}、normalization = 'min-max'、defuzzify = 'centroid'、pairwise_matrix = [[1, 3, 5], [1/3, 1, 2], [0.2, 0.5, 1]]、sensitivity = False。因此 FAHP 当前已经具备“主结果工作簿 + repro 同构工作簿 + 相对路径输入副本”的完整闭环,但这轮运行的真实口径是未开启敏感性分析,文档应据此写实。
10. 软件实现核查补充(2026-07)
- 当前主结果目录应写作
具体的算法3/灰色系统与模糊理论/FAHP-模糊 AHP/results/FAHP-模糊 AHP分析结果_20260329_171526。 - 正文应围绕
Parameters、RawData、Normalized、Pairwise_Crisp、Pairwise_Fuzzy_L、Pairwise_Fuzzy_M、Pairwise_Fuzzy_U、FuzzyMatrix、Weights_Fuzzy、Weights、Scores、Consistency、Charts来写。 - 图证应对应
weights.png与scores.png;若当轮结果未导出Sensitivity,正文不能把它写成固定存在。 - 复现脚本应按
repro_20260329_171527.py + repro_inputs/fahp_ui_input_1774775726_1774775727.csv的口径说明。