2015-11-28 13 views
2

Я пытался из PyBrains лабиринте примерPyBrains Q-Learning лабиринт пример. Государственные ценности и глобальная политика

моя установка:

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) является поглощающим состоянием

Я назначил дополнительное наказание (1, 7) в mdp.py:

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) возвращает некоторые значения, но я не уверен, соответствуют ли они значениям функции значения

ответ

0

Теперь я добавил другое ограничение - заставил агента всегда начинать с той же позиции: (1, 1) путь добавления self.initPos = [(1, 1)] в maze.py и теперь я получаю это поведение после 1000 запусков с каждым прогоном, имеющими 200 взаимодействий:

enter image description here

Какого видом имеет смысл сейчас - робот пытается идти вокруг стены от другого (1, 7)

Итак, Я получаю странные результаты, потому что агент, используемый для запуска из случайных позиций, которые также включали в себя наказывают состояние

EDIT:

Другое дело, что, если желательно, чтобы метать икру агент случайным образом, то убедитесь, он не породил в наказуемого состоянии

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) возвращает значение для каждого состояния от значения функции