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

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

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

1 ответ

Теперь я добавил еще одно ограничение - заставил агента всегда начинать с одной и той же позиции: (1, 1), добавив self.initPos = [(1, 1)] в maze.py и теперь я получаю это поведение после 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) возвращает значение для каждого состояния из функции значения

Другие вопросы по тегам