2

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)、それらが値関数の値に対応しているかどうかはわかりません

4

1 に答える 1

0

ここで別の制約を追加しました - エージェントが常に同じ位置から開始するようにしました: (1, 1) self.initPos = [(1, 1)]maze.py を追加することで、1000 回の実行後にこの動作が得られ、各実行で 200 回の対話が行われます。

ここに画像の説明を入力

どちらが理にかなっている - ロボットは別の側から壁を一周しようとし、状態を避けます (1, 7)

そのため、エージェントがランダムな位置から開始していたため、奇妙な結果が得られていました。これには、処罰状態も含まれていました。

編集:

もう 1 つのポイントは、エージェントをランダムにスポーンすることが望ましい場合は、処罰可能な状態でスポーンしないようにすることです。

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)値関数からすべての状態の値を返すようです

于 2015-11-29T11:27:39.677 に答える