我正在尝试使用Keras在python中进行强化学习。可用的大多数教程都使用OpenAI Gym库来创建环境,状态和操作集。
在练习了很多别人写的好例子之后,我决定要创建自己的强化学习环境,状态和动作集。
这是我认为教机器做的事情会很有趣。
目标= [[1、2、3、4]]
项目符号= [1、2、3、4]
在这种情况下,它应该是索引3,因为4 +1 = 5
curr_state = [[1、2、3、4]]
项目符号= 1
action = 3(<-curr_state的索引)
next_state = [[1、2、3、5]]
我一直在绞尽脑汁思考将其构建为钢筋设计的最佳方法。我尝试了一些,但是模型结果不是很好(意味着,它很可能无法排第5位)。
主要是因为状态是2D:(1)目标; (2)当时的子弹。到目前为止,我采用的方法是将状态转换为以下形式:
状态= 5-目标-项目符号
我想知道是否有人可以想到一种更好的方法来设计此模型? 预先感谢!
答案 0 :(得分:1)
好的,看来没有人在帮助您,所以我只是按照您的描述为您编写了一个Python环境文件。我还为您制作了尽可能多的OpenAI样式,这是它的链接,它在我的GitHub存储库中。您可以复制代码或将其派生。我将在下面进行解释:
https://github.com/RuiNian7319/Miscellaneous/blob/master/ShootingRange.py
状态= [0、1、2,...,10]
动作= [-2,-1、0、1、2]
因此,游戏从0到10之间的随机数开始(您可以根据需要轻松更改此值),并且随机数就是您上述的“目标”。在达到此目标后,您的AI代理可以开火,并且会发射与上述数字相对应的子弹。目标是您的子弹和目标总计为5。如果您的AI代理超过5,或者目标是大于5的数字,则为负。
要获得肯定的奖励,座席必须获得5。因此,如果当前值为3,并且座席射击2,则座席将获得1的奖励,因为他的总价值为5,并且情节将结束。
游戏结束的方式有3种:
1)特工获得5
2)代理尝试15次失败5次
3)数字大于10。在这种情况下,我们说目标太远了
有时候,您需要多次射击才能获得5。因此,如果您的特工射击,它的当前项目符号将被添加到该州,而特工将从该新状态再次尝试。
示例:
当前状态=2。代理射击2.新状态为4。代理在下一个时间步从4开始。这种“顺序决策”创造了强化的学习环境,而不是情境强盗。
我希望这是有道理的,如果您有任何疑问,请告诉我。