Выбор 6 команд из 12 для проведения плей-офф, учитывая, что каждая команда имеет разную вероятность - PullRequest
1 голос
/ 05 октября 2019

Я пытаюсь запустить симуляцию Монте-Карло, используя Python, чтобы определить несколько сценариев плей-офф команд в моей лиге фэнтези-футбола. Но я еще не углубился в это, так как я застрял на первом шаге алгоритма.

Я определил, что первое, что я хочу сделать в алгоритме, это надежно выбрать 6Команды плей-офф таким образом, что если повторение 10000 раз должно довольно близко соответствовать вероятностям, которые я назначил командам.

Например, если я дал команде А вероятность 78% пройти в плей-офф, яхочу, чтобы алгоритм выбора моей команды выбирал команду A 7800 раз из 10000 с разумной степенью ошибки, может быть +/- 1%, например, 7700 - 7900 раз из 10000.

Алгоритм на английском языке в основном: "для каждой команды в лиге выберите случайный процент (1-100 / 100) и сравните его с вероятностью того, что команда попадет в плей-офф. Если бросок кубика меньше или равен вероятности команды пройти плей-офф, тодобавьте их в список.Если после прохождения всех 12 команд этот список имеет длину ровно 6, верните результат. В противном случае очистите список, нажмите звездочку. и продолжайте, пока у вас не будет ровно 6 ".

К сожалению, реальные результаты, которые я получаю, состоят в том, что команды с вероятностью выше 50% в итоге получают чуть больше матчей в плей-офф, а команды под 50%в вероятности заканчивают с немного меньшим количеством появлений плей-офф. Таким образом, команда 33% регулярно появляется 2800-2900 раз (28-29%), но команда с вероятностью 68% регулярно появляется 7100-7200 раз (71-72%)

Если я удалюта часть кода, которая проверяет, является ли список точной длиной 6, и разрешает ли списки всех длин, вывод становится более соответствующим вероятностям и находится в пределах погрешности 1%, которую я ищу. Но мне нужно, чтобы этот список имел точную длину 6. Итак, как мне обойти это?

Я довольно новичок в Python, так что будьте осторожны :) Совет очень важен, спасибо!

import random

#List is (team abbreviation, playoff odds)
AA = ["AA",.33]
BG = ["BG",.99]
BSC = ["BSC",.68]
BT = ["BT",.95]
CHA = ["CHA",.97]
DDB = ["DDB",.11]
EJ = ["EJ",.48]
KCT = ["KCT",.82]
MTA = ["MTA",.00]
NSR = ["NSR",.01]
TDP = ["TDP",.57]
THR = ["THR",.09]
teams = [AA,BG,BSC,BT,CHA,DDB,EJ,KCT,MTA,NSR,TDP,THR]

# Algorithm to pick the 6 playoff teams
# Dice roll turned into a percentage and compared against each team's probability
# Throw out any results that don't have exactly 6 teams

def playoffs():
    while True:
        playoff_list = []
        for i in teams:
            diceroll = random.randint(1,100) / 100
            if i[1] >= diceroll:
                playoff_list.append(i[0])
            else:
                continue
        if len(playoff_list) == 6:
            break
        else:
            continue
    return playoff_list

# Function to run the above selection algorithm 10,000 times
# Add every 6-team scenario to one giant list with 60,000 items

def playoffs_check():
    playoff_teams = []
    playoff_test = 0
    while playoff_test < 10000:
        playoff_teams.extend(playoffs())
        playoff_test += 1
    return playoff_teams

# Run the algorithm
# Count the results so you can compare to the original probabilities

playoffs_list = playoffs_check()
for x in teams:
    print(x[0],playoffs_list.count(x[0]))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...