FAHP-模糊层次分析法
FAHP(Fuzzy Analytic Hierarchy Process,模糊层次分析法)是在经典 AHP 的基础上,把两两比较判断扩展为模糊数表示,从而缓解决策者语言判断的不确定性。本项目当前实现采用的是一条非常明确的工程化主线:
FAHP-模糊层次分析法
1. 方法概述
FAHP(Fuzzy Analytic Hierarchy Process,模糊层次分析法)是在经典 AHP 的基础上,把两两比较判断扩展为模糊数表示,从而缓解决策者语言判断的不确定性。本项目当前实现采用的是一条非常明确的工程化主线:
- 先对方案-指标数据做正向/负向/适度指标预处理与标准化;
- 再将 Saaty 判断矩阵映射为三角模糊数矩阵;
- 使用 Buckley 模糊几何均值法 求取模糊权重;
- 通过
centroid或mean方法去模糊,得到清晰权重; - 最后以标准化后的指标矩阵与清晰权重做加权求和,得到方案综合得分与排序。
因此,当前项目中的 FAHP 并不是“只输出模糊权重”的纯主观赋权工具,而是一个“模糊权重求解 + 客观方案评分”的一体化评价模块。
设共有 \(m\) 个方案、\(n\) 个指标,原始方案-指标矩阵记为
$$ X=(x_{ij})_{m\times n}, \quad i=1,2,\ldots,m, \quad j=1,2,\ldots,n \tag{1} $$
其中 \(x_{ij}\) 表示方案 \(A_i\) 在指标 \(C_j\) 上的原始观测值。
设最终清晰权重向量为
$$ w=\big(w_1,w_2,\ldots,w_n\big)^\top, \quad w_j\ge 0, \quad \sum_{j=1}^{n}w_j=1 \tag{2} $$
项目最终导出的 结果-排序 工作表,就是基于式(1)与式(2)计算得到的综合评价结果。
2. 输入结构与项目流程
2.1 输入数据结构
当前上传页 ui/upload_widget.py 支持 .xlsx、.xls 与 .csv 文件。结合 utils/data_validator.py,界面层要求输入数据满足:
- 第 1 列为对象名称;
- 第 2 列及之后为指标列;
- 指标列必须全部可转为数值;
- 不允许空值;
- 对象名称不允许重复;
- 上传页默认不允许常数列。
因此,项目进入主计算器 core/calculator.py::Calculator.run_analysis() 的数据结构可以表示为
$$ \mathcal{D}=\{A_i,\ x_{i1},x_{i2},\ldots,x_{in}\}_{i=1}^{m} \tag{3} $$
其中第一个字段为方案名称,其余字段为指标值。若研究者直接调用核心类而绕过上传页,则重复对象名不会被硬性拦截,而只会在结果 warnings 中提示。
2.2 正向流程与逆向流程
主窗口 ui/main_window.py 在指标设置完成后,会额外进入一个流程选择页 FlowSelectWidget。当前项目支持两条路径:
- 正向流程:研究者手动填写判断矩阵;
- 逆向流程:先导入专家评分表,再由系统自动倒推判断矩阵。
若采用逆向流程,设共有 \(K\) 位专家,第 \(k\) 位专家对第 \(j\) 个指标的评分为 \(s_{kj}\),专家权重为 \(\rho_k\),则程序先归一化专家权重:
$$ \rho_k\ge 0, \quad \sum_{k=1}^{K}\rho_k=1 \tag{4} $$
随后计算各指标的加权平均评分:
$$ \bar{s}_j=\sum_{k=1}^{K}\rho_k\,s_{kj} \tag{5} $$
对于任意两个指标 \(C_i\) 与 \(C_j\),程序先构造原始比值
$$ r_{ij}=\frac{\bar{s}_i}{\bar{s}_j} \tag{6} $$
再把其截断到 Saaty 标度区间 \([1/9,9]\),并投影到最近的离散标度集合
$$ \mathcal{S}=\left\{\frac{1}{9},\frac{1}{8},\ldots,\frac{1}{2},1,2,\ldots,9\right\} \tag{7} $$
从而得到逆向流程中的判断矩阵元素
$$ a_{ij}=\arg\min_{s\in\mathcal{S}}\left|s-\min\left(9,\max\left(\frac{1}{9},r_{ij}\right)\right)\right| \tag{8} $$
这正是 ui/methods_widget.py::_reverse_import_scores() 的实际逻辑。需要注意的是:逆向流程并不是直接把专家评分作为权重,而是先根据评分比值构造一张新的 Saaty 判断矩阵,再回到与正向流程相同的 FAHP 求权重主线。
3. 指标类型、预处理与标准化
3.1 指标类型
当前项目支持三类指标:
- 正向指标:值越大越优;
- 负向指标:值越小越优;
- 适度指标:值越接近给定标准值越优。
3.2 负向指标处理
对负向指标,项目先做线性方向翻转。设第 \(j\) 个指标是负向指标,则程序采用
$$ y_{ij}=\max_i x_{ij}+\min_i x_{ij}-x_{ij} \tag{9} $$
式(9)保证数值越大表示越优,从而便于后续统一标准化。
3.3 适度指标处理
若第 \(j\) 个指标为适度指标,目标值为 \(s_j^\ast\),则项目采用
$$ y_{ij}=1-\frac{|x_{ij}-s_j^\ast|}{\max\left(|\max_i x_{ij}-s_j^\ast|,\ |\min_i x_{ij}-s_j^\ast|\right)} \tag{10} $$
若分母为 0,说明该列所有值都与目标值完全一致,此时程序直接记为
$$ y_{ij}=1 \tag{11} $$
此外,当前核心代码会把式(10)的结果裁剪到 \([0,1]\) 区间,避免数值误差导致的负值残留。与前面部分算法不同,这个模块的界面层允许适度指标标准值取 0,冒烟测试 test_fahp_smoke.py 也覆盖了该场景。
3.4 Z-score 与 Min-Max 标准化
完成正向/负向/适度指标预处理后,得到统一方向的矩阵
$$ Y=(y_{ij})_{m\times n} \tag{12} $$
若用户选择 z-score,程序先按列执行标准化:
$$ z_{ij}=\frac{y_{ij}-\mu_j}{\sigma_j} \tag{13} $$
其中 \(\mu_j\) 表示第 \(j\) 列均值,\(\sigma_j\) 表示第 \(j\) 列总体标准差,代码中采用 std(ddof=0)。若 \(\sigma_j=0\),则该列直接记为 0,并在 warnings 中提示。
无论是否先做 z-score,项目最终都会执行一次 Min-Max 归一化:
$$ n_{ij}=\frac{y_{ij}-\min_i y_{ij}}{\max_i y_{ij}-\min_i y_{ij}} \tag{14} $$
若某列满足 \(\max_i y_{ij}=\min_i y_{ij}\),则该列标准化结果直接记为 0,并写入 warnings。
因此,当前项目真正用于方案评分的标准化矩阵为
$$ N=(n_{ij})_{m\times n} \tag{15} $$
4. 判断矩阵与三角模糊数映射
4.1 清晰判断矩阵
设指标层判断矩阵为
$$ A=(a_{ij})_{n\times n} \tag{16} $$
项目要求其满足以下基本约束:
$$ a_{ii}=1 \tag{17} $$
$$ a_{ij}>0 \tag{18} $$
$$ a_{ji}=\frac{1}{a_{ij}} \tag{19} $$
即使用户传入的完整矩阵不完全满足互反性,Calculator._build_pairwise_matrix() 也会强制把对角线改写为 1,并按式(19)重写互反项。因此,项目实际计算时总是使用一张互反矩阵。
若用户完全未提供判断矩阵,则核心会退化为单位阵,即默认等权比较,并在 warnings 中提示。
4.2 项目中的三角模糊数映射口径
对 \(a_{ij}\ge 1\) 的情况,项目使用如下项目特定的三角模糊数映射:
$$ \tilde{a}_{ij}= \left( \max(1,a_{ij}-1),\ a_{ij},\ \min(9,a_{ij}+1) \right) \tag{20} $$
对 \(0<a_{ij}<1\) 的情况,程序不是重新定义一套公式,而是先对其倒数 \(1/a_{ij}\) 使用式(20),再按互反规则变换为
$$ \tilde{a}_{ij}= \left( \frac{1}{u(1/a_{ij})},\ \frac{1}{m(1/a_{ij})},\ \frac{1}{l(1/a_{ij})} \right) \tag{21} $$
式(20)—式(21)来自 core/calculator.py::_scale_to_tfn(),这是本项目非常关键的实现细节。也就是说,当前软件并不是读取一张专家给定的模糊判断矩阵,而是先输入普通 Saaty 比例,再由程序自动转换为三角模糊数。
记由式(20)—式(21)得到的三角模糊判断矩阵为
$$ \tilde{A}=(\tilde{a}_{ij})_{n\times n}, \quad \tilde{a}_{ij}=(l_{ij},m_{ij},u_{ij}) \tag{22} $$
5. Buckley 模糊几何均值权重
5.1 行几何均值
对第 \(i\) 个指标,项目分别对三角模糊数的下界、中值、上界计算几何均值:
$$ g_i^{(L)}=\left(\prod_{j=1}^{n}l_{ij}\right)^{1/n} \tag{23} $$
$$ g_i^{(M)}=\left(\prod_{j=1}^{n}m_{ij}\right)^{1/n} \tag{24} $$
$$ g_i^{(U)}=\left(\prod_{j=1}^{n}u_{ij}\right)^{1/n} \tag{25} $$
这对应 Calculator._fuzzy_weights() 的 g_l、g_m、g_u 三组向量。
5.2 模糊权重归一化
设
$$ G^{(L)}=\sum_{k=1}^{n}g_k^{(L)},\quad G^{(M)}=\sum_{k=1}^{n}g_k^{(M)},\quad G^{(U)}=\sum_{k=1}^{n}g_k^{(U)} \tag{26} $$
则项目中的第 \(i\) 个模糊权重采用
$$ \tilde{w}_i= \left( \frac{g_i^{(L)}}{G^{(U)}},\ \frac{g_i^{(M)}}{G^{(M)}},\ \frac{g_i^{(U)}}{G^{(L)}} \right) \tag{27} $$
式(27)就是当前代码里 Buckley 风格归一化的具体实现。它不是简单地把三组几何均值分别除以各自总和,而是使用了 \((L/U,\ M/M,\ U/L)\) 的交叉归一化结构。
6. 去模糊、一致性检验与方案评分
6.1 去模糊
当前项目支持两种去模糊方式。
若用户选择 centroid,则对第 \(i\) 个模糊权重 \(\tilde{w}_i=(l_i,m_i,u_i)\) 采用
$$ \hat{w}_i=\frac{l_i+m_i+u_i}{3} \tag{28} $$
若用户选择 mean,则采用
$$ \hat{w}_i=\frac{l_i+4m_i+u_i}{6} \tag{29} $$
得到清晰权重后,程序还会再做一次归一化:
$$ w_i=\frac{\hat{w}_i}{\sum_{k=1}^{n}\hat{w}_k} \tag{30} $$
6.2 一致性检验
一致性检验并不是在模糊矩阵上完成,而是直接使用原始清晰判断矩阵 \(A\) 做特征值检验。设最大特征值为 \(\lambda_{\max}\),则
$$ \lambda_{\max}=\max \operatorname{eig}(A) \tag{31} $$
一致性指标定义为
$$ CI=\frac{\lambda_{\max}-n}{n-1} \tag{32} $$
一致性比率定义为
$$ CR=\frac{CI}{RI_n} \tag{33} $$
其中 \(RI_n\) 使用代码中的随机一致性指标表 RI_TABLE,当前支持到 \(n=15\)。项目的通过标准为
$$ CR<0.10 \tag{34} $$
若 \(n\le 2\),程序按惯例直接记 CI=0、CR=0、passed=True。若 \(n>15\) 导致 RI 表缺失,则 CR 与 passed 会记为 None,并在 warnings 中提示。
6.3 综合得分与排名
在得到标准化矩阵 \(N\) 和清晰权重向量 \(w\) 后,项目使用简单加权和计算方案综合得分:
$$ S_i=\sum_{j=1}^{n}n_{ij}w_j \tag{35} $$
最后按 \(S_i\) 降序排序,得到方案排名:
$$ \operatorname{Rank}(A_i)=\operatorname{rank}_{\downarrow}^{\text{min}}(S_i) \tag{36} $$
这里的 min 表示并列时取最小名次,例如两个方案并列第 1,则下一个名次为第 3。
因此,本项目中的 FAHP 最终排序并不是模糊综合评判矩阵乘法或模糊合成算子,而是“FAHP 求权重 + 标准化加权和评分”的实现口径。若论文直接引用本软件结果,这一点必须写清楚。
6.4 敏感性分析
若开启敏感性分析,项目会依次对每个指标权重施加 \(\pm\Delta\) 比例扰动。对第 \(j\) 个指标,有
$$ w_j^{(\pm)}= \frac{(1\pm\Delta)w_j}{\sum_{k\ne j}w_k+(1\pm\Delta)w_j} \tag{37} $$
然后重新计算全部方案得分,并输出两类变化指标:
$$ \text{MaxChange}_{j,\pm}=\max_i\left|S_i^{(\pm)}-S_i\right| \tag{38} $$
$$ \text{MeanChange}_{j,\pm}=\frac{1}{m}\sum_{i=1}^{m}\left|S_i^{(\pm)}-S_i\right| \tag{39} $$
对应结果中的 max_score_change 与 mean_score_change 字段。
7. 输出结构、图表与复现脚本
7.1 默认输出路径
当用户通过界面正常运行时,Calculator._prepare_output_path() 会根据流程模式自动创建结果目录:
- 正向流程:
results/FAHP-模糊层次分析法-<时间戳>-正向/ - 逆向流程:
results/FAHP-模糊层次分析法-<时间戳>-逆向/
并在目录内生成同名 Excel:
FAHP-模糊层次分析法-<时间戳>-正向.xlsxFAHP-模糊层次分析法-<时间戳>-逆向.xlsx
若调用核心类时显式传入 output_file 且其后缀为 .xlsx,则程序会直接输出到该路径,而不再自动创建上述默认命名目录。冒烟测试 test_fahp_smoke.py 覆盖的就是这种“显式输出文件路径”场景。
7.2 Excel 工作表
当前 _write_excel() 会同时导出英文页签与中文论文导向页签。
英文页签包括:
ParametersRawDataNormalizedPairwise_CrispPairwise_LabelPairwise_Fuzzy_LPairwise_Fuzzy_MPairwise_Fuzzy_UWeights_FuzzyWeightsScoresConsistencyWeights_StatsSensitivity(开启敏感性分析时出现)Warnings(存在告警时出现)Charts
中文页签包括:
参数设置计算过程结果-权重结果-排序
其中:
Pairwise_Label会把判断矩阵数值转换为1、2、1/3等 Saaty 标度文本;Weights_Stats会记录最大权重、最小权重、HHI、有效指标数、熵等统计量;计算过程会集中写入一致性检验结果、判断矩阵说明与 warnings,适合论文附录直接引用。
7.3 图表与复现脚本
程序会根据结果自动生成下列图表:
weights.png:权重柱状图;weights_pie.png:权重饼图;scores.png:综合得分图;scores_sorted.png:综合得分降序图;consistency_cr.png:一致性检验图;sensitivity.png:敏感性分析图(开启时)。
结果页 ui/results_widget.py 还支持导出复现脚本。导出后会在结果目录中额外生成:
repro_inputs/repro_fahp_template_<时间戳>.py
该脚本会保留:
- 原始数据路径或输入快照路径;
- 对象列名;
- 指标列表;
- 指标类型与适度指标标准值;
- 标准化方式;
- 去模糊方式;
- 判断矩阵;
- 敏感性分析开关与扰动比例;
source_mode。
脚本再次运行后,默认会在同目录生成
FAHP复现结果_<时间戳>.xlsx
因此,对论文复现或交付留档而言,这个脚本可以直接作为项目实现口径的辅助材料。
8. 与项目实现一致的若干注意事项
8.1 当前 FAHP 是“模糊权重 + 清晰加权和评分”
很多 FAHP 文献只关注模糊判断矩阵如何求权重,后续方案评价部分可能继续使用模糊综合评判、模糊算子或层次合成。本项目不是这种路径,而是明确采用式(35)的清晰加权和评分。因此,若论文结果来自本软件,方法部分不能只写“FAHP 赋权”,还应明确补充“基于标准化指标矩阵的加权求和排序”。
8.2 判断矩阵输入的是清晰 Saaty 比例,不是直接输入模糊数
用户界面中填写的是 \(1\)、\(3\)、\(1/5\) 这类普通 Saaty 比例,模糊数是由程序按式(20)—式(21)自动构造的。因此,本项目更准确的描述应当是“基于 Saaty 比例自动生成三角模糊判断矩阵的 FAHP 实现”。
8.3 逆向流程本质上是“专家评分表 → Saaty 判断矩阵”
逆向流程看似是“根据专家评分直接算权重”,但实际代码做的是:先计算指标平均评分,再构造评分比值矩阵,最后量化到最近的 Saaty 标度。这一点在 test_fahp_baseline.py 中也有明确校验,因此论文若使用逆向流程,应按第 2.2 节的式(4)—式(8)描述。
8.4 常数列与 CR 不通过不会必然中止计算
当前实现对常数列、未知指标类型、判断矩阵超出 1-9 标度范围、CR 未通过等问题,更多是通过 warnings 提示,而不是一律终止运行。因此,软件可以继续给出结果,但论文中应根据 warnings 决定是否接受该组结果。
9. 论文写作模板
若本文采用本项目中的 FAHP 模块进行综合评价,可按如下方式描述:
首先构建方案-指标原始决策矩阵,并依据指标属性将各指标划分为正向指标、负向指标和适度指标。对负向指标进行方向翻转,对适度指标依据其与目标值的偏离程度进行效益化处理,随后采用 Min-Max 标准化或 Z-score 与 Min-Max 组合标准化对指标矩阵进行无量纲化。进一步根据指标两两比较结果构造 Saaty 判断矩阵,并将其映射为三角模糊判断矩阵;采用 Buckley 模糊几何均值法求取模糊权重,再通过重心法或加权均值法去模糊,得到清晰权重向量。最后结合标准化后的指标矩阵与清晰权重计算各方案综合得分,并依据得分大小完成排序。
若本文采用的是逆向流程,还可补充说明:
在判断矩阵构造阶段,先由专家对各指标进行评分,再根据专家权重计算各指标的加权平均评分,并以指标评分比值为基础映射到最近的 Saaty 标度,从而自动生成判断矩阵。
10. 与代码实现的对应关系
表 1 FAHP 关键公式与项目实现对应关系
| 内容 | 数学表达 | 项目实现 |
|---|---|---|
| 原始输入结构 | 式(1)—式(3) | ui/upload_widget.py、utils/data_validator.py、core/calculator.py::run_analysis |
| 逆向流程生成判断矩阵 | 式(4)—式(8) | ui/methods_widget.py::_reverse_import_scores |
| 负向/适度指标处理与标准化 | 式(9)—式(15) | core/calculator.py::_normalize_data、ui/indicators_widget.py |
| 判断矩阵基本约束 | 式(16)—式(19) | core/calculator.py::_build_pairwise_matrix |
| Saaty 比例到三角模糊数映射 | 式(20)—式(22) | core/calculator.py::_scale_to_tfn、_build_fuzzy_matrix |
| Buckley 模糊几何均值权重 | 式(23)—式(27) | core/calculator.py::_fuzzy_weights |
| 去模糊与清晰权重归一化 | 式(28)—式(30) | core/calculator.py::_defuzzify、run_analysis |
| 一致性检验 | 式(31)—式(34) | core/calculator.py::_consistency_ratio |
| 综合得分、排名与敏感性分析 | 式(35)—式(39) | core/calculator.py::run_analysis、_sensitivity_analysis |
| Excel、图表与复现脚本导出 | 第 7 节 | core/calculator.py::_write_excel、_render_charts、ui/results_widget.py |
总体来看,本项目中的 FAHP 属于“Buckley 模糊几何均值求权重 + 标准化加权和评分 + 正向/逆向双流程”的工程化实现。对论文写作而言,建议把式(23)—式(39)作为方法主体,再结合式(4)—式(15)说明本软件在逆向建模、指标预处理与标准化环节的具体口径。
11. 论文模板补充
11.1 方法描述模板
“本文采用 FAHP 方法进行模糊主观赋权与综合评价。首先根据指标两两比较结果构造 Saaty 判断矩阵,并映射为三角模糊判断矩阵;随后采用 Buckley 模糊几何均值法求取模糊权重,并通过去模糊过程得到清晰权重向量。最后将清晰权重与标准化后的指标矩阵结合,计算各方案综合得分与排序结果。”
11.2 结果解释模板
结果部分可写为:结果表明,模糊权重能够反映专家判断中的不确定性,而去模糊后的清晰权重则用于最终方案评分。若一致性检验通过,说明判断矩阵具有较好的逻辑一致性;方案综合得分越大表示其整体表现越优。
11.3 表格标题模板
- 表 1 FAHP 判断矩阵与模糊数映射结果表
- 表 2 FAHP 模糊权重与去模糊结果表
- 表 3 FAHP 一致性检验结果表
- 表 4 FAHP 方案综合得分与排序结果表
11.4 图表题注模板
- 图 1 FAHP 指标权重分布图。
- 图 2 FAHP 方案综合得分排序图。
- 图 3 FAHP 敏感性分析结果图。
11.5 表格示例
表 1 FAHP 权重与排序结果表示例
| 指标/方案 | 权重/得分 | 排名 |
|---|---|---|
| \(C_1\) | ||
| \(C_2\) | ||
| \(A_1\) | ||
| \(A_2\) |
表注:指标权重来自 Buckley 模糊几何均值法与去模糊步骤;方案综合得分按清晰权重加权求和得到。
12. 单篇终审补充
12.1 图题与表题对齐建议
Parameters表可写为:表X FAHP 参数设置表。RawData表可写为:表X FAHP 原始数据表。Normalized表可写为:表X FAHP 标准化矩阵表。Pairwise_Crisp表可写为:表X FAHP 清晰判断矩阵表。Pairwise_Label表可写为:表X FAHP 语言标度判断矩阵表。Pairwise_Fuzzy_L表可写为:表X FAHP 三角模糊数下界矩阵表。Pairwise_Fuzzy_M表可写为:表X FAHP 三角模糊数中值矩阵表。Pairwise_Fuzzy_U表可写为:表X FAHP 三角模糊数上界矩阵表。Weights_Fuzzy表可写为:表X FAHP 模糊权重表。Weights表可写为:表X FAHP 清晰权重表。Scores表可写为:表X FAHP 方案得分表。Consistency表可写为:表X FAHP 一致性检验表。Weights_Stats表可写为:表X FAHP 权重统计表。Charts表可写为:表X FAHP 图表索引表。参数设置表可写为:表X FAHP 中文参数表。计算过程表可写为:表X FAHP 中文计算过程表。结果-权重表可写为:表X FAHP 权重结果表。结果-排序表可写为:表X FAHP 排序结果表。weights.png建议写为:图X FAHP 指标权重图。weights_pie.png建议写为:图X FAHP 权重占比饼图。scores.png建议写为:图X FAHP 方案得分图。scores_sorted.png建议写为:图X FAHP 排序得分图。consistency_cr.png建议写为:图X FAHP 一致性比率图。
12.2 终审说明
- 当前代表性结果目录建议同时保留正向与逆向两套,其中逆向可采用
results/FAHP-模糊层次分析法-20260329_172149-逆向,正向可采用results/FAHP-模糊层次分析法-20260329_172146-正向。正文若讨论双流程,应分开引用。 - 当前真实工作表同时包含英文 sheet 和中文镜像 sheet:
Parameters/RawData/Normalized/Pairwise_Crisp/Pairwise_Label/Pairwise_Fuzzy_L/Pairwise_Fuzzy_M/Pairwise_Fuzzy_U/Weights_Fuzzy/Weights/Scores/Consistency/Weights_Stats/Charts/参数设置/计算过程/结果-权重/结果-排序。论文终稿应明确自己采用哪一套命名,不要混排。 - 当前稳定实体图文件为
charts/weights.png、charts/weights_pie.png、charts/scores.png、charts/scores_sorted.png、charts/consistency_cr.png。若正文讨论一致性,应直接引用Consistency工作表和consistency_cr.png。 - 真实 repro 脚本为
repro_fahp_template_20260329_172149.py,并通过SRC_FILE = 'repro_inputs/fahp_ui_data.csv'读取输入副本。附录中的复现实验说明应保持这一repro_inputs/...csv相对路径口径。 - 当前复现脚本命名虽然带
template,但它调用的仍是工程内真实core.calculator。论文若要强调可复现性,可以直接写它是“参数快照 + 原始输入副本”的可执行重算脚本,而不是示意模板。
12.3 全量强化补充
- 当前 FAHP 文档应绑定真实算法目录
具体的算法3/多指标评价/FAHP-模糊层次分析法,并保留正向与逆向两套并行证据:正向目录为具体的算法3/多指标评价/FAHP-模糊层次分析法/results/FAHP-模糊层次分析法-20260329_172146-正向,逆向目录为具体的算法3/多指标评价/FAHP-模糊层次分析法/results/FAHP-模糊层次分析法-20260329_172149-逆向。 - 两个目录的主工作簿分别为
FAHP-模糊层次分析法-20260329_172146-正向.xlsx与FAHP-模糊层次分析法-20260329_172149-逆向.xlsx,其真实工作表一致,均为Parameters、RawData、Normalized、Pairwise_Crisp、Pairwise_Label、Pairwise_Fuzzy_L、Pairwise_Fuzzy_M、Pairwise_Fuzzy_U、Weights_Fuzzy、Weights、Scores、Consistency、Weights_Stats、Charts、参数设置、计算过程、结果-权重、结果-排序。 - 两个目录的主图结构也一致,均位于
charts/子目录,真实文件为weights.png、weights_pie.png、scores.png、scores_sorted.png、consistency_cr.png。 - 逆向目录除主工作簿外,还额外保留了
FAHP复现结果_20260329_172149.xlsx、repro_fahp_template_20260329_172149.py与repro_inputs/fahp_ui_data.csv,因此逆向目录已经自带完整复现链;正向目录当前则主要承担主结果展示角色。 - 因此论文与附录若要讨论“正向/逆向双流程 + 可复现性”,应分别写明:正向目录用于主结果对照,逆向目录用于主结果、复现结果和脚本闭环,不要把两者混成单一目录结构。
- 当前脚本关键输入写法为
SRC_FILE = 'repro_inputs/fahp_ui_data.csv',说明逆向流程的复现属于“目录内repro_inputs相对路径快照”口径,而不是uploads回指或results根目录平铺文件。
13. 软件实现核查补充(2026-07)
- 当前实现的主结果目录应写作
具体的算法3/多指标评价/FAHP-模糊层次分析法/results/FAHP-模糊层次分析法-20260329_172146-正向与具体的算法3/多指标评价/FAHP-模糊层次分析法/results/FAHP-模糊层次分析法-20260329_172149-逆向。 - 正文应围绕
Parameters、RawData、Normalized、Pairwise_Crisp、Pairwise_Label、Pairwise_Fuzzy_L/M/U、Weights_Fuzzy、Weights、Scores、Consistency、Weights_Stats、Charts以及中文镜像表来写。 - 图证应对应
weights.png、weights_pie.png、scores.png、scores_sorted.png、consistency_cr.png。 repro_fahp_template_20260329_172149.py + repro_inputs/fahp_ui_data.csv是目录内标准复现口径,正向与逆向应分开写。