正在加载中...

展开本页目录
算法教程MULTIMOORA-多MOORA

MULTIMOORA-多MOORA

No.091 · 在线教程

MULTIMOORA(Multi-Objective Optimization by Ratio Analysis plus the Full Multiplicative Form,多 MOORA)是在 MOORA 基础上进一步扩展形成的一类综合评价方法。其核心特征不是只用一…

MULTIMOORA-多MOORA

1. 方法概述

MULTIMOORA(Multi-Objective Optimization by Ratio Analysis plus the Full Multiplicative Form,多 MOORA)是在 MOORA 基础上进一步扩展形成的一类综合评价方法。其核心特征不是只用一种得分规则,而是同时构造:

  • 比率系统(Ratio System);
  • 参考点法(Reference Point);
  • 乘法形式(Full Multiplicative Form)。

然后再将三种方法的排序结果进行汇总,得到最终综合排序。

就本项目当前实现而言,core/multimoora_calculator.py 采用的是一条非常明确的工程化计算链:

  • 先读取“方案列 + 指标列”的原始数据;
  • 区分正向指标、负向指标与适度指标;
  • 对适度指标先转化为“偏离目标值的绝对距离”,并作为负向指标处理;
  • 再构造统一标准化矩阵;
  • 用熵权法或自定义方式确定权重;
  • 并行计算比率系统、参考点法和乘法形式三组结果;
  • 最后以三种方法的“排名和”作为综合依据,得到 综合排名

设共有 \(m\) 个方案、\(n\) 个指标,原始决策矩阵记为

$$ X=(x_{ij})_{m\times n}, \quad i=1,2,\ldots,m, \quad j=1,2,\ldots,n \tag{1} $$

设最终权重向量为

$$ 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} $$

项目最终导出的 综合排名 工作表中,核心列为:

  • 比率系统排名
  • 参考点法排名
  • 乘法形式排名
  • 排名和
  • 综合排名

其中当前实现固定采用“排名和越小越优”的综合规则。

2. 输入结构与项目流程

2.1 输入数据结构

上传页 ui/upload_widget.py 支持 .xlsx.xls.csv 文件;结合 utils/data_validator.py,当前项目在正常界面流程下要求:

  • 第 1 列为方案或对象名称;
  • 第 2 列及以后为指标列;
  • 指标列必须全部可转为数值;
  • 不允许空值;
  • 方案名称不允许重复;
  • 不允许常数列。

因此,进入 MULTIMOORACalculator 的标准输入结构为

$$ \mathcal{D}=\{A_i,\ x_{i1},x_{i2},\ldots,x_{in}\}_{i=1}^{m} \tag{3} $$

2.2 界面参数流程

主窗口 ui/main_window.py 的标准流程为:

  1. 上传数据;
  2. 选择参与计算的指标;
  3. 设定指标类型;
  4. 在方法页选择标准化方式、参考点距离度量和权重方式;
  5. 结果页自动执行 calculate_multimoora() 并导出 Excel、图表与复现脚本。

方法页 ui/methods_widget.py 当前支持的参数包括:

  • normalizationvectormin_maxz_score
  • weight_methodentropycustom
  • ref_distancechebysheveuclidean

其中 aggregation 虽然在核心参数结构中存在,但当前并没有界面入口,且实现固定为 rank_sum

3. 指标类型与适度指标处理

3.1 指标类型

当前模块支持三类指标:

  • 正向指标:值越大越优;
  • 负向指标:值越小越优;
  • 适度指标:值越接近给定标准值越优。

3.2 适度指标的工程化转换

与 MAIRCA、MARCOS 不同,当前 MULTIMOORA 模块对适度指标并不是构造接近度,而是直接把它转成“偏离目标值的绝对距离”:

$$ d_{ij}=|x_{ij}-s_j^\ast| \tag{4} $$

其中 \(s_j^\ast\) 为第 \(j\) 个适度指标的标准值。转换完成后,程序会把该指标的有效类型改写为负向指标:

$$ x_{ij}\longrightarrow d_{ij}, \qquad \text{并令 } C_j \in \text{成本指标集合} \tag{5} $$

因此,在本项目中,适度指标最终不是“越接近 1 越好”的接近度变量,而是“越偏离目标值越差”的距离变量。

3.3 标准值约束

当前 UI 和核心实现都要求适度指标标准值不为 0,即

$$ s_j^\ast\ne 0 \tag{6} $$

否则程序会直接报错,提示该适度指标未设置标准值。

3.4 缺失值与正常界面流程的区别

在正常上传流程下,空值会被 utils/data_validator.py 提前拦截,因此用户通常不会遇到缺失值进入核心计算的情况。但如果绕过上传页直接调用核心类,需要注意:_prepare_matrix() 当前使用的是

$$ \text{保留满足“至少有一个指标非空”的行} \tag{7} $$

而不是“所有指标都非空”的严格筛选。随后标准化阶段会把无穷值和缺失值统一填为 0。这是核心实现的一个细节,但在正常界面流程中基本不会触发。

4. 标准化矩阵与权重确定

4.1 向量归一化

当用户选择 vector 时,项目采用 MULTIMOORA/MOORA 最常见的向量归一化方式:

$$ r_{ij}=\frac{x_{ij}^\ast}{\sqrt{\sum_{k=1}^{m}\left(x_{kj}^\ast\right)^2}} \tag{8} $$

其中 \(x_{ij}^\ast\) 表示经过式(4)—式(5)处理后的有效输入值。若分母为 0,则该列结果记为 0。

4.2 Max-Min 归一化

当用户选择 min_max 时,程序统一采用

$$ r_{ij}=\frac{x_{ij}^\ast-\min_i x_{ij}^\ast}{\max_i x_{ij}^\ast-\min_i x_{ij}^\ast} \tag{9} $$

4.3 Z-score 后再归一化

当用户选择 z_score 时,程序先计算

$$ z_{ij}=\frac{x_{ij}^\ast-\mu_j}{\sigma_j} \tag{10} $$

其中 \(\mu_j\) 为第 \(j\) 列均值,\(\sigma_j\) 为总体标准差,代码中采用 std(ddof=0)。随后再映射到 \([0,1]\) 区间:

$$ r_{ij}=\frac{z_{ij}-\min_i z_{ij}}{\max_i z_{ij}-\min_i z_{ij}} \tag{11} $$

4.4 本项目中方向不在标准化阶段翻转

当前 MULTIMOORA 实现与前面完成的 MOORA 文档一致:无论使用式(8)、式(9)还是式(11),都不会在标准化阶段对负向指标做方向翻转,而是统一在比率系统、参考点法和乘法形式的后续步骤中通过“效益集合 / 成本集合”进行方向处理。因此,项目中的标准化矩阵统一记为

$$ R=(r_{ij})_{m\times n} \tag{12} $$

并且这同一矩阵 \(R\) 同时用于:

  • 熵权法求权重;
  • 比率系统;
  • 参考点法。

4.5 非负裁剪

当前实现对标准化矩阵统一执行

$$ r_{ij}\leftarrow \max(r_{ij},0) \tag{13} $$

也就是说,即使原始数据中存在负值,标准化后的矩阵也不会保留负数。这一点对于 vector 路径尤其重要,因为负的向量归一化结果会被直接裁剪为 0。

4.6 熵权法

当用户选择 entropy 时,程序直接在标准化矩阵 \(R\) 上计算熵权。设第 \(j\) 个指标的列和为 \(\sum_i r_{ij}\),则其比重为

$$ p_{ij}=\frac{r_{ij}}{\sum_{k=1}^{m}r_{kj}} \tag{14} $$

熵值定义为

$$ e_j=-\frac{1}{\ln m}\sum_{i=1}^{m}p_{ij}\ln p_{ij} \tag{15} $$

差异系数定义为

$$ g_j=1-e_j \tag{16} $$

最终权重为

$$ w_j=\frac{g_j}{\sum_{k=1}^{n}g_k} \tag{17} $$

4.7 自定义权重

当用户选择 custom 时,程序会先把用户输入的原始权重 \(\hat{w}_j\) 按所选指标重排、补零并归一化:

$$ w_j=\frac{\hat{w}_j}{\sum_{k=1}^{n}\hat{w}_k} \tag{18} $$

如果压根没有提供权重对象,则程序报错;但如果提供了权重对象且总和不大于 0,则当前实现会回退为等权:

$$ w_j=\frac{1}{n} \tag{19} $$

5. 比率系统

5.1 收益集合与成本集合

在适度指标经过式(4)—式(5)处理后,程序依据有效指标类型划分:

$$ B=\{j\mid C_j \text{ 为正向指标}\} \tag{20} $$

$$ C=\{j\mid C_j \text{ 为负向指标}\} \tag{21} $$

5.2 加权标准化矩阵

比率系统首先构造加权标准化矩阵:

$$ v_{ij}=w_j r_{ij} \tag{22} $$

5.3 比率系统得分

当前项目的比率系统采用加权收益减加权成本:

$$ Y_i=\sum_{j\in B}v_{ij}-\sum_{j\in C}v_{ij} \tag{23} $$

比率系统排名按 \(Y_i\) 降序产生:

$$ \operatorname{Rank}_R(A_i)=\operatorname{rank}_{\downarrow}^{\text{min}}(Y_i) \tag{24} $$

这里的 min 表示若出现并列得分,则取最小名次。Excel 的 比率系统 工作表记录了 比率系统得分Y 与对应名次。

6. 参考点法

6.1 参考点构造

对标准化矩阵 \(R\) 的每个指标,程序按指标方向构造参考点:

对正向指标:

$$ \rho_j=\max_i r_{ij} \tag{25} $$

对负向指标:

$$ \rho_j=\min_i r_{ij} \tag{26} $$

6.2 指标偏离

方案 \(A_i\) 在指标 \(C_j\) 上相对于参考点的偏离定义为

$$ \Delta_{ij}=|r_{ij}-\rho_j| \tag{27} $$

6.3 切比雪夫距离与欧氏距离

当前项目支持两种距离度量。

若选择 chebyshev,则参考点距离为

$$ D_i=\max_j \big(w_j\Delta_{ij}\big) \tag{28} $$

若选择 euclidean,则采用

$$ D_i=\sqrt{\sum_{j=1}^{n}\big(w_j\Delta_{ij}\big)^2} \tag{29} $$

无论使用哪一种距离,参考点法排名都按距离升序产生:

$$ \operatorname{Rank}_P(A_i)=\operatorname{rank}_{\uparrow}^{\text{min}}(D_i) \tag{30} $$

Excel 的 参考点参考点距离 工作表分别对应式(25)—式(29)的中间结果与最终距离结果。

7. 乘法形式

7.1 使用的是预处理后的原始矩阵,而不是标准化矩阵

这是当前 MULTIMOORA 模块最需要单独说明的实现点之一。比率系统和参考点法都建立在标准化矩阵 \(R\) 上,但乘法形式使用的是预处理后的原始矩阵 \(X^\ast\),而不是 \(R\)。

7.2 非正数修正

由于乘法形式需要做连乘或对数求和,程序会先对所有非正数和缺失值进行修正。设 \(\varepsilon=10^{-12}\),则

$$ \tilde{x}_{ij}= \begin{cases} x_{ij}^\ast, & x_{ij}^\ast>0\\ \varepsilon, & x_{ij}^\ast\le 0 \text{ 或缺失} \end{cases} \tag{31} $$

程序还会统计每个指标中被替换为 \(\varepsilon\) 的数量,并导出为 非正数修正统计 工作表。

7.3 对数稳定形式

当前实现并不直接计算乘积,而是采用对数稳定方式:

$$ \log U_i= \sum_{j\in B}w_j\ln \tilde{x}_{ij} \;-\; \sum_{j\in C}w_j\ln \tilde{x}_{ij} \tag{32} $$

乘法形式排名按 \(\log U_i\) 降序产生:

$$ \operatorname{Rank}_M(A_i)=\operatorname{rank}_{\downarrow}^{\text{min}}(\log U_i) \tag{33} $$

7.4 缩放得分仅用于展示

程序还会生成一个展示用缩放得分:

$$ U_i'=\exp\left(\log U_i-\max_k \log U_k\right) \tag{34} $$

但需要特别强调:项目排序依据是式(32)的 \(\log U_i\),而不是式(34)的 \(U_i'\)。U' 只是为了让输出值更稳定、更易读。

8. 综合排序、导出结构与复现脚本

8.1 排名汇总

当前实现固定采用三种方法的排名求和规则:

$$ R_i^{\Sigma}=\operatorname{Rank}_R(A_i)+\operatorname{Rank}_P(A_i)+\operatorname{Rank}_M(A_i) \tag{35} $$

然后再按排名和升序生成最终综合排名:

$$ \operatorname{Rank}(A_i)=\operatorname{rank}_{\uparrow}^{\text{min}}(R_i^{\Sigma}) \tag{36} $$

这正是 parameters["aggregation"] = "rank_sum" 对应的实际含义。当前模块并没有提供其他综合规则。

8.2 默认输出路径与图表

save_results() 会在指定目录下自动创建:

  • MULTIMOORA-多MOORA分析结果_<时间戳>/
  • MULTIMOORA-多MOORA分析结果_<时间戳>.xlsx

同时生成图表目录 charts/,默认包含:

  • weights.png
  • ratio_scores.png
  • ref_distances.png
  • mult_log_scores.png
  • final_ranking.png

它们分别展示:

  • 指标权重;
  • 比率系统得分;
  • 参考点距离;
  • 乘法形式对数得分;
  • 综合排名。

8.3 Excel 工作表

结合 save_results() 的实际逻辑,当前模块会导出以下工作表:

  • 参数
  • 原始数据
  • 标准化矩阵
  • 指标权重
  • 指标类型
  • 比率系统
  • 参考点
  • 参考点距离
  • 乘法形式
  • 综合排名
  • 熵权法
  • 非正数修正统计
  • 图表清单

其中:

  • 综合排名 是最适合直接用于论文结果展示的页签;
  • 乘法形式 同时给出 乘法形式对数得分logU乘法形式缩放得分U' 与排名;
  • 图表清单 会记录图表用途与绝对路径。

8.4 分层/子集计算

结果页 ui/results_widget.py 在整体计算完成后,会询问用户是否继续计算部分指标结果。若继续,程序调用 calculate_partial_multimoora() 重新执行完整三方法流程,并通过 append_layer_results() 把结果追加到已有 Excel 中。当前默认追加的页签名为:

  • 子集综合排名

8.5 复现脚本

程序会在结果目录下自动生成 repro_multimoora_<时间戳>.py。该脚本会固化:

  • 输入快照 repro_inputs/input_snapshot.csv
  • 所选指标;
  • 指标类型;
  • 适度指标标准值;
  • 标准化方法;
  • 权重方法;
  • 自定义权重;
  • 参考点距离度量。

重新运行该脚本后,会再次调用 calculate_multimoora()save_results(),并把复现结果写入 repro_outputs/ 子目录。

9. 与项目实现一致的若干注意事项

9.1 适度指标仍然采用“偏离度 + 负向指标”口径

这与 MOORA 一致,与 MAIRCA、MARCOS 不同。因此,论文中若要准确描述当前软件实现,应写成“适度指标被转化为对目标值的偏离度,并作为成本型指标处理”,而不是“转化为接近度”。

9.2 负向指标方向统一在下游处理,不在标准化阶段翻转

当前实现中:

  • 比率系统通过“收益减成本”处理方向;
  • 参考点法通过“正向取最大、负向取最小”的参考点规则处理方向;
  • 乘法形式通过“收益项对数和减成本项对数和”处理方向。

因此,若论文在标准化阶段就对负向指标做一次反转,会与项目实际代码形成双重处理。

9.3 乘法形式不是在标准化矩阵上做乘积

这是本模块最关键的实现差异之一。项目乘法形式使用的是预处理后的原始矩阵 \(X^\ast\),再通过式(31)进行非正数修正后进入式(32)。若论文直接写成“在标准化矩阵上构造乘法形式”,就会与项目实现不一致。

9.4 非正数和缺失值会在乘法形式中被替换为 \(\varepsilon\)

这一步会显著影响极端数据下的乘法形式结果,因此软件专门导出了 非正数修正统计 工作表。对于论文写作,建议明确说明这是为保证对数稳定性而引入的工程化修正。

9.5 最终综合规则固定为排名和

虽然参数结构中保留了 aggregation 字段,但当前实现没有提供其他综合策略,也没有界面入口。因此,论文若基于本软件结果,最好直接写明“采用三种子方法排名求和得到最终综合排序”。

9.6 utils/data_validator.py 与当前界面参数口径并不完全同步

当前 validate_method_settings() 只列出了 z-scoremin-max 两种标准化方法,并未同步 vectorref_distance。不过这部分校验在当前界面流程中并未真正参与主计算,因此不会影响正常使用。这属于代码层面的一个口径滞后点。

10. 论文写作模板

若本文采用本项目中的 MULTIMOORA 模块进行综合评价,可按如下方式描述:

首先构建方案-指标原始决策矩阵,并依据指标属性将指标划分为正向指标、负向指标和适度指标。对于适度指标,依据其与目标标准值之间的绝对偏离程度构造距离变量,并将其作为负向指标处理。随后对指标数据进行标准化处理,并采用熵权法或自定义方式确定指标权重。在此基础上,分别构造比率系统、参考点法和乘法形式三类评价结果:其中比率系统以收益项与成本项加权和之差作为评价得分,参考点法以方案到理想参考点的距离作为评价依据,乘法形式则依据收益项与成本项带权乘积比的对数形式进行排序。最后,将三种方法得到的名次进行求和,并按排名和由小到大得到综合排序结果。

若研究需要说明当前软件的工程细节,还可补充:

在乘法形式计算过程中,为避免非正数导致对数运算失效,对所有非正数及缺失值先以极小常数替代,并单独记录替换情况;在参考点法中,可采用切比雪夫距离或欧氏距离度量方案与参考点之间的偏离程度。

11. 与代码实现的对应关系

表 1 MULTIMOORA 关键公式与项目实现对应关系

内容 数学表达 项目实现
原始输入结构与参数流程 式(1)—式(3) ui/upload_widget.pyui/methods_widget.pycore/multimoora_calculator.py
适度指标偏离度处理 式(4)—式(7) ui/indicators_widget.pycore/multimoora_calculator.py::_prepare_matrix
标准化矩阵与权重 式(8)—式(19) core/multimoora_calculator.py::_normalize_entropy_weightsset_weights
比率系统 式(20)—式(24) core/multimoora_calculator.py::calculate_multimoora
参考点法 式(25)—式(30) core/multimoora_calculator.py::calculate_multimoora
乘法形式 式(31)—式(34) core/multimoora_calculator.py::calculate_multimoora
综合排名 式(35)—式(36) core/multimoora_calculator.py::calculate_multimoora
Excel、图表、分层计算与复现脚本 第 8 节 core/multimoora_calculator.py::save_resultsappend_layer_resultsui/results_widget.py

总体来看,本项目中的 MULTIMOORA 属于“适度指标偏离度转换 + 单一标准化矩阵 + 比率系统/参考点法/乘法形式并行计算 + 排名和综合排序”的工程化实现。对于论文写作,建议把式(20)—式(36)作为方法主体,再结合式(4)—式(19)说明本软件在适度指标处理、标准化、乘法稳定化和综合规则方面的具体实现口径。

12. 论文模板补充

12.1 方法描述模板

“本文采用 MULTIMOORA 方法对候选方案进行综合评价。首先对原始决策矩阵执行指标类型处理、标准化与权重确定;随后分别计算比率系统、参考点法和乘法形式三类评价结果,并将三种方法得到的名次进行汇总,最终依据排名和完成综合排序。”

12.2 结果解释模板

结果部分可写为:结果表明,若某方案在比率系统、参考点法和乘法形式三种子方法中均表现靠前,则其综合排序通常更稳定。若三种子方法对同一方案给出差异较大的名次,则说明其评价结果受具体建模口径影响较大,需要结合各子方法的得分机制进一步解释。

12.3 表格标题模板

  1. 表 1 MULTIMOORA 参数与权重设置表
  2. 表 2 MULTIMOORA 比率系统结果表
  3. 表 3 MULTIMOORA 参考点法与乘法形式结果表
  4. 表 4 MULTIMOORA 综合排名结果表

12.4 图表题注模板

  1. 图 1 MULTIMOORA 指标权重分布图。
  2. 图 2 MULTIMOORA 三类子方法结果对比图。
  3. 图 3 MULTIMOORA 综合排序结果图。

12.5 表格示例

表 1 MULTIMOORA 综合结果表示例

方案 比率系统名次 参考点法名次 乘法形式名次 综合排名和
\(A_1\)
\(A_2\)

表注:综合排序依据三类子方法名次之和升序确定,名次和越小表示方案越优。

13. 单篇终审补充

13.1 图题与表题对齐建议

  • 参数 表可写为:表X MULTIMOORA 参数设置表。
  • 原始数据 表可写为:表X MULTIMOORA 原始数据表。
  • 标准化矩阵 表可写为:表X MULTIMOORA 标准化矩阵表。
  • 指标权重 表可写为:表X MULTIMOORA 指标权重表。
  • 指标类型 表可写为:表X MULTIMOORA 指标类型表。
  • 比率系统 表可写为:表X MULTIMOORA 比率系统结果表。
  • 参考点 表可写为:表X MULTIMOORA 参考点表。
  • 参考点距离 表可写为:表X MULTIMOORA 参考点距离表。
  • 乘法形式 表可写为:表X MULTIMOORA 乘法形式结果表。
  • 综合排名 表可写为:表X MULTIMOORA 综合排名表。
  • 熵权法 表可写为:表X MULTIMOORA 熵权法计算表。
  • 非正数修正统计 表可写为:表X MULTIMOORA 非正数修正统计表。
  • 图表清单 表可写为:表X MULTIMOORA 图表索引与路径表。
  • weights.png 建议写为:图X MULTIMOORA 指标权重图。
  • ratio_scores.png 建议写为:图X MULTIMOORA 比率系统得分图。
  • ref_distances.png 建议写为:图X MULTIMOORA 参考点距离图。
  • mult_log_scores.png 建议写为:图X MULTIMOORA 乘法形式图。
  • final_ranking.png 建议写为:图X MULTIMOORA 综合排名图。

13.2 终审说明

  • 当前代表性结果目录可采用 results/manual_check_multimoora_20260321_after_fix/MULTIMOORA-多MOORA分析结果_20260321_045535。其中主工作簿为 MULTIMOORA-多MOORA分析结果_20260321_045535.xlsx
  • 当前真实工作表为 参数/原始数据/标准化矩阵/指标权重/指标类型/比率系统/参考点/参考点距离/乘法形式/综合排名/熵权法/非正数修正统计/图表清单。论文表题应按这组中文 sheet 名准确落地。
  • 当前稳定实体图文件为 charts/weights.pngcharts/ratio_scores.pngcharts/ref_distances.pngcharts/mult_log_scores.pngcharts/final_ranking.png。正文若解释三类子方法差异,应至少同时引用 比率系统/参考点距离/乘法形式/综合排名 四张表。
  • 真实 repro 脚本为 repro_multimoora_20260321_045535.py,并通过 INPUT_FILE = 'repro_inputs/input_snapshot.csv' 读取输入快照,再输出到 repro_outputs/。附录中的复现实验说明应保持这一 repro_inputs + repro_outputs 结构。
  • 当前结果目录存在多层 repro_outputs/ 递归复现结果。论文正文若只陈述主实验,应固定使用首层结果,不要把后续复现层的图表和结果簿混入正文。

13.3 全量强化补充

  • 当前磁盘上最完整且可直接验证的代表性结果目录不是旧文中的手动目录,而是 .pytest_tmp_multimoora_baseline/MULTIMOORA-多MOORA分析结果_20260402_215415。这是一个单次 baseline 结果包,但其内部首层主结果、图、输入副本和 repro 递归链都齐全。
  • 当前首层主工作簿为 .pytest_tmp_multimoora_baseline/MULTIMOORA-多MOORA分析结果_20260402_215415/MULTIMOORA-多MOORA分析结果_20260402_215415.xlsx,实际工作表为 参数原始数据标准化矩阵指标权重指标类型比率系统参考点参考点距离乘法形式综合排名非正数修正统计图表清单。需要如实写明:这一版结果簿里当前没有 熵权法 sheet,因此不能沿用旧文把 熵权法 当作固定存在的导出表。
  • 当前首层图文件位于 charts/ 目录下,分别为 weights.pngratio_scores.pngref_distances.pngmult_log_scores.pngfinal_ranking.png,完整路径都位于 .pytest_tmp_multimoora_baseline/MULTIMOORA-多MOORA分析结果_20260402_215415/charts/
  • 当前 repro 脚本是 .pytest_tmp_multimoora_baseline/MULTIMOORA-多MOORA分析结果_20260402_215415/repro_multimoora_20260402_215415.py,其真实输入口径为 INPUT_FILE = 'repro_inputs/input_snapshot.csv',并将复现输出保存到 SCRIPT_DIR / 'repro_outputs'。对应输入副本位于首层 repro_inputs/input_snapshot.csv
  • 当前目录下还存在一层再生产物 .pytest_tmp_multimoora_baseline/MULTIMOORA-多MOORA分析结果_20260402_215415/repro_outputs/MULTIMOORA-多MOORA分析结果_20260402_215416/,其中含新的工作簿、图、repro_inputs 和新的 repro_multimoora_20260402_215416.py。因此文档里必须把 215415 视为首层主结果,把 215416 视为 repro 再生产物。

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

  • 当前更适合正文引用的主结果目录应写作 具体的算法3/多指标评价/MULTIMOORA-多MOORA/results/manual_check_multimoora_20260321_after_fix/MULTIMOORA-多MOORA分析结果_20260321_045535
  • 正文应围绕 参数原始数据标准化矩阵指标权重指标类型比率系统参考点参考点距离乘法形式综合排名非正数修正统计图表清单 来写。
  • 图证应对应 weights.pngratio_scores.pngref_distances.pngmult_log_scores.pngfinal_ranking.png,并把三种子方法与综合排序的关系写清。
  • 复现脚本应按 repro_multimoora_20260321_045535.py + repro_inputs/input_snapshot.csv 的口径说明;repro_outputs/ 里的再生产物只能作为递归复现证据,不应写成主结果。