[首先免责声明:我是一名医疗专业人员,他既喜欢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进行相同操作
[此算法执行大约7100万个字典查找-170万个面板x 42个(每个手的21个组合两次)。
是我还是我缺乏适当的计算机科学和算法知识?
是Python吗?是Chrome内的Jupyter笔记本吗?
还有其他建议吗?
[首先免责声明:我是一名医疗专业人员,他既喜欢Python也喜欢玩扑克。我都没有接受过正式培训,也不知道a ...