同样是来自于Github开源项目的代码,这次尝试分析其Grid World的Monte Carlo算法。
Github地址:https://github.com/rlcode/reinforcement-learning/tree/master/1-grid-world/3-monte-carlo
Grid World
Grid World是该开源项目用于检验算法的一个测试环境,是由n*n个方块组成的棋盘,棋盘上放置红色方块为起点,绿色菱形为障碍,蓝色圆形为终点,红色方块可被控制上下左右移动。算法的目标就是将红色方块以最短的距离(不碰到障碍物)达到蓝色圆形处。其示意图如下:
Monte Carlo
以下引用自百度百科:
蒙特卡罗方法于20世纪40年代美国在第二次世界大战中研制原子弹的“曼哈顿计划”计划的成员S.M.乌拉姆和J.冯·诺伊曼首先提出。数学家冯·诺伊曼用驰名世界的赌城—摩纳哥的Monte Carlo—来命名这种方法,为它蒙上了一层神秘色彩。在这之前,蒙特卡罗方法就已经存在。1777年,法国数学家布丰(Georges Louis Leclere de Buffon,1707—1788)提出用投针实验的方法求圆周率π。这被认为是蒙特卡罗方法的起源。
蒙特·卡罗方法(Monte Carlo method),也称统计模拟方法,是二十世纪四十年代中期由于科学技术的发展和电子计算机的发明,而被提出的一种以概率统计理论为指导的一类非常重要的数值计算方法。是指使用随机数(或更常见的伪随机数)来解决很多计算问题的方法。与它对应的是确定性算法。蒙特·卡罗方法在金融工程学,宏观经济学,计算物理学(如粒子输运计算、量子热力学计算、空气动力学计算)等领域应用广泛。
算法实现
本例子的实现代码由两个文件组成:environment.py和mc_agent.py。其中environment.py主要是进行图形绘制及模拟环境反馈,由于此处我们重点分析的是Monte Carlo算法,所以我们主要还是看mc_agent.py文件内的代码。
入口代码
if __name__ == "__main__":
env = Env()
agent = MCAgent(actions=list(range(env.n_actions)))
for episode in range(1000):
state = env.reset()
action = agent.get_action(s