Я играю с 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