[英]PyBrains Q-Learning maze example. State values and the global policy
我正在尝试PyBrains迷宫示例
我的设置是:
envmatrix = [[...]]
env = Maze(envmatrix, (1, 8))
task = MDPMazeTask(env)
table = ActionValueTable(states_nr, actions_nr)
table.initialize(0.)
learner = Q()
agent = LearningAgent(table, learner)
experiment = Experiment(task, agent)
for i in range(1000):
experiment.doInteractions(N)
agent.learn()
agent.reset()
右下角(1、8)为吸收状态
我在mdp.py中添加了一个额外的惩罚状态(1、7):
def getReward(self):
""" compute and return the current reward (i.e. corresponding to the last action performed) """
if self.env.goal == self.env.perseus:
self.env.reset()
reward = 1
elif self.env.perseus == (1,7):
reward = -1000
else:
reward = 0
return reward
现在,我不明白在每次运行1000次运行和200次交互之后,特工认为我的惩罚状态是好状态(您可以看到正方形是白色的)
我想在最终运行后查看每个州和政策的值。 我怎么做? 我发现该行table.params.reshape(81,4).max(1).reshape(9,9)
返回一些值,但是我不确定这些值是否对应于值函数的值
现在,我添加了另一个约束-通过在self.initPos = [(1, 1)]
添加self.initPos = [(1, 1)]
来使代理始终从相同的位置开始:(1,1),现在我在每次运行1000次后得到了此行为运行200次互动:
现在哪种方法有意义-机器人试图从另一侧绕过墙壁,从而避开状态(1、7)
所以,我得到了奇怪的结果,因为代理过去常常从随机位置开始,其中还包括惩罚状态。
编辑:
另一点是,如果希望随机产生代理,请确保它不是在可惩罚状态下产生
def _freePos(self):
""" produce a list of the free positions. """
res = []
for i, row in enumerate(self.mazeTable):
for j, p in enumerate(row):
if p == False:
if self.punishing_states != None:
if (i, j) not in self.punishing_states:
res.append((i, j))
else:
res.append((i, j))
return res
另外,似乎那table.params.reshape(81,4).max(1).reshape(9,9)
从值函数返回每个状态的值
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.