Java 脚本效率-用于统计的扑克模拟
我的问题更多的是关于逻辑而不是编码本身: 我正在构建一个python脚本来模拟扑克手并从中获取统计数据。 我的代码非常适合分配和比较手牌,我的脚本的唯一瓶颈是为每个玩家获得最佳的牌组合: 模拟是针对奥马哈的——每个玩家得到4张牌,棋盘上有5张牌。每位玩家必须使用5张牌的最佳组合(2张来自玩家手部,3张来自棋盘) 问题是:到目前为止,我能想到的唯一方法是比较一名球员可能拥有的每一手牌,然后与其他球员进行比较 例如,玩家A有卡片A1A2A3A4,棋盘是B1B2B3B4B5: 首先,我比较了玩家A能得到的所有可能的牌: [A1A2B1B2B3,A1A2B1B2B4,A1A2B1B2B5,…,A3A4B3BB5]并获得他最好的手牌(每个玩家有60个组合) 对所有玩家执行此操作,然后检查谁拥有赢家牌 我的问题是:你认为有没有一种方法可以在不检查所有60种组合的情况下获得每位玩家的最佳牌数 我花了16个小时来运行65亿次迭代(250万只手x 60个板组合x每只手40次迭代) 你也能谈谈效率吗?我不知道我是否在尝试一些不可能在这里完成的事情 编辑-解决 谢谢你们的意见,伙计们。最后,我使用位操作解决了这个问题:Java 脚本效率-用于统计的扑克模拟,java,python,poker,Java,Python,Poker,我的问题更多的是关于逻辑而不是编码本身: 我正在构建一个python脚本来模拟扑克手并从中获取统计数据。 我的代码非常适合分配和比较手牌,我的脚本的唯一瓶颈是为每个玩家获得最佳的牌组合: 模拟是针对奥马哈的——每个玩家得到4张牌,棋盘上有5张牌。每位玩家必须使用5张牌的最佳组合(2张来自玩家手部,3张来自棋盘) 问题是:到目前为止,我能想到的唯一方法是比较一名球员可能拥有的每一手牌,然后与其他球员进行比较 例如,玩家A有卡片A1A2A3A4,棋盘是B1B2B3B4B5: 首先,我比较了玩家A能得
取决于评估功能的工作方式。如果你只是有一个黑匣子,它接受一个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:],手))
- 转储最低的4张(如果有4张)未配对、未适配、未连接的卡
- 这并不能解决所有问题,但可以大大减少问题