前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SARSA 的 python 实现

SARSA 的 python 实现

作者头像
杨熹
发布2020-04-10 15:57:47
6940
发布2020-04-10 15:57:47
举报
文章被收录于专栏:杨熹的专栏杨熹的专栏

首先初始化一个 Q table:

代码语言:javascript
复制
Q = np.zeros((env.observation_space.n, env.action_space.n))

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

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

代码语言:javascript
复制
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 这五个

代码语言:javascript
复制
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输入到学习算法中

代码语言:javascript
复制
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
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档