【发布时间】:2019-04-16 10:57:30
【问题描述】:
我的问题更多是关于逻辑而不是编码本身: 我正在构建一个 python 脚本来模拟扑克手并从中获取统计数据。 我的代码非常适合分配和比较手牌,我的脚本的唯一瓶颈是为每个玩家获得最佳的牌组合: 模拟是奥马哈 - 每个玩家得到 4 张牌,棋盘有 5 张牌。每位玩家必须使用 5 张牌的最佳组合(其中 2 张来自玩家手中,3 张来自棋盘)。
问题是:到目前为止,我能想到的唯一方法是比较玩家可能拥有的每一手牌,然后与其他玩家进行比较。
例如,玩家 A 有牌 A1A2A3A4,棋盘是 B1B2B3B4B5:
首先,我比较玩家 A 可以得到的所有可能的手牌: [A1A2B1B2B3, A1A2B1B2B4, A1A2B1B2B5,...,A3A4B3B4B5] 并获得他最好的手牌(即每位玩家的 60 种组合)。
对所有玩家执行此操作,然后检查谁拥有获胜手牌。
我的问题是:您认为有没有一种方法可以让每个玩家的最佳手牌无需检查所有 60 种组合?
我花了 16 个小时来运行约 65 亿次迭代(约 250 万手 x 60 种板组合 x 每手 40 次迭代)。
您能否也谈谈效率?我不知道我是不是在尝试一些不可能在这里完成的事情=P
编辑 - 已解决
感谢您的意见,伙计们。最后我通过位操作解决了它:
【问题讨论】:
-
您的部分问题应该发布在代码审查上。然后,根据您编写的内容,您的脚本运行了 65 亿次不同的迭代。您可以创建多个处理来一次处理多个迭代。最后,对于最有趣的逻辑部分,我很遗憾不知道这个游戏的规则,也不知道你如何定义哪一手牌最好。作为猜测,我想知道您是否可以为每张牌分配一个值并计算手牌的总和/分数。
-
谢谢!我将搜索多重处理。听起来这就是我需要的。
-
好吧,多处理只是并行计算多个迭代的欺骗。它会让事情变得更快,但逻辑/算法的改进会更好。