蒙特卡洛方法

实例代码

下面代码是constant-α monte carlo,这里有一点介绍

  1 import numpy as np
  2 import random
  3 from collections import defaultdict
  4 from environment import Env
  5
  6
  7 # Monte Carlo Agent which learns every episodes from the sample
  8 class MCAgent:
  9     def __init__(self, actions):
 10         self.width = 5
 11         self.height = 5
 12         self.actions = actions
 13         self.learning_rate = 0.01
 14         self.discount_factor = 0.9
 15         self.epsilon = 0.1
 16         self.samples = []
 17         self.value_table = defaultdict(float)#初始化值函数表,0
 18
 19     # append sample to memory(state, reward, done)
 20     def save_sample(self, state, reward, done):
 21         self.samples.append([state, reward, done])
 22
 23     # for every episode, agent updates q function of visited states
 24     def update(self):
 25         G_t = 0
 26         visit_state = []
 27         for reward in reversed(self.samples):#此处reverse,状态反转
 28             state = str(reward[0])
 29             if state not in visit_state:#first-visit MC methods
 30                 visit_state.append(state)
 31                 G_t = self.discount_factor * (reward[1] + G_t)#累积回报
 32                 value = self.value_table[state]
 33                 self.value_table[state] = (value +
 34                                            self.learning_rate * (G_t - value))
 35                 #constant-α monte carlo constant-α蒙特卡洛值函数更新
 36
 37     # get action for the state according to the q function table
 38     # agent pick action of epsilon-greedy policy
 39     def get_action(self, state):
 40         if np.random.rand() < self.epsilon:#以epsilon概率随机选择,Exploration
 41             # take random action
 42             action = np.random.choice(self.actions)
 43         else:
 44             # take action according to the q function table
 45             next_state = self.possible_next_state(state)
 46             action = self.arg_max(next_state)
 47         return int(action)
 48
 49     # compute arg_max if multiple candidates exit, pick one randomly
 50     @staticmethod
 51     def arg_max(next_state):
 52         max_index_list = []
 53         max_value = next_state[0]
 54         for index, value in enumerate(next_state):
 55             if value > max_value:
 56                 max_index_list.clear()
 57                 max_value = value
 58                 max_index_list.append(index)
 59             elif value == max_value:
 60                 max_index_list.append(index)
 61         return random.choice(max_index_list)
 62
 63     # get the possible next states
 64     def possible_next_state(self, state):
 65         col, row = state
 66         next_state = [0.0] * 4 #四个方向,Q(s,a)
 67
 68         if row != 0:
 69             next_state[0] = self.value_table[str([col, row - 1])]
 70         else:
 71             next_state[0] = self.value_table[str(state)]
 72
 73         if row != self.height - 1:
 74             next_state[1] = self.value_table[str([col, row + 1])]
 75         else:
 76             next_state[1] = self.value_table[str(state)]
 77
 78         if col != 0:
 79             next_state[2] = self.value_table[str([col - 1, row])]
 80         else:
 81             next_state[2] = self.value_table[str(state)]
 82
 83         if col != self.width - 1:
 84             next_state[3] = self.value_table[str([col + 1, row])]
 85         else:
 86             next_state[3] = self.value_table[str(state)]
 87
 88         return next_state
 89
 90
 91 # main loop
 92 if __name__ == "__main__":
 93     env = Env()
 94     agent = MCAgent(actions=list(range(env.n_actions)))
 95
 96     for episode in range(1000):#episode task
 97         import pdb; pdb.set_trace()
 98         state = env.reset()
 99         action = agent.get_action(state)
100
101         while True:
102             env.render()
103
104             # forward to next state. reward is number and done is boolean
105             next_state, reward, done = env.step(action)
106             agent.save_sample(next_state, reward, done)
107
108             # get next action
109             action = agent.get_action(next_state)
110
111             # at the end of each episode, update the q function table
112             if done:
113                 print("episode : ", episode)
114                 agent.update()
115                 agent.samples.clear()
116                 break

转载于:https://www.cnblogs.com/buyizhiyou/p/10250103.html

增强学习--蒙特卡洛方法相关推荐

  1. 强化学习——蒙特卡洛方法

    学习目标 理解Prediction和Control的差别: 理解什么是first-visit和every-visit: 理解什么是on-policy和off-policy: 理解蒙特卡洛方法的Pred ...

  2. IBM苏中:怎样利用深度学习、增强学习等方法提高信息处理效率

    伴随着认知计算时代的到来,如何将我们计算机的信息处理能力与人类的认知能力相结合,从而提高我们的信息处理效率,是我们在目前所要思考的问题.本期清华大数据"技术·前沿"系列讲座我们邀请 ...

  3. 增强学习系列之(一):增强学习介绍

    1. 什么是增强学习 增强学习是机器学习的一种.我们都知道,机器学习主要分监督学习.非监督学习.半监督学习.增强学习 从这个分类中我们就能看到,增强学习和我们平常主要接触的监督和非监督学习不太一样.监 ...

  4. 干货 | 算法工程师入门第二期——穆黎森讲增强学习(一) 本文作者:大牛讲堂 编辑:刘芳平 2017-07-19 11:38 导语:地平线大牛讲堂算法工程师入门第二期来啦!本期地平线资深算法工程师、增

    干货 | 算法工程师入门第二期--穆黎森讲增强学习(一) 本文作者:大牛讲堂 编辑:刘芳平 2017-07-19 11:38 导语:地平线大牛讲堂算法工程师入门第二期来啦!本期地平线资深算法工程师.增 ...

  5. 干货 | 算法工程师入门第二期——穆黎森讲增强学习(一)

    今天我很荣幸有机会在这里,跟大家分享增强学习(Reinforcement Learning,RL)这个话题.这次分享,我希望能达到三方面的目的: 第一,希望没有相关背景的同学能够对RL有一定的了解,所 ...

  6. (zhuan) 大牛讲堂 | 算法工程师入门第二期-穆黎森讲增强学习

    大牛讲堂 | 算法工程师入门第二期-穆黎森讲增强学习 2017-07-13 HorizonRobotics ?小广告:去CVPR 2017的小伙伴,点我有惊喜! 编者按:地平线大牛讲堂算法工程师入门第 ...

  7. 增强学习Reinforcement Learning经典算法梳理2:蒙特卡洛方法

    1 前言 在上一篇文章中,我们介绍了基于Bellman方程而得到的Policy Iteration和Value Iteration两种基本的算法,但是这两种算法实际上很难直接应用,原因在于依然是偏于理 ...

  8. 人工智障学习笔记——强化学习(3)蒙特卡洛方法

    上一章我们了解了马尔可夫决策过程的动态规划方法,但是动态要求一个完全已知的环境模型,这在现实中是很难做到的.另外,当状态数量较大的时候,动态规划法的效率也将是一个问题.所以本章我们引用一种不需要完整的 ...

  9. 深度增强学习(DRL)漫谈 - 信赖域(Trust Region)系方法

    一.背景 深度学习的兴起让增强学习这个古老的机器学习分支迎来一轮复兴.它们的结合领域-深度增强学习(Deep reinforcement learning, DRL)随着在一系列极具挑战的控制实验场景 ...

最新文章

  1. 【转】CEC文件详解
  2. 代理服务器工作原理是什么?
  3. 用linux集成电路版图设计,集成电路版图设计教程2012版本
  4. 解决MAC系统升级导致COCOAPODS失效问题
  5. UGLY NUMBERS II
  6. 【Pytorch神经网络实战案例】01 CIFAR-10数据集:Pytorch使用GPU训练CNN模版-方法①
  7. 《Spark与Hadoop大数据分析》一一1.1 大数据分析以及 Hadoop 和 Spark 在其中承担的角色...
  8. 用Barcode生成条形码图片
  9. 智能安全实验室-全能优化(Guardio)错误解决(1):“出现异常:EXCEPTION_ACCESS_VIOLATION=Access Violation”...
  10. 【读书笔记】A Swift Tour
  11. 如何找到电脑自带的浏览器
  12. 为什么学计算机容易秃顶,为什么程序员更容易脱发?知道答案惊呆了!
  13. 有线以太网RJ45网口网卡转无线wifi网卡转wifi网口转无线有线转无线方案
  14. windows打开iis7服务器远程桌面管理器
  15. 我的世界服务器兑换系统怎么做,Minecraft我的世界村民交易方法及兑换表格
  16. ElasticSearch-7.5.1集群3master-3data-3client环境搭建
  17. eclipse打开报错
  18. 网易我的世界服务器如何装组件,网易我的世界组件包怎么使用-网易我的世界组件包如何使用...
  19. aria2网页服务器错误,配置aria2服务器错误
  20. 最优化原理与方法之(一)开篇

热门文章

  1. 计算机学业水平测试字处理多少分,【计算机应用论文】计算机应用基础学业水平的测试问题(共3624字)...
  2. 设计模式_2_单例模式
  3. JavaScript高级之ES5 中的新增方法
  4. 八、PHP框架Laravel学习笔记——表单伪造和 CSRF 保护
  5. 逻辑回归(logistic regression)的本质——极大似然估计
  6. LeetCode MySQL 1127. 用户购买平台 *
  7. LeetCode 第 25 场双周赛(718/1832,前39.2%)
  8. 程序员面试金典 - 面试题 17.12. BiNode(BST中序遍历)
  9. LeetCode 69. x 的平方根(二分查找)
  10. html悬浮窗口退出,网页中可关闭的漂浮窗口实现