摘要:用于解决多臂赌博机UCB1算法已经被扩展成了解决极大极小树搜索的UCT算法。我们开发了一套Monte-Carlo围棋程序,MoGo,这是第一个使用UCT算法实现的计算机围棋程序。我们解释了为了围棋应用而对UCT的修改,同时还介绍了有效提高MoGo性能的模式智能随机模拟。在本文还讨论了UCT结合剪枝技术对于大型围棋棋盘的应用以及UCT的并行化。如今MoGo已经是在$9\times9$和$13\times13$围棋棋盘上的顶级围棋程序。

关键词:计算机围棋,Exploration-exploitation,UCT, Monte-Carlo, Patterns

1 引言

围棋的历史可以追溯到大约4000年前,并且这项游戏现在仍在世界范围内广受欢迎。虽然它的规则很简单(在http://www.gobase.org中有详细介绍),但是自从七十年代末开始,它的复杂性使得试图构建一个优秀的计算机围棋选手变得十分困难。现在围棋代替了国际象棋成为了AI中最困难的挑战之一。

围棋和国际象棋相比有很多不同。首先树的规模和分支因子要比国际象棋大得多。一般来说围棋的棋盘范围从$9\times9$到$19\times19$之间(相比而言国际象棋的棋盘只有$8\times8$;围棋每一步都有几百种可能,而国际象棋只有数十种。第二,目前还没有计算最适合落子的有效评价函数可用。因此,对于计算机国际象棋选手采用的alpha-beat搜索算法并不能提供很好的围棋策略。

最近Monte-Carlo方法在评估围棋落子上已经有一些进展了(在第二部分有更详细的描述)。然而,这种评价过程只是有限的精确;以每一步最高的分来评价并不会在最后就赢得胜利。而是每一步都会限制在一些相关的候选步中。还有,由于离散搜索空间的规模太大使得很难使用标准的增强学习方法来处理,也很难增强一个好的围棋选手所必须的exploration versus exploitation (EvE) 搜索策略。

本文也考虑到了另一个起源于博弈论中的EvE设定,即多臂赌博机问题。多臂赌博机问题模拟了一个赌徒依赖于过去的选择和奖励为了最大化奖励而选择下一台要赌博的机器的问题。由Auer等人提出在多臂赌博机框架下的UCB1算法最近被Kocsis等人(UCT算法)用于树结构的搜索空间。

我们提出的选手(MoGo)最主要的贡献是:

(i)为了围棋修改了UCT算法,

(ii)在Monte-Carlo评价函数中使用sequence-like模拟。

同时也解决了其他几个算法的问题,比如动态树结构,并行化和启发式(简单的剪枝启发)。MoGo已经达到了一个相当不错的围棋水平:自从2006年8月,MoGo在Computer Go Server中的$9\times9$棋盘中的142个计算机围棋中排名第一;并且它在2006年10月和11月的国际Kiseido围棋服务器中赢得了所有的比赛($9\times9$和$13\times13$)。

本文的组织结构如下。

第二部分简要的介绍了一下相关的工作,我们假设读者了解基本的围棋知识。

第三部分描述了MoGo,主要集中于我们的贡献:在大规模搜索空间中UCT的实现,and the use of prior, pattern-based, knowledge to bias the Monte-Carlo evaluation。

第四部分报告和讨论了实验结果。

本文以讨论如何从知识以及计算机密集的角度来提高MoGo。

2 前期的相关工作

我们的方法是基于Monte-Carlo围棋以及多臂赌博机问题,它们分别在2.1部分和2.2部分描述


多臂赌博机 multi-armed bandit problem

UCB1算法

UCT算法      Upper bound Confidence for Tree

Go

Exploration-exploitation exploration versus exploitation

Bandit Algorithms for Website Optimization

Monte-Carlo

Patterns

增强学习 Reinforcement Learning approach

sequence-like simulations

Modification of UCT with Patterns in Monte-Carlo Go(论文阅读)的更多相关文章

  1. Introduction to Monte Carlo Tree Search (蒙特卡罗搜索树简介)

    Introduction to Monte Carlo Tree Search (蒙特卡罗搜索树简介)  部分翻译自“Monte Carlo Tree Search and Its Applicati ...

  2. Monte Carlo tree search 学习

    https://en.wikipedia.org/wiki/Monte_Carlo_tree_search 蒙特卡洛树搜索(MCTS)基础 http://mcts.ai/about/index.htm ...

  3. 基于Monte Carlo方法的2048 A.I.

    2048 A.I. 在 stackoverflow 上有个讨论:http://stackoverflow.com/questions/22342854/what-is-the-optimal-algo ...

  4. Monte Carlo方法简介(转载)

    Monte Carlo方法简介(转载)       今天向大家介绍一下我现在主要做的这个东东. Monte Carlo方法又称为随机抽样技巧或统计实验方法,属于计算数学的一个分支,它是在上世纪四十年代 ...

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

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

  6. PRML读书会第十一章 Sampling Methods(MCMC, Markov Chain Monte Carlo,细致平稳条件,Metropolis-Hastings,Gibbs Sampling,Slice Sampling,Hamiltonian MCMC)

    主讲人 网络上的尼采 (新浪微博: @Nietzsche_复杂网络机器学习) 网络上的尼采(813394698) 9:05:00  今天的主要内容:Markov Chain Monte Carlo,M ...

  7. Monte Carlo Approximations

    准备总结几篇关于 Markov Chain Monte Carlo 的笔记. 本系列笔记主要译自A Gentle Introduction to Markov Chain Monte Carlo (M ...

  8. (转)Markov Chain Monte Carlo

    Nice R Code Punning code better since 2013 RSS Blog Archives Guides Modules About Markov Chain Monte ...

  9. [其他] 蒙特卡洛(Monte Carlo)模拟手把手教基于EXCEL与Crystal Ball的蒙特卡洛成本模拟过程实例:

    http://www.cqt8.com/soft/html/723.html下载,官网下载 (转帖)1.定义: 蒙特卡洛(Monte Carlo)模拟是一种通过设定随机过程,反复生成时间序列,计算参数 ...

随机推荐

  1. 数据结构之B-树,你每天都在用的,源码发布!

    五一前就筹划着写下这篇文章,但是迫于自己从来没有实现过B-树(如果大家感兴趣,我可以考虑写一篇B+树的文章),手中没有源代码,另外自己以前对B-树也是一知半解状态中,担心误人子弟,在4月30日终于把代 ...

  2. yum出现的“UnicodeDecodeError: 'ascii' codec”问题解决

    新装了CentOS 6.5系统,打算使用yum安装程序是出现了如下错误: Loading mirror speeds from cached hostfile Traceback (most rece ...

  3. python爬虫爬取煎蛋网妹子图片

    import urllib.request import os def url_open(url): req = urllib.request.Request(url) req.add_header( ...

  4. 如何提高码农产量,基于ASP.NET MVC的敏捷开发框架之工作流开发随笔三

    前言 “厂长,APP的那几个功能都差不多了,接下来要做工作流,工作流这东西我完全没概念啊.” “查尔斯,一般来说工作流就是指将指定的数据.文件.任务按照预定的规则进行传递流转.比如说你要请假,拿个请假 ...

  5. JSON.parse(str),JSON.stringify(a)

    1.JSON.parse(str),字符串转换成对象 var str = '{"name":"huangxiaojian","age":&q ...

  6. SQL 日期格式化函数

    Sql Server 中一个非常强大的日期格式化函数: 获得当前系统时间,GETDATE(): 2008年01月08日 星期二 14:59 Select CONVERT(varchar(100), G ...

  7. JS向后台传递json数组对象

    var Obj = []; //一下代码可以循环插入 var returnObj = new Object();//创建一个对象 returnObj.id = “123”: returnObj.mon ...

  8. Android 中 Environment.getExternalStorageDirectory()无效

    我们在处理缓存的时候,并不是每次都会在应用私有存储空间那里保存,很多时候是需要用到ExternalStorage.我们平时一般都是用Environment.getExternalStorageDire ...

  9. Linux内核分析(九)——总结篇

    序:写在前面的话        本次内容作为Linux内核的总结内容,主要涉及对Linux系统的总体的一些理解,同时将之前的一些总结贴出来作为大家的一个索引,希望笔者的博客能对和笔者一样的菜鸟有一些帮 ...

  10. Laravel 5系列教程二:路由,视图,控制器工作流程

    免费视频教程地址https://laravist.com/series/laravel-5-basic 上一篇教程我们走了那么长的路,终于把Laravel安装好了,这一篇教程我们就要进入Laravel ...