2015-08-09 3 views
0

Я пытаюсь написать математическую функцию для вычисления вероятности выигрыша или проигрыша игрока.Блэкджек Математическая функция

Предположим, что мы играем в блэкджек только одна колоде (52 карт) и первый пример стороны такова:

The player has `7 and 5` 
Dealer has `6` 

Здесь мне нужно Calculate, если игрок stands, что является probibility дилеров выиграть?

дилер может выиграть, если общая стоимость карты 17 < = х < = 21

я могу вычислить это с помощью следующего кода, но это очень неэффективно для 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

Возможна комбинация (возможно, только уникальная)? – dsgdfg

+0

Конечно, только уникальные. [6,5] и [5,6] - это то же самое.Это не должно быть в два раза @SDilmac –

+0

Я голосую, чтобы закрыть этот вопрос как не по теме, потому что он задает математическую функцию вероятности. Это лучше подходит для математики SE. – DPenner1

ответ

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, в качестве примера, не считая тузов, нет необходимости использовать эту функцию, поскольку ничья должна произойти независимо.

Смежные вопросы