脚本效率扑克模拟统计

2024-10-03 23:22:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我的问题更多的是关于逻辑而不是编码本身: 我正在构建一个python脚本来模拟扑克手并从中获取统计数据。 我的代码非常适用于分配和比较手牌,脚本的唯一瓶颈是为每个玩家获得最佳的牌组合: 模拟是为奥马哈-每个球员得到4张牌和董事会有5张牌。每位玩家必须使用5张牌的最佳组合(2张来自玩家手部,3张来自棋盘)。你知道吗

问题是:到目前为止,我唯一能想到的办法就是比较一个球员可能拥有的每一手牌,然后与其他球员进行比较。你知道吗

例如,玩家A有卡片A1A2A3A4,棋盘是B1B2B3B5B5:

首先,我比较了玩家能得到的所有可能的牌: [A1A2B1B2B3,A1A2B1B2B4,A1A2B1B2B5,…,a3a4b3b5b5]然后得到他最好的牌(每个玩家有60个组合)。你知道吗

对所有玩家执行此操作,然后检查谁拥有赢家牌。你知道吗

我的问题是:你认为有没有一种方法可以让每一个球员的最好的手,而不必检查所有的60个组合?你知道吗

我花了16个小时来运行大约65亿次迭代(大约250万手x 60个板组合x每手40次迭代)。你知道吗

你也能谈谈效率吗?我不知道我是不是在尝试一些不可能的事情

编辑-已解决

谢谢你们的意见,伙计们。最后我通过位操作解决了这个问题:

https://codereview.stackexchange.com/questions/217597/forming-the-best-possible-poker-hand?noredirect=1#comment421020_217597


Tags: 代码脚本编码棋盘玩家逻辑统计数据董事会
2条回答

我不会把自己分成5个硬手:

  • 使用收款台在9张卡片上检查4k,fh,3k,2p,p
  • 使用收款台在地图上(衣服,手)检查 冲洗
  • 如果必须用计数器(x-y代表x,y)检查直线 拉链(手[1:],手)

如果你真的想看到每个玩家最好的5张牌:

  • 将最低的4张(如果有4张)未配对、未适配、未连接的卡转储。你知道吗
  • 这并不能解决所有问题,但会大大减少问题

取决于评估函数的工作方式。如果你有一个黑匣子,拿着一个5张牌的手,然后产生一个评估结果,那么除了把60个5张牌的手都喂给它,你就没什么办法了。但如果它能被分解成碎片,就有可能绕过一些碎片。你知道吗

例如,我在onejoker中的代码是一个5步遍历有向无环图的过程,因此我为7张卡片创建了一个特殊的case函数,它跳过了以相同卡片开头的组合的一些步骤。它仍然会评估所有的21(7选5)个组合,但不到5*21个步骤。你可以为奥马哈的手做类似的事情。你知道吗

相关问题 更多 >