Политика Q-Learning не согласуется с итерацией Value / Policy - PullRequest
0 голосов
/ 20 ноября 2018

Я играю с pymdptoolbox.У него есть встроенная проблема управления лесами.Он может генерировать матрицы перехода P и R, указав значение состояния для функции леса (значение по умолчанию - 3).Реализация Q-Learning, PolicyIteration и ValueIteration для нахождения оптимальной политики проста.Однако, создавая немного более сложную проблему путем изменения состояния на немного большее значение, чем 4 (от 5 и далее), только PI и VI возвращают одну и ту же политику, тогда как QL не может найти оптимальную политику.Это очень удивительно и удивительно.Может кто-нибудь помочь мне понять, почему это для QL в этом пакете?

Глядя на необработанный код QL (используя epsilon-greedy), кажется, что он связывает вероятность с номером итерации, т.е.prob = 1 - (1/log(n+2)) и скорость обучения (1/math.sqrt(n+2)).Есть ли какая-то конкретная причина, по которой связывают вероятность / скорость обучения с числом итераций вместо того, чтобы делать их независимыми переменными (хотя сам код можно легко изменить).

Я думаю, что моя самая большая загадка - понять, почему QL не может найти политику для ванильной проблемы.Спасибо.

from mdptoolbox.mdp import ValueIteration, QLearning, PolicyIteration
from mdptoolbox.example import forest

Gamma = 0.99

states = [3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 20, 30, 50, 70, 100, 200, 300, 400, 500, 600, 700, 800, 900, 1000]

compare_VI_QI_policy = [] # True or False
compare_VI_PI_policy = []

for state in states:

    P, R = forest(state)

    VI = ValueIteration(P, R, Gamma)
    PI = PolicyIteration(P, R, Gamma)
    QL = QLearning(P, R, Gamma)

    ## run VI
    VI.run()

    # run PI
    PI.run()

    # run QL
    QL.run()

    compare_VI_QI_policy.append(QL.policy == VI.policy)
    compare_VI_PI_policy.append(VI.policy == PI.policy)

print compare_VI_QI_policy
print compare_VI_PI_policy
...