Как рассчитать вероятность победы для трёх и более участников соревнования (желательно на Python)

К примеру проходит некое состязание в котором участвуют четыре участника со следующими шансами на победу: первый - 20, второй - 40, третий - 60, четвертый - 70. Т.е. шанс на победу, это произвольное число, некий показатель силы. Состязание проходит в несколько раундов, победитель в каждом раунде может быть только один. Как произвести расчет количества побед за несколько раундов, к примеру 10, для каждого игрока, с учётом его шансов на победу?


Ответы (1 шт):

Автор решения: CrazyElf

Ну это получается "метод Монте-Карло" видимо. Только раундов пришлось взять побольше, иначе у игроков с маленькими шансами вообще ни разу побед не бывает:

import random
from collections import Counter

num_players = 4
player_numbers = list(range(1,num_players+1))
player_chances = dict(zip(player_numbers, [20,40,60,70]))
rounds = 100

c = Counter(max(player_numbers, key=lambda x: random.random() * player_chances[x]) for _ in range(rounds))
print(c.most_common())

Вывод (игрок, побед):

[(4, 45), (3, 43), (2, 11), (1, 1)]
→ Ссылка