正在加载中...

展开本页目录
算法教程FAHP-模糊层次分析法

FAHP-模糊层次分析法

No.086 · 在线教程

FAHP(Fuzzy Analytic Hierarchy Process,模糊层次分析法)是在经典 AHP 的基础上,把两两比较判断扩展为模糊数表示,从而缓解决策者语言判断的不确定性。本项目当前实现采用的是一条非常明确的工程化主线:

FAHP-模糊层次分析法

1. 方法概述

FAHP(Fuzzy Analytic Hierarchy Process,模糊层次分析法)是在经典 AHP 的基础上,把两两比较判断扩展为模糊数表示,从而缓解决策者语言判断的不确定性。本项目当前实现采用的是一条非常明确的工程化主线:

  • 先对方案-指标数据做正向/负向/适度指标预处理与标准化;
  • 再将 Saaty 判断矩阵映射为三角模糊数矩阵;
  • 使用 Buckley 模糊几何均值法 求取模糊权重;
  • 通过 centroidmean 方法去模糊,得到清晰权重;
  • 最后以标准化后的指标矩阵与清晰权重做加权求和,得到方案综合得分与排序。

因此,当前项目中的 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_lg_mg_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=0CR=0passed=True。若 \(n>15\) 导致 RI 表缺失,则 CRpassed 会记为 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_changemean_score_change 字段。

7. 输出结构、图表与复现脚本

7.1 默认输出路径

当用户通过界面正常运行时,Calculator._prepare_output_path() 会根据流程模式自动创建结果目录:

  • 正向流程:results/FAHP-模糊层次分析法-<时间戳>-正向/
  • 逆向流程:results/FAHP-模糊层次分析法-<时间戳>-逆向/

并在目录内生成同名 Excel:

  • FAHP-模糊层次分析法-<时间戳>-正向.xlsx
  • FAHP-模糊层次分析法-<时间戳>-逆向.xlsx

若调用核心类时显式传入 output_file 且其后缀为 .xlsx,则程序会直接输出到该路径,而不再自动创建上述默认命名目录。冒烟测试 test_fahp_smoke.py 覆盖的就是这种“显式输出文件路径”场景。

7.2 Excel 工作表

当前 _write_excel() 会同时导出英文页签与中文论文导向页签。

英文页签包括:

  • Parameters
  • RawData
  • Normalized
  • Pairwise_Crisp
  • Pairwise_Label
  • Pairwise_Fuzzy_L
  • Pairwise_Fuzzy_M
  • Pairwise_Fuzzy_U
  • Weights_Fuzzy
  • Weights
  • Scores
  • Consistency
  • Weights_Stats
  • Sensitivity(开启敏感性分析时出现)
  • Warnings(存在告警时出现)
  • Charts

中文页签包括:

  • 参数设置
  • 计算过程
  • 结果-权重
  • 结果-排序

其中:

  • Pairwise_Label 会把判断矩阵数值转换为 121/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.pyutils/data_validator.pycore/calculator.py::run_analysis
逆向流程生成判断矩阵 式(4)—式(8) ui/methods_widget.py::_reverse_import_scores
负向/适度指标处理与标准化 式(9)—式(15) core/calculator.py::_normalize_dataui/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::_defuzzifyrun_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_chartsui/results_widget.py

总体来看,本项目中的 FAHP 属于“Buckley 模糊几何均值求权重 + 标准化加权和评分 + 正向/逆向双流程”的工程化实现。对论文写作而言,建议把式(23)—式(39)作为方法主体,再结合式(4)—式(15)说明本软件在逆向建模、指标预处理与标准化环节的具体口径。

11. 论文模板补充

11.1 方法描述模板

“本文采用 FAHP 方法进行模糊主观赋权与综合评价。首先根据指标两两比较结果构造 Saaty 判断矩阵,并映射为三角模糊判断矩阵;随后采用 Buckley 模糊几何均值法求取模糊权重,并通过去模糊过程得到清晰权重向量。最后将清晰权重与标准化后的指标矩阵结合,计算各方案综合得分与排序结果。”

11.2 结果解释模板

结果部分可写为:结果表明,模糊权重能够反映专家判断中的不确定性,而去模糊后的清晰权重则用于最终方案评分。若一致性检验通过,说明判断矩阵具有较好的逻辑一致性;方案综合得分越大表示其整体表现越优。

11.3 表格标题模板

  1. 表 1 FAHP 判断矩阵与模糊数映射结果表
  2. 表 2 FAHP 模糊权重与去模糊结果表
  3. 表 3 FAHP 一致性检验结果表
  4. 表 4 FAHP 方案综合得分与排序结果表

11.4 图表题注模板

  1. 图 1 FAHP 指标权重分布图。
  2. 图 2 FAHP 方案综合得分排序图。
  3. 图 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.pngcharts/weights_pie.pngcharts/scores.pngcharts/scores_sorted.pngcharts/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-正向.xlsxFAHP-模糊层次分析法-20260329_172149-逆向.xlsx,其真实工作表一致,均为 ParametersRawDataNormalizedPairwise_CrispPairwise_LabelPairwise_Fuzzy_LPairwise_Fuzzy_MPairwise_Fuzzy_UWeights_FuzzyWeightsScoresConsistencyWeights_StatsCharts参数设置计算过程结果-权重结果-排序
  • 两个目录的主图结构也一致,均位于 charts/ 子目录,真实文件为 weights.pngweights_pie.pngscores.pngscores_sorted.pngconsistency_cr.png
  • 逆向目录除主工作簿外,还额外保留了 FAHP复现结果_20260329_172149.xlsxrepro_fahp_template_20260329_172149.pyrepro_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-逆向
  • 正文应围绕 ParametersRawDataNormalizedPairwise_CrispPairwise_LabelPairwise_Fuzzy_L/M/UWeights_FuzzyWeightsScoresConsistencyWeights_StatsCharts 以及中文镜像表来写。
  • 图证应对应 weights.pngweights_pie.pngscores.pngscores_sorted.pngconsistency_cr.png
  • repro_fahp_template_20260329_172149.py + repro_inputs/fahp_ui_data.csv 是目录内标准复现口径,正向与逆向应分开写。