美文网首页知识的搬运者
SARSA 的 python 实现

SARSA 的 python 实现

作者: 不会停的蜗牛 | 来源:发表于2020-04-08 23:57 被阅读0次

    首先初始化一个 Q table:

    Q = np.zeros((env.observation_space.n, env.action_space.n))
    

    下面是 epsilon greedy 算法,用来选择 action:

    设置一个 epsilon,如果随机产生的数字小于eps就随便弄个action探索一下,如果大于eps就利用环境信息挑选action:

    np.random.seed(seed)            
    def choose_action(state):           
        if np.random.random() < epsilon:
            action = np.random.randint(0, 4)            # 小于eps就随便弄个action探索一下
        else:
            action = np.argmax(Q[state, :])         # 大于eps就利用环境信息,挑选action
        return action
    

    下面是 SARSA 算法的核心函数:

    算法最后就是得到一个 Q 表,输入是 state, state2, reward, action, action2 这五个

    def learn(state, state2, reward, action, action2):  
        predict = Q[state, action]
        target = reward + gamma * Q[state2, action2]
        Q[state, action] = Q[state, action] + alpha * (target - predict)
    

    设置总共玩 total_episodes 次游戏,
    每次游戏时都重新选择一个初始state,
    有了state,自然要选择action,至于action如何选择,这里有讲究,不同的算法不一样,
    每次的游戏一直玩到end,
    拿到一个action后,env执行这个action,就可以走到下一个state,拿到reward,以及标记游戏是否结束,
    再根据新的state选择action,这样有前后两对action和state,
    将两对state和action输入到学习算法中

    for episode in range(total_episodes):    # 总共玩多少次游戏
    
        #print("current episode: " + str(episode))
    
        state = env.reset()         # 每次游戏时都重新选择一个初始state
        action = choose_action(state)       # 有了state,自然要选择action,至于action如何选择,这里有讲究,不同的算法不一样
        done = False
        
        while not done:             # 每次的游戏一直玩到end
    
            state2, reward, done, info = env.step(action)           # 拿到一个action后,env执行这个action,就可以走到下一个state,拿到reward,以及标记游戏是否结束
    
            action2 = choose_action(state2)                 # 再根据新的state选择action,这样有前后两对action和state
    
            learn(state, state2, reward, action, action2)       # 将两对state和action输入到学习算法中,这个学习算法也是一个核心
    
            state = state2                  # 更新state,和action 到最新的,继续while循环
            action = action2
    

    相关文章

      网友评论

        本文标题:SARSA 的 python 实现

        本文链接:https://www.haomeiwen.com/subject/favfmhtx.html