q learning 参数_强化学习算法回顾 Q-learning 玩 OpenAI 的 Taxi 游戏

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

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

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

  Step 0: 安装依赖
  Step 1: 创建环境
  Step 2: 创建 Q 表并初始化
  Step 3: 超参数设置
  Step 4: Q learning 算法
  Step 5: 使用 Q 表来玩 Taxi !

Step 0: 安装依赖

需要 3 个库:

  • Numpy 用来存储和更新 Q 表
  • OpenAI Gym 用来创建交互环境
  • Random 用来产生随机数
import numpy as npimport gymimport random

Step 1: 创建环境

  • 创建 Taxi environment
  • OpenAI Gym 里面有很多环境提供给强化学习使用
env = gym.make("Taxi-v3")env.render()

Step 2: 创建 Q 表并初始化

  • 创建 Q 表的前提,是知道有多少状态和动作的维度
  • OpenAI Gym 提供了两个接口 env.action_space.n 和 env.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 = False        for 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_stateenv.close()print ("Score over time: " +  str(sum(rewards)/total_test_episodes))

本文作者首发于AI研习社AITrust专栏。

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值