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
반응형