标签: sports-league-scheduling-problem

考虑到某些限制,随机循环联赛赛程

我正在尝试编写一个脚本来随机化锦标赛的循环赛时间表。

限制条件是:

  • 8 队
  • 两队交锋两次,一次主场,一次客场
  • 14周,每队每周一场比赛

我的代码理论上运行良好,但是当它生成时,它有时会在某些周冻结,因为该周只剩下两支球队,并且两场可能的比赛都已经打完。我使用 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

5
推荐指数
1
解决办法
1819
查看次数

更换配对的体育赛事日程

假设有 8 名选手参加沙滩排球比赛。比赛以2对2的方式进行。

作为组织者,我想按照以下规则为玩家生成时间表:

  • 每位玩家与所有人一起比赛(每位玩家 7 场比赛)
  • 每个玩家对战两次

因此,时间表将开始例如:

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

0
推荐指数
1
解决办法
322
查看次数