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
];