测试模拟动力系统的稳定性

计算科学 算法 统计数据 机器学习
2021-11-28 16:20:53

背景和问题

我经常使用动态系统的模拟,我通常跟踪单个参数,例如代理的数量(对于基于代理的模型)或错误率(对于神经网络)。这个参数通常有一些有趣的瞬态行为。这种行为的类型和长度取决于随机种子和模拟参数。然而,在初始瞬态之后,系统稳定并且在某个平均值附近具有小的(与瞬态变化的大小相比)热波动这个平均值和热波动的大小取决于模拟参数,而不是随机种子,并且无法提前知道。xσx

目标是在模拟从初始瞬态过渡到长期行为后,有一种自动停止模拟的好方法。我们知道这种转变只会发生一次,并且瞬态期间将比稳定状态具有更多的易变行为。


天真的方法

首先出现在我脑海中的天真的方法(例如,我已经看到它被用作某些神经网络的获胜条件)是选择参数,那么如果在最后的时间步中没有两个点这样然后我们得出结论我们已经稳定了。这种方法很简单,但不是很严格。应该是什么好的值。TETxxxx>ETE

或者,我们可以在这个答案中使用时间和置信度参数 ,并假设误差呈正态分布。这将节省我们了解热波动大小的工作。Tα

之间时间序列的变化当系列在附近稳定时,将在零附近波动,并带有一些标准误差。取最后一个并使用 Matlab 的normfit之类的函数以置信度拟合高斯。该拟合将为我们提供一个均值上具有置信度误差,并为我们提供一个具有相应误差的标准差 sigma 。如果yt=xt+1xttt+1xyTytαμαEμσEσ0(μEμ,μ+Eμ),那么你可以接受。如果你想更加确定,那么你也可以 s (这样你现在有标准偏差)并置信水平下使用Kolmogorov-Smirnov测试进行测试,或者其中之一这个问题的其他策略ytσ1α

笔记

这个问题最初以更以时间序列为中心的语言发布到Cross Validated它引发了一些很好的讨论,但不是我满意的答案。我尝试了 MetaOptimize,但这个问题在那里产生的兴趣为零。我不熟悉计算科学上的标签,所以请随意编辑标签。

4个回答

在我看来,您的问题只是您没有对“瞬态”和“稳定”行为的精确定义。如果你这样做了,你可以检查何时满足定义。在您使用精确定义之前,您甚至无法确定区分这两种行为的一种方法是否比另一种更好。

更好定义的一个可能来源:在连续动力系统的理论中,有一个中心流形的概念;所有解都向中心流形呈指数衰减,但沿中心流形缓慢传播。可以使用它来对您所谓的瞬态行为进行定量定义。

通过您使用“热波动”,我假设您有一些统计力学框架。在这种情况下,您可能会使用已知单调收敛的量,例如,玻尔兹曼加权概率分布的熵。

如果你有一个定义明确的状态空间,你可以寻找一个等价的分离线来确定你是否已经进入了一个有吸引力的区域,例如,计算从一个状态空间区域到另一个(50:50 区域)的净通量可能是分界线,这将是“瞬态的”)。有时采用这种方法来识别化学反应的过渡态。

正如@aeismail 评论的那样,似乎没有通用的方法。

我经常做的是取自相关并在它不再变化时结束模拟。好处:

  • 通常是库的一部分(R、Fortran、Python 等)
  • 高效的
  • 需要最少的参数调整

我喜欢自相关的想法,但是您还需要一个参数来决定自相关变化何时“足够小”。

想法:运行平均值:

计算几个运行平均值:

m5=ii5xim20=ii20xim100=ii100xi...

如果您的系统处于完全平衡状态,那么所有这些都应该是相同的,如果您只有“热”波动,那么变化将出现在较短的运行平均值中,而不是较长的运行平均值中。根据您的模拟的实际差异程度,您可能能够根据这些运行平均值来确定您的系统状态。实际上,您需要在数值成本和您的标准的稳健程度之间进行权衡。

这是自相关方法的原始版本,但可能只是解决问题。

无论如何,您都需要一个参数。