SKPokerEval, 7卡德克萨斯电脑手持鉴定器

分享于 

4分钟阅读

GitHub

  繁體 雙語
7-card Texas Hold'em bot
  • 源代码名称:SKPokerEval
  • 源代码网址:http://www.github.com/kennethshackleton/SKPokerEval
  • SKPokerEval源代码文档
  • SKPokerEval源代码下载
  • Git URL:
    git://www.github.com/kennethshackleton/SKPokerEval.git
    Git Clone代码到本地:
    git clone http://www.github.com/kennethshackleton/SKPokerEval
    Subversion代码到本地:
    $ svn co --depth empty http://www.github.com/kennethshackleton/SKPokerEval
    Checked out revision 1.
    $ cd repo
    $ svn up trunk
    
    SKPokerEval

    一个快速轻量级的德克萨斯举行的32位 7-card 手计算器用 C++ 编写。

    状态

    Build Status

    我怎么用它?

    #include<iostream>#include"SevenEval.h"intmain() {
     // Get the rank of the seven-card spade flush, ace high. std::cout <<SevenEval::GetRank(0, 4, 8, 12, 16, 20, 24) <<std::endl;
     return0;
    }

    实现是不可变的,已经是线程安全的。 没有初始化时间。

    :它是如何工作的

    在key的基础上,我们利用一个关键方案来正确识别任何 7-card 手的积分等级,这个等级是最好的手,同样的等级的双手总是绘制。 我们需要的内存足够少,只有 135kB 个以上,通常是六个额外的补充手。

    从我们计算的第十三个非负整数开始,最大七次的形式和每一次都是唯一的: 0.1.5.22.98.453。2031.8698.。和0. 有效的和可能是 0 +0+1+1+1+1+5 = 9或者 0 +98+98+453+98+98+1 = 846,但无效的求和表达式包含 0个 +262349+0+0+0+1 ( summands太少),1 +1+5+22+98+453+2031+8698 ( summands太多),0 +1+5+22+98+453+2031+8698 ( 尽管 1 +5 +22+98+453+2031+8698是一个合法的表达式,但又有太多的summands ) 和 1 +1+1+1+1+98+98 ( 1太多'。 我们将这些整数分配为卡片面值,并将这些值添加到一起,以生成任何非刷新 7-card 手的键。 我们看到的最大的非齐平键是 7825759,对应于4 个quad-of-aces-full-of-kings中的任意一个。

    同样,我们分别为黑桃,心,钻石和梅花分配整数值 0,1,8和。 {0, 1.8.57 } 中精确的七个值之和在所有这些总和中都是唯一的。 我们添加 7-card 手的服装,以产生一个"刷新检查"密钥,并使用这个来查找清洗服装的价值。 我们看到的最大清洗键是 7999,对应于任何四个 7-card 直接刷新的,最大的服装键为 399.

    我们得到的最幸运的方面是,我们拥有的最大非齐平键是一个 23-bit 整数( 注释 2 ^23 = 8388608 ),最大的fit键是 we = 0,是一个 9-bit 整数( 注释 2 ^9 = 512 )。 在每次flush的时候,我们都会把一张 23的牌钥匙放在一张given上,然后再把它add一张牌。 这个整数键只能通过标准 32位 int 类型来适应,但仍然有足够的信息来决定是否查找。

    :项目进展如何

    以v1.1为基线,随机 SevenEval 访问的采样相对吞吐量已经被认为已经发生了更改,如以下所示。

    版本相对吞吐量原因
    1.11.00
    1.4.21.18散列。
    1.61.50从刷新案例中删除分支。
    1.71.53减少哈希表。
    1.7.11.57减少分级哈希表。
    1.81.93按字节排列的索引卡。
    1.8.12.04简化空格键更小的偏移表。
    1.92.04减少哈希表。

    我想贡献什么,我如何描述我的更改?

    项目包含一个分析器插件,它可以用来帮助测试你的更改。

    g++ -c -std=c++11 -O3 Profiler.cpp
    g++ -o profile Profiler.o
    ./profile

    对于优化,这开始变得引人注目,例如 30%或者更高的收益。


    TEX  CAR  EVAL  evaluator  
    相关文章