Algorithm 随机迷宫循环中概率的计算

Algorithm 随机迷宫循环中概率的计算,algorithm,computer-science,graph-theory,markov-chains,Algorithm,Computer Science,Graph Theory,Markov Chains,我正在研究一只青蛙在迷宫中随机行走,在通往潜在出口的路上有各种障碍物和炸弹 挑战在于计算青蛙到达出口的概率 我的问题是我不知道如何处理循环——青蛙可以在两个或多个空间之间来回行走的情况 想象一下你有: BOMB BOMB EXIT SPACE 1 SPACE 2 BOMB BOMB BOMB 对于空间1,到达出口的概率是直接走到出口的概率(1/4),或者来回走直到最终到达出口的概率(1/4^3+1/4^6+1/4^9…)。对于空间2 its(1/4^2+1/4^

我正在研究一只青蛙在迷宫中随机行走,在通往潜在出口的路上有各种障碍物和炸弹

挑战在于计算青蛙到达出口的概率

我的问题是我不知道如何处理循环——青蛙可以在两个或多个空间之间来回行走的情况

想象一下你有:

     BOMB    BOMB
EXIT SPACE 1 SPACE 2 BOMB
     BOMB    BOMB
对于空间1,到达出口的概率是直接走到出口的概率(1/4),或者来回走直到最终到达出口的概率(1/4^3+1/4^6+1/4^9…)。对于空间2 its(1/4^2+1/4^5…)

如果您有多个可用空间可供使用,这会变得更加混乱,例如

     BOMB    BOMB    BOMB
EXIT SPACE 1 SPACE 2 SPACE 3 BOMB
     BOMB    BOMB    BOMB

处理这些循环带来的复杂性的可靠算法方法是什么?

我将分两个阶段解决这个问题

第一个阶段是确定可以以任何方式退出的方块。这将让你发现并识别为“你被卡住了”任何没有可能出口的闭环

分析完成后,您可以将0分配给所有死角和炸弹,将1分配给所有出口。所有其他方块的退出概率将是一组线性方程组的唯一解,其中
p(i,j)=平均值(p(i',j')
在一个回合内可以移动的所有位置。这将是
nxm
变量中的一组
nxm
方程组。用你最喜欢的线性代数技术解决这个问题(我建议减少行数)

现在,对于每一个方块,你知道能够退出的确切概率。现在你的答案很简单


请注意,如果您只是尝试第二种方法中的线性代数部分,线性方程组的解将不会是唯一的。第一阶段将解决该问题,以确保您得到正确的解。

我将分两个阶段解决此问题

第一个阶段是确定你可以从哪些方块中以任何方式退出。这将让你发现并确定没有可能退出的任何闭合回路是“你被卡住了”

分析完成后,您可以将0分配给所有死角和炸弹,将1分配给所有出口。所有其他正方形的出口概率将是一组线性方程组的唯一解,其中
p(i,j)=平均值(p(i',j')
你可以在一个回合内移动所有位置。这将是
nxm
变量中的一组
nxm
方程。用你最喜欢的线性代数技术解决这个问题(我建议行缩减)

现在,对于每一个方块,你知道能够退出的确切概率。现在你的答案很简单


请注意,如果您只是尝试第二种方法中的线性代数部分,线性方程组的解将不会是唯一的。第一阶段会解决这个问题,以确保您得到正确的解。

建议解决一组线性方程的答案是正确的,但这里有另一种方法

想象一下,大量的青蛙都被放在起始广场上,开始在迷宫中随机移动。青蛙都在同一时间迈步。在每个时间步中,我们可以使用0.0到1.0之间的数字来表示每个广场上青蛙的比例。因此:

  • 在时间0时,所有的青蛙都在起点,因此正方形的重量为1.0,其余的重量为0.0
  • 在每个时间步:
    • 炸弹上的任何青蛙都会被摧毁(将重量设置为0.0)
    • 任何到达出口的青蛙都呆在那里
    • 任何其他广场上的青蛙都均匀地分布在它的邻居之间
    • 所有青蛙同时移动,因此需要同时执行这些更新
运行多个步骤后,几乎所有青蛙都将处于以下三种状态之一:

  • 被炸弹炸毁
  • 在出口处等候
  • 在一个无限循环中被困在迷宫中

  • 棘手的部分是根据循环的可能性决定何时停止模拟。人们很容易认为,当重量变化都不超过某个小值时,我们可以停止模拟。然而,如果存在重复循环,这将永远不会发生,例如,在没有出口的2x1迷宫中,青蛙将无休止地来回跳跃权重永远不会收敛。对于这个特定任务,考虑到迷宫的大小是有限的,您可以将步数固定到某个“足够大”的值。或者,您可以首先找到所有无法退出的方块,并将其从收敛测试中排除(如另一个答案所示).

    建议解一组线性方程组的答案是正确的,但这里有另一种方法

    想象一下,大量的青蛙都被放在起始广场上,开始在迷宫中随机移动。青蛙都在同一时间迈步。在每个时间步中,我们可以使用0.0到1.0之间的数字来表示每个广场上青蛙的比例。因此:

    • 在时间0时,所有的青蛙都在起点,因此正方形的重量为1.0,其余的重量为0.0
    • 在每个时间步:
      • 炸弹上的任何青蛙都会被摧毁(将重量设置为0.0)
      • 任何到达出口的青蛙都呆在那里
      • 任何其他广场上的青蛙都均匀地分布在它的邻居之间
      • 所有青蛙同时移动,因此需要同时执行这些更新
    运行多个步骤后,几乎所有青蛙都将处于以下三种状态之一:

  • 被炸弹炸毁
  • 在出口处等候
  • 在一个无限循环中被困在迷宫中
  • 棘手的部分是根据循环的可能性决定何时停止模拟。当权重变化都不超过某个小值时,我们很容易认为可以停止模拟。但是,如果存在一些重复
    +----+----+----+----+----+
    |    |BOMB|BOMB|BOMB|    |
    +----+----+----+----+----+
    |EXIT| S1 | S2 | S3 |BOMB|
    +----+----+----+----+----+
    |    |BOMB|BOMB|BOMB|    |
    +----+----+----+----+----+
    
    //    DEAD, ESC,  S1,   S2,   S3
    p = [
        [ 1.00, 0.00, 0.00, 0.00, 0.00 ], // DEAD 
        [ 0.00, 1.00, 0.00, 0.00, 0.00 ], // ESCAPED
        [ 0.50, 0.25, 0.00, 0.25, 0.00 ], // S1 
        [ 0.50, 0.00, 0.25, 0.00, 0.25 ], // S2 
        [ 0.75, 0.00, 0.00, 0.25, 0.00 ]  // S3
    ];