正在加载中...

展开本页目录
算法教程Verhulst-灰色 Verhulst

Verhulst-灰色 Verhulst

No.113 · 在线教程

Verhulst-灰色 Verhulst 的真实核心主要位于:

Verhulst-灰色 Verhulst

1. 方法概述

Verhulst-灰色 Verhulst 的真实核心主要位于:

  • core/calculator.py

从当前源码看,这个模块是标准 Verhulst 灰色模型的工程化实现,适合描述具有饱和、抑制或“S 型”演化趋势的序列。项目流程为:

  1. 读取时间列与数值列;
  2. 构造 AGO 序列与背景值;
  3. 最小二乘估计 Verhulst 参数 \(a,b\);
  4. 用 Verhulst 时间响应式进行拟合与预测;
  5. 输出残差、相对误差、后验差比、小误差概率和级比检验。

设原始序列为

$$ 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 背景值

背景值使用可调系数 gm_alpha

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

2.3 Verhulst 回归方程

当前代码把参数估计写成

$$ x^{(0)}(k)+a z^{(1)}(k)=b\big(z^{(1)}(k)\big)^2 \tag{4} $$

对应矩阵形式为

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

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

3. Verhulst 时间响应式

代码里真正使用的累计序列预测式为

$$ \hat x^{(1)}(k)=\frac{a\,x^{(1)}(1)}{b\,x^{(1)}(1)+\big(a-bx^{(1)}(1)\big)e^{ak}} \tag{6} $$

随后通过逆 AGO 得到原序列拟合与预测:

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

这就是当前项目中 Verhulst 预测的直接计算口径。

4. 误差诊断

4.1 残差与相对误差

代码输出

$$ e(k)=x^{(0)}(k)-\hat x^{(0)}(k) \tag{8} $$

$$ \delta(k)=\frac{e(k)}{x^{(0)}(k)} \tag{9} $$

4.2 级比检验

项目会检查

$$ \lambda(k)=\frac{x^{(0)}(k-1)}{x^{(0)}(k)} \tag{10} $$

并与理论区间

$$ \left[e^{-2/(n+1)},\ e^{2/(n+1)}\right] \tag{11} $$

比较,输出是否通过级比检验。

4.3 后验差比与小误差概率

同时计算

$$ C=\frac{S_e}{S_x} \tag{12} $$

$$ P=\frac{1}{n}\sum_{k=1}^{n}\mathbf{1}\Big(|e(k)-\bar e|<0.6745\,S_x\Big) \tag{13} $$

5. 输出结果与论文应用

5.1 Excel 工作表

当前代码导出:

  • Parameters
  • RawData
  • Fitted
  • Residuals
  • Forecast
  • Diagnostics
  • Charts

5.2 论文写作表述建议

可以写成:

  • 采用灰色 Verhulst 模型描述受饱和约束的非线性增长过程;
  • 首先对原序列进行 AGO 处理,再通过背景值构造 Verhulst 参数估计方程;
  • 利用时间响应式求得拟合值与预测值,并通过 \(C\)、\(P\) 及级比检验评价模型精度。

6. 实现说明与注意事项

6.1 这是典型的饱和增长模型

Verhulst 更适合描述前期增长、后期趋稳或受资源约束的序列,若序列是近似线性或纯指数型,GM(1,1) 或 NDGM 往往更直接。

6.2 gm_alpha 会影响背景值

当前实现允许用户调节背景值权重,因此不同 \(\alpha\) 可能改变参数估计与预测结果。论文里若做了参数调整,建议把该值写清楚。

6.3 代码在分母接近 0 时做了数值保护

因此项目实现比纯手工公式更稳,但论文中仍应按式(6)–式(7) 说明其理论主结构。

7. 论文写作建议

论文中建议把该模型用于“具有饱和约束的增长过程”或“存在上限的演化序列”分析。结果部分最好给出参数 \(a,b\)、级比检验、后验差比 \(C\)、小误差概率 \(P\) 以及拟合/预测图。若要证明 Verhulst 比 GM(1,1) 更适合当前数据,可以把两者误差指标做并列表比较。

8. 单篇终审补充

8.1 图题与表题对齐建议

当前 Verhulst 模块的结果工作簿命名比较统一,论文终稿可以直接按实际输出写表题。真实导出包含:

  • Parameters
  • RawData
  • Fitted
  • Residuals
  • Forecast
  • Diagnostics
  • Charts

其中主结果页通常应以 ForecastDiagnostics 为核心,前者对应拟合后外推结果,后者对应级比检验、后验差比、小误差概率等诊断信息。Parameters 页记录的是运行参数与口径参数,不建议在论文中把它误写成“仅含 \(a,b\) 的参数估计表”,因为其内容会比纯理论参数更宽。

真实图文件位于结果目录 charts/ 子目录下,名称固定为:

  • forecast_curve.png
  • residuals.png

因此图题建议写成“Verhulst 模型拟合与预测曲线图”“Verhulst 模型残差图”。不要写成 series.png 或“增长率变化图”,因为程序当前并未生成这些图。

8.2 终审说明

这篇文档在论文里最需要避免的误写,是把当前实现说成“只做 Verhulst 解析解计算”。实际上它还同步做了级比检验、后验差比与小误差概率诊断,并把这些指标落到 Diagnostics 页里。因此若正文要说明模型可用性,应该引用 Diagnostics 页而不是只看拟合曲线。

另外,当前 repro 脚本是随结果目录自动生成的,输入文件会被复制进 repro_inputs/,脚本再以相对路径重建新的输出工作簿。也就是说,软件的真实复现链路是“输入副本 + 参数副本 + repro 脚本”,而不是只保存一份参数文本。这一点在论文附录或软件说明里最好写清楚。

8.3 全量强化补充

本篇终审补充绑定的真实算法目录为 具体的算法3/灰色系统与模糊理论/Verhulst-灰色 Verhulst,本次采用的代表性结果目录为 具体的算法3/灰色系统与模糊理论/Verhulst-灰色 Verhulst/results/Verhulst-灰色 Verhulst分析结果_20260329_123451

该目录里同时存在一份主结果工作簿和一份 repro 再生产物工作簿:

  • Verhulst结果_20260329_123451.xlsx
  • Verhulst_repro_output_20260329_123451.xlsx

两者实测工作表一致,均包含:

  • Parameters
  • RawData
  • Fitted
  • Residuals
  • Forecast
  • Diagnostics
  • Charts

因此这一篇必须把主结果与 repro 结果拆开写。Verhulst结果_20260329_123451.xlsx 是主运行结果,Verhulst_repro_output_20260329_123451.xlsx 是同目录复现脚本再产出的工作簿。虽然页名相同,但它们不是同一份文件。

当前目录中的真实图文件位于 charts/ 子目录:

  • 具体的算法3/灰色系统与模糊理论/Verhulst-灰色 Verhulst/results/Verhulst-灰色 Verhulst分析结果_20260329_123451/charts/forecast_curve.png
  • 具体的算法3/灰色系统与模糊理论/Verhulst-灰色 Verhulst/results/Verhulst-灰色 Verhulst分析结果_20260329_123451/charts/residuals.png

复现实物方面,该目录实际包含:

  • 具体的算法3/灰色系统与模糊理论/Verhulst-灰色 Verhulst/results/Verhulst-灰色 Verhulst分析结果_20260329_123451/repro_20260329_123451.py
  • 具体的算法3/灰色系统与模糊理论/Verhulst-灰色 Verhulst/results/Verhulst-灰色 Verhulst分析结果_20260329_123451/repro_inputs/verhulst_sample.xlsx
  • 具体的算法3/灰色系统与模糊理论/Verhulst-灰色 Verhulst/results/Verhulst-灰色 Verhulst分析结果_20260329_123451/repro_inputs/verhulst_sample_20260329_123451.xlsx

脚本中同时写了 INPUT_FILE = 'repro_inputs/verhulst_sample_20260329_123451.xlsx'PARAMS['file_path'] = 'repro_inputs/verhulst_sample.xlsx'。这说明当前 repro 逻辑既保留了专门用于脚本读入的副本文件,也保留了参数口径里的样本副本。文档里应如实写出这是“输入副本双保留”结构,而不是随意指认只有一个输入文件。

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

  • 当前主结果目录应写作 具体的算法3/灰色系统与模糊理论/Verhulst-灰色 Verhulst/results/Verhulst-灰色 Verhulst分析结果_20260329_123451
  • 正文应围绕 RawDataProcessedFittedForecastDiagnosticsParamsCharts 来写。
  • 图证应对应 forecast_curve.pngresiduals.png,并把诊断指标与曲线图成组解释。
  • 复现脚本应按 repro_20260329_123451.py + repro_inputs/verhulst_sample*.xlsx 的口径说明,且要如实保留“输入副本双保留”结构。