创造平衡的网球轮

时间:2016-06-19 16:57:08

标签: python schedule linear-programming

我们是一群20人,我们喜欢参加2对2网球比赛。我们每个人每轮打一场比赛,总共进行5轮比赛,所以每个人都打5场比赛。匹配有两个限制:

  • 每个人都有不同的等级(从1到5),所以比赛必须是平衡的:两个等级为5和5的玩家不能与两个等级相匹配。所以在两队之间,等级的差异必须低于或等于1.5 Ej。:1.5级和2级vs 2级和2.5级。团队之间的级别差异为1,因此接受匹配。
  • 如果两名球员在一场比赛中一起比赛,他们就不能在接下来的比赛中再次比赛。

我设法创建了一个执行上面指定的python脚本,但是根据人员的级别完成大约需要20分钟:/。我所做的就是将每个人列入清单,将其分为5个4人名单,检查条件是否满足,并重复每一轮。

我尝试使用线性编程(LP)对问题进行建模,但我不知道哪个是我的优化功能开始...有关如何使用或不使用LP的任何想法?

提前致谢!

1 个答案:

答案 0 :(得分:1)

您可以使用虚拟目标,甚至尝试最小化级别差异的最大值。

我的MIP模型并非完全无关紧要,但它解决得非常快(大约一秒左右使用商业解算器)。

enter image description here enter image description here

结果看起来很好看:

enter image description here

我假设两名球员不能在同一支球队中不止一次。即不只是在同一个游戏中。在我的情况下,你可以不止一次与另一个玩家对战。

可以找到一个更复杂的例子here