一尘不染

在“两加两手”扑克评估师上,如何从传递给它的7张纸牌中获得最好的5张纸牌组合?

algorithm

是否可以从等效值中提取该信息?

我知道等效值越高越好。类别和等级也可以从等效值中提取。但是,有没有办法找出传递给它的7张中最好的5张卡组合呢?

Twoplustwo是最快的扑克手牌评估器(每秒评估14-15百万手牌)。您给它7张牌​​,它会吐出一个手当量值。值越高,卡片越好。

以下是关于“两个加两个”的重要摘要:http : //www.codingthewheel.com/archives/poker-hand-
evaluator-roundup#2p2

上面链接的缓存版本:http ://web.archive.org/web/20130116102452/http:
//www.codingthewheel.com/archives/poker-hand-evaluator-
roundup


阅读 365

收藏
2020-07-28

共1个答案

一尘不染

(免责声明:我正在开发一款扑克软件,该软件可以进行人工评估等)

您给它7张牌​​,它会吐出一个手当量值。

有几位评估者在这样做,如果我没有记错的话,其中一些评估者每秒计算超过一亿手(!)。这些评估器基本上可以在一个巨大的阵列中进行7次阵列查找,并且只需要几个周期(尽管缓存未命中)即可评估一手牌。我认为14-15百万/秒不是最快的速度。如果我没有记错的话,CactusKev的评估器速度提高了10倍。

现在回答您的问题:

您如何从传递给它的7张纸牌中获得最好的5张纸牌组合?

好吧,它并不能告诉您, 但是 一旦您有了手的力量,它就会变得非常容易:您不需要重新发明轮子。

您可以使用强度来简化“七分之五”的计算。

可能 还用到其他库,给你的直接最好的五卡(而不只是他们的实力),或者你可以用实力给自己找到了最好的五张牌。

我只举几个例子…

  • 您知道自己有一个满屋的房子( 又称 “船”),然后就知道要查找具有相同等级的三张牌,然后是最好的一对(如果有两对,但是您一定会找到至少有一个,因为评估人员告诉您您有船)。

  • 您知道自己有一个顺子:找到5张紧挨着的卡片,从最好的一张开始(注意特殊的车轮保护套)。

您也可以对直道有更高的评价:您可以利用所有可能的直道的优势,并比较评估者为您提供的优势。如果匹配,例如,十高的顺子,那么只需寻找任何T,9、8、7和6卡(无论西装如何)。

  • 您知道自己没有“对子”:只需拿走您发现的五张最高牌

  • 等等

只有几个不同的等级…例如,它们可能是:

NO_PAIR
ONE_PAIR
TWO_PAIRS
SET
STRAIGHT
FLUSH
FULL_HOUSE
FOUR_OF_A_KIND
STRAIGHT_FLUSH

(当然,您可以根据需要创建中间的“平直”,“平直冲”和“皇家平冲”等)

一旦知道您的手是哪种类型(由于您使用的是快速评估器),只需切换到一段代码即可找到该特定手的七分之五。

我认为这是一个很好的进行方法,因为您可以利用超快速评估器,然后大大简化了逻辑。

在启动时,您需要计算一次强度,例如通过计算:

HIGHEST_NO_PAIR_HAND = ultraFastEvaluator( "As Kd Qh Jc 9d 5s 2c" );

HIGHEST_FULL_HOUSE = ultraFastEvaluator( "As Ac Ad Kh Ks 8s 2h" );

我当然不主张在这里使用字符串。这只是一个例子…

然后,您可以为每只手找到五个最佳手:

  • 使用快速评估器计算强度
  • 是<= HIGHEST_NO_PAIR_HAND吗?
    • 是:拿五张最高的牌
    • 否:是<= HIGHEST_ONE_PAIR_HAND吗?是:拿最高对+最高三张牌否:是<= HIGHEST_TWO_PAIRS_HAND吗?
    • 等等

因此,在我看来,您 可以 重用直接在7个中找到5个最好的API或完全重写您自己的API,但是如果您使用快速评估程序的结果来简化逻辑,它将更快。

编辑 注意,不一定有 一种 方法可以做到“七分之五”。例如,在Kc Kd Qh Qs 2c板上使用As Ac,“ As Ac Kc Kd
Qh”和“ As Ac Kc Kd Qs”都“五个最好”(最后一个女王的衣服无关紧要)。

2020-07-28