我正在尝试编写一个脚本来随机化锦标赛的循环赛时间表。
限制条件是:
我的代码理论上运行良好,但是当它生成时,它有时会在某些周冻结,因为该周只剩下两支球队,并且两场可能的比赛都已经打完。我使用 numpy 数组来检查已经进行了哪些比赛。
目前我的代码如下所示:
import random
import numpy
regular_season_games = 14
regular_season_week = 0
checker = numpy.full((8,8), 0)
for x in range (0,8):
checker[x][x] = 1
teams_left = list(range(8))
print ("Week " + str(regular_season_week+1))
while (regular_season_week < regular_season_games):
game_set = False
get_away_team = False
while get_away_team == False:
Team_A = random.choice(teams_left)
if 0 in checker[:,Team_A]:
for x in range (0,8):
if checker[x][Team_A] == 0 and x in teams_left:
teams_left.remove(Team_A)
get_away_team = True
break
while …Run Code Online (Sandbox Code Playgroud) python random algorithm python-3.x sports-league-scheduling-problem
假设有 8 名选手参加沙滩排球比赛。比赛以2对2的方式进行。
作为组织者,我想按照以下规则为玩家生成时间表:
因此,时间表将开始例如:
round 1
player1 + player2 vs player3 + player4
player5 + player6 vs player7 + player8
round2
player1 + player3 vs player2 + player5
player4 + player7 vs player6 + player8
round3
player1 + player4 vs player2 + player3
player5 + player8 vs player6 + player7
etc
Run Code Online (Sandbox Code Playgroud)
通过上面的例子,让我们考虑一下player1。他一直在与玩家 (2,3,4) 一起玩,所以他还有与玩家 (5,6,7,8) 一起玩的比赛
他曾对阵:
Player3 (twice)
Player4
Player2 (twice)
Player5
Run Code Online (Sandbox Code Playgroud)
因此,剩下的 4 场比赛(对于玩家 1)应该与玩家 5、6、7、8 一起进行,并且对手不能是玩家 3 或玩家 2(因为您已经与这些玩家玩过两次)
我在这里看到了很好的例子如何自动生成体育联赛时间表和关于循环赛的维基百科文章 …
algorithm math schedule tournament sports-league-scheduling-problem
algorithm ×2
sports-league-scheduling-problem ×2
math ×1
python ×1
python-3.x ×1
random ×1
schedule ×1
tournament ×1