Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/402.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 脚本效率-用于统计的扑克模拟_Java_Python_Poker - Fatal编程技术网

Java 脚本效率-用于统计的扑克模拟

Java 脚本效率-用于统计的扑克模拟,java,python,poker,Java,Python,Poker,我的问题更多的是关于逻辑而不是编码本身: 我正在构建一个python脚本来模拟扑克手并从中获取统计数据。 我的代码非常适合分配和比较手牌,我的脚本的唯一瓶颈是为每个玩家获得最佳的牌组合: 模拟是针对奥马哈的——每个玩家得到4张牌,棋盘上有5张牌。每位玩家必须使用5张牌的最佳组合(2张来自玩家手部,3张来自棋盘) 问题是:到目前为止,我能想到的唯一方法是比较一名球员可能拥有的每一手牌,然后与其他球员进行比较 例如,玩家A有卡片A1A2A3A4,棋盘是B1B2B3B4B5: 首先,我比较了玩家A能得

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

问题是:到目前为止,我能想到的唯一方法是比较一名球员可能拥有的每一手牌,然后与其他球员进行比较

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

首先,我比较了玩家A能得到的所有可能的牌: [A1A2B1B2B3,A1A2B1B2B4,A1A2B1B2B5,…,A3A4B3BB5]并获得他最好的手牌(每个玩家有60个组合)

对所有玩家执行此操作,然后检查谁拥有赢家牌

我的问题是:你认为有没有一种方法可以在不检查所有60种组合的情况下获得每位玩家的最佳牌数

我花了16个小时来运行65亿次迭代(250万只手x 60个板组合x每只手40次迭代)

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

编辑-解决

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


取决于评估功能的工作方式。如果你只是有一个黑匣子,它接受一个5张牌的手,并产生一个评估结果,那么除了将60张5张牌的手全部交给它之外,你没有什么可以做的了。但如果它能被分解成碎片,就有可能绕过其中一些碎片


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

我不会把它分为5只硬手:

  • 使用托收。在9张卡片的手上计数器检查4k、fh、3k、2p、p
  • 使用集合。在地图上的计数器(fget_西服,手)检查 冲洗
  • 如果必须使用计数器检查直线(x-y代表x,y 拉链(手[1:],手))
如果你真的想看到每位玩家最好的5张牌:

  • 转储最低的4张(如果有4张)未配对、未适配、未连接的卡
  • 这并不能解决所有问题,但可以大大减少问题

部分问题应发布在代码审查上。然后,根据您编写的内容,您的脚本运行65亿次不同的迭代。您可以创建多个处理来同时处理多个迭代。最后,对于最有趣的逻辑部分,我很遗憾地不知道这个游戏的规则,也不知道你如何定义哪只手是最好的。作为猜测,我想知道你是否能给每张卡分配一个值,并计算出手牌的总数/得分。谢谢!我将搜索有关多重处理的信息。听起来这正是我所需要的。好吧,多重处理只是并行计算多个迭代的一个骗局。这会使事情变得更快,但逻辑/算法的改进会更好。最快: