在强化学习中优化价值迭代算法

时间:2018-12-17 02:24:34

标签: python reinforcement-learning value-iteration

我对价值迭代有疑问。我正在尝试解决“ FrozenLake8x8-v0”问题。如果我们要从该州起步1000步,我主要使用的算法是为每个州计算奖励。为了获得该策略,它尝试使用所有可能的操作来计算第1001步,并且给出最高奖励的操作将针对相应的状态选择该操作。

但是在“ FrozenLake8x8-v0”的情况下,主要动机是达到目标,只有达到目标,您才能获得1分的奖励。所以我要做的是,在每次迭代之后我进行了1000次迭代,我检查我们获得的所有状态的奖励均大于0,这意味着它达到了目标,并且在同一迭代中我还将存储所采取的动作(任何动作都奖励) > 0)。获得奖励的状态> 0,在下次迭代中将不考虑它们。以同样的方式,如果我们得到2个连续迭代,如果得到的状态数相同,且奖励=0。这意味着它们是空洞,我打破了迭代循环。

为什么我使用上述情况

  1. 它不需要迭代1000次迭代。
  2. 我们将始终将座席指向从该状态达到目标的最小路径。

但是在第二种方法中,代理的表现非常差。该分数约为0.003,在第一个分数中为0.965。我不明白为什么会这样?

我的方法:

def value_Iteration(env,gamma=1,iteration=1000):
    v = np.zeros(env.nS)
    policy = np.zeros(env.nS)
    numStateZero = 0
    for i in range(iteration):
        print("Iteration:{}".format(i))
        v_new = np.zeros(env.nS)
        for s in range(env.nS):
            if not v[s] > 0.0: 
                q_s = np.zeros(env.nA)
                q_s = [sum([p*(r_ + gamma * v[s_]) for p,s_,r_,_ in env.P[s][a]]) for a in range(env.nA)]
                policy[s] = np.argmax(q_s)
                v_new[s] = max(q_s)
            else:
                v_new[s] = v[s]
        if count(v_new,0) == numStateZero:
            return v_new,policy
        else:
            numStateZero = count(v_new,0)
        v=np.copy(v_new)
    return v,policy

0 个答案:

没有答案