在2D迷宫中进行HMM本地化,无法平滑应用向后算法

问题描述

我们使用HMM(隐马尔可夫模型)将机器人定位在传感器损坏的大风迷宫中。如果他尝试朝某个方向移动,他将很有可能这样做,而偶然地走到任一侧的机会很小。如果他的动作使他越过障碍,他将弹回原来的瓷砖。

从任何给定位置,他都可以在所有四个方向上感知。如果确定性很高,他会注意到一个障碍,而当确定性很小时,他会看到一个障碍。

我们有一个机器人可能在迷宫中所有可能位置的概率图,因为他知道迷宫的样子。最初,它们开始均匀分布。

我已经完成了运动和感测方面的工作,并获得了正确的答案,但是我坚持使用平滑(向后算法)。

假定机器人执行以下一系列动作:感官,移动,感官,移动,感官。这为我们的HMM模型提供了3个状态。假设到目前为止,我在每个步骤中得到的结果都是正确的。

鉴于存在四个条件概率(每个方向一个),我在执行平滑(向后算法)时遇到很多麻烦。

假设SP用于平滑概率,BP用于向后概率

假设Sk用于某个状态,而Zk用于该状态下的观察。对我来说,问题是要考虑到每个Zk仅用于单个方向,如何构造我的向后方程。

我知道平滑算法是:SP(k)与BP(k + 1)* P(Sk | Z1:k)成正比

其中BP(k + 1)定义为:

如果(k == n)返回1,否则返回BP(k + 1)* P(Zk + 1 | Sk + 1)* P(Sk + 1 = s | Sk)的总和

这是我遇到麻烦的地方。主要在此等式的“条件概率”部分中。因为每个斑点都有观察到的四个不同方向!换句话说,每个州有四个不同的证据变量,而不是一个!我要对这些值取平均值吗?我要为他们做一个单独的总结吗?如何计算给定状态下的多个观测值,并将其适当地浓缩为仅具有一个条件概率的等式?

这是我执行平滑处理的代码

to_date

TL; DR:当每个状态有4个证据而不是1个时,如何在隐马尔可夫模型中执行平滑(向后算法)?

解决方法

已解决!

它实际上比我想象的简单得多。

实际上,我不需要在每个方向上分别进行每次迭代。

我只需要用Joint_Cond_Prob()替换Cond_Prob()函数即可找到给定状态下所有定向观测的联合概率。

因此,P(Zk | Sk)实际上是P(Zk1:Zk4 | Sk),而P(Zk1 | Sk)P(Zk2 | Sk)P(Zk3 | Sk)P(Zk4 | Sk)