强化学习实践四||价值迭代法2

Q(s,a) = 求和 p * (r + 折扣率 * maxQ(s_____ ,a_) )

  1. 随机玩100步游戏,记录 (s,a,s_) : r 和 (s,a) : s _ 和个数
  2. 更新Q表格值
  3. 以maxQ(s,a)选动作a玩20局游戏,每玩一步都记录 (s,a,s_) : r 和 (s,a) : s _ 和个数 ,返回这20局游戏的平均奖励
  4. 如果平均奖励达到0.9 结束游戏 否则 回到第1步
import gym
import collections
from tensorboardX import SummaryWriterENV_NAME = "FrozenLake8x8-v1"
#ENV_NAME = "FrozenLake8x8-v0"      # uncomment for larger version
GAMMA = 0.9
TEST_EPISODES = 20class Agent:def __init__(self):self.env = gym.make(ENV_NAME)   # 设置环境self.state = self.env.reset()   # 初始化环境self.rewards = collections.defaultdict(float)   # 字典类型 {(s,a,s_):r}self.transits = collections.defaultdict(collections.Counter)self.values = collections.defaultdict(float)    # 此处存放 Q(s,a)的值# 随机玩count个步骤,并记录{(s,a,s_):r}、{(s,a):s_}def play_n_random_steps(self, count):for _ in range(count):action = self.env.action_space.sample()new_state, reward, is_done, _ = self.env.step(action)self.rewards[(self.state, action, new_state)] = rewardself.transits[(self.state, action)][new_state] += 1self.state = self.env.reset() if is_done else new_state# 给定一个状态s,返回maxQ(s,a)的a# 不计算Q值,只是找出Q值def select_action(self, state):best_action, best_value = None, Nonefor action in range(self.env.action_space.n):action_value = self.values[(state, action)]if best_value is None or best_value < action_value:best_value = action_valuebest_action = actionreturn best_action# 以maxQ(s,a)选取动作a玩一局游戏,并返回该局游戏的奖励def play_episode(self, env):total_reward = 0.0state = env.reset()while True:action = self.select_action(state)new_state, reward, is_done, _ = env.step(action)self.rewards[(state, action, new_state)] = rewardself.transits[(state, action)][new_state] += 1total_reward += rewardif is_done:breakstate = new_statereturn total_reward# 更新Q价值表def value_iteration(self):# 遍历所有状态和所有动作for state in range(self.env.observation_space.n):for action in range(self.env.action_space.n):action_value = 0.0      # 记录Q值# 计数器,(s,a):s_出现的次数,(s,a)是计数器名称target_counts = self.transits[(state, action)]total = sum(target_counts.values())     # (s,a)下一个状态s_、s`_...出现的总次数for tgt_state, count in target_counts.items():key = (state, action, tgt_state)reward = self.rewards[key]          # 得到(s,a,s_)的rbest_action = self.select_action(tgt_state)     # 找出Q(s_,a)最大的动作aval = reward + GAMMA * \self.values[(tgt_state, best_action)]     # r + γ * maxQ(s_,a)action_value += (count / total) * val           # ∑p(r + γ * maxQ(s_,a))self.values[(state, action)] = action_value         # 更新Q值表if __name__ == "__main__":test_env = gym.make(ENV_NAME)agent = Agent()writer = SummaryWriter(comment="-q-iteration")iter_no = 0best_reward = 0.0while True:iter_no += 1agent.play_n_random_steps(100)  # 随机玩100步,留下记录agent.value_iteration()         # 更新Q值表reward = 0.0for _ in range(TEST_EPISODES):reward += agent.play_episode(test_env)reward /= TEST_EPISODESwriter.add_scalar("reward", reward, iter_no)if reward > best_reward:print("Best reward updated %.3f -> %.3f" % (best_reward, reward))best_reward = rewardif reward > 0.90:   # 平均奖励大于0.9,停止迭代print("Solved in %d iterations!" % iter_no)breakwriter.close()env = gym.make(ENV_NAME)s = env.reset()env.render()reward = 0.0while True:s_,r,is_done,_ = env.step(agent.select_action(s))env.render()if is_done:breaks = s_

总结

与价值迭代法1的不同点:

价值迭代法1:Q(s,a) = 求和 p * (r(s,a) + 折扣率 * V(s_____) )

截止迭代法2:Q(s,a) = 求和 p * (r(s,a) + 折扣率 * maxQ(s_____ ,a_) )

其中 p 是 (s,a) 转移到下一个状态s_ 的概率,有可能转移到多个状态,比如冰上运动,确定好动作向前运动,但是有可能打滑会左转,也有可能右转

原理:V(s) = maxQ(s,a) , a属于动作空间A

强化学习实践四||价值迭代法2_动作价值相关推荐

  1. 强化学习实践四:编写通用的格子世界环境类

    gym里内置了许多好玩经典的环境用于训练一个更加智能的个体,不过这些环境类绝大多数不能用来实践前五讲的视频内容,主要是由于这些环境类的观测空间的某个维度是连续变量而不是离散变量,这是前五讲内容还未涉及 ...

  2. 强化学习(四) - 蒙特卡洛方法(Monte Carlo Methods)及实例

    强化学习(四) - 蒙特卡洛方法(Monte Carlo Methods)及实例 4. 蒙特卡洛方法 4.1 蒙特卡洛预测 例4.1:Blackjack(21点) 4.2 动作价值的蒙特卡洛估计 4. ...

  3. 【赠书】掌握人工智能重要主题,深度强化学习实践书籍推荐

    ‍‍ 今天要给大家介绍的书是深度强化学习实践的第二版,本书的主题是强化学习(Reinforcement Learning,RL),它是机器学习(Machine Learning,ML)的一个分支,强调 ...

  4. 多智能体强化学习(四)多智能体RL

    多智能体强化学习(四)多智能体RL 1. 问题的公式:随机博弈 2. 解决随机对策 2.1 基于价值的MARL方法 2.2 基于策略的MARL方法 2.3 纳什均衡的求解概念 2.4 特殊类型的随机策 ...

  5. 强化学习(四)—— Actor-Critic

    强化学习(四)-- Actor-Critic 1. 网络结构 2. 网络函数 3. 策略网络的更新-策略梯度 4. 价值网络的更新-时序差分(TD) 5. 网络训练流程 6. 案例 1. 网络结构 状 ...

  6. 强化学习实践:DDQN—LunarLander月球登入初探

    强化学习实践:DDQN-月球登入LunarLander初探 算法DDQN 实践 环境准备 GYM及PARL+paddle parl的框架结构 agent构建 搭建神经网络 replay_memory经 ...

  7. 强化学习案例_强化学习实践案例!携程如何利用强化学习提高酒店推荐排序质量...

    作者简介: 宣云儿,携程酒店排序算法工程师,主要负责酒店排序相关的算法逻辑方案设计实施.目前主要的兴趣在于排序学习.强化学习等领域的理论与应用. 前言 目前携程酒店绝大部分排序业务中所涉及的问题,基本 ...

  8. 强化学习(四)用蒙特卡罗法(MC)求解

    在强化学习(三)用动态规划(DP)求解中,我们讨论了用动态规划来求解强化学习预测问题和控制问题的方法.但是由于动态规划法需要在每一次回溯更新某一个状态的价值时,回溯到该状态的所有可能的后续状态.导致对 ...

  9. 《深度强化学习实践》学习内容整理

    环境和agent的基本框架 import randomclass Environment:# 环境初始化内部状态def __init__(self):self.steps_left = 10# 给ag ...

最新文章

  1. 【pytorch】torch.mm,torch.bmm以及torch.matmul的使用
  2. 函数实现十进制转二进制
  3. iptables防火墙(二)
  4. 使用泛型查询数据小例
  5. 关于stm32 hal 库 iic 一直是 busy 问题
  6. 全球及中国抗水解剂市场需求容量与投资可行性研究报告2022年
  7. Nginx安装方式介绍
  8. 台阶问题(洛谷P1192题题解,Java语言描述)
  9. 华科计算机考研复试机试【零散大汇总】
  10. echarts 统计图如何实现打印导出
  11. CNN_原理以及pytorch多分类实践
  12. 大华平台linux命令,大华平台软件简介.docx
  13. Android Studio最新稳定版下载 - 百度网盘(更新于2017年7月14日)
  14. 晚安西南-----地破实验
  15. 【最优化算法】基于【MATLAB】的拟牛顿法【Quasi Newton method】分析与推导
  16. c语言结构体求分数和,C语言 定义一个表示分数的结构体,并求两个分数相加之和...
  17. 二手书交易平台相关调研
  18. 富士康打工到底能不能攒到钱?
  19. 死亡结束生命,却不会结束一段关系
  20. hiv实验室抗体筛查流程图_检验科各种流程图.doc

热门文章

  1. Use explicit instantiation to minimize compile time and link time;
  2. Photoshop使用钢笔路径绘制网状条纹
  3. SpringBoot集成beetl模板快速入门
  4. Maven项目在test文件夹下运行测试类出现 Class Not Found
  5. 中国男人对老婆说谎排行榜
  6. 三界SGC多功能去中心化平台
  7. 获取EXCEL中对应的列英文字母标识符(字母序列/列标题)(JAVA实现)
  8. 父元素中拖动子元素实现
  9. Proteus8.9 VSM Studio SDCC编译器仿真STC15W4K32S4系列013_iic_04_AT24C16
  10. 一节课让你彻底搞懂python里面试最常问问题之一深浅复制