我如何加快我的Python扑克手与手净值计算器的速度

问题描述 投票:0回答:1

[首先免责声明:我是一名医疗专业人员,他既喜欢Python也喜欢玩扑克。我都没有接受过这方面的正规培训,而且我也不知道计算机科学课程的内容。我使用的计算机是台式机i7-4790 3.6 Ghz,具有16 GB的RAM和Jupyter笔记本电脑。

我的目标是为我编写相当于pokerstrategy.com Equilab或https://www.cardschat.com/poker-odds-calculator.php的代码。我只会坚持使用德州扑克。

为了做到这一点,我需要为任意五张卡的组合编写一个评估器。我做到了,它可以完美地完成工作,考虑手中的每张卡并产生一个元组作为输出,例如:

('2h', '3c', '4s', '6s', 'Jh'): (0, 11, 6, 4, 3, 2)
High-card hand, kickers J, 6, 4, 3, 2

('7c', 'Ad', 'Kd', 'Kh', 'Tc'): (1, 13, 14, 10, 7)
One pair, pair of kings, kickers A, T, 7

('2c', '3c', '4c', '5c', 'Ac'): (8, 5)
Straight flush, 5 high

因此,它区分A 9 8 7 3和A 9 8 7 5同花或高牌。我检查了所有2 598 960张卡片组合的皇家同花顺,四方形,满座等的理论数量,并且检查了频率(https://www.quora.com/How-many-possible-hands-are-there-in-a-five-card-poker-game

现在,我试图评估这260万个中的所有5张纸牌组合,结果耗时51秒,令人失望。

我有点以为我的5卡评价器不能成为算法竞赛的冠军,并且肯定有更好的方法(如果相关,可以在此处张贴),但是我认为没关系。一旦评估了所有5卡组合,我将它们保存在词典中,下次我将加载字典,当我有5卡组合时,我将简单地查询结果。

另一个令人失望的地方。 1亿(1000万)个木板搜索大约需要23-24秒。这是我不了解的部分!!!我基本上有一个260万的数据库。行x 2列,搜索是如此缓慢。十亿个记录数据库如何完成所有工作?将我的整个字典保存到文件中需要88 Mb-这是一个巨大的数据库吗?

最后,我做了一个完整的vs.手动评估器,用伪代码可以做到这一点:

  • 举起2手,例如AhA与6d6h

  • 列出所有可以处理这2张“死”卡的棋盘,即1 712 304棋盘

  • 列出hand1与板1的全部21种组合,

  • << >
  • 对hand2和board1进行相同操作

  • [[比较hand1的最佳结果与hand2的最佳结果
  • 计算结果是否有利于hand1,hand2或平局
  • 转到下一个董事会
  • [此算法执行大约7100万个字典查找-170万个面板x 42个(每个手的21个组合两次)。

  • 现在,这是一场灾难。相对于对局,每手约80秒。以这些速度,我无能为力。因此,对于我如何使它变得更好,我们将不胜感激。

是我还是我缺乏适当的计算机科学和算法知识?

是Python吗?是Chrome内的Jupyter笔记本吗?

还有其他建议吗?

[首先免责声明:我是一名医疗专业人员,他既喜欢Python也喜欢玩扑克。我都没有接受过正式培训,也不知道a ...

python combinatorics poker
1个回答
0
投票
每张可能的扑克手
© www.soinside.com 2019 - 2024. All rights reserved.