Algorithm 安排16队1v1比赛,6种不同游戏类型

Algorithm 安排16队1v1比赛,6种不同游戏类型,algorithm,combinations,permutation,combinatorics,schedule,Algorithm,Combinations,Permutation,Combinatorics,Schedule,我的任务是为公司的团队比赛制定时间表。起初,我认为这将是相当琐碎的,但我有一些困难想出一个有效的解决方案。以下是需要满足的事实: 共有16支队伍 有6个不同的1v1游戏要玩 每队必须参加所有6种比赛类型 没有两个队可以打两次 有8个可用的“回合”或“时段”,一个团队可以玩游戏。这意味着一支球队将有两轮休息,不打比赛 在同一轮中,任何游戏类型不得玩两次 这不是一个循环赛,因为所有球队都不会相互比赛。这有点类似于a,但有一个限制,即所有球队都必须玩多种游戏类型。我正在努力找出正确的算法来确定这个

我的任务是为公司的团队比赛制定时间表。起初,我认为这将是相当琐碎的,但我有一些困难想出一个有效的解决方案。以下是需要满足的事实:

  • 共有16支队伍
  • 有6个不同的1v1游戏要玩
  • 每队必须参加所有6种比赛类型
  • 没有两个队可以打两次
  • 有8个可用的“回合”或“时段”,一个团队可以玩游戏。这意味着一支球队将有两轮休息,不打比赛
  • 在同一轮中,任何游戏类型不得玩两次

这不是一个循环赛,因为所有球队都不会相互比赛。这有点类似于a,但有一个限制,即所有球队都必须玩多种游戏类型。我正在努力找出正确的算法来确定这个日程安排,任何帮助或信息都会非常有用。

我想你可以使用局部搜索来解决这个问题,但让我给你一个数学构造

将16支队伍分为8支A队和8支B队。除2个B队外,每个A队将与所有B队比赛。每个B队将参加除2个A队以外的所有比赛

这种构造需要两个相互正交的8x8拉丁方,例如:

abcdehfg
badchegf
cdabgfhe
dcbafgeh
ehgfabdc
hefgbacd
fghedcab
gfehcdba

abcdefgh
cdabhgfe
efhgabdc
hgefcdba
dcbaghef
badcfehg
feghbacd
ghfedcab
按A团队索引行,按B团队索引列。第一个拉丁方的条目指定A队与B队比赛的活动。其中两个字母被视为其他字母。根据拉丁方块的特性,每个团队只完成一次活动(休息两次)

第二个拉丁方的条目表示A队何时与B队比赛(或双方休息)。根据拉丁方块的特性,每个队在每一轮中做一件事。根据相互正交的拉丁方的特性,每一个活动在每一轮中恰好发生一次

在Python 3中:

import string


def latin8a(i, j):
    return i ^ j


def latin8b(i, j):
    b = i >> 2
    return (i << 1) ^ (b << 3 | b << 1 | b) ^ j


a_teams = string.ascii_uppercase[:8]
b_teams = string.ascii_uppercase[8:16]
for i in range(8):
    print()
    print('Round', i + 1)
    for j in range(6):
        print(a_teams[latin8a(i, j)], 'vs', b_teams[latin8b(i, j)],
              'in game type', string.ascii_lowercase[j])

这是一个完美的救命稻草。非常感谢你!
Round 1
A vs I in game type a
B vs J in game type b
C vs K in game type c
D vs L in game type d
E vs M in game type e
F vs N in game type f

Round 2
B vs K in game type a
A vs L in game type b
D vs I in game type c
C vs J in game type d
F vs O in game type e
E vs P in game type f

Round 3
C vs M in game type a
D vs N in game type b
A vs O in game type c
B vs P in game type d
G vs I in game type e
H vs J in game type f

Round 4
D vs O in game type a
C vs P in game type b
B vs M in game type c
A vs N in game type d
H vs K in game type e
G vs L in game type f

Round 5
E vs L in game type a
F vs K in game type b
G vs J in game type c
H vs I in game type d
A vs P in game type e
B vs O in game type f

Round 6
F vs J in game type a
E vs I in game type b
H vs L in game type c
G vs K in game type d
B vs N in game type e
A vs M in game type f

Round 7
G vs P in game type a
H vs O in game type b
E vs N in game type c
F vs M in game type d
C vs L in game type e
D vs K in game type f

Round 8
H vs N in game type a
G vs M in game type b
F vs P in game type c
E vs O in game type d
D vs J in game type e
C vs I in game type f