2D网格中随机漫步所涵盖的区域是什么?

时间:2015-08-02 08:36:21

标签: algorithm random-walk

我是一名生物学家,申请工作,我需要解决这个问题。这是一个开放的书籍测试,互联网和任何其他资源是公平的游戏。这就是问题 - 我一直坚持如何接近它,并希望指点。我的直觉被张贴在下面。

背景

你的邻居是一头有两头母牛的农夫,Clarabelle和Bernadette。每头奶牛都有自己的方形笔,一边是11米(见第一张图)。这位农民正前往城外旅游,并计划将奶牛放在各自的围栏中,这些围栏完全被草丛填满。奶牛开始在笔的中心,并将慢慢地围着笔吃草。它们非常缓慢地在笔周围移动,在每一步之后总是停下来吃饭或休息。如果你将笔分成1米的正方形,奶牛可以在每一步向任何方向移动一个方格(如棋盘上的国王),如第二张图所示。

Fig 1/2

每次移动后,如果可以的话,奶牛将在新广场吃草20分钟。一旦广场上的草被吃掉,它就永远消失了。如果母牛移动到已经吃过草的广场上,那么母牛将在那个广场上休息20分钟。 20分钟后,无论是休息还是进食,奶牛都会移动到另一个广场。如果母牛在栅栏附近的广场上,她将永远不会试图向栅栏方向移动。奶牛不会连续两次停留在同一个广场上 - 它们在休息或进食后总是会移动到另一个广场。第一张图显示了一些笔在几个小时后可能会显示的样子,棕色斑点表示已经放牧的方格。

第一头牛Clarabelle在移动时没有偏向于方向。她同样有可能随时向任何方向移动。设p是她向一个方向移动的概率,如下图所示。

第二头牛Bernadette喜欢用草地走向广场。当她走向一个已经吃过的空间时,她走向有草的空间的可能性是她的两倍,如下图所示。

Fig 3/4

问题

  • 如果农民在48小时后回来,你期望Clarabelle吃掉她的笔中有多少百分比的草?
  • 你认为伯纳黛特需要多长时间才能吃掉50%的草笔?
  • 假设如果任何一头奶牛24小时不吃草,她就会死。预计哪头牛会存活更久?

我的直觉

这似乎是对通过二维网格的随机游走建模。例如,我可以计算出在给定时间之后在网格中的特定节点处的概率。但我不确定如何考虑牛在它走过时所覆盖的区域。非常感谢任何见解。

编辑:这里的最终目标是让我为此编写某种程序。这不是一个纯粹的数学问题,因而是这里的帖子。

2 个答案:

答案 0 :(得分:3)

这是一种计算概率的方法(对于Clarabelle):

  1. 0的网格开始,除了(6, 6)单元格上的1之外,这是时间t = 0的概率网格。

  2. t + 1时间,单元格p(x, y, t + 1)的概率(x, y)由:p(x, y, t + 1) = p1 * p(x + 1, y, t) + p2 * p(x + 1, y - 1, t) + ...给出(您在总和中有八个字词)。< / p>

  3. 请注意,所有pi都不等于:概率可以是1/3(角落),1/5(边缘)或1/8(任何其他单元格)。

    您可以通过为t = 0t = 144(48h)的每个步骤运行此网格来动态更新网格。

    如果你想知道一个单元格已被吃掉的可能性,那么1 - Pn就是Pn,如果从未访问过单元格的概率,那就是(1 - p(x, y, 0)) * (1 - p(x, y, 1)) * (1 - p(x, y, 2)) * ... ,这是:

    numpy

    这是一个使用Python中的X计算这些概率的代码(基本上,这是考虑Markov Chain,其中状态GridSize = 11 TranSize = GridSize * GridSize T_Matrix = np.zeros((TranSize, TranSize), dtype = float) for u in range(T_Matrix.shape[0]): for v in range(T_Matrix.shape[1]): ux, uy = u % GridSize, u // GridSize vx, vy = v % GridSize, v // GridSize if u == v or abs(ux - vx) > 1 or abs(uy - vy) > 1: p = 0 elif (ux == 0 or ux == 10) and (uy == 0 or uy == 10): p = 1/3 elif ux == 0 or ux == 10 or uy == 10 or uy == 0: p = 0.2 else: p = 0.125 T_Matrix[u, v] = p pxy = np.zeros((TranSize, ), dtype = float) pxy[11 * 5 + 5] = 1 eat = 1 - pxy for _ in range(144): pxy = pxy.dot(T_Matrix) eat *= (1 - pxy) print((1 - eat).reshape((GridSize, GridSize))) 是所有单元格的集合| X | = 121 ,转移矩阵T = {T ij }其中T ij 是从i移动到j的概率:

    p1, p2, ...

    Bernadette的算法有点复杂,因为你的$('#tt').tabs('add',{ options: { title: 'New Title', href: '/vieworPartialViewUrl' } }); 是概率性的,所以每个相邻的单元格都有两个术语。

    一旦掌握了所有这些概率,您就可以轻松找到所需内容。

答案 1 :(得分:3)

有两种方法可以解决这些问题:分析或通过模拟。

如果您使用Monte-Carlo based method模拟流程,则可以通过平均多条路径的结果轻松找到答案。

我认为这是你应该做的,除非你被指导。