我正在尝试编写一个数学函数来计算获胜或失去玩家的概率。
假设我们只用一副牌(52张牌)玩二十一点,第一个示例牌是这样的:
The player has `7 and 5`
Dealer has `6`
这里我需要计算玩家stands
,经销商获胜的可能性是什么?
我可以用这样的代码来计算这个,但这对6个套牌来说非常低效。
def subset_sum(numbers, target, target2, partial=[]):
s = sum(partial)
# check if the partial sum is equals to target
if s >= target and s <= target2:
print partial
if s >= target:
return # if we reach the number why bother to continue
for i in range(len(numbers)):
n = numbers[i]
remaining = numbers[i+1:]
subset_sum(remaining, target, target2, partial + [n])
我正在寻找一个计算概率并将其返回的数学函数。
def get_prob(deck, small_number, big_number):
return prob
在我们的示例中,经销商有6个如此之小的数字17-6=11
而且大数字是21-6=15
。
5,6,7在第一手使用,所以我的套牌现在就像这样:
dec = [1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,6,6,6,7,7,7,8,8,8,8,9,9,9,9,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10,10]
有了这些数字,
dealer has 6 so small number is 17-6 = 11 and 21-6 = 15
def get_prob(dec,11,15):
return prob
问题:卡的总和在11到15之间的概率是多少?
答案 0 :(得分:0)
正如我在my last answer to one of your Blackjack questions中发布的那样,对于您的特定设置,这在算法上并不是必需的,正如我在上一个问题中所理解的那样。
这是一种简单的排列应用。然而,由于没有办法预测下一次交易后仍然存在的概率,因此计算远期的数据没有意义,因为玩家将无法影响任何深度的结果。计算一次一个概率计算简单。
如果你有一个套牌:
deck = [1,1,1,1,2,2,2,3,3...]
可以使用以下方法获得以范围内的总和结束的概率:
def get_prob(deck, minimum, maximum):
counts = [deck.count(i) for i in range(14)]
return sum(counts[minimum:maximum+1])/len(counts)
简单来说,这个功能,给定一个牌组和一系列可接受的牌值,将返回卡在这些门槛内被抽出的概率。
此外,如果最小值为11
,例如,不计算aces,则无需使用此函数,因为无论如何都需要进行抽奖。