使用时差权重更新的线性值函数逼近法求解山地车

时间:2019-01-20 12:44:49

标签: machine-learning reinforcement-learning gradient-descent

因此,在我的作业中,我需要通过使用线性函数逼近(特别是使用多项式作为特征)优化动作状态值函数来求解Mountain car。为了解决这个问题,我使用了情节半梯度Sarsa来估计最佳状态值函数(如第http://www.cs.cmu.edu/~rsalakhu/10703/Lecture_VFA.pdf页的第26页)。我的一对[state =(position,velocity),action]的特征向量如下:

[1,动作,位置,速度,positionXvelocity,actionXvelocity,actionXposition,actionXpositionXvelocity]

所以我选择了一次多项式... 我正在用零初始化权重向量W,并且几乎遵循确切的算法。不幸的是,每次我运行它(也尝试了很多集)时,我的经纪人都无法成功到达山顶,因此只能获得-1的奖励,因此改善永远不会发生。我不想改变环境,因为我觉得这很“欺骗”。有什么想法要改变吗?我的代码几乎遵循http://www.cs.cmu.edu/~rsalakhu/10703/Lecture_VFA.pdf第26页算法

n-是多项式阶数,phi-计算特征向量,qhat-计算特征向量*权重向量,qhat_derived_policy是选择动作的epsilon贪婪算法的实现

def Episodic_Semi_gradient_Sarsa(alpha, epsilon, n):
    env = gym.make("MountainCar-v0")
    env.seed(3333) # Set a seed for reproducability
    w = np.ones((n+1)**3)
    w[((n+1)**3) - 1]=0
    for i_episode in range(10000):
        state = env.reset()
        for t in range(200):          
            env.render()
            action = qhat_derived_policy(state, epsilon, w, n)
            nextstate, reward, done, info = env.step(action)
            if done:
                w += alpha*(reward - qhat(state, action, w, n))*phi(state, action, n)
                print("Episode finished after {} timesteps".format(t+1))
                break
        nextaction = qhat_derived_policy(nextstate, epsilon, w, n)
        w += alpha*(reward + qhat(nextstate, nextaction, w, n)-qhat(state, action, w, n))*phi(state, action, n)
        action = nextaction
        state = nextstate

0 个答案:

没有答案