一个如何应对欧拉计划213问题(“跳蚤马戏”)?


11

我想解决Euler 213项目,但不知道从哪里开始,因为我是统计学领域的外行,请注意,需要准确的答案才能使用蒙特卡洛方法。您能推荐一些统计主题供我阅读吗?请不要在此处发布解决方案。

马戏团

一个30×30的正方形网格包含900条跳蚤,最初是每平方跳蚤。敲响钟声时,每条跳蚤会随机跳至相邻的正方形(通常有4种可能性,但网格边缘或角落处的跳蚤除外)。

铃响50次后,预计空置正方形数是多少?将答案四舍五入到小数点后六位。


7
如果您进行了足够的模拟,则蒙特卡洛方法可以给出非常准确的答案。
罗伯·海恩德曼

3
如果您需要编程解决方案,那么蒙特卡洛是唯一的方法。我看不出使用蒙特卡洛无法获得准确答案的任何原因。数学/分析解决方案可能并不容易。

我见过有关蒙特卡洛的讨论,有人说如果要达到小数点后6位,这将花费太长时间,或者也许我对其他类似问题感到困惑。由于编写蒙特卡洛方法相当容易,所以我认为值得一试。
grokus 2010年

4
我没有对前面的三个答案中的任何一个提出异议,但是我提供的答案中的(简单)分析正确地说明了这些观点:如果您希望六位数的精度来估计数百个数字,在具有10,000个CPU并行运行的计算机上,Monte Carlo仿真将花费至少一年的时间。

是所有跳蚤都被困住了(即问题确实是与上面跳蚤不止的正方形有关)还是这是因为跳蚤的边缘跳出并消失了?
MissMonicaE '16

Answers:


10

你是对的; 蒙特卡罗是行不通的。(在幼稚的模拟中,即无需任何简化即可精确地再现问题情况的模拟,每次迭代将涉及900次跳蚤运动。空单元比例的粗略估计为,这意味着Monte的方差-经过这样的迭代后,Carlo估计约为要将答案固定到小数点后六位,您需要将其估计为5.E以内-7,并且要获得95 +%的置信度(例如),您必须将该精度近似减半至2.5E-7。求解得出Ñ 1 / Ñ 1 / ë 1 - 1 / ë = 0.2325 ... / Ñ 1/eN1/N1/e(11/e)=0.2325/NN>4E12(0.2325/N)<2.5E7N>4E12,大约。那将是大约3.6E15跳蚤动作,每个跳动作占用一个CPU的几个滴答声。有了一个可用的现代CPU,您将需要进行全年(高效)的计算。而且我在某种程度上不正确且过于乐观地假设答案是按比例给出而不是计数:作为一个计数,它将需要另外三个有效数字,导致计算增加一百万倍……您可以等待很长时间吗?)

就分析解决方案而言,可以进行一些简化。(这些也可用于缩短蒙特卡洛计算。)空单元格的预期数量是所有单元格上的空概率的总和。为此,您可以计算每个单元格的占用率概率分布。这些分布是通过汇总每个跳蚤的(独立!)贡献而获得的。这可以减少您的问题,只需找到沿该网格上任何给定单元格对的一对细胞之间沿着30 x 30网格的长度为50的路径数即可(一个是跳蚤的起源,另一个是您要为其计算跳蚤的入住)。


2
只是为了好玩,我在Mathematica中进行了蛮力计算。它的答案是21,574位整数与21,571位整数的比率;以十进制表示,它可以舒适地接近预期的900 / e(但是,由于要求我们不要发布解决方案,因此我将不提供更多详细信息)。
ub

6

您能否遍历每种跳蚤的细胞占领概率?也就是说,跳蚤k最初以概率1出现在像元(i(k),j(k))中。经过1次迭代,他在4个相邻像元中的每个像元中都有1/4的概率(假设他不在边上或不在一个角落)。然后,在下一次迭代中,每个季度依次被“涂抹”。经过50次迭代后,您有了跳蚤k的职业概率矩阵。重复所有900条跳蚤(如果利用对称性,这将减少近8倍)并添加概率(不需要一次存储所有跳蚤,只需存储当前跳蚤的矩阵(嗯,除非您是非常聪明,您可能需要一个额外的工作矩阵)和当前矩阵的和。在我看来,有很多方法可以在此加快速度。

这根本不涉及任何模拟。但是,它确实涉及大量的计算。算出要以较高的概率使答案略好于6 dp精度所需的仿真大小,并找出哪种方法会更快,应该不是很困难。我希望这种方法将在一定程度上击败仿真。


2
您回答的问题与提出的问题略有不同。问题是询问50次跳跃后将为空的单元格的预期数量。如果我错了,请纠正我,但是从跳蚤在跳到50跳到某个答案的概率到某个正方形之后的概率中,我看不出直接的路径。
安迪W

1
@Andy W-很棒的评论; 蒙特卡洛(Monte Carlo)可以用来做最后一步;-)

4
@Andy W:实际上,最困难的部分是获得所有这些概率。与其在每个单元格上添加它们,不如乘以它们的补数:这是该单元格为空的概率。所有单元格上这些值的总和给出了答案。Glen_b的方法比模拟击败了七个或八个数量级;-)。
ub

@whuber,感谢您的解释。确实,在一分钟之内获得这些概率将是具有挑战性的。这是一个有趣的难题,感谢您的投入。
安迪W

5

尽管我不反对使用whuber指出精度为小数点后6位的蒙特卡洛解决方案的实际不可能(或不切实际),但我认为可以实现精度为六位数的解决方案。

首先,跟随Glen_b,粒子可以在固定状态下进行交换,因此足以(如足够)监视不同细胞的占用,因为这也构成了马尔可夫过程。由当前时间的占用率确定的下一个时间步的占用率分布完成。编写过渡矩阵绝对是不切实际的,但是模拟过渡非常简单。ķt+1tK

其次,正如shabbychef所指出的,可以在450个奇数(或偶数)平方上遵循占用过程,当仅考虑偶数时间(即平方的马尔可夫矩阵)时,该过程仍保留在奇数平方上。K2

第三,最初的问题仅考虑了经过马尔可夫变换后的零占用率。假设起点对于马尔可夫链的平稳概率分布具有非常高的值,并且考虑到集中于所有单元格上的单个平均值,则我们可以考虑链在时间是根据平稳概率分布实现的。由于我们可以直接从此固定分布模拟,因此大大降低了计算成本50X p 0=1p^050(X(t))X=50π

p^0=1450i=1450I0(Xi(50))
(X(t))t=50π,这是一个多项式分布,概率分别与偶数角上的2、3和4,边缘上的其他像元和内部像元成比例。

显然,平稳分布直接提供了预期的空单元数,即 等于,166.1069

i=1450(1πi)450
166.1069
pot=rep(c(rep(c(0,1),15),rep(c(1,0),15)),15)*c(2,
    rep(3,28),2,rep(c(3,rep(4,28),3),28),2,rep(3,28),2)
pot=pot/sum(pot)
sum((1-pot)^450)-450
[1] 166.1069

这非常接近蒙特卡洛近似[基于10⁸模拟,在我的计算机上花费了14个小时]。但不够接近6位小数。166.11

正如whuber所说,估算值必须乘以2才能正确回答问题,因此最终值为332.2137,


1
+1非常有见地。我相信您需要将最终答案加倍,因为该问题询问了所有900个单元格。
豪伯

1
我相信您可能会从固定分布出发,超出您的想象。我最初做的蛮力计算是使用精确的(有理数)算法来计算过渡矩阵的50次幂。从中我得到了330.4725035083710 ...的值。也许我犯了一个错误。我确实有一个错误,现在获得330.7211540144080...。大量检查表明过渡矩阵正确。
ub

@whuber:谢谢,的确有可能。我试图找到一个耦合参数来确定平稳性的速度,但是没有。使用原始过程进行的蒙特卡洛模拟为我提供了333.96个10副本和57小时的计算量。对精度没有进一步的保证。
西安

1
这是我的理由。50个阶跃的转移矩阵是转移矩阵的50次幂,而其特征值则是特征值的50次幂。在第50步结束时,只有与50次幂具有任何可观大小的值相对应的特征向量才会显示为分量。而且,那些第50次幂会通知我们有关在第50步停止而不是真正达到稳定状态所产生的相对误差。
whuber

1
我实际上正在使用完整的过渡矩阵。900×900
ub

4

分析方法可能很乏味,我还没有考虑过复杂性,但这是您可能要考虑的一种方法。由于您对50个环后预期会空的单元格的数量感兴趣,因此需要在“单元格中的跳蚤数”上而不是跳蚤的位置上定义一个马尔可夫链(请参见Glen_b的答案,该模型模拟了跳蚤的位置)。正如安迪(Andy)在对该答案的评论中所指出的那样,这种方法可能无法获得您想要的东西。)

具体来说,让:

nij(t)ij

然后,markov链从以下状态开始:

nij(0)=1ij

由于跳蚤移动到四个相邻单元格之一,因此单元格的状态将根据目标单元格中​​有多少跳蚤,四个相邻单元格中有多少跳蚤以及它们将移动到该单元格的可能性而变化。使用此观察,您可以根据该单元的状态和相邻单元的状态来写每个单元的状态转移概率。

如果您愿意,我可以进一步扩大答案,但是这与马尔可夫链的基本介绍应该可以帮助您入门。


1
nij

@whuber不,您不需要维持跳蚤的马尔可夫链。想一想我提议的一个单元随机行走。单元最初位于位置“ 1”,从该位置可以到达0、1、2、3、4或5。状态转换的概率取决于相邻单元的状态。因此,建议的链位于重新定义的状态空间(每个单元的细胞计数的状态空间)上,而不是在跳蚤位置本身上。那有意义吗?

1
这是有道理的,但是似乎倒退了一步,因为现在的州数不是很多吗?在一个模型中,有900个状态(即单个跳蚤的位置),每个状态中只有不超过四个的转换。只需要对单个跳动进行计算,因为它们都独立移动。在您看来,状态是由一个单元的占用及其最多四个邻居的占用来描述的。那将是非常多的州,而且各州之间的过渡也将非常多。我一定会误解您的新状态空间是什么。
ub

{nij}

2

如果您要走数字路线,则有一个简单的观察结果:问题似乎是由红黑奇偶校验引起的(红场上的跳蚤总是移动到黑场上,反之亦然)。这可以帮助您将问题的大小减少一半(例如,一次考虑两个动作,只看红色方块上的跳蚤即可。)


1
这是一个很好的观察。但是,我发现它比显式利用它更值得的麻烦。大多数编程相当于建立转移矩阵。完成此操作后,只需将其平方并处理即可。通过使用稀疏矩阵,删除零的一半无论如何都不会节省任何时间。
ub

@whuber:我怀疑这些问题的重点是学习解决问题的技术,而不是消耗大量的计算周期。对称,奇偶校验等是Larson关于问题解决的书中的经典技术。
shabbychef

1
那是个很好的观点。最终需要做出一些判断。欧拉计划似乎强调了数学洞察力和计算效率之间的权衡。Glen_b提到首先要利用的对称性,因为从中可以获得更多的信息。此外,通过使用稀疏矩阵算法,您将自动实现两倍增益(无论您是否意识到奇偶校验!)。
ub

1

我怀疑离散马尔可夫链的一些知识可能会证明是有用的。


3
这本来应该是一条评论,但我认为我们可以在这一点上继续。
gung-恢复莫妮卡

这可能会因为它太短而被自动标记为低质量。你可以扩展吗?
gung-恢复莫妮卡

我不明白为什么:这个问题要求的主题可能有用,而我认为这是最相关的主题。
西蒙·伯恩

1
这被标记为低质量。我投票确定还可以。如果您查看此线程的其他答案,它们的长度都将大大增加。这些标准随着时间的推移而发展,但是今天,即使提到了“可能有用的主题”,也可以将其视为注释。正如我所说,我认为这可以照原样进行。是否尝试扩展它取决于您。我只是让你知道。
gung-恢复莫妮卡
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.