1
介绍
在今天的推文中,公众号将向大家展示如何在Python中表示基本的扑克元素,例如“手牌”和“组合牌”(Hands、Combos),以及如何计算扑克赔率,即在无限注德州扑克中获胜/平局/失败的可能性。 我们将使用 Poker包 来表示手牌、组合和区间。
https://poker.readthedocs.io/en/latest/index.html
首先导入相关库文件:
from poker import Range from poker.hand import Combo import holdem_calc import holdem_functions import numpy as np import pandas as pd import matplotlib.pyplot as plt from IPython.core.display import display, HTML hero_odds = [] hero_range_odds = []
2
翻牌(Flop)
K♠、J♣
我们将使用poker.hand来构造我们的手牌:
hero_hand = Combo('KsJc') print(hero_hand)
我们不清楚翻牌前发生的事情以及我们的位置。我们只知道翻牌前有加注,而翻牌后只剩下两名玩家:我们自己和另外一个人。
我们现在领先了。翻牌出现了:
Q♣、 10 ♠ 、J ♠
是的,顺子!
假设没我们有事先了解对方的牌型,让我们计算翻牌后的赔率:
flop = ["Qc", "Th", "9s"] board = flop villan_hand = None exact_calculation = True verbose = True num_sims = 1 read_from_file = None odds = holdem_calc.calculate_odds_villan(board, exact_calculation, num_sims, read_from_file , hero_hand, villan_hand, verbose, print_elapsed_time = True)
Holdem_calc 中的函数 calculate_odds_villan 计算出特定的德州扑克某手牌获胜的概率。通过运行蒙特卡罗方法可以估算出该概率,也可以通过模拟所有可能的手牌来精准计算。快速计算翻牌后的精准赔率,因此在这里我们不需要蒙特卡罗近似值。这是我们的赔率:
hero_odds.append(odds[0]['win']) odds[0] {'tie': 0.04138424018164999, 'win': 0.9308440557284221, 'lose': 0.027771704089927955}
此时,我们感觉还不错。与随机牌相比,我们只有2.77%的机会输,获胜的机会超过93%,这很乐观。
考虑到翻牌前有加注,对反很可能会有一些东西。我们称这种可能的手牌为一个区间。这是我们根据几个因素(包括对反的举止、位置、赌注大小等&