7판 4선승제에서 승리 확률 계산하는 코드 (python)
- 목차
반응형
from itertools import combinations
# 각 경기별 승리 확률
p = [0.35, 0.60, 0.60, 0.50, 0.60, 0.55, 0.45]
# 전체 경기에서 이길 확률을 계산하는 함수
def win_probability(p):
total_games = len(p)
wins_needed = len(p) // 2 + 1
total_win_prob = dict()
# 가능한 모든 조합을 생성
for combo in combinations(range(total_games), wins_needed):
win_prob = 1
win_scenario = ''
last_game = max(combo) + 1
for index in range(last_game):
if index in combo:
win_prob *= p[index]
win_scenario += 'W'
else:
win_prob *= (1- p[index])
win_scenario += 'L'
total_win_prob[win_scenario] = round(win_prob, 8)
return total_win_prob
prob = win_probability(p)
print(sum(prob.values())) # 0.5478525
이런 것도 가능하다.
lose_prob = win_combinations([1-x for x in p])
# 5세트까지 진행 시 승리확률 (4 또는 5세트에서 경기가 마무리된 경우의 승리확률)
win = sum([value for key, value in prob.items() if len(key) <= 5])
lose = sum([value for key, value in lose_prob.items() if len(key) <= 5])
win / (win + lose) # 0.6019575856443719
# 6세트 진행 시 승리확률
win = sum([value for key, value in prob.items() if len(key) == 6])
lose = sum([value for key, value in lose_prob.items() if len(key) == 6])
win / (win + lose) # 0.5818953323903819
마지막 경기 승리확률이 45%인 이 선수는 반드시 6세트 내로 끝내야 함을 재확인할 수 있다.
728x90
반응형
'파이썬 Python' 카테고리의 다른 글
Python - Decorator 이해하기 (0) | 2024.06.17 |
---|---|
python으로 제곱근(root) 계산하는 함수 구현하기 (0) | 2024.04.26 |
wtf python 알아두면 좋은 내용 정리 (0) | 2024.01.31 |
Python 모르고 놓치고 있는 유용한 기능 (0) | 2024.01.30 |
객관식 문제 채점 프로그램 (python) (1) | 2021.03.23 |