QLearning策略与价值/策略迭代不一致

2024-04-26 14:08:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我在玩pymdptoolbox。它有一个内在的森林管理问题。它可以通过为林函数指定状态值(默认值为3)来生成转换矩阵PR。用Q-LearningPolicyIterationValueIteration来寻找最优策略的实现非常简单。但是,通过将状态更改为大于4的值(从5开始)来创建稍微复杂一些的问题,只有PIVI返回相同的策略,而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

Tags: run代码frompolicypi概率次数策略