美文网首页
强化学习算法回顾 Q-learning 玩 OpenAI 的 T

强化学习算法回顾 Q-learning 玩 OpenAI 的 T

作者: AI研习社 | 来源:发表于2020-07-07 15:25 被阅读0次

    本文首发作者 Ray906 发表于专栏 · AITrust

    这里使用的是 OpenAI Taxi-V3 环境

    这里有 4 个地点,分别用 4 个字母表示,任务是要从一个地点接上乘客,送到另外 3 个中的一个放下乘客,越快越好。


    截屏2020-07-05 下午1.41.40.png
    • 成功运送一个客人获得 20 分奖励
    • 每走一步损失 1 分(希望尽快送到目的地)
    • 没有把客人放到指定的位置,损失 10 分
    • 渲染图中显示,一共 R,G,B,Y 这 4 个地点,黄色的块是 taxi,其中 ":" 栅栏可以穿越,"|" 栅栏不能穿越
    • 蓝色显示的就是有乘客的地方,红色显示的就是乘客的目的地

    Step-0--安装依赖

    需要 3 个库:

    • Numpy 用来存储和更新 Q 表

    • OpenAI Gym 用来创建交互环境

    • Random 用来产生随机数

      import numpy as np
      import gym
      import random

    Step-1--创建环境

    • 创建 Taxi environment

    • OpenAI Gym 里面有很多环境提供给强化学习使用

      env = gym.make("Taxi-v3")
      env.render()

    Step-2--创建-Q-表并初始化

    • 创建 Q 表的前提,是知道有多少状态和动作的维度

    • OpenAI Gym 提供了两个接口 env.action_space.nenv.observation_space.n

      action_size = env.action_space.n # 获取动作维度(一个状态下有几种动作选择)
      print("Action size ", action_size)

      state_size = env.observation_space.n # 获取状态维度(一共多少种状态)
      print("State size ", state_size)

    qtable = np.zeros((state_size, action_size)) # 初始化 Q 表
    print(qtable)
    

    Step-3--超参数设置

    明确超参数:

    total_episodes = 50000# 一共玩多少局游戏
    total_test_episodes = 100# 测试中一共走几步
    max_steps = 99# 每一局游戏最多走几步
    
    learning_rate = 0.7# 学习率
    gamma = 0.618# 未来奖励折扣率# 探索相关参数
    epsilon = 1.0# 探索概率
    max_epsilon = 1.0# 一开始的探索概率
    min_epsilon = 0.01# 最低的探索概率 
    decay_rate = 0.01# 探索概率的指数衰减概率
    

    Step-4--Q-learning-算法

    • Q learning 算法具体实施:

      循环 50000 局游戏for episode in range(total_episodes):

            # 重置环境
        state = env.reset()
        step = 0
        done = Falsefor step in range(max_steps): # 每一局游戏最多 99 步# 3. Choose an action a in the current world state (s)## 生成 0~1 之间的随机数
            exp_exp_tradeoff = random.uniform(0,1)
            
            ## 如果这个数字大于 探索概率(开始时为 1),则进行开发(选择最大 Q 的动作)if exp_exp_tradeoff > epsilon:
                action = np.argmax(qtable[state,:])
            
            ## 否则,进行探索(选择随机动作)else:
                action = env.action_space.sample()
            
            # 这个动作与环境交互后,获得奖励,环境变成新的状态
            new_state, reward, done, info = env.step(action)
      
            # 按照公式 Q(s,a):= Q(s,a) + lr [R(s,a) + gamma * max Q(s',a') - Q(s,a)] 更新 Q 表
            qtable[state, action] = qtable[state, action] + learning_rate * (reward + gamma * 
                                        np.max(qtable[new_state, :]) - qtable[state, action])
                    
            # 迭代环境状态
            state = new_state
            
            # 如果游戏结束,则跳出循环if done == True: 
                break# 减小探索概率(由于不确定性越来越小)
        epsilon = min_epsilon + (max_epsilon - min_epsilon)*np.exp(-decay_rate*episode) 
      

    Step-5--使用-Q--表来玩-Taxi--

    • 大约 50 000 局以后,就达到很好的训练结果

    • 看看我们训练的智能体如何玩 Taxi

      env.reset()
      rewards = []

      for episode in range(total_test_episodes):
      state = env.reset()
      step = 0
      done = False
      total_rewards = 0
      print("****************************************************")
      print("EPISODE ", episode)

        for step in range(max_steps):
            env.render()
            # 测试中我们就不需要探索了,只要选择最优动作
            action = np.argmax(qtable[state,:])
            
            new_state, reward, done, info = env.step(action)
            
            total_rewards += reward
            
            if done:
                rewards.append(total_rewards)
                print ("Score", total_rewards)
                break
            state = new_state
                            env.close()
      

      print ("Score over time: " + str(sum(rewards)/total_test_episodes))


    AI 研习社已经和阿里大文娱、旷视、搜狗搜索、小米等知名公司达成联系,帮助大家更好地求职找工作,一键投递简历至 HR 后台,准备了一些内推渠道群。

    欢迎大家添加研习社小学妹微信(aiyanxishe),小学妹拉你加入(备注求职)。

    a

    相关文章

      网友评论

          本文标题:强化学习算法回顾 Q-learning 玩 OpenAI 的 T

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