Python MDP策略

我正在尝试使用Python的一个著名MDP库来实现一个4维赛车问题。

我们有一个赛车在二维赛道上行驶。

当我说4维问题时,我指的是每个状态是(x,y,vx,vy),意思是:位置(x,y)和速度(vx,vy)。速度在每个轴上要么是0,要么是1,因此状态的数量是有限且较小的。

有一个起始状态,以及一个或多个目标状态。当你撞到“墙壁”时,你会返回到初始状态。

因为我想鼓励尽可能少步骤的解决方案,每个可通过的块有“-1”的奖励,墙壁有“无”(类似于GridMDP示例),目标有“0”。

一个动作是二维的(a,b),表示x轴和y轴的加速度。动作是有限的。动作列表是有限且较小的,具体如下:

[(0, 1), (-1, 0), (-1, 1), (0, -1), (0, 0), (1, -1), (1, 0), (1, 1), (-1, -1)]

我构建了一个类,四维MDP类(FourDimMDPClass),它继承自MDP类,并进行了适当的更改(类似于上述链接中的GridMDP类所做的)。

为了现在简化问题,状态转换是确定性的。也就是说,T函数以概率1返回所需的状态(或者如果你撞到墙壁,则返回起始状态)。

我使用提供的value_iteration方法解决了MDP,然后尝试使用best_policy方法获取正确的策略。

我的问题是这样的:不知何故,返回的策略完全是胡说八道。对于所有状态,返回的是一个恒定的动作。这个动作只是动作列表中的第一个动作。当我改变动作列表的顺序时,新的第一个动作总是被返回。

这是在一个非常简单且小的赛道上发生的。

我已经尝试调试了很多很多小时,现在没有任何进展。我尝试查看传递给MDP机制的所有值,它们看起来没问题。

非常感谢您的帮助。

@[隐藏人名]

附注:原始数据:

当前赛道:######   ##&#*# #####& 是起点* 是目标# 表示墙壁(或障碍)& 在 (1,1)* 在 (3,1)状态集合 set( [(1, 1, 0, 1), (3, 2, 1, 0), (3, 1, 0, 1), (2, 2, 1, 1), (1, 1, 1, 0), (3, 2, 0, 1), (3, 1, 1, 0), (1, 1, 0, 0), (1, 2, 1, 1), (3, 1, 0, 0), (1, 1, 1, 1), (1, 2, 0, 0), (3, 1, 1, 1), (1, 2, 1, 0), (2, 2, 0, 1), (1, 2, 0, 1), (3, 2, 1, 1), (2, 2, 1, 0), (3, 2, 0, 0), (2, 2, 0, 0)])    奖励设置 {(0, 2, 0, 1): None, (2, 2, 1, 1): -1,   (0, 3, 0, 0): None, (3, 1, 1, 0): 0, (4, 1, 1, 1): None, (0, 3, 1, 0): None, (1, 3, 0, 1): None, (3, 1, 0, 0): 0, (1, 1, 1, 1): -1,   (1, 2, 0, 0): -1,   (3, 0, 0, 1): None, (2, 0, 1, 0): None, (4, 2, 1, 1): None, (4, 1, 0, 0): None, (1, 2, 1, 0): -1,   (2, 0, 0, 0): None, (2, 3, 1, 1): None, (0, 0, 1, 1): None, (3, 3, 0, 1): None, (2, 1, 0, 1): None, (4, 1, 1, 0): None, (3, 2, 0, 0): -1,   (1, 0, 1, 1): None, (3, 2, 1, 0): -1, (0, 2, 1, 0): None, (0, 2, 0, 0): None, (0, 1, 1, 1): None, (0, 3, 0, 1): None, (1, 3, 1, 0): None, (3, 1, 1, 1): 0,    (4, 0, 1, 0): None, (1, 3, 0, 0): None, (2, 2, 0, 1): -1,   (1, 2, 0, 1): -1,   (4, 2, 0, 1): None, (2, 0, 1, 1): None, (2, 3, 0, 0): None, (4, 1, 0, 1): None, (3, 3, 1, 0): None, (2, 3, 1, 0): None, (1, 1, 0, 1): -1,   (3, 3, 0, 0): None, (3, 0, 1, 1): None, (1, 0, 0, 0): None, (3, 2, 0, 1): -1,   (4, 3, 0, 0): None, (1, 0, 1, 0): None, (0, 0, 0, 1): None, (4, 0, 0, 0): None, (2, 1, 1, 1): None, (0, 2, 1, 1): None, (0, 1, 0, 0): None, (4, 3, 1, 0): None, (4, 2, 0, 0): None, (0, 1, 1, 0): None, (4, 0, 0, 1): None, (1, 3, 1, 1): None, (4, 3, 1, 1): None, (2, 2, 1, 0): -1,   (4, 0, 1, 1): None, (2, 2, 0, 0): -1,   (0, 3, 1, 1): None, (3, 1, 0, 1): 0,    (2, 3, 0, 1): None, (1, 1, 1, 0): -1,   (3, 3, 1, 1): None, (3, 0, 0, 0): None, (4, 2, 1, 0): None, (1, 1, 0, 0): -1,   (1, 2, 1, 1): -1,   (3, 0, 1, 0): None, (2, 0, 0, 1): None, (1, 0, 0, 1): None, (0, 0, 1, 0): None, (2, 1, 0, 0): None, (4, 3, 0, 1): None, (0, 0, 0, 0): None, (2, 1, 1, 0): None, (0, 1, 0, 1): None, (3, 2, 1, 1): -1}   字典MDP解决方案 {(1, 1, 0, 1): -4.68559, (2, 2, 1, 1): -4.68559, (3, 2, 0, 1): -4.68559, (3, 1, 1, 0): -3.6855900000000004, (3, 1, 0, 0): 0.0, (1, 1, 1, 1): -4.68559, 1, 2, 0, 0): -4.68559, (1, 2, 1, 0): -4.68559, (2, 2, 1, 0): -4.68559, (3, 2, 0, 0): -4.68559, (2, 2, 0, 0): -4.68559, (3, 2, 1, 0): -4.68559, (3, 1, 0, 1): -3.6855900000000004, (1, 1, 1, 0): -4.68559, (1, 1, 0, 0): -4.68559, (1, 2, 1, 1): -4.68559, (3, 1, 1, 1): -3.6855900000000004, (2, 2, 0, 1): -4.68559, (1, 2, 0, 1): -4.68559, (3, 2, 1, 1): -4.68559}   字典MDP策略   {(1, 1, 0, 1): (0, 1), (3, 2, 1, 0): (0, 1), (3, 1, 0, 1): None, (2, 2, 1, 1): (0, 1), (1, 1, 1, 0): (0, 1), (3, 2, 0, 1): (0, 1), (3, 1, 1, 0): None, (1, 1, 0, 0): (0, 1), (1, 2, 1, 1): (0, 1), (3, 1, 0, 0): None, (1, 1, 1, 1): (0, 1), (1, 2, 0, 0): (0, 1), (3, 1, 1, 1): None, (1, 2, 1, 0): (0, 1), (2, 2, 0, 1): (0, 1), (1, 2, 0, 1): (0, 1), (3, 2, 1, 1): (0, 1), (2, 2, 1, 0): (0, 1), (3, 2, 0, 0): (0, 1), (2, 2, 0, 0): (0, 1)}   字典

回答:

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注