使用 Metropolis-Hasting 算法收集统计数据

计算科学 蒙特卡洛
2021-12-01 04:15:45

我了解 MH 是如何工作的,我可以用它来模拟例如 2D Ising 模型。我不明白的是你实际上取平均值。

当我运行模拟时,它会在一段时间后达到平衡: 在此处输入图像描述 现在每个新状态都将是相同的,所以我认为取后续序列的平均值或方差没有意义。

我是否必须从一开始就一遍又一遍地运行模拟并取达到平衡状态的平均值?这对我来说似乎非常低效。

1个回答

您的帖子实际上包含两个问题:

1)你应该计算什么

第一个问题将通过定义您正在学习的内容来回答。如果它是您系统的磁性(伊辛模型通常感兴趣),您可以通过计算每个组件的能量总和来计算您的状态能量:

Ui=imiE

其中的磁矩是电场。然而,这仅代表整个系统的瞬时能量,由于他的自然波动,您无法在真实的物理系统中直接观察到。与您的说法相反,在微观水平上的平衡中,平衡时每种配置的能量并不总是相同的。该算法具有接受更高能量配置的非零概率,我建议您测试更高温度的系统因此我们观察一系列记录的平均值(形成您的数据): 其中miiE

U=1ninUi
n是您将保留的记录数。此外,您可以计算对任何物理计算有用的标准偏差和其他统计属性(查看任何好的统计和计算物理教科书,如马尚肯或 Werner Krauth 的教科书)。

2)我必须使用什么数据来计算它?

第二个问题更具挑战性,因为您必须定义您的系统是否已达到平衡。对于简单的 Ising 模型,这并不是真正的问题,因为您只需观察最后记录中的能量波动。如果它们足够小,这是一个胜利,但如果您正在为具有更高自由度的系统使用非微规范或非规范集成,那么定义您的模型是否最终收敛可能会变得非常乏味。通常,如果您的数据没有收敛到可接受的平均结果,您应该从最终得到的配置开始继续您的模拟。否则,您可以(或多或少)任意定义统计分析的起点,具体取决于数据的收敛性。您还必须在值的不同记录之间花费一些时间,以使它们在统计上独立。例如,只记录千分之一的配置。