[英]Is there an efficient algorithm to create this type of schedule? [closed]
我正在为一个拥有数十支球队的体育联赛制定时间表。 我已经按照设置的顺序完成了所有比赛,现在我只需要为每个游戏分配一个团队作为“主队”,一个“离开”队。
该问题有两个约束:
我一直试图在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
根据需要重复此轮,以获得所需的时间表长度。
如果您的团队数量奇异,只需在时间表中声明其中一个数字作为“再见”。 如果使用非轮换小组,在本例中,我发现最容易遵循。
请注意,此转场过程可确保没有球队在主场或客场进行三场连续比赛:在四舍五入时,他们连续获得两场比赛。 但是,即使是两人制比赛也不会在本轮结束时受到影响:这两个球队在下一轮的第一场比赛中都打破了连胜纪录。
不幸的是,对于现有的任意计划,您都陷入了带有回溯的蛮力搜索。 您可以采用一些限制和试探法,例如在每个关口将平衡局部居家固定装置作为首选。 不过,更好的方法是通过设计使原始时间表正确。
还有一个小问题,您不能保证您现有的时间表将满足给定的要求。 例如,给定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
这是无法避免具有至少两支球队连续打三个主场或客场比赛。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.