Q-learning

实例代码

  1. import numpy as np
  2. import random
  3. from environment import Env
  4. from collections import defaultdict
  5.  
  6. class QLearningAgent:
  7. def __init__(self, actions):
  8. # actions = [0, 1, 2, 3]
  9. self.actions = actions
  10. self.learning_rate = 0.01
  11. self.discount_factor = 0.9
  12. self.epsilon = 0.1
  13. self.q_table = defaultdict(lambda: [0.0, 0.0, 0.0, 0.0])#待更新q
  14.  
  15. # update q function with sample <s, a, r, s'>
  16. def learn(self, state, action, reward, next_state):
  17. current_q = self.q_table[state][action]
  18. # using Bellman Optimality Equation to update q function
  19. new_q = reward + self.discount_factor * max(self.q_table[next_state])
  20. self.q_table[state][action] += self.learning_rate * (new_q - current_q)#更新公式,off-policy
  21.  
  22. # get action for the state according to the q function table
  23. # agent pick action of epsilon-greedy policy
  24. def get_action(self, state):
  25. #epsilon-greedy policy
  26. if np.random.rand() < self.epsilon:
  27. # take random action
  28. action = np.random.choice(self.actions)
  29. else:
  30. # take action according to the q function table
  31. state_action = self.q_table[state]
  32. action = self.arg_max(state_action)
  33. return action
  34.  
  35. @staticmethod
  36. def arg_max(state_action):
  37. max_index_list = []
  38. max_value = state_action[0]
  39. for index, value in enumerate(state_action):
  40. if value > max_value:
  41. max_index_list.clear()
  42. max_value = value
  43. max_index_list.append(index)
  44. elif value == max_value:
  45. max_index_list.append(index)
  46. return random.choice(max_index_list)
  47.  
  48. if __name__ == "__main__":
  49. env = Env()
  50. agent = QLearningAgent(actions=list(range(env.n_actions)))
  51.  
  52. for episode in range(1000):
  53. state = env.reset()
  54.  
  55. while True:
  56. env.render()
  57.  
  58. # take action and proceed one step in the environment
  59. action = agent.get_action(str(state))
  60. next_state, reward, done = env.step(action)
  61.  
  62. # with sample <s,a,r,s'>, agent learns new q function
  63. agent.learn(str(state), action, reward, str(next_state))
  64.  
  65. state = next_state
  66. env.print_value_all(agent.q_table)
  67.  
  68. # if episode ends, then break
  69. if done:
  70. break

增强学习--Q-leraning的更多相关文章

  1. 马里奥AI实现方式探索 ——神经网络+增强学习

    [TOC] 马里奥AI实现方式探索 --神经网络+增强学习 儿时我们都曾有过一个经典游戏的体验,就是马里奥(顶蘑菇^v^),这次里约奥运会闭幕式,日本作为2020年东京奥运会的东道主,安倍最后也已经典 ...

  2. 增强学习(三)----- MDP的动态规划解法

    上一篇我们已经说到了,增强学习的目的就是求解马尔可夫决策过程(MDP)的最优策略,使其在任意初始状态下,都能获得最大的Vπ值.(本文不考虑非马尔可夫环境和不完全可观测马尔可夫决策过程(POMDP)中的 ...

  3. 增强学习(四) ----- 蒙特卡罗方法(Monte Carlo Methods)

    1. 蒙特卡罗方法的基本思想 蒙特卡罗方法又叫统计模拟方法,它使用随机数(或伪随机数)来解决计算的问题,是一类重要的数值计算方法.该方法的名字来源于世界著名的赌城蒙特卡罗,而蒙特卡罗方法正是以概率为基 ...

  4. 增强学习(Reinforcement Learning and Control)

    增强学习(Reinforcement Learning and Control)  [pdf版本]增强学习.pdf 在之前的讨论中,我们总是给定一个样本x,然后给或者不给label y.之后对样本进行 ...

  5. 增强学习 | Q-Learning

    "价值不是由一次成功决定的,而是在长期的进取中体现" 上文介绍了描述能力更强的多臂赌博机模型,即通过多台机器的方式对环境变量建模,选择动作策略时考虑时序累积奖赏的影响.虽然多臂赌博 ...

  6. 常用增强学习实验环境 II (ViZDoom, Roboschool, TensorFlow Agents, ELF, Coach等) (转载)

    原文链接:http://blog.csdn.net/jinzhuojun/article/details/78508203 前段时间Nature上发表的升级版Alpha Go - AlphaGo Ze ...

  7. 增强学习训练AI玩游戏

    1.游戏简介 符号A为 AI Agent. 符号@为金币,AI Agent需要尽可能的接取. 符号* 为炸弹,AI Agent需要尽可能的躲避. 游戏下方一组数字含义如下: Bomb hit: 代表目 ...

  8. 【读书笔记】2_增强学习中的Q-Learning

    本文为Thomas Simonini增强学习系列文章笔记或读后感,原文可以直接跳转到medium系列文章. 主要概念为: Q-Learning,探讨其概念以及用Numpy实现 我们可以将二维游戏想象成 ...

  9. 转:增强学习(二)----- 马尔可夫决策过程MDP

    1. 马尔可夫模型的几类子模型 大家应该还记得马尔科夫链(Markov Chain),了解机器学习的也都知道隐马尔可夫模型(Hidden Markov Model,HMM).它们具有的一个共同性质就是 ...

  10. Multi-armed Bandit Problem与增强学习的联系

    选自<Reinforcement Learning: An Introduction>, version 2, 2016, Chapter2 https://webdocs.cs.ualb ...

随机推荐

  1. Python小程序之购物车

    需求: 用户入口: 1.商品信息放在文件中,从文件中读取 2.已购商品,余额记录,第一要输入起始金额,以后不需要二次输入 商家入口: 2.可以添加商品,修改商品价格 # Author:Lee Siri ...

  2. 编辑器KindEditor的使用

    1.具体使用方法看点这里 2.下载点这里 3.文件夹说明 ├── asp asp示例,删掉 ├── asp.net asp.net示例,删掉 ├── attached 空文件夹,放置关联文件attac ...

  3. libssh2

    http://www.cnblogs.com/lzrabbit/p/4298794.html shell脚本实现ssh自动登录远程服务器示例: #!/usr/bin/expect spawn ssh ...

  4. 定制一个支持中英文的简单LaTex模板

    平常写汇报文档什么的,word排版有时还是比较费劲,遂定制一个简单的LaTex模板,中文默认为宋体,英文为LaTex默认字体,支持彩色高亮展示,有目录书签,有页眉展示,大致如下: LaTex代码如下: ...

  5. [ Python - 4 ] python 装饰器

    装饰器有很多经典的使用场景,例如插入日志.性能测试.事务处理等等,有了装饰器,就可以提取大量函数中与本身功能无关的类似代码,从而达到代码重用的目的. 装饰器有两种写法: 1. 装饰器不传参数 2. 装 ...

  6. 移植WordPress到Ubuntu16.04

    移植WordPress到Ubuntu16.04 新建 模板 小书匠 移植WordPress到Ubuntu16.04 搭建好LAMP环境后,可以按照以下方法,将本地站点移植到服务器上. 以WordPre ...

  7. PhpStorm最新版 2017激活办法

    特别注意:为避免phpstorm联网时注册失效,请将“0.0.0.0 account.jetbrains.com”添加到hosts文件中. 最新版PhpStorm 2017正式版改进了PHP 7支持, ...

  8. java 8中撤销永久代,引入元空间

    撤销永久代,引入元空间: 在 JDK 1.8 中,HotSpot 已经没有 “PermGen space”这个空间了,取而代之是一个叫做 Metaspace(元空间) 的东西. Java7中已经将字符 ...

  9. 洛谷 P3383 【模板】线性筛素数-线性筛素数(欧拉筛素数)O(n)基础题贴个板子备忘

    P3383 [模板]线性筛素数 题目描述 如题,给定一个范围N,你需要处理M个某数字是否为质数的询问(每个数字均在范围1-N内) 输入输出格式 输入格式: 第一行包含两个正整数N.M,分别表示查询的范 ...

  10. BZOJ 3223: Tyvj 1729 文艺平衡树-Splay树(区间翻转)模板题

    3223: Tyvj 1729 文艺平衡树 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 6881  Solved: 4213[Submit][Sta ...