`
javatgo
  • 浏览: 1179040 次
  • 性别: Icon_minigender_2
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

围棋AI之路(三)UCT,进来之后才发现是地狱

阅读更多

照例还是先公布代码http://download.csdn.net/source/913373

以及编译好的可执行程序,下载地址:http://download.csdn.net/source/913515
前面介绍的UCT算法听起来很诱人,但是只有你真正去实验一下你才知道原来有这么多问题。
理论上,UCT是一个一致的算法,它可以随着模拟次数的增加而自然提高棋力,而且理论上,它还可以计算到任意深度,而且理论上,它是天然支持并行计算的。
但是,看看它华丽的外衣下面隐藏着哪些东西吧:
一、模拟速度和内存问题
目前的模拟速度是让我满意的,但是内存跟不上,9路棋盘上的5万局模拟+UCT选择,也只需要1秒多时间,10万局也就差不多3秒钟,但是,如果我想持续进行120秒的模拟,1G的内存也是不够用的。
给我的感觉这个算法需要的内存比并行运算更重要,两个CPU分别模拟5万次和1个CPU独自模拟10万次,结果是不同的。如果我有64位的内存,我觉得这个算法的前景会很可观。
随后我自己想了一种方法来在有限的内存中模拟较长的时间,就是发现内存将要用完时,把胜率不佳的子树砍掉。但是这个改动破坏了算法的一致性,我用围棋试验的结果就是,AI超喜欢把棋连成一根长棍,而且走棋过程中自我感觉良好,快终局时胜率突然下降到投子认负。这应该就是瞎砍树导致模拟结果失去意义了。
二、模拟的收敛性
这么来定义这个收敛性吧,如果一番模拟下来,所有子节点都差不过,没有什么突出的,这就是收敛性差,反之,有少量节点的表现很突出,那么这个模拟的收敛性就好。
纯发散的模拟在五子棋中就是一例:我为五子棋模拟定的简单规则就是随便下,成五则胜。但是模拟结果几乎毫无意义,导致棋盘中间的子的胜率和棋盘边缘的没什么差别。我只好把模拟规则改一下,双方模拟的时候,只在对方和己方棋子的周围随机下棋,AI的棋力马上得到提高,不过这和MC的精神是相冲突的。
另外影响收敛性的还有一个因素,你怎么为节点打分?
目前有两种打分策略:输赢都计分和只记赢局的分。前者收敛性好,但使得AI的行为非常保守,后者收敛性差,而且使得AI冒进。
冒进的例子就是五子棋中,对手活三,AI也活三。
保守的例子还是围棋中的把棋连成棍。
三、模拟的深度
深度和广度是有矛盾的,为了模拟的深一点,AI就要抛弃一些点,这和传统博弈程序是一致的,如前面说的五子棋的模拟,仅局限在棋子周围,则模拟深度很容易就达到9步,但是这样一来,AI就漏掉了有一定间隔的好手了。但是如果把“周围”的范围放宽,模拟深度又上不去。
至今困扰我的两个问题,不知道是不是与深度有关:
问题一,为什么五子棋中AI在自己棋势很好的时候,总是不挡对方的活三呢?
问题二,为什么围棋中,AI能征吃对方的子,但是它自己老做出逃征子(术语:ladder)的事呢?
四、模拟的置信度
在为一个节点做模拟时,是只模拟一次还是模拟多次呢?这在代码中称为节点的成熟度(mature)。如果次数少,则结果的置信度很成问题,次数太多,深度深度又成问题。
而且我发现,围棋中,次数少时效果较好,而五子棋中则是次数多一点效果比较好。
五、接下来怎么改进
在UCT的深渊中挣扎,代码被改的一团糟,因为太多参数可调,搞的写程序变成了做测试。现在我还有几根救命稻草可用。
1 不知道能不能找到完美的砍树算法,使得在节点内存不够时的砍树不要造成太大影响。
2 把树换成图来存储节点,也就是UCG,不知道能有多大帮助。
3 并行,是多个单元独立维护各自的树,还是通过线程互斥让它们更新同一棵树呢?我总觉得多个单元独立运算就像是狼群去和虎斗一样,对它没什么信心。
4 AMAF,算是UCT的一种改进,据说能用较少的模拟次数来得到更多的结果。
5 还有一种思路是将模拟中出现的难解局面抛给对方,自己只选择容易处理的局面,不过这种思路似乎更像是克制MC程序而不是克制人类的。
分享到:
评论

相关推荐

    引入了UCT算法的围棋AI程序代码

    标题中的“引入了UCT算法的围棋AI程序代码”是指该程序使用了一种名为Upper Confidence Trees(UCT)的算法来实现人工智能在围棋游戏中的决策。UCT是蒙特卡洛树搜索(MCTS)的一种变体,特别适用于有限离散决策过程...

    引入了UCT算法的围棋AI程序代码.rar_UCT算法c实现_uct算法源码_围棋_围棋 UCT_棋类代码

    总的来说,这个压缩包提供的UCT算法实现可以帮助开发者深入理解如何利用概率和统计方法在复杂环境中做出智能决策,并可以作为其他棋类游戏AI开发的基础。通过阅读和分析源码,你可以了解到如何在实际工程中有效应用...

    UCT--delphi.rar_ UCT_UCT_围棋

    UCT(Upper Confidence bounds applied to Trees,上界置信区间应用于树)是一种在强化学习领域广泛应用的算法,尤其在围棋等复杂决策游戏中表现出色。UCT算法是Monte Carlo Tree Search(蒙特卡洛树搜索)的一种...

    四子棋AI UCT实现

    四子棋AI UCT(Upper Confidence bounds applied to Trees)实现是一种在博弈树中进行智能决策的方法,常用于解决像四子棋这样的二人零和游戏。UCT算法是蒙特卡洛树搜索(Monte Carlo Tree Search, MCTS)的一个变种...

    Python-Tensorflow仿AlphaGo框架实现的AI围棋程序

    总之,通过这个项目,你不仅可以学习到Python编程和TensorFlow的基本用法,还可以深入理解人工智能在复杂问题解决中的应用,特别是如何将深度学习与强化学习方法相结合,创造出能够与顶尖人类玩家竞争的围棋AI。

    大学生计算机博弈-不围棋资料

    机器学习是人工智能领域的核心技术之一,能够应用于围棋程序的开发。机器学习的主要思想是通过训练和学习来提高计算机的棋艺水平。围棋程序可以通过机器学习来学习游戏的策略和规则,从而提高其棋艺水平。 蒙特卡洛...

    uCT.rar_MATLAB里面的uCT_matlab uct是什么_matlab中uct_matlab定义uCT_uCT如何定

    在MATLAB中,`uCT`可能指的是单位阶跃函数(Unit Step Function),这是一个非常基础且重要的数学概念,尤其在信号处理、控制系统和系统分析等领域中广泛应用。在数学上,单位阶跃函数通常用`u(t)`表示,它定义为: ...

    基于强化学习、蒙特卡洛树搜索的UCT算法智能围棋博弈系统源码(解决围棋死活问题)+项目说明.zip

    2.主要针对各个计算机相关专业,包括计算机科学、信息安全、数据科学与大数据技术、人工智能、通信、物联网等领域的在校学生、专业教师、企业员工。 3.项目具有丰富的拓展空间,不仅可作为入门进阶,也可直接作为...

    开源围棋fuego代码

    最新版本的Fuego代表着当前最先进的围棋AI技术之一。 Fuego的开发基于蒙特卡洛树搜索(Monte Carlo Tree Search, MCTS)算法,这是一种在复杂决策问题中广泛应用的搜索策略。在围棋游戏中,MCTS结合了模拟对弈、...

    python《利用强化学习、基于蒙特卡洛树搜索的UCT算法解决围棋死活题问题-智能围棋博弈系统》+项目源码+文档说明

    2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。...

    基于人工智能理论的围棋人机对弈

    "基于人工智能理论的围棋人机对弈" 本文档是关于基于人工智能理论的围棋人机对弈的知识点总结,涵盖了人工智能的基本概念、搜索的基本概念、状态空间的盲目搜索、状态空间的启发式搜索、与或树的盲目搜索、与或树的...

    UCT--Java.rar_Java-GUI_UCT Java_java 围棋_围 棋_围棋

    当今电脑围棋的最新最强的算法用Java实现

    uct的延伸-RAVE

    UCT(Upper Confidence bounds applied to Trees)算法是一种在博弈树中进行搜索的策略,常用于解决如围棋等复杂游戏的决策问题。它通过结合探索与利用的平衡,有效地探索未知的游戏状态。然而,UCT在游戏早期阶段...

    计算机围棋资料_01.rar

    计算机围棋是人工智能领域的一个重要分支,它涉及到复杂的算法和策略,尤其在谷歌的AlphaGo击败韩国围棋大师李世石后,这一领域受到了广泛的关注。这个压缩包“计算机围棋资料_01.rar”包含了十篇相关的学术文章,让...

    Source file_围棋算法_

    在IT领域,游戏开发是一项...通过理解并掌握这些算法,开发者不仅可以制作出高质量的棋类游戏,还能在人工智能、机器学习等领域中找到应用。对于想要深入了解游戏开发或者棋类智能算法的人来说,这是一个宝贵的资源。

    UCT算法的实现,,,[文].pdf

    "UCT 算法的实现和 Monto Carlo 搜索" UCT 算法(Upper Confidence bounds applied to Trees)是一种monte carlo ...UCT 算法是一种高效的monte carlo 搜索算法,它可以在围棋程序中应用,提高搜索效率和游戏智能性。

    利用强化学习、基于蒙特卡洛树搜索的UCT算法解决围棋死活题问题

    利用强化学习、基于蒙特卡洛树搜索的UCT算法解决围棋死活题问题。Inplement_improved_Reinforcement-Learning-in-Tsumego

    Rave增加新控件

    #### 三、与`TRaveProjectManager`交互 ##### 3.1 公共属性 `TRaveProjectManager`提供了一系列公共属性,如`ActivePage`、`DataSources`等,用于访问和管理项目中的各个组成部分。 ##### 3.2 事件 支持多种事件...

    棋类博弈-四子棋AI-蒙特卡洛搜索树-UCT-算法设计-适用初学者

    通过编写这个AI程序,作者体验到了人工智能的魅力,并期望更多人能从中受益。随着技术的发展,未来的AI将在更多领域展现出强大的智能,我们需要不断学习和适应这些变化,为未来的挑战做好准备。 总结,蒙特卡洛...

Global site tag (gtag.js) - Google Analytics