我正在为一个拥有数十支球队的体育联赛制定时间表。我已经按照设置的顺序完成了所有比赛,现在我只需要为每个游戏分配一个团队作为“主队”,一个“离开”队。
问题有两个约束:
我一直试图在R中使用蛮力来解决此问题,但是我无法获得任何代码块来及时解决此问题。有人对如何通过算法处理上述一个或多个约束有任何建议吗?
答案 0 :(得分:2)
您需要对简单调度进行更多研究。 这些方面有很多参考资料。 这是您的应用程序的基础。假设一个由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
要避免有至少两支球队连续三场主场或客场比赛,这是 。