Closed. This question needs to be more focused. It is not currently accepting answers. Learn more。
想改进这个问题吗?更新问题,使其只关注一个问题editing this post。
我正在为一个有几十支球队的体育联盟制定一个时间表我已经有一个固定的顺序所有的比赛,现在我只需要分配一个队是“主场”队和一个“客场”为每场比赛。
这个问题有两个限制:
每一对球队必须在主客场打相同数量的比赛
互相比赛例如,如果A队和B队打4
游戏,那么2必须由A主持,2必须由B主持。假设每对
一支球队的比赛次数是偶数。
任何一支球队的主场比赛不应超过三场或三场
在赛程的任何时候连续客场比赛。
我一直试图在R中使用蛮力来解决这个问题,但是我的任何代码块都不能及时地解决这个问题有人对如何在算法上处理上述两个约束中的一个(或两个)有什么建议吗?
最佳答案
你需要对简单的日程安排做更多的研究。
网上有很多关于这些事情的参考资料。
以下是应用程序的基本信息。假设一个联盟有6支球队,任何一支球队的过程都是一样的。
比赛1:简单地按顺序、成对、成圈地写下组号。把戒指弄平成两行比赛分上(主场)和下(客场)。
1 2 3
6 5 4
比赛2-5:1队原地不动;其他人绕着篮圈旋转。
1 6 2
5 4 3
1 5 6
4 3 2
1 4 5
3 2 6
1 3 4
2 6 5
这是一个完整的周期。为了平衡主客场赛程,只需每隔一场比赛反转赛程:
1 2 3 5 4 3 1 5 6 3 2 6 1 3 4
6 5 4 1 6 2 4 3 2 1 4 5 2 6 5
这是你的第一个完整回合。简单的复制这个,再次切换主场客场比赛轮换因此,第二轮将是:
6 5 4 1 6 2 4 3 2 1 4 5 2 6 5
1 2 3 5 4 3 1 5 6 3 2 6 1 3 4
根据需要重复这两轮,以获得所需的日程长度。
如果您有奇数个团队,只需在计划表中声明其中一个数字为“再见”。如果我使用非轮换团队——本例中的团队1,我会发现这是最容易理解的。
请注意,这个主场转换过程保证没有一支球队有三场连续的比赛,无论是主场还是客场:他们得到两个在一排时,四舍五入结束然而,即使是两连胜也不会在本轮结束时受到影响:这两支球队在下一轮的首场比赛中都打破了连胜记录。
不幸的是,对于任意现有的时间表,你会陷入一个蛮力搜索与回溯。你可以采用一些限制和启发式方法,比如在每个节点上平衡部分主客场赛程安排作为第一选择不过,更好的方法是通过设计使原来的日程安排正确。
还有一个小问题,你不能保证你现有的时间表将满足给定的要求。例如,假设8组设备按以下顺序排列:
1 2 3 4
5 6 7 8
1 2 5 6
3 4 7 8
1 3 5 7
2 4 6 8
不可能避免至少有两支球队连续三场主客场比赛。
10-07 15:36