问题标签 [sports-league-scheduling-problem]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
.net - 如何自动生成体育联赛时间表
我首先要说,我知道这个话题很复杂,而且可能没有一个简单的答案。如果这很容易,那么每个人都会这样做。话虽如此...
我被要求构建一个应用程序来管理一个体育联盟。除了这个之外,大多数概念都相当容易理解:如何生成没有重叠的比赛时间表(球队一次比赛 2 支球队),其中一个分区中的球队与其球队比赛两次,但比赛的球队来自其他部门一次,并确保赛程中没有漏洞(每支球队每周比赛)
现在,该过程是使用我为实现此目的而构建的 Rosetta Stone 类型的电子表格手动完成的,但它仅适用于为其设计的团队数量。我为 30 个团队、24 个团队和 28 个团队做了变化。与其不断尝试重新调整我的翻译表,我希望能够编纂该逻辑并调整该过程。
想法?
python - 为体育联盟生成自然时间表
我正在寻找一种算法来为一组团队生成时间表。例如,想象一个赛季,其中每支球队都互相比赛,一次是作为主队,另一次是作为客队在另一支球队的场地上比赛。
生成本赛季所有比赛的集合很容易,如果球队是球队的列表,则可以这样做:
但我也想按时间顺序排列游戏,使其满足有效游戏时间表的约束并且看起来“自然随机”。
约束是游戏列表应该可以分成多轮,每轮由 n / 2 场比赛组成(其中 n 是球队的数量),其中每支球队与另一支球队配对。
为了使赛程看起来更自然,两支球队不应在连续回合中两次面对对方。也就是说,如果(a,b)在一轮中进行,则游戏(b,a)不应该在下一轮中进行。
此外,每支球队都应该尽可能地每隔一轮比赛作为客队,另一轮作为主队。我认为不可能总是满足这个约束,所以拥有东西更好。例如,一支球队不应该先打 8 场主场比赛,然后再打 8 场客场比赛。
下面是我现在得到的。该算法的主要问题是它经常卡在while循环中。特别是当团队数量为 16 或更多时。它也非常低效,因为它建立在使用随机样本函数的基础上,并希望得到正确的结果:
algorithm - 从一个有 n 个学生的班级计算 w 周对的算法
我正在寻找一种算法来计算 w 周内来自 n 类(学生姓名列表)的对,以便学生永远不会在两个不同的星期内与同一个学生合作。假设 n 是偶数。
例子:
班级:学生 1,2,3,4
周数:3
- 第 1 周的时间表:(1,2), (3,4)
- 第 2 周的时间表:(1,3), (2,4)
- 第 3 周的时间表:(2,3), (1,4)
我认为 w 必须小于或等于 n - 1 因为每个学生都可以最大程度地与其他 n - 1 人合作。但我不知道是否总是有 n - 1 个解决方案。如果有,我想看看以非暴力方式生成这些 n - 1 个解决方案的算法。
这个问题是否有名称以及我应该查看的通用算法?
algorithm - 算法:从一组游戏中选择成对的团队
我正在尝试为体育联盟创建一个调度程序,我想将球队安排在小组中,这样每支球队每组都有一场比赛。我认为我正在尝试做的事情是计算机科学中存在的一个问题,但我不知道它叫什么,而且我很难找到有关它的信息。无论哪种方式,情况如下:
假设我有一组团队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?
例子:
更新: 这个算法将是我在日程生成器中使用的启发式算法之一。目标是将时间表隐含地分成“波”,每个团队每波有一场比赛。假设我有 16 支球队,每支球队将与球队中的其他球队进行 5 场比赛。一个理想的时间表将确保在每支球队至少有一场比赛之前没有球队有他们的第二场比赛。调度程序一次选择一个游戏并为它们分配一个日期。因此,我们的想法是让调度程序跟踪在此“波”中安排的比赛,并且永远不要选择会阻止每个团队在当前波中只打一次的比赛。调度程序还使用了许多其他启发式方法,因此我无法明确排序游戏并使其按顺序进行。
如果这不清楚或不是很严格,我很抱歉。随时要求澄清,我会尽力进一步解释。
algorithm - 算法调度,多队/比赛的循环赛
循环赛算法在每场比赛只让球队见面时工作得很好。但是,如何在两支球队在同一场比赛中相遇的体育比赛或比赛中实施它。例如,2 对 n 支球队在 2 对 n 场比赛中相遇的彩弹比赛。仍然保持所有球队都应该是主队一次且只有一次的约束(如果球队不能平均分配,那么尽可能少的球队不会成为主队是可以接受的)
有任何想法吗?给出的是球队的数量,比赛的数量。每场比赛的球队数量可能是给定的。
algorithm - 学生组合块设计
我和我的同学正在准备一场比赛。我负责将他们中的 60 人分成 6 人一组。团队成员将每周轮换。我想以这样一种方式将他们组合在一起,这样在下一次切换时,同一团队的两名成员不会去另一个团队。谷歌搜索并检查 stackover flow 我发现了一个与此类似的问题(忘记标记 URL :()。根据提供的答案,我得出以下结论:每个人都必须与 59 人坐在一起。在每个班次中这个人必须和另外 5 个人坐在一起。所以我有 59/5 种方法可以让一个人坐下来满足我的约束。因为 59/5 不是整数,所以这是不可能的。
- 我的假设是否正确?
- 是否有可能使用诸如回溯之类的技术来实现解决方案?如果是这样,谁能告诉我如何实现这样的解决方案?
提前致谢 !!!!
algorithm - 比赛日程算法,每支球队进行特定数量的比赛
我有特定数量的团队。我希望每支球队在 4 个指定时间与 4 个不同的对手进行 4 场比赛。
复杂性在于没有球队可以同时进行两场不同的比赛。例如,如果团队 1 像这样玩
team1 vs team2,team1 vs team3,team1 vs team4,team1 vs team5,
那么 team2 已经占用了第一个时间段,因此 team2 可以这样玩
(team2 vs team1),team2 vs team3,team2 vs team4, team2 vs team5
但是这里出现了问题,team3 将在第二个时间段与 team1 和 team2 一起比赛,这是无法做到的。
我不知道这个算法可以叫什么,但我正在寻找算法来实现它。
我搜索了循环赛和其他比赛,如匹配算法以及婚姻问题,但我认为我的问题不同。如果我错了,请纠正我。
任何帮助是极大的赞赏。
python - 生成所有唯一的对排列
我需要生成所有可能的配对,但限制是特定配对只在结果中出现一次。例如:
生成所有可能的两对排列;这是输出的一小部分:
我如何进一步过滤它,以便我只看到一次(8,4)(在所有过滤的排列中),和(8,5)只看到一次,(0,1)只看到一次,和(4,7 ) 只有一次,等等?
基本上我想要这样的排列,使得每个两元素配对只发生一次。
我敢打赌,还有一个额外的 itertool 可以解决这个问题,但我不够专业,不知道它是什么。
更新:Gareth Rees 是正确的——我完全没有意识到我正在尝试解决循环问题。我还有一个额外的限制,那就是我正在做的是将人们分组以进行结对编程练习。因此,如果我的人数是奇数,我需要创建一个三人小组,以在每个练习中包括一个奇数人。我目前的想法是(1)通过添加一个隐形人来使人数为偶数。然后,配对后,找到与隐形人配对的人,并将他们随机放入现有的组中,形成一个三人团队。但是,我想知道是否还没有一种算法或对循环的调整可以更好地做到这一点。
更新 2:Theodros 的解决方案产生了完全正确的结果,而没有我上面描述的不雅点。每个人都非常乐于助人。
php - 足球联赛调度算法(带同步主/客场)
我正在制作一个自动足球联赛生成器并按计划进行。我有一个生成所有内容的算法,但没有时间表。看一看:
例如:
现在,当我获得所有这些数据时,我可以只用很少的数据foreach()
来获取我需要的东西。但是 - 我想要的是将团队正常放入红色和蓝色团队。
我是说:
- 一侧的一支队伍(蓝队或红队)最多可打 2 次;
- 一轮中的一支球队必须
$totalTours/2
在一轮中进行比赛。
例如,如果有 9 支球队,在第一轮中,一支球队必须参加 4 场红色巡回赛(总共,不是连续)和 5 场蓝色巡回赛。在第 2 轮中,它必须进行 5 次红色巡回赛,4 次蓝色巡回赛。
即使有 100 个团队,该算法也必须有效。
php - 循环赛主场客场分布
我正在编写一个脚本,该脚本使用固定第一队的循环算法创建锦标赛装置。而且效果很好。
问题是,当我创建这些固定装置时,我必须尽可能地把家和家分布在离哈哈哈... H - 是家而 A - 不在的模式中。限制是球队不能连续打 3 场主场(或客场)比赛。
我尝试的是保留每支球队参加的主场和客场比赛的数量,然后主场或客场人数最少的球队将在应有的地方比赛。
例如
Team 1 (2 H and 1 A) VS Team 2 (with 2 H and 2 A)
结果将是:
问题:有没有其他方法可以实现这种在家外分发,如果是这样的话,它背后的想法是什么?