PyBrains Q-Learning迷宫示例。国家价值观和全球政策

时间:2015-11-28 23:56:45

标签: python pybrain reinforcement-learning q-learning mdp

我正在尝试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()

现在,我对我得到的结果没有信心 enter image description here

右下角(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)返回一些值,但我不确定它们是否对应于值函数的值

1 个答案:

答案 0 :(得分:0)

现在我添加了另一个约束 - 让代理总是从相同的位置开始:( 1,1)在maze.py中添加self.initPos = [(1, 1)]现在我在1000次运行后得到这种行为,每次运行有200次相互作用:

enter image description here

现在哪种方式有意义 - 机器人试图从另一侧围绕墙壁,避开状态(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)从值函数

返回每个状态的值