问题标签 [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.
python - 需要帮助根据对决表创建联赛时间表
我有一张桌子,上面有一组球队,他们需要与其他球队打多少场比赛,如下所示:
在这张表中,a、b、c、d 队各打两场,另一组各打一场,每队共打 10 场。我需要根据此表创建每周对战时间表(例如:第 1 周 - a vs b、c vs d 等),以便所有比赛将在 10 周内进行,每支球队每周进行一场比赛. 换句话说,我需要知道每支球队在 10 周内每周打哪支球队,以便每支球队打 10 场比赛。没有要考虑的家/外地。
编辑:还有一点需要注意的是,每支球队每周都将在同一天比赛,所以基本上它将这些比赛安排在 10 天之内,每支球队在 10 天的每一天都打一场比赛。
我很难找到一个好的方法来做到这一点,所以如果有人对算法/包有任何建议或者可以向我指出一些资源(我的首选语言是 python),我将非常感激。
提前致谢!
python - 条件循环橄榄球抽签的列表操作
我学校的一位橄榄球教练要求我为即将到来的比赛编写一个有条件的橄榄球比赛平局,任务安排如下:给定一个 1-12 支球队的名单,分成 3 组([Group1 = 1, 2, 3, 4], [Group2 = 5, 6, 7, 8,], [Group3 = 9, 10, 11, 12]) 生成并打印 11 轮循环比赛,条件如下:
- Group1 中的团队与 Group3 中的团队不同
第 1 组中的球队与第 1 组中的所有其他球队进行两次比赛(例如 1v2、2v1、1v3、3v1、1v4、4v1、1v5、5v1 ......)
同样的规则适用于 Group3 中的团队,因为他们与 Group3 中的其他团队竞争
- 第 2 组中的队伍每队每队一次。
- Group1 和 Group3 中的球队需要一场 Bye Game。
我尝试了多次,但不可避免地被卡住了,以下是我的 2 次尝试:
尝试1:
尝试2:
我的预期结果将是打印每一轮,显示哪个团队正在研究哪个团队,每个团队都有这样的历史:
Group1 中的一个团队有以下经文历史:(以任意随机顺序)
1v2、2v1、1v3、3v1、1v4、4v1、1v5、1v6、1v7、1v8,再见
Group2 中的一个团队有以下经文历史:(以任意随机顺序)
5v1、5v2、5v3、5v4、5v6、5v7、5v8、5v9 5v10、5v11、5v12
Group3 中的一个团队有以下经文历史:(以任意随机顺序)
9v10, 10v9, 9v11, 11v9, 9v12, 12v9, 9v5, 9v6, 9v7, 9v8, 再见
我可能会做的任何指示或改进将不胜感激,因为我在过去 2 周一直被困在最后一个障碍上
javascript - 将赛季时间表分成几周而不重复球队比赛
我正在制定联赛时间表,但我一直坚持在任何给定的一周内,一支球队应该只参加一次比赛。
到目前为止,我已经确定了正确的比赛场数,并且每支球队都与他们的同盟对手交手 4 次,与他们的跨区对手交手 2 次。这是我为此编写的代码:
然后我通过一个 shuffle 函数运行它:
然而,我被困在最后一块,即将这个游戏时间表变成单独的几周。由于有 12 支球队,本赛季每周应该有 6 场比赛——在这 6 场比赛中,没有球队应该出现两次。换句话说,每支球队都应该每周打一场,但只能打一次。
总共有192场比赛,需要分成32周,每场6场。
我怎么能确保这一点?
java - 足球比赛调度算法
我即将创建一个用于足球比赛调度的算法。主要的调度规则(据我所知)是:
- 有偶数队
- 一个赛季包括2轮
- 在一个比赛日,每支球队只打一场比赛
- 上一个比赛日的主队应该是下一个比赛日的客队(如果可能的话-我查看了意甲赛程,并且排除了此规则-每支球队连续踢2次(主/客-第一轮/复仇回合)在一个赛季
- 有2轮比赛,规则如下:第一轮第一场比赛(比赛日1)A队与B队(A:B)比赛,所以复仇比赛B:A应该在- matchday进行
allMatchDays/2 + i
,其中i = 1
目前的做法:
团队和比赛蓝图如下:
该算法不起作用。这
线程“主”java.lang.IllegalArgumentException 中的异常:绑定必须为正
被抛出 - 这意味着对于某些球队的某个比赛日有 0 场可能的比赛,它们满足开头列出的那些规则。我不确定,我在这里缺少什么以及调度算法应该如何反映真实的算法。换句话说,为什么possibleMatches.size()
会发生这种情况0
以及应该进行哪些更正以使该算法正常工作?
python - 在某些限制条件下随机化循环联赛的赛程
我正在尝试编写一个脚本来随机化锦标赛的循环赛时间表。
约束是:
- 8支球队
- 两队交手两次,一次主场,一次客场
- 14周,每周每队一场比赛
我的代码理论上可以正常工作,但是当它生成时,它有时会在某些周冻结,因为那一周只剩下两支球队,而且两场可能的比赛都已经进行过。我使用一个 numpy 数组来检查已经进行了哪些比赛。
目前我的代码如下所示:
algorithm - 选择成对的球队进行每一轮比赛,在重复之前获得最大的曝光率
我正在编写一个运动时间表生成器。给定T队(偶数)、每轮G场比赛( T /2 的倍数)和R轮,我想生成一个符合条件的时间表:
- 所有球队在一轮比赛中的比赛数量相同。
- 团队组合在重复之前完全用尽。
我有一个算法在大多数情况下都有效,但并非总是如此。在这个问题的末尾有详细说明。如何修复(或替换)此算法以稳健地适用于所有合理的输入?
这个问题类似于Sorting pair of teams with non-repeating | 循环赛和算法:从一组比赛中选择成对的球队,但有不同的要求。
例如,假设有T =4 个团队。这给了我们 6 种可能的游戏:
如果每轮有G =4场比赛,那么第一轮一定不是这组比赛……</p>
…因为 T0 可以玩 3 次,而 T3 只能玩一次(违反了要求 #1)。相反,第一轮可能看起来像这样,每支球队都可以参加两场比赛:
如果在第二轮中重复相同的一组游戏,那么这两个游戏(T1,T2)
将(T0,T3)
永远不会发生(违反要求 #2)。因此,我们要确保在我们挑选新游戏之前将它们包含在第二轮中。T =4、G =4、R =5的有效时间表将是:
如所见,对于较大的R值,最终重复一轮中的一组游戏是可以接受的。
我的算法是这样工作的:
- 计算所有独特的团队配对组合(可能的游戏)。将此列表另存为
currentPool
. - 创建一个空列表,名为
otherPool
. - 对于每一轮,G次执行以下操作:
currentPool
将本轮比赛中每支球队的出场次数相加,找出总和最低的比赛。- 将游戏添加到回合中。
- 将游戏从 移动
currentPool
到otherPool
。- 如果
currentPool
为空,则交换currentPool
和otherPool
。
- 如果
对于T、G和R的许多合理值,此算法有效。但是,有些组合会失败。例如,当T =6、G =3、R =5 时,它会生成以下调度:
第一轮是正确的,但在第二轮中,T0 玩了两次,而 T5 从来没有玩过。问题很容易发现——在第 2 轮中选择后(T0,T2)
,(T1,T3)
唯一可能满足要求 #1(T4,T5)
的游戏是 ,但该游戏已经在第一轮中使用过,并且每个要求 #2 直到全部 15 个才能重新使用独特的游戏用完了。算法从一个死胡同开始,无法回溯。
最后,为了完整起见,这里是所描述算法的 JavaScript 版本。这是成功运行的示例输出:
algorithm - 生成满足条件的表格(比赛队伍分配)
我希望一个活动生成一个满足某些条件的表,例如:
- 有16组
- 有8个活动
- 有8个回合,一个团队只能做一个活动
- 每个小组都需要做每一项活动
- 每项活动必须容纳 2 组,不得超过
- 我们希望一个小组再也不会遇到同一个小组(这样人们可以看到最多的其他人:-))
我们尝试在 Excel 中手动生成它,但总是有一些组再次看到对方。
我们试图手动“生成一个列表”,但我们总是结束我们的团队相互交叉,比如在这个例子中团队 7 和团队 9 交叉 3 次: 到目前为止生成的表
我虽然也许一个三维数组可以做到,但这对我来说似乎有点矫枉过正,而且肯定有一些已知的方法来处理这些情况。
algorithm - 体育比赛日程表,换对
让我们想象一下有 8 名球员参加沙滩排球比赛。比赛以 2 对 2 进行。
作为组织者,我想为具有以下规则的玩家生成时间表:
- 每个玩家与每个人一起玩(每个玩家7场比赛)
- 每个玩家与每个玩家交手两次
因此,时间表将开始,例如:
通过上面的示例,让我们考虑 player1。他一直和球员(2,3,4)一起比赛,所以他还和球员(5,6,7,8)一起比赛
他一直在对抗:
所以剩下的 4 场比赛(球员 1)应该和球员 5,6,7,8 一起比赛,对手不能是球员 3 或球员 2(因为你已经和他们打过两次了)
我在这里看到了很好的例子如何自动生成体育联赛时间表和关于循环赛的维基百科文章https://en.wikipedia.org/wiki/Round-robin_tournament(Richard Schurig (1886) 的配对表的原始构造)有效生成比赛很好,但是与某些球员的比赛将超过两场。
我真的很感激任何帮助!
python - 在“Switch Doubles Round Robin Tournament”中平均分配对手
在 Switch Doubles Round Robin Tournament(即每轮更换搭档的地方)中,尝试平均分配对手的最佳方法是什么。
例如,在 8 人锦标赛中,您将进行 7 轮比赛,并与每位玩家进行 3 或 4 次比赛,并且与每位玩家进行一次比赛。当使用“右转”方法时,打法是正确的,但对手分布不均。
algorithm - 是否有任何算法可以在小于 O(n!) 的时间内解决以下问题?
是否有任何算法可以在小于 O(n!) 的时间内解决以下问题,例如多项式时间?否则,对于这个问题,没有人发现任何多项式时间算法,例如NP问题吗?
输入:n(元素数)
输出:两个所有组合的列表,其中,从列表顶部开始,每个 n/2 组合单元必须具有所有元素。
示例 1
示例 2
PS以下答案不符合要求。前两个 (= n/2) 对 ([0, 1], [0, 2]) 没有“3”,因此答案不满足“0”和“1”、“2”的条件, "3" 必须在前两对中。