标签: poker

击败扑克机器人

有一个名为PokerPirate的新开源扑克机器人.我对Web应用程序可以检测/阻止/击败扑克机器人的任何创造性方式感兴趣.(这是一个纯粹的学术讨论,与PokerPirate写的一样精神.)

security poker artificial-intelligence

107
推荐指数
4
解决办法
2万
查看次数

生成所有5张牌扑克牌

乍一看这个问题听起来很简单,但事实证明它看起来要复杂得多.这让我很难过.

有52c5 = 2,598,960种方法可以从52张牌中选择5张牌.然而,由于套装在扑克中是可以互换的,所以其中许多都是等同的 - 手2H 2C 3H 3S 4D相当于2D 2S 3D 3C 4H - 简单地换掉套装.根据维基百科,一旦你考虑到可能的套装重新着色,有134,459个不同的5张牌.

问题是,我们如何有效地生成所有这些可能的手?我不想生成所有的手,然后消除重复,因为我想将问题应用于更多的卡,以及评估快速螺旋失控的手的数量.我目前的尝试集中在生成深度优先,并跟踪当前生成的卡以确定哪些套装和等级对下一张卡有效,或者广度优先,生成所有可能的下一张卡,然后通过转换每个卡来删除重复通过重新着色来制作"规范"版本.这是我在Python中尝试广度优先的解决方案:

# A card is represented by an integer. The low 2 bits represent the suit, while
# the remainder represent the rank.
suits = 'CDHS'
ranks = '23456789TJQKA'

def make_canonical(hand):
  suit_map = [None] * 4
  next_suit = 0
  for i in range(len(hand)):
    suit = hand[i] & 3
    if suit_map[suit] is None:
      suit_map[suit] = next_suit
      next_suit += 1
    hand[i] = hand[i] & …
Run Code Online (Sandbox Code Playgroud)

python algorithm poker permutation combinatorics

38
推荐指数
1
解决办法
1万
查看次数

7 Card Poker Hand Evaluator

有谁知道评估7张扑克牌手的快速算法?比一组7中的每21张5张牌组合更加有效率的东西.

干杯,

皮特

algorithm poker playing-cards

35
推荐指数
4
解决办法
3万
查看次数

如何以编程方式计算扑克赔率?

我正在尝试编写一个简单的游戏/实用程序来计算扑克赔率.我知道有很多资源可以讨论这样做的公式,但我想我无法将其转换为代码.特别是,我对Texas Hold-em感兴趣...

我知道有几种不同的方法,一种方法是你可以根据你能看到的牌来计算你手牌的几率.另一种方法是计算你赢得某手牌的几率.第二种方法似乎要复杂得多,因为你必须输入更多的数据(有多少玩家等)

我不是要求你为我写的,但是在正确的方向上的一些推动会有所帮助:-)

poker statistics probability

34
推荐指数
2
解决办法
4万
查看次数

建立德州扑克从头开始玩AI ..

我有兴趣用Java构建Texas Hold'Em AI引擎.这是一个长期项目,我计划投资至少两年.我还在上大学,还没有建立任何雄心勃勃的东西,并希望解决一个长期存在我兴趣的问题.我是人工智能领域的新手.从我在大学的数据结构课程中,我知道基本的构建模块,如BFS和DFS,回溯,DP,树,图等.我正在学习正则表达式,为SCJP和SCJD学习,我将很快采取(密集) )统计课程.

问题:

- 我从哪里开始?我应该选哪些书?玩扑克游戏程序的人工智能是什么样的?我可以从哪个开源项目中获取页面?Java中有哪些优秀的AI资源?我也有兴趣学习Lisp,Jatha好吗?

lisp java poker artificial-intelligence jatha

32
推荐指数
2
解决办法
3万
查看次数

优化查找:字典键查找与数组索引查找

我正在写一个7卡扑克手评估员作为我的宠物项目之一.在尝试优化速度时(我喜欢挑战),我惊讶地发现,与数组索引查找相比,Dictionary键查找的性能相当慢.

例如,我运行了这个示例代码,列举了所有52个选择7 = 133,784,560个可能的7个牌手:

var intDict = new Dictionary<int, int>();
var intList = new List<int>();
for (int i = 0; i < 100000; i ++)
{
    intDict.Add(i, i);  
    intList.Add(i);
}

int result;

var sw = new Stopwatch();
sw.Start();
for (int card1 = 0; card1 < 46; card1++)
  for (int card2 = card1 + 1; card2 < 47; card2++)
    for (int card3 = card2 + 1; card3 < 48; card3++)
      for (int card4 = card3 + 1; card4 < 49; card4++) …
Run Code Online (Sandbox Code Playgroud)

.net c# poker performance

28
推荐指数
3
解决办法
3万
查看次数

检测在线扑克作弊

它最近出现在一个大型扑克网站上,一些玩家可能通过利用已发现的安全漏洞看到所有对手的牌.

一个天真的骗子会以极快的速度赢得胜利,而且这些作弊通常很快被捕获,如果不能很快被抓住,他们很容易通过他们的手历史快速扫描来发现.

更难的问题发生在骗子表现出情报,诈唬他们必须被召入的地方时,用最坏的牌召唤河牌,基本前提是他们故意丢失底池以掩盖他们看到其他球员牌的能力,他们以合理的现实率获胜.

鉴于:

  • 数百万个经过验证和完整的信息手记录的数据集
  • 理论无限的计算机能力
  • 假设游戏无限注德州扑克,虽然奥马哈或限制扑克的建议可能是有益的

我们怎样才能合理准确地对这些作弊者进行分类呢?最初的2 + 2线程呼吁创意,我认为SO社区可能有一些有用的建议.

这也是一个有趣的问题,因为它是最新的,并且如果有人找到创造性的解决方案,它在改善世界方面具有真正的应用,因为真正的玩家很有可能在发现识别的骗子时将资金退还给他们.

poker statistics artificial-intelligence classification anti-cheat

27
推荐指数
3
解决办法
3183
查看次数

最简单的扑克手评估算法

我在考虑扑克牌(5张牌)的评价Java.现在我正在寻求简单和清晰,而不是性能和效率.我可能会写一个"天真"的算法,但它需要大量的代码.

我还看到了一些扑克评估库,它们使用散列和按位操作,但它们看起来相当复杂.

什么是扑克手评估的"最干净,最简单"的算法?

java algorithm poker r data-structures

22
推荐指数
4
解决办法
5万
查看次数

更快的扑克手评估

我正在尝试使用"RayW手评估器"方法来获得卡组合分数(7个中最好的5个卡).但是我在这个方法上遇到了一些性能问题.根据消息来源 - 使用这种方法,必须能够每秒评估超过300密耳的手!我的结果是1.5秒内10毫秒,这慢了很多倍.

"RayW手评估者"背后的想法如下:

Two Plus Two评估器由一个包含大约三千二百万个条目的大型查找表组成(准确地说是32,487,834).为了查找给定的7张牌扑克牌,您可以在此表中跟踪路径,每张卡执行一次查找.当你到达最后一张牌时,这样获得的值是手牌的官方等值

这是代码的样子:

namespace eval
{
public struct TPTEvaluator
{
    public static int[] _lut;

    public static unsafe void Init() // to load a table
    {
        _lut = new int[32487834];
        FileInfo lutFileInfo = new FileInfo("HandRanks.dat");
        if (!lutFileInfo.Exists)
        {throw new Exception("Handranks.dat not found");}

        FileStream lutFile = new FileStream("HandRanks.dat", FileMode.Open, FileAccess.Read, FileShare.ReadWrite, 4096);

        byte[] tempBuffer = new byte[32487834 * 4];
        lutFile.Read(tempBuffer, 0, 32487834 * 4);

        fixed (int* pLut = _lut)
        { Marshal.Copy(tempBuffer, 0, (IntPtr)pLut, 32487834 * …
Run Code Online (Sandbox Code Playgroud)

c# poker ranking winforms

19
推荐指数
1
解决办法
6519
查看次数

Sharkscope或PTR数据究竟是如何挖掘所有这些手的?

我很想知道这个过程是如何运作的.这些网站(http://www.sharkscope.comhttp://www.pokertableratings.com)的数据每天都来自安全的扑克网络,如PokerStars和Full Tilt.

他们是否有一个服务器场运行应用程序,打开数百个表(窗口),然后以某种方式蜘蛛/数据正在播放的手?

这是如何工作的,编程明智?

poker data-mining

15
推荐指数
2
解决办法
1万
查看次数