正在加载中...

展开本页目录
算法教程DGM-离散灰色模型

DGM-离散灰色模型

No.103 · 在线教程

DGM-离散灰色模型 的真实核心主要位于:

DGM-离散灰色模型

1. 方法概述

DGM-离散灰色模型 的真实核心主要位于:

  • core/dgm_calculator.py

从当前项目代码看,这个模块虽然在注释里提到过背景值与邻近均值,但真正用于拟合与预测的主方程是离散灰色模型 DGM 的闭式递推表达,而不是把连续 GM(1,1) 直接照搬过来。

项目流程大致为:

  1. 读取时间列与数值列;
  2. 对原始序列做一次 AGO 累加生成;
  3. 构造背景值矩阵并最小二乘估计参数 \(a,b\);
  4. 按离散 DGM 的显式公式计算累计序列预测值;
  5. 再逆累加得到原序列拟合值与未来预测值;
  6. 输出拟合、预测、参数、误差指标与图表。

设原始序列为

$$ x^{(0)}=\big(x^{(0)}(1),x^{(0)}(2),\ldots,x^{(0)}(n)\big) \tag{1} $$

2. AGO 与参数估计

2.1 一次累加生成

代码先构造 AGO 序列:

$$ x^{(1)}(k)=\sum_{t=1}^{k}x^{(0)}(t) \tag{2} $$

2.2 背景值

虽然最终预测主式是离散递推闭式,但参数估计阶段仍会先构造相邻均值:

$$ z^{(1)}(k)=\frac{1}{2}\Big(x^{(1)}(k-1)+x^{(1)}(k)\Big),\qquad k=2,\ldots,n \tag{3} $$

再组成回归矩阵

$$ B= \begin{bmatrix} -z^{(1)}(2) & 1\\ \vdots & \vdots\\ -z^{(1)}(n) & 1 \end{bmatrix}, \qquad Y= \begin{bmatrix} x^{(0)}(2)\\ \vdots\\ x^{(0)}(n) \end{bmatrix} \tag{4} $$

并用最小二乘得到参数 \((a,b)\)。

3. 代码里的真实预测公式

3.1 累计序列的离散闭式

当前代码真正用来生成 \(x^{(1)}\) 预测值的公式是

$$ \hat x^{(1)}(k)=\left(x^{(0)}(1)-\frac{b}{a}\right)(1-a)^k+\frac{b}{a} \tag{5} $$

这正是该模块最关键的实现口径:它不是简单写成连续指数解,而是按离散 DGM 的 \((1-a)^k\) 形式计算。

3.2 \(a\approx 0\) 时的线性回退

源码还专门做了一个工程化兜底:若 \(a\) 过小,避免除零或数值不稳定,直接改用近似线性形式

$$ \hat x^{(1)}(k)\approx x^{(0)}(1)+bk \tag{6} $$

因此这个实现比很多“只给主公式、不处理退化情形”的教材版更稳。

3.3 逆累加恢复原序列

最后再通过

$$ \hat x^{(0)}(k)=\hat x^{(1)}(k)-\hat x^{(1)}(k-1) \tag{7} $$

得到原序列的拟合值与未来预测值。

4. 输出结果与导出说明

4.1 结果字典

当前 result_dict 会保留:

  • raw_data
  • processed_data
  • fitted/forecast
  • metrics

其中 processed_data 里会把 AGO 处理后的表单独保存,这一点对写论文复现实验很有帮助。

4.2 Excel 工作表

源码会导出:

  • RawData
  • Processed
  • Fitted
  • Forecast
  • Params
  • Charts

因此它不是单纯返回未来几期预测值,而是把“原始数据、累加数据、拟合结果、预测结果、参数结果”拆成独立工作表。

5. 实现说明与注意事项

5.1 注释和真正主公式并不完全一致

这个模块最容易误写的地方在于:代码注释提到 z1 与背景值,但真正用于生成预测值的是离散 DGM 闭式 \((1-a)^k\),这一点必须以实际实现为准。

5.2 这里的 DGM 不是简单的 GM(1,1)

虽然参数估计阶段相似,但预测阶段的表达和连续灰色微分方程解并不完全相同,因此写说明时最好明确称它为“离散灰色模型 DGM”,不要直接混写成普通 GM(1,1)。

5.3 退化情形有线性兜底

若 \(a\) 非常接近 0,代码不会继续硬套 \(\frac{b}{a}\) 结构,而是自动改用线性近似,这属于项目里很实际的数值保护逻辑。

6. 论文写作建议

论文中建议把该模型明确写成“离散灰色模型 DGM”,并把式(5)–式(7) 作为核心预测公式。结果部分通常至少应给出参数表、拟合值与预测值表、误差指标表以及拟合/预测曲线图。若模型进入了 \(a\approx 0\) 的线性回退情形,最好在正文或附录中单独说明。

7. 单篇终审补充

7.1 图题与表题对齐建议

  • RawData 表可写为:表X DGM 原始输入数据。
  • Processed 表可写为:表X DGM AGO 处理结果。
  • Fitted 表可写为:表X DGM 拟合结果。
  • Forecast 表可写为:表X DGM 未来预测结果。
  • Params 表可写为:表X DGM 参数估计结果。
  • Metrics 表可写为:表X DGM 误差指标与模型参数摘要。
  • PlotsCharts 表可写为:表X DGM 图表索引与路径。
  • <结果名>_series.png 建议写为:图X DGM 实际值、拟合值与预测值对比图。
  • <结果名>_residuals.png 建议写为:图X DGM 残差图。

7.2 终审说明

  • 当前实现真实导出链路比正文前半部分列出的 RawData / Processed / Fitted / Forecast / Params / Charts 更完整,实际上还会额外写出 MetricsPlots;论文若介绍结果文件结构,应按真实导出表述。
  • Metrics 在当前实现里不是单独的统计检验表,而是把参数和摘要信息一并落表,因此正文不要把它误写成严格独立的“模型精度检验表”。
  • 图表路径来自结果文件同目录下的 <stem>_series.png<stem>_residuals.pngPlots/Charts 只记录路径,不是 Excel 内嵌图。
  • 若进入 \(a \approx 0\) 的线性兜底分支,论文应把它写成数值稳定性保护,而不是新的灰色模型公式。

7.3 全量强化补充

本次全量强化绑定的真实结果目录为 具体的算法3/灰色系统与模糊理论/DGM-离散灰色模型/results/DGM-离散灰色模型分析结果_20260329_120442。该目录内主工作簿为 dgm_result_20260329_120442.xlsx,实际工作表为 RawDataProcessedFittedForecastParamsPlotsChartsMetrics。其中 Metrics 页真实记录了 a = -0.09698000164108403b = 10.68790332669277MAPE(%) = 4.754139303210316RMSE = 0.8576155320655479,因此正文若需要引用具体误差指标,应优先从这一页取值,而不是凭理论公式推断。

同一目录下主图件为 dgm_result_20260329_120442_series.pngdgm_result_20260329_120442_residuals.png。此外,该目录还包含多份 repro 再生产物,例如 repro_dgm_20260329_120502.xlsxrepro_dgm_20260329_133432.xlsx 及其对应 *_series.png*_residuals.png,说明当前目录既保存主结果,也保存复现后再次生成的工作簿与图件。

复现脚本为 repro_20260329_120442.py,目录内 repro_inputs/dgm_sample.xlsx 真实存在。脚本当前写法为 INPUT_FILE = 'repro_inputs/dgm_sample.xlsx'PARAMS = {'forecast_steps': 5},并在执行时重新生成新的 repro_dgm_<时间戳>.xlsx。因此 DGM 当前已经具备“主结果工作簿 + 主图件 + repro_inputs 输入副本 + 多轮 repro 再生产物”的完整链路,正文应按这一实际目录结构写明主结果与复现结果的区分。

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

  • 当前主结果目录应写作 具体的算法3/灰色系统与模糊理论/DGM-离散灰色模型/results/DGM-离散灰色模型分析结果_20260329_120442
  • 正文应围绕 RawDataProcessedFittedForecastParamsPlotsChartsMetrics 来写。
  • 图证应对应 dgm_result_20260329_120442_series.pngdgm_result_20260329_120442_residuals.png,并把拟合和残差分开解释。
  • 复现脚本应按 repro_20260329_120442.py + repro_inputs/dgm_sample.xlsx 的口径说明;repro_dgm_<时间戳>.xlsx 是复现再生产物。