从12支球队中选择6支进入季后赛,假设每支球队的概率都不同

2024-04-28 14:34:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试使用Python运行montecarlo模拟,以确定我幻想中的足球联赛中球队的多个季后赛场景。但是我还没有深入到这一步,因为我还停留在算法的第一步。你知道吗

我已经确定,在算法中,我想做的第一件事就是可靠地挑选6支季后赛球队,如果重复10000次,应该与我分配给球队的概率非常接近。你知道吗

例如,如果我给球队一个78%的概率进入季后赛,我希望我的球队选择算法选择一个7800次的A队在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]))

Tags: theto算法列表团队概率次数team