正在加载中...

展开本页目录
算法教程G1-序关系法

G1-序关系法

No.087 · 在线教程

G1-序关系法是一种典型的主观赋权方法。与 AHP 需要构造完整两两比较矩阵不同,G1 只要求决策者先给出指标重要性排序,再给出相邻指标权重之比,即可递推出完整权重向量。

G1-序关系法

1. 方法概述

G1-序关系法是一种典型的主观赋权方法。与 AHP 需要构造完整两两比较矩阵不同,G1 只要求决策者先给出指标重要性排序,再给出相邻指标权重之比,即可递推出完整权重向量。

就本项目的具体实现而言,当前模块采用的是一条非常清晰的工程化计算链:

  • 先对方案-指标数据做正向/负向/适度指标预处理;
  • 再按 min-maxz-score 口径进行标准化;
  • 根据 G1 指标排序与相邻比值 \(r_i\) 递推权重;
  • 最后采用标准化矩阵与 G1 权重做加权求和,得到综合得分与排名。

因此,本项目中的 G1 模块并不是“只输出权重”的纯赋权工具,而是一个“G1 主观权重 + 方案综合评分”的一体化评价模块。

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

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

设最终 G1 权重向量为

$$ 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)基础上,通过 G1 权重递推和加权求和得到的结果。

2. 输入结构与项目流程

2.1 输入数据结构

当前上传页 ui/upload_widget.py 支持 .xlsx.xls.csv 文件。结合 utils/data_validator.py,界面层要求:

  • 第 1 列为对象名称;
  • 第 2 列及之后为指标列;
  • 指标列必须全部可转为数值;
  • 不允许空值;
  • 对象名称不允许重复;
  • 上传页默认不允许常数列。

因此,进入 core/g1_calculator.py 的数据结构可以表示为

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

其中第一个字段为对象名称,其余字段为指标值。若研究者绕过上传页直接调用核心类,则数值与缺失检查仍会在 _ensure_numeric() 中继续执行。

2.2 正向流程与逆向流程

主窗口 ui/main_window.py 在指标设置完成后,会进入一个流程选择页 FlowSelectWidget。当前项目支持两条路径:

  • 正向流程:手动设置指标顺序与相邻比值;
  • 逆向流程:从专家评分表自动倒推指标顺序与相邻比值。

需要特别说明的是:G1 的核心计算在正向和逆向流程中完全相同。逆向流程只负责生成 g1_orderg1_ratios,生成完成后仍然调用同一个 G1Calculator.calculate_g1() 进行权重递推与方案评分。

3. 指标类型、预处理与标准化

3.1 指标类型

当前项目支持三类指标:

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

3.2 适度指标处理

对适度指标,设第 \(j\) 个指标的目标值为 \(s_j^\ast\),则项目先定义最大偏离尺度

$$ M_j=\max\left(|\max_i x_{ij}-s_j^\ast|,\ |\min_i x_{ij}-s_j^\ast|\right) \tag{4} $$

若 \(M_j=0\),说明该列所有值都与目标值完全一致,则程序直接记为

$$ y_{ij}=1 \tag{5} $$

否则采用

$$ y_{ij}=1-\frac{|x_{ij}-s_j^\ast|}{M_j} \tag{6} $$

这对应 G1Calculator._process_moderate() 的实际实现。与其他部分算法不同,本模块对适度指标处理后,会直接把结果当成最终标准化值,不再继续做 min-maxz-score 变换。

3.3 Max-Min 标准化

对正向指标,当用户选择 min-max 时,项目采用

$$ n_{ij}=\frac{x_{ij}-\min_i x_{ij}}{\max_i x_{ij}-\min_i x_{ij}} \tag{7} $$

对负向指标,则采用

$$ n_{ij}=\frac{\max_i x_{ij}-x_{ij}}{\max_i x_{ij}-\min_i x_{ij}} \tag{8} $$

若某列满足 \(\max_i x_{ij}=\min_i x_{ij}\),则程序直接把该列标准化结果记为 0。

3.4 Z-score 后再归一化

当用户选择 z-score 时,对正向指标先做

$$ z_{ij}=\frac{x_{ij}-\mu_j}{\sigma_j} \tag{9} $$

对负向指标,则先取反方向

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

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

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

若 \(\sigma_j=0\) 或 \(\max_i z_{ij}=\min_i z_{ij}\),则该列同样直接记为 0。

3.5 项目中的最终标准化矩阵

综合上述规则,本项目实际用于后续 G1 加权求和的标准化矩阵为

$$ N=(n_{ij})_{m\times n} \tag{12} $$

其中:

  • 正向指标和负向指标按式(7)—式(11)处理;
  • 适度指标直接采用式(5)—式(6)的结果;
  • 因此,当用户选择 z-score 时,适度指标不会再参与 z-score 变换

这正是 G1Calculator._normalize() 中最需要注意的实现细节之一。

4. G1 权重递推

4.1 指标排序

设指标按重要性从高到低排序后记为

$$ C_{(1)} \succ C_{(2)} \succ \cdots \succ C_{(n)} \tag{13} $$

这里 \(C_{(1)}\) 表示最重要指标,\(C_{(n)}\) 表示最不重要指标。项目中的 g1_order 就是式(13)的具体列表。

4.2 相邻重要性比值

G1 法只要求给出相邻指标的权重之比:

$$ r_i=\frac{w_i}{w_{i+1}}, \quad i=1,2,\ldots,n-1 \tag{14} $$

其中 \(w_i\) 表示排序后第 \(i\) 个指标的权重。当前代码允许任意正数比值,但界面提示中明确建议一般取

$$ r_i\ge 1 \tag{15} $$

因为排序本身已经约定前者比后者更重要。

4.3 末位权重

项目首先根据全部相邻比值计算最末位指标权重:

$$ w_n=\frac{1}{1+\sum_{i=1}^{n-1}\prod_{k=i}^{n-1}r_k} \tag{16} $$

这与 G1Calculator._compute_g1_weights()w_n 的实现完全一致。

4.4 递推公式

随后按从后往前的方式递推:

$$ w_i=r_i\,w_{i+1}, \quad i=n-1,n-2,\ldots,1 \tag{17} $$

若仅有 1 个指标,则项目直接返回

$$ w_1=1 \tag{18} $$

得到排序权重后,程序会再按实际数据列顺序 selected_indicators 重新对齐,以确保后续加权求和时权重与指标列一一对应。

5. 方案综合得分与排序

在得到标准化矩阵 \(N\) 与 G1 权重向量 \(w\) 后,项目采用简单加权和计算方案综合得分:

$$ S_i=\sum_{j=1}^{n}n_{ij}w_j \tag{19} $$

随后按 \(S_i\) 降序排列,得到方案排名:

$$ \operatorname{Rank}(A_i)=\operatorname{rank}_{\downarrow}^{\text{min}}(S_i) \tag{20} $$

这里的 min 表示并列时取最小名次。例如两个方案并列第 1,则下一个名次为第 3。

因此,本项目中的 G1 结果并不是只导出一组主观权重,而是“G1 权重 + 标准化加权和得分”的综合评价结果。

6. 逆向流程:由专家评分表倒推排序与比值

6.1 专家评分聚合

在逆向流程下,方法页 ui/methods_widget.py::reverse_import_scores() 要求导入一张专家评分表。设共有 \(K\) 位专家,第 \(k\) 位专家对第 \(j\) 个指标的评分为 \(s_{kj}\),专家权重为 \(\rho_k\),则程序先归一化专家权重:

$$ \rho_k\ge 0, \quad \sum_{k=1}^{K}\rho_k=1 \tag{21} $$

随后计算各指标加权平均评分:

$$ \bar{s}_j=\sum_{k=1}^{K}\rho_k\,s_{kj} \tag{22} $$

若评分表中不存在 专家权重权重weightWeight 这些列,则程序默认采用等权专家。

6.2 倒推顺序与比值

项目首先按照 \(\bar{s}_j\) 从大到小排序,得到逆向流程下的指标顺序:

$$ C_{(1)},C_{(2)},\ldots,C_{(n)} \quad \text{满足} \quad \bar{s}_{(1)}\ge \bar{s}_{(2)}\ge \cdots \ge \bar{s}_{(n)} \tag{23} $$

随后,以相邻指标平均评分之比构造 G1 比值:

$$ r_i=\frac{\bar{s}_{(i)}}{\bar{s}_{(i+1)}}, \quad i=1,2,\ldots,n-1 \tag{24} $$

程序进一步把该比值裁剪到

$$ 1\le r_i\le 9 \tag{25} $$

从而得到逆向流程中的 g1_ratios。需要特别注意的是:

  • G1 逆向流程不会像 FAHP 那样把比值再投影到离散 Saaty 标度;
  • 它直接使用连续实数比值;
  • 因此,逆向流程仅仅是在专家评分表基础上自动推得式(13)和式(14)中的参数。

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

7.1 结果结构

G1Calculator.calculate_g1() 返回统一结果字典,主要包括:

  • raw_data:原始数据摘要、对象列名;
  • processed_data:标准化矩阵摘要与 normalized_matrix
  • step_resultsg1_orderg1_ratios、权重、标准化矩阵与计算步骤;
  • final_results:综合得分与排名;
  • charts:图表路径;
  • parameters:标准化方法、指标类型、标准值、G1 顺序与比值、对象列等参数。

7.2 默认输出路径与图表

结果页 ui/results_widget.py 会先创建目录:

  • 正向流程:results/G1-序关系法-<时间戳>-正向/
  • 逆向流程:results/G1-序关系法-<时间戳>-逆向/

随后 save_results() 会在目录中生成同名 Excel:

  • G1-序关系法-<时间戳>-正向.xlsx
  • G1-序关系法-<时间戳>-逆向.xlsx

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

  • score_bar.png:综合得分柱状图;
  • weight_bar.png:G1 权重柱状图。

7.3 Excel 工作表

当前模块会同时导出业务页签与论文导向页签。

业务页签包括:

  • 原始数据
  • 标准化矩阵
  • G1权重
  • G1比值
  • 综合得分

论文导向页签包括:

  • 参数设置
  • 计算过程
  • 结果-权重
  • 结果-排序
  • Charts(图表存在时)

其中:

  • 参数设置 记录标准化方法、指标类型、标准值、排序与比值等;
  • 计算过程 会集中写出指标排序、相邻比值以及权重递推公式;
  • 结果-权重结果-排序 适合直接作为论文附录结果表使用。

7.4 复现脚本

结果页支持“导出复现代码”。导出后会在结果目录中生成:

  • repro_inputs/(若原始数据可复制)
  • repro_g1_<时间戳>.py

该脚本会记录:

  • 原始数据路径或复制后的输入文件路径;
  • 所选指标;
  • 指标类型与适度指标标准值;
  • g1_orderg1_ratios
  • 标准化方法;
  • 流程模式 source_mode

重新运行该脚本后,会再次调用 calculate_g1()save_results(),在同目录生成一份新的 G1 结果文件。

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

8.1 G1 是“序关系赋权 + 客观数据评分”

当前模块并不是只做主观赋权,而是把主观排序权重进一步用于客观方案数据的综合评分。因此,论文若直接使用软件结果,不能只写“采用 G1 法确定权重”,还应补充说明“基于标准化方案矩阵进行加权求和排序”。

8.2 适度指标在 G1 中会绕过所选标准化方式

这是本模块最容易被忽略的实现细节。正向指标和负向指标会按 min-maxz-score 路径处理,而适度指标一旦按式(4)—式(6)转换为 \([0,1]\) 变量,就直接作为最终标准化值写入矩阵,不再额外做 z-score。这意味着在同一次分析中,不同类型指标的标准化链路并不完全相同。

8.3 逆向流程只倒推顺序和 \(r_i\),不改变 G1 主体公式

与 FAHP 的逆向流程不同,G1 逆向流程不会生成新的判断矩阵,也不会做模糊数映射。它仅仅根据专家评分均值生成排序与相邻比值,然后仍然使用式(16)—式(18)进行权重递推。

8.4 UI 要求适度指标标准值不能为 0,但核心可自动回退

界面页 ui/indicators_widget.py 当前会把适度指标标准值等于 0 视为“未设置”;但核心 _normalize() 在缺失标准值时其实会默认回退到列均值。这意味着:

  • 通过正常 UI 流程时,适度指标标准值必须是非 0;
  • 直接调用核心类时,即使未显式提供标准值,程序也会用列均值继续计算。

这是 UI 约束与核心逻辑之间的一个实际差异。

9. 论文写作模板

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

首先构建方案-指标原始决策矩阵,并依据指标属性将指标划分为正向指标、负向指标和适度指标。对于负向指标,通过方向翻转将其统一转换为效益型;对于适度指标,依据其与目标值的偏离程度构造接近度指标。随后对指标数据进行标准化处理,并根据 G1-序关系法给出的指标重要性排序与相邻指标权重比,递推出完整权重向量。最后将标准化指标矩阵与 G1 权重向量进行加权求和,得到各方案综合得分,并据此完成排序。

若本文采用的是逆向流程,还可进一步写为:

在 G1 参数设定阶段,先收集专家对各指标的重要性评分,并按照专家权重计算各指标的加权平均评分;再根据平均评分从高到低确定指标顺序,并由相邻指标评分之比构造 G1 相邻比值,从而自动生成 G1 权重参数。

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

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

内容 数学表达 项目实现
原始输入结构 式(1)—式(3) ui/upload_widget.pyutils/data_validator.pycore/g1_calculator.py::set_data
适度指标处理与标准化 式(4)—式(12) core/g1_calculator.py::_process_moderate_normalize
指标排序与相邻比值 式(13)—式(15) ui/methods_widget.pycore/g1_calculator.py::_compute_g1_weights
G1 权重递推 式(16)—式(18) core/g1_calculator.py::_compute_g1_weights
综合得分与排名 式(19)—式(20) core/g1_calculator.py::calculate_g1
逆向流程倒推顺序与比值 式(21)—式(25) ui/methods_widget.py::reverse_import_scores
Excel、图表与复现脚本导出 第 7 节 core/g1_calculator.py::save_resultsui/results_widget.py

总体来看,本项目中的 G1 属于“序关系主观赋权 + 标准化加权和评分 + 正向/逆向双流程”的工程化实现。对论文写作而言,建议把式(13)—式(25)作为方法主体,再结合式(4)—式(12)说明本软件在指标预处理、标准化与逆向建模方面的具体口径。

11. 论文模板补充

11.1 方法描述模板

“本文采用 G1 序关系法进行主观赋权与综合评价。首先依据专家给出的指标重要性排序与相邻指标权重比,递推出完整权重向量;随后将标准化后的指标矩阵与 G1 权重结合,计算各方案综合得分并完成排序。若使用逆向流程,则先由专家评分生成指标顺序与相邻比值,再进入标准 G1 递推过程。”

11.2 结果解释模板

结果部分可写为:结果表明,排序靠前且相邻比值较大的指标通常在最终权重中占据更大比重。若方案综合得分差异明显,则说明主观序关系赋权对方案区分具有较强作用;若逆向流程与正向流程得到相近权重,则可认为评分倒推结果具有较好的稳定性。

11.3 表格标题模板

  1. 表 1 G1 指标排序与相邻比值设置表
  2. 表 2 G1 指标权重递推结果表
  3. 表 3 G1 方案综合得分与排序结果表
  4. 表 4 G1 逆向评分结果表

11.4 图表题注模板

  1. 图 1 G1 指标权重分布图。
  2. 图 2 G1 方案综合得分排序图。
  3. 图 3 G1 逆向评分与正向参数对比图。

11.5 表格示例

表 1 G1 权重与方案排序结果表示例

项目 结果
指标顺序
相邻比值
指标权重
方案综合得分与排名

表注:指标权重由 G1 相邻比值递推得到,方案综合得分按标准化矩阵与权重向量加权求和计算。

12. 单篇终审补充

12.1 图题与表题对齐建议

  • 原始数据 表可写为:表X G1 原始数据表。
  • 标准化矩阵 表可写为:表X G1 标准化矩阵表。
  • G1权重 表可写为:表X G1 指标权重表。
  • G1比值 表可写为:表X G1 相邻比值表。
  • 综合得分 表可写为:表X G1 综合得分与排序表。
  • 参数设置 表可写为:表X G1 参数设置表。
  • 计算过程 表可写为:表X G1 计算过程表。
  • 结果-权重 表可写为:表X G1 权重结果表。
  • 结果-排序 表可写为:表X G1 排序结果表。
  • weight_bar.png 建议写为:图X G1 指标权重图。
  • score_bar.png 建议写为:图X G1 方案得分图。

12.2 终审说明

  • 当前代表性结果目录建议同时保留正向与逆向两套,其中正向可采用 results/G1-序关系法-20260329_021609-正向,逆向可采用 results/G1-序关系法-20260329_021610-逆向
  • 当前真实工作表为 原始数据/标准化矩阵/G1权重/G1比值/综合得分/参数设置/计算过程/结果-权重/结果-排序。论文表题应按这组中文 sheet 名准确落地。
  • 当前稳定实体图文件为 charts/weight_bar.pngcharts/score_bar.png。若正文需要解释排序逻辑,应把 G1比值G1权重综合得分 三张表配套说明,而不是只引用最终分数图。
  • 真实 repro 脚本为 repro_g1_20260329_021610.py 或相邻时间戳脚本,并通过 SRC_FILE = 'repro_inputs/g1_sample.xlsx' 读取输入副本。附录应保持这一 repro_inputs/...xlsx 相对路径结构。
  • 正向与逆向目录可能共用同一份 g1_sample.xlsx 输入副本,但脚本内部的 G1_ORDER/G1_RATIOS/SOURCE_MODE 不同。论文若做双流程对照,应以脚本参数快照而不是仅凭输入文件名来区分两套实验。

12.3 全量强化补充

  • 当前应绑定的两套真实结果目录分别是 具体的算法3/多指标评价/G1-序关系法/results/G1-序关系法-20260329_021609-正向具体的算法3/多指标评价/G1-序关系法/results/G1-序关系法-20260329_021610-逆向。这两套目录是首层主结果,不存在额外的 repro_outputs/ 递归链。
  • 需要修正旧文一个命名误差:当前真实主工作簿文件名并不是 G1-序关系法分析结果_时间戳.xlsx,而是直接与目录同名,分别为 具体的算法3/多指标评价/G1-序关系法/results/G1-序关系法-20260329_021609-正向/G1-序关系法-20260329_021609-正向.xlsx具体的算法3/多指标评价/G1-序关系法/results/G1-序关系法-20260329_021610-逆向/G1-序关系法-20260329_021610-逆向.xlsx
  • 上述两本工作簿当前实际工作表完全一致,均为 原始数据标准化矩阵G1权重G1比值综合得分参数设置计算过程结果-权重结果-排序。因此正向与逆向的差异不体现在 sheet 名层面,而体现在参数来源和脚本运行模式上。
  • 两套目录的实体图都只包含两张:具体的算法3/多指标评价/G1-序关系法/results/G1-序关系法-20260329_021609-正向/charts/weight_bar.png具体的算法3/多指标评价/G1-序关系法/results/G1-序关系法-20260329_021609-正向/charts/score_bar.png,以及逆向目录下对应同名图片。正文如果比较正逆向结果,应明确写出目录前缀,否则图名本身无法区分两套实验。
  • 当前还有一个容易误判的细节:正向目录里的 repro 脚本文件名也是 repro_g1_20260329_021610.py,并没有单独生成 021609 版本。也就是说,区分正向与逆向不能靠脚本文件名,而要看它所在目录和脚本内部参数。
  • 两个目录中的 repro 脚本都使用 SRC_FILE = 'repro_inputs/g1_sample.xlsx',对应输入副本位于各自目录下的 repro_inputs/g1_sample.xlsx;但正向脚本内部写的是 SOURCE_MODE = 'forward',逆向脚本内部写的是 SOURCE_MODE = 'reverse'。当前磁盘证据表明,这才是区分两套流程的真实依据。

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

  • 当前实现的两套真实结果目录应写作 具体的算法3/多指标评价/G1-序关系法/results/G1-序关系法-20260329_021609-正向具体的算法3/多指标评价/G1-序关系法/results/G1-序关系法-20260329_021610-逆向
  • 正文应围绕 原始数据标准化矩阵G1权重G1比值综合得分参数设置计算过程结果-权重结果-排序 来写。
  • 图证应对应 weight_bar.pngscore_bar.png,并说明正向/逆向目录各自存在同名图副本。
  • repro_g1_20260329_021610.py + repro_inputs/g1_sample.xlsx 属于标准 repro_inputs 复现口径,SOURCE_MODE 才是区分正逆向的关键。