算法:从一组游戏中选择一对团队

时间:2011-10-24 18:11:33

标签: algorithm scheduling combinatorics

我正在尝试为体育联盟创建一个调度程序,我想将团队安排在一起,以便每个团队每组获得一个游戏。我认为我想要做的事情是计算机科学中存在的一个问题,但我不知道它叫什么,我很难找到有关它的信息。无论哪种方式,情况如下:

假设我有一组团队A = {1,2,3,...,n}和一组这些团队B = {(1,2), (1,3), (2,4), (6,9),...}。 B没有A队的所有可能组合。假设A队的队数相同。我的程序正在尝试创建B的子集(让我们调用该子集S),这样A中的每个团队都只出现在S中一次。它通过将对从B移动到S来实现,一次一个。假设它已经在S中放置了几对。如何根据当前情况确定是否有可能成功创建S?

示例:

A = {1,2,3,4}, B = {(1,2), (1,3), (1,4), (3,4)}

If after one move, S = {(1,2)}, then it can be completed by moving (3,4).
If after one move, S = {(1,3)}, then it cannot be completed.

更新 该算法将是我在计划生成器中使用的启发式算法之一。目标是隐含地将时间表分成“波浪”,每个团队每波有一个游戏。所以,假设我有一个由16支队伍组成的队伍,每支队伍将有5场比赛对阵其他队伍。一个理想的时间表将确保在每支球队至少有一场比赛之前没有球队有他们的第二场比赛。调度程序一次选择一个游戏并为其分配日期。因此,我们的想法是让调度程序跟踪在这个“浪潮”中安排的游戏,并且永远不会挑选一个会阻止每个团队在当前波浪中完全播放一次的游戏。调度程序还使用了许多其他启发式方法,因此我无法明确地对游戏进行排序并使其按顺序排列。

如果不清楚或不严谨,我很抱歉。请随时要求澄清,我会尽力进一步解释。

2 个答案:

答案 0 :(得分:3)

图论中的Maximum matching problem。有一些已知的算法可以解决它。

在问题图G中(V - 顶点集,E - 边集),其中V = A,E = B.同时向图中添加相反的边。每条边的重量为1.

我建议您将Hungarian Algorithm用于二分图,将Edmond's algorithm用于其他图。

答案 1 :(得分:0)

重要的是做出一些假设来澄清下面的内容 首先,假设我们正在谈论乒乓球联赛中的16支球队,并且你想要一个所有球队在不重复任何对手的情况下进行五场比赛的赛程。 第二,你希望所有16支球队在任何球队再次比赛之前完成比赛 第三次,您希望分配所有团队在8个桌面上进行游戏,而不是让一个团队始终安排在同一个桌面上玩。

如果我的假设正确,你需要的是前5"套" (你称之为每组一波)来自平衡的16队循环赛程。这将为您提供锦标赛类型的团队比赛,每支球队对5支不同的球队进行5场比赛。每组(或波)都有8场比赛,并且没有任何球队总是计划在同一桌上比赛,并且在所有球队都完成了当前比赛之前,球队不会在下一场比赛中进行比赛。

以下是前5"套"来自我为您创建的平衡的16队计划。看看吧。

16 TEAM SCHEDULE       DATE 8/3/14            

DATE   DAY  TIME    LOCATION    GM#  HOME VS VISITOR

___ __ ___ _______  Table #1     1   #1  v  #16
___ __ ___ _______  Table #2     1   #2  v  #15
___ __ ___ _______  Table #3     1   #3  v  #14
___ __ ___ _______  Table #4     1   #4  v  #13
___ __ ___ _______  Table #5     1   #5  v  #12
___ __ ___ _______  Table #6     1   #6  v  #11
___ __ ___ _______  Table #7     1   #7  v  #10
___ __ ___ _______  Table #8     1   #8  v  #9

___ __ ___ _______  Table #1     2   #13 v  #2
___ __ ___ _______  Table #2     2   #15 v  #1
___ __ ___ _______  Table #3     2   #16 v  #14
___ __ ___ _______  Table #4     2   #12 v  #3
___ __ ___ _______  Table #5     2   #11 v  #4
___ __ ___ _______  Table #6     2   #10 v  #5
___ __ ___ _______  Table #7     2   #9  v  #6
___ __ ___ _______  Table #8     2   #7  v  #8

___ __ ___ _______  Table #1     3   #6  v  #7
___ __ ___ _______  Table #2     3   #16 v  #12
___ __ ___ _______  Table #3     3   #15 v  #13
___ __ ___ _______  Table #4     3   #14 v  #1
___ __ ___ _______  Table #5     3   #2  v  #11
___ __ ___ _______  Table #6     3   #4  v  #9
___ __ ___ _______  Table #7     3   #5  v  #8
___ __ ___ _______  Table #8     3   #3  v  #10

___ __ ___ _______  Table #1     4   #8  v  #3
___ __ ___ _______  Table #2     4   #14 v  #12
___ __ ___ _______  Table #3     4   #1  v  #13
___ __ ___ _______  Table #4     4   #9  v  #2
___ __ ___ _______  Table #5     4   #10 v  #16
___ __ ___ _______  Table #6     4   #11 v  #15
___ __ ___ _______  Table #7     4   #4  v  #7
___ __ ___ _______  Table #8     4   #5  v  #6

___ __ ___ _______  Table #1     5   #3  v  #6
___ __ ___ _______  Table #2     5   #13 v  #11
___ __ ___ _______  Table #3     5   #15 v  #9
___ __ ___ _______  Table #4     5   #2  v  #7
___ __ ___ _______  Table #5     5   #10 v  #14
___ __ ___ _______  Table #6     5   #16 v  #8
___ __ ___ _______  Table #7     5   #12 v  #1
___ __ ___ _______  Table #8     5   #4  v  #5

-