我正试图通过每季的比赛来创造NBA比赛
我是如何做到这一点的,我选择了一支球队在四分之一的时间内可以得分的数量,然后生成满足这些数量的分数的比赛
假设我选择A队在四分之一的时间里拿下5分。我做了一个算法来生成这个示例列表:
[['2分','SWITCH'],['MISSED 2分','进攻篮板','停留',['3分','SWITCH']]
(这个列表比实际生成的要简单得多。除了抢断和失误之外,我添加了更多的功能,比如助攻和篮板。)
“切换”表示切换所有物,而“停留”表示当前团队保留所有物。每个“切换”需要在其他团队的列表中至少有一个操作可用,而每个“停留”需要在当前团队的列表中至少有一个操作可用
现在,当我为两个不同的团队创建两个列表时,他们的列表可能长度不同,因为(除其他外)一个团队可能得分高于另一个团队
当我试图将这两个列表合并在一起创建逐场模拟时,这可能会导致一个团队在另一个团队上有“切换”时没有动作
我的问题是如何在任何团队列表中添加额外的“切换”或“停留”,以便每个“切换”都在其他团队的列表中有一个操作,而每个“停留”都在当前团队的列表中有一个操作
我的第一个想法是在列表中添加随机失误和偷盗(导致“切换”)并希望它能起作用,但我想不出一个方法来实现这一点
此外,只要列表满足所需的得分数,初始团队列表的顺序就无关紧要
这就是我到目前为止所做的:
def join_steals_tov(团队列表、团队列表):
overall_list = []
possession = 'Team A'
print(len(teamA_list))
print(len(teamB_list))
while teamA_list and teamB_list:
if possession == 'Team A':
play = teamA_list.pop(0)
play.insert(0,'Team A')
overall_list.append(play)
print(f"Team A: {play}")
if play[-1] == 'SWITCH':
possession = 'Team B'
else:
play = teamB_list.pop(0)
play.insert(0,'Team B')
overall_list.append(play)
print(f"Team B: {play}")
if play[-1] == 'SWITCH':
possession = 'Team A'
return teamA_list, teamB_list, overall_list
我认为这是处理马尔可夫链的一个好方法。看一看here
其基本思想是,对于每个当前状态,都有可能进入下一个状态。您可以创建当前状态的概率矩阵,以及下一个状态的概率。然后使用这些权重从
random.choices
中拉出。你想怎么复杂就怎么复杂。关键是从简单开始,让它开始工作,然后你可以添加更多并修饰它(例如,我要添加3分未命中和3分命中的状态,(你还必须包括2分未命中、2分命中的概率……或者你可以将其作为投篮未命中和投篮命中的扩展),但我想我会把这留给你去处理,然后加上。你也可以加上进攻和防守犯规,如果是防守投篮犯规,如果射门有助攻的概率,等等。)这只是一个问题,然后设置一些功能,以保持跟踪的一切和“发挥”了占有
下面是我的例子:
1。为每个团队创建概率矩阵。索引将是当前状态,列是下一个状态。
注意:您希望每行的总和为1
这是A队的概率矩阵:
2。设置如何跟踪得分以及哪个队有球:
3。创建功能以确定谁拥有控球权(即谁处于进攻、防守状态):
4。创建函数,根据概率播放控球:
5。设置初始
current_state
以开始“游戏”并将其玩完:输出:
这里有一种可能的方法来生成一个季度的逐场比赛列表,从两个得分事件列表开始,例如
步骤1:将列表合并为单个列表,并将合并后的列表洗牌,例如
第二步:当同一队连续得分两次时,必须有另一队未得分的事件。因此,创建一个新的播放列表,其中包括那些必须切换的播放,例如
步骤3:在列表中添加一个季度末比赛(只是为了让下一步更容易),例如
第4步:现在添加一些额外的非得分游戏来填充这个季度。在示例代码中,播放列表被填充为10的任意长度。为了真实感,您需要为每个剧本指定一个时间,并填充列表,直到总时间为12分钟
下面是一些示例代码,展示了如何从两个得分重头戏列表中创建10个重头戏的列表:
相关问题 更多 >
编程相关推荐