德州扑克AI简介——2015华为软件精英赛小结

       2015华为软件精英挑战赛的比赛目的是设计德州扑克比赛的牌手程序,采用的是无限注的比赛规则。具体比赛规则见下面链接。在接到这个赛题之初,我们做的第一件事情是熟悉德州扑克的比赛规则,并尽可能去寻找现有的开源项目或者程序。具体来说,着手点主要有四点:维基、论文、比赛和开源项目。
       首先阅读的是维基,这里参考的主要是英文的维基百科。通过维基百科,大致了解了德州扑克的发展历史和现状,并且得知在现在每年的都会有人与机器的德州扑克比赛和机器与机器之间的德州扑克比赛。此外,通过维基百科,还了解到当前主流学术界对于德州扑克AI的研究情况以及在设计德州扑克AI中遇到的主要难点。
       具体来说,与德州扑克相关的比较出名,且被我们重点关注的比赛主要有:Association for the Advancement of Artificial Intelligence(AAAI)每年举办的赛事;Annual Computer Poker Competition 每年的机器对机器的比赛。AAAI 的比赛找不到源代码,因此对于我们的帮助不是很大;而 Annual Computer Poker Competition 比赛在2014年之前是不提供源代码,只是提供比赛的数据,到了2014年之后,比赛要求参赛的成员提供牌手程序代码,并且在其官方网站上也提供来参赛选手比赛程序的下载链接。相对来说,这是一个很考的资料参考网站。除此之阿外,还有人与AI的Poker比赛等等,由于时间和精力有限,就不再关注了!
       在维基中了解的另外一个内容是知道了一些有名的Poker机器人,比如:

  • Claudico,由卡耐基梅龙大学的教授 Tuomas Sandholm 与其学生研发。不过,这个程序需要超级计算机和16T的内存才能运行,根本不适用于本次比赛;
  • Polaris,也是 University of Alberta 开发Poker AI,不过主要针对的是 heads-up有限注的情况,对于我们的比赛参考价值不大
  • Cepheus,由 University of Alberta 开发的针对 Head-up limit Poker 比赛的 AI。能够找到相应的算法源代码,并且有专门介绍这个 AI 网站。并且开发这个AI的大学也是业内专门研究Poker的最出名学府。我么在比赛的过程中花费了大量的时间研究它的算法 CFR+ 算法。不过此AI应用于2人有限注的情况,因此对于本次比赛的参考价值有限
  • Tartanian7 获取 Computer Poker Competition 的多个Poker项目的冠军,也能够找到牌手程序的源码,就应用来说,对于我们的程序有很高的参考价值。不过,这个比赛针对的是非无限注的情况,且比赛的人数不多,最多只有三个人,这也点也或多或少有些限制;

           在介绍Poker的论文中,更多的提及是采用机器学习的方法,解决Poker中的模型设计参数求解问题。其中提及的算法多种多样,根据自己看到的论文,提及最多的算法当属CFR、神经网络算法。其余一些算法也有所提及,但是由于不了解相关算法,没有能够理解论文内容;且不提供源代码,具体靠个人在一个月内复现出来难度太高,因此,这方面也没多大收获。但是,对于论文来说,其主要思想是通过构建Poker的策略模型,然后通过设计算法,来求解纳什均衡的参数。
           为此,需要首先对纳什均衡的概念有一定的了解。具体来说,纳什均衡是一种策略的组合,使得每个参与人对于其他参与人策略的最优反应。假设在博弈中,如果某种情况下无一个参与者可以独自行动而增加收益(即为了自身利益最大化,没有一方愿意改变其策略),则此策略组合被称为纳什均衡。所有局中人的策略构成一个策略组合。
           因此,对于德州扑克牌手程序的设计问题转化为建立德州扑克牌手模型,并求取纳什均衡条件下的模型参数问题。可惜的是,在当时比赛的时候,意识到的比较晚。
           此外,在资料搜索的过程中,也涉及到了一些开源项目,并且获得了非常不错的借鉴效果。小结一下,一些觉得有用的Poker开源项目主要如下:

    • PokerTH
      PokerTH 是一个开源的跨平台德州扑克项目,提供德州扑克的联网、本机比赛,能够获取源码。此源码采用的是C++编写,我们参赛队伍的程序主要参考此项目的源码,并在此基础上改进而得到
      PokerTH链接:http://www.pokerth.net/download.html
    • PokerAI
      PokerAI 是一个能够智能打德州扑克的程序。由于其为一个商业程序,因此,并没有能够在互联网上找到其源代码,也是比较可惜吧。
    • OpenHoldem
      OpenHoldem 是谷歌维护的一个开源的德州扑克策略内核吧(可能有些不对),此项目内容多,功能庞大。同样,存在阅读、理解困难的问题。因此,虽然可以免费获取源码,但我们队伍并没有能够从中获取多少参考内容。
      OpenHoldem链接:https://github.com/OpenHoldem/openholdembot
    • Pokekr-Engine
      由 University of Alberta 的一个人用 Java 写的Poker引擎,主要作用是判断、比较手牌大小、手牌强度等,功能较为分散。我们队伍当时急于需找一个完整的Poker牌手程序系统,因此,也没有过多参考这个程序
      Poker-Engine链接: https://github.com/bubuntux/poker-engine

       以上就是在做了7天左右的背景资源寻找之后得出的结论,足够给设计Poker比赛获取一个背景信息了。

德州扑克的规则如下:
http://baike.baidu.com/link?url=LRubmRHa_jQctARCV3ZHBp7_nLvCaby1ex1RyJZlJFWFF35kFW8nm-rcWRIiX9ztGa4zSfw8-RnabhvjCHKlv2zoWDk_zYiO5RK2biR2A2-VLb8l6HQtVfke3NfD7qMUQbb6X-XOL_2BRQQj2G5vcA_IR3u9_xa8B2w6LLehD7kef7kQ1OC83D3V03Grgs8x
AAAI 链接:
http://www.aaai.org/Conferences/AAAI/2014/aaai14poker.php
Cepheus 链接:
http://poker.srv.ualberta.ca/

你可能感兴趣的:(心路,设计,程序)