一个老鼠走迷宫问题的python解法

今天在查找马尔科夫链的过程中,在网上看到一个有意思的问题,于是用python将其做了实现和改进,题目如下:

如下图所示的迷宫共有9个格子,相邻格子有门相通,9号格子就是迷宫出口. 整个迷宫将会在5分钟后坍塌.
1号格子有一只老鼠,这只老鼠以每分钟一格的速度在迷宫里乱窜(它通过各扇门的机会均等)。求此老鼠在迷宫坍塌之前逃生的概率。如果这只老鼠速度提高一倍,则老鼠在迷宫坍塌之前逃生的概率能增加多少?

在这里插入图片描述
题目中可以看空间1为入口,空间9为出口,思路上既可以用迭代的方法,也可以用矩阵形式来编写 。

先是基于马尔科夫链的矩阵形式。马尔科夫链的本质是一个时间、状态离散的马尔可夫过程,本质特征就是,模型当前的状态,依赖也仅依赖于前面的那一个状态。
设S为状态分布矩阵,P为状态转移矩阵,那么老鼠的每一次移动,这个过程即是乘上P的过程,当前的状态分布矩阵,即是P与S的矩阵乘积。(此处S需以列向量的形式呈现)具体不在赘述,如果编程采用矩阵运算的形式,那么对于题中这样一个长度为9的状态分布矩阵,就需要用到9*9的状态转移矩阵来计算,如果迷宫变大了,矩阵将会变得非常大。

那么从迭代的思路来看呢:
在初始状态的情况下,老鼠所在的位置,空间状态概率被记为1,其余位置的概率为零。
现在老鼠只有两个选择,要么去2,要么去4,在机会均等的情况下,那么下一个状态(也就是老鼠动一步的情况下),老鼠到达2和4的概率都是0.5,而老鼠留在1的概率为0,所以2、4的当前状态的概率都变成了0.5,而1的当前状态的概率,变成了0。
现在要进行下一次移动,又会面临新的选择,老鼠每一次的移动,就以此类推。

我们抛开确定的状态,从整体任选一个状态。如果老鼠的当前位置处于四个角上,即周围存在两个可以去的空间,那么移动机会均等的情况下,去往每一个空间的可能性为1/2。如果老鼠当前位于边上,周围就有三个可以去的空间,那么这个概率就变成了1/3,以此类推,内部的话就会有四个空间,概率是1/4。

然后我们再考虑,从上一个状态到达当前状态的概率是多少呢?那就要看,当前位置,老鼠可能是从哪里来的。如果老鼠来源的那个空间,周围有三个可以去的空间,那么现在空间的概率,就是老鼠来源空间概率的1/3,当然,当前空间不仅仅只会有这一个老鼠来源,会有很多个,那么当前空间的概率,就是这些来源的累积。

除此以外,要考虑几个点:老鼠走到出口后,是不会再动的,这就意味着,出口相邻的点,是不会接受来自出口的老鼠的,也就是从出口出来的老鼠,概率应当统统记为0。既然老鼠在出口去不了其他地方,是在出口是不会动的,那么老鼠在出口的概率,就每次更新状态时候应当保留。(出口,是一个只进不出的点)

此外,这个程序可以自行设定迷宫长与宽,设定老鼠当前位置和出口位置,设置步数。

可以的改进:可以扩展到三维或是多维;设定某个移动方向的倾向(也就是概率,目前是概率均等)

import numpy as np

def connect(point,size,rat_exit):
    flag = 0
    m,n = size
    x,y = point
    if [x,y] ==
  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
根据引用[1]和引用的描述,我们可以得出以下结论: 对于引用中的问题老鼠迷宫坍塌之前逃生的概率可以通过计算老鼠逃生路径的数量与总路径数量的比值来得到。假设迷宫中共有n个格子,则老鼠逃生路径的数量为n-1,总路径数量为4^(n-1)。因此,老鼠迷宫坍塌之前逃生的概率为(n-1)/(4^(n-1))。 如果老鼠的速度提高一倍,即每分钟两格,那么老鼠迷宫坍塌之前逃生的概率会增加多少呢?由于老鼠的速度提高一倍,它在同样的时间内可以的格子数也增加了一倍。因此,老鼠逃生路径的数量也会增加一倍,而总路径数量仍然为4^(n-1)。所以,老鼠迷宫坍塌之前逃生的概率会增加到2*(n-1)/(4^(n-1))。 对于引用中的问题,我们可以使用深度优先搜索(DFS)算法来解决老鼠迷宫问题。具体步骤如下: 1. 创建一个空的路径列表,用于存储老鼠过的路径。 2. 从迷宫的入口开始,将入口添加到路径列表中。 3. 对于当前位置,判断是否为迷宫的出口。如果是,则返回路径列表作为解决方案。 4. 如果当前位置不是出口,则按照顺时针的方向依次尝试向上、向右、向下、向左移动一格。 5. 对于每个移动后的位置,判断是否为合法位置(即不超出迷宫范围且没有墙)。如果是合法位置,则将该位置添加到路径列表中,并递归调用步骤4。 6. 如果所有移动后的位置都不是合法位置,则回溯到上一个位置,将该位置从路径列表中移除,并继续尝试下一个方向的移动。 7. 重复步骤4-6,直到找到解决方案或所有路径都被尝试过。 通过以上步骤,我们可以找到老鼠从入口到奶酪的路径。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值