PokerKit: 开源多变体扑克游戏模拟和分析库
PokerKit是由多伦多大学计算机扑克研究小组开发的开源Python库,旨在为扑克游戏模拟、牌力评估和统计分析提供全面的解决方案。与现有的扑克工具相比,PokerKit具有以下几个显著特点:
多变体支持
PokerKit支持广泛的扑克游戏变体,包括但不限于:
- 德州扑克
- 奥马哈扑克
- 七张牌梭哈
- 短牌德州扑克
- 二七低牌三次换牌
- 百家乐等
这使得PokerKit成为目前支持变体最多的开源扑克库之一。
灵活的自定义能力
除了内置的游戏变体,PokerKit还提供了灵活的框架,允许用户定义自己的自定义游戏。用户可以自定义:
- 牌型
- 街数
- 下注结构
- 高/低分牌规则 等游戏参数
这种灵活性使PokerKit能够适应各种扑克变体和研究需求。
直观的API设计
PokerKit提供了直观易用的高层次API,使用户可以方便地:
- 创建和管理游戏状态
- 执行各种游戏操作(发牌、下注、弃牌等)
- 评估牌力
- 进行统计分析
API的设计参考了成熟的国际象棋引擎python-chess,使用函数调用来与游戏进行交互。
高度可控的游戏状态
PokerKit允许对游戏状态进行细粒度控制,包括:
- 每条街结束后的下注收集
- 全压情况下的强制亮牌
- 摊牌顺序控制
- 选择弃掉最好的牌
- 摊牌后杀死输牌
- 筹码推送和收集
这种细粒度控制使PokerKit能够精确模拟真实的扑克游戏流程。
高效的手牌评估
PokerKit内置了高效的手牌评估功能,支持各种扑克牌型的评估。与其他开源库相比,PokerKit支持更多的牌型,并提供了统一的评估接口。
可靠性和可扩展性
PokerKit经过严格的测试和验证:
- 使用静态类型检查
- 广泛的文档测试和单元测试
- 99%的代码覆盖率
这确保了库的可靠性和稳定性。同时,PokerKit的设计也考虑了可扩展性,便于用户进行二次开发。
应用场景
PokerKit可应用于多个领域:
-
扑克AI开发:提供灵活的游戏环境用于训练和测试AI代理。
-
扑克工具开发:可用于开发牌力计算器、训练软件等工具。
-
在线扑克平台:可作为在线扑克室的底层游戏逻辑引擎。
-
扑克研究:支持对各种扑克变体进行统计分析和策略研究。
使用示例
以下是使用PokerKit模拟一手著名的百万美元底池的德州扑克游戏的示例代码:
from pokerkit import Automation, NoLimitTexasHoldem
state = NoLimitTexasHoldem.create_state(
(
Automation.ANTE_POSTING,
Automation.BET_COLLECTION,
Automation.BLIND_OR_STRADDLE_POSTING,
Automation.HOLE_CARDS_SHOWING_OR_MUCKING,
Automation.HAND_KILLING,
Automation.CHIPS_PUSHING,
Automation.CHIPS_PULLING,
),
True,
500,
(1000, 2000),
2000,
(1125600, inf, 553500),
3,
)
state.deal_hole("Ac2d") # Ivey
state.deal_hole("????") # Antonius
state.deal_hole("7h6h") # Dwan
state.complete_bet_or_raise_to(7000) # Dwan
state.complete_bet_or_raise_to(23000) # Ivey
state.fold() # Antonius
state.check_or_call() # Dwan
state.burn_card("??")
state.deal_board("Jc3d5c")
state.complete_bet_or_raise_to(35000) # Ivey
state.check_or_call() # Dwan
state.burn_card("??")
state.deal_board("4h")
state.complete_bet_or_raise_to(90000) # Ivey
state.complete_bet_or_raise_to(232600) # Dwan
state.complete_bet_or_raise_to(1067100) # Ivey
state.check_or_call() # Dwan
state.burn_card("??")
state.deal_board("Jh")
print(state.stacks) # [572100, inf, 1109500]
这个例子展示了PokerKit如何精确模拟一个真实的高额底池扑克游戏,包括发牌、下注、弃牌等操作。
结论
PokerKit为扑克游戏模拟和分析提供了一个全面、灵活和可靠的开源解决方案。它支持广泛的扑克变体,提供直观的API,允许细粒度的游戏控制,并经过严格测试。无论是进行AI研究、开发扑克工具,还是构建在线扑克平台,PokerKit都是一个强大的工具。
该项目的源代码托管在GitHub上: https://github.com/uoftcprg/pokerkit
欢迎扑克爱好者、研究人员和开发者们使用PokerKit,并为这个开源项目做出贡献。通过社区的共同努力,我们可以不断改进这个库,为计算机扑克领域带来更多的创新和进步。