问题标签 [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.
php - 足球联赛 - 生成比赛
我目前正在制作足球在线经理游戏,但我一直在尝试生成比赛。
这是我的 SQL 结构:
我的联赛将包含许多球队,因此一个球队将无法与所有其他球队竞争。
到目前为止,我的解决方案是遍历所有可能的匹配,然后给它一个唯一的日期(基于一定数量的给定日期)。但是,现在我在联赛中有太多球队,这行不通。
逻辑:
- home 和 away 不能包含相同的 id。
- 如果找不到具有给定日期的比赛和其中一支参赛球队,则比赛具有唯一的日期。
- 所有球队必须有相同数量的比赛(为了公平起见)
- 球队必须有相同数量的主场和客场比赛。
联盟:
我没有任何代码要显示,因为我的代码已经变得无关紧要(因为我正在寻找不同的解决方案)。我不是在寻找完整的代码,只是指导我的方式。
* 更新 *
所代表的数组跟踪球队在主场和客场比赛的次数。请注意,一个球队最多可以有 50% 的日期作为主场比赛。
示例输出:
正如你所看到的,最后被循环的球队并没有像其他球队那样打 14 场主客场比赛。
java - 循环算法实现 Java
我认为我的问题相当简单,但我觉得我需要一些不同的观点,因为我似乎无法将这个算法翻译成代码。
我需要制定一个运动队时间表,其中 n 支球队(在本例中为 10 支球队)以循环赛形式进行比赛。规则遵循基本的循环赛形式,其中一支球队在给定时间只能与另一支球队比赛,并且所有球队必须与所有其他球队比赛一次。
我发现算法是将第 1 队保持在原地,然后顺时针旋转其余的。虚拟团队可用于处理 n 的奇数。问题出现在算法的“顺时针”部分。我不知道如何将顺时针旋转的概念传达给我的团队。例如,如果我让他们将其拆分为数组 TeamArray,并且 TeamArray[0] 在第 1 周播放 TeamArray[10] 等,我怎样才能让它们在第 2 周顺时针移动?
我不是在寻找一个讲义的答案,而是寻求一些帮助,以创造性的方式看待这个算法,以便我可以翻译顺时针移动团队的概念。
我感谢所有帮助,并很乐意回答我最初的问题中可能令人困惑的任何问题。谢谢!
python - 瑞士锦标赛 - 配对算法
我正在使用 Python 开发一个瑞士锦标赛系统,并且正在尝试找出最佳配对算法。
我最大的问题是,我提出的每个算法都会在几个序列中产生错误,其中最后一个被选中的对已经互相玩了,裁定配对无效。
我正在研究的瑞士系统很简单:即使是球员,每个人都在每一轮比赛,并且根据获胜的距离进行配对(所以强者对抗强者,弱者对抗弱者)。
No Bye,只有赢/输(没有平局),对手不能互相比赛两次。
我所做的当前算法如下:
- 按排名顺序生成玩家列表(最多获胜到最少获胜)
- 选择玩家,从获胜最多的玩家开始
- 将他与排名最接近的玩家匹配。如果他们已经玩过,将他与下一个匹配,直到找到匹配
- 将这对从列表中弹出并返回到 1
例如:
2轮后的排名:
第一个选择是 P1,第一个匹配是 P5。将 (P1,P5) 从列表中取出。
第一个选择是 P3,已经玩过 P4,所以比赛是 P2。将 (P3,P2) 从列表中删除。
在这个序列中,我以一对相互对战并且配对无效:
问题:是否有任何算法可以保证最佳配对模块,同时确保我不会在最后被两个互相玩的玩家“卡住”?
java - 创建一个不会重复分配团队的程序?
我正在寻找创建一个程序,该程序将分配six
团队每天互相比赛一次three
。但我也希望每支球队每天都打two
比赛。我不希望他们在同一three
天内两次扮演同一个人。
我需要对每个游戏进行分组two
和随机化。将同时进行两场比赛。
这是所需的输出:
它不需要完全像这样格式化,但这只是一个一般的想法。
首先,我想让它循环三次,但我想确保它不会分配一个数字,如果该数字已经在这个循环序列中使用过。
我相信代码会是这样的:
这是我使用此代码得到的输出。
这样做的问题是:
- 如果 3 号被分配给 5 号队,那么以后不应将 5 号分配给 3 号。
- 1号不能分配给1号队。
- 如果第 4 队在第 1 天获得编号 5,则不应在第 2 天或第 3 天分配相同的编号。
- 团队名单需要随机分组,并由两人分组。
我不太确定如何解决这些问题。任何帮助,将不胜感激。
javascript - 循环赛定位算法
我正在尝试找出一种算法来为循环赛设置比赛位置。
- 每支球队与对方球队交手两次,一次在主场,一次在客场。
- 每支球队都有一个主场。
- 比赛中有许多球队共享相同的主场。
我已经有一个包含所有匹配项的数组。一场比赛看起来像:
我想遍历所有匹配项并分配location
. 我尝试了各种解决方案,但还没有一个完美的解决方案。
- 当然,如果 Bob 的家庭位置可用,
date
我们就可以使用它。 - 我们必须考虑鲍勃和弗兰克参加的另一场比赛。可以切换主队/客队,但我们必须确保它是平衡的。(即鲍勃和弗兰克在家里各玩一次)
- 如果即使在尝试切换回家/离开之后也无法分配位置,那么我们必须尝试位置拆分。
位置拆分
可以拆分比赛地点,以便在一个地点同时进行多场比赛。我们如何确定一个位置是否可以拆分超出了这个问题的范围,但我们只是说我们有一个调用的函数canLocationBeSplit(location)
,它返回bool
真或假。
两支球队之间的任何一场比赛的主场或客场位置都可以分开。但是,除非绝对必要,否则我们只想开始拆分位置。同样,每支球队必须在主场比赛一次,在客场比赛一次。
如果仍然没有匹配的可用位置,我们将其保留为null
。
问题
所以我的问题是,是否有人对可以解决此问题的合适递归算法有任何建议?谢谢你的时间。
algorithm - Sorting pairs of teams with non-repeating | Round-robin tournament
I'm generating schedule for the tournament. Each team should play exactly 8 games. Number of teams 2 < n < 36
For sorting teams into pairs I'm using Round Robin algorithm to get a table, example of 6 teams :
Then I convert it into the set of pairs:
The question is how to sort this set, in order to get schedule, where the same team can't play 2 games in a row. But if it's impossible, minimize the number of exceptions.
Example with new algorithm:
php - 轮询调度程序填写“再见”
我正在使用循环来安排比赛。我希望每支球队打“n”场比赛,我有“x”支球队。如果“x”是偶数,一切都很好,但如果“x”是奇数,我必须添加另一个团队,“再见”才能让它工作。
当我有 11 支球队每人打 4 场比赛时,轮空的结果是 4 支球队得到轮空。这是低效的,因为他们只能互相比赛,这样每支球队都打 4 场比赛。
在安排了包括一支球队“再见”的比赛在内的所有比赛之后,我试图让所有有过“再见周”的球队都进行一场比赛。我需要确保这些球队以前没有参加过比赛。
由于我使用的是少数团队,因此我只是使用随机发生器来尝试组合,直到一个有效。但是,我无法让它发挥作用。
这是我的代码,用于安排按回合进行的团队之间的比赛。我想检查一下他们以前是否玩过,如果有,随机排列列表,以便我们可以尝试不同的组合。我不认为检查球队到目前为止是否打过球是有效的,因为即使球队有重叠,它也不会洗牌。
php - 没有RoundRobin的联赛调度
目前我实际上正在寻找一个专门针对我的问题的术语:
我创建了一个超过 4 支球队的联赛 联赛持续 3 轮(为了简单起见,编号) 比赛应从一支球队尚未交战的球队中随机分配。
我正在努力让我当前的代码在每个边缘情况下运行,所以我想查找为这种情况开发的“标准”算法,但我无法想出我正在寻找的术语。
一个时间表示例是:
在这方面我找不到任何东西,因为这似乎是一个非常非常不可能在联赛/锦标赛中使用的东西——但这是我的要求。
这是我当前创建 ONE Round 的代码。可能会发生,此代码不会在第 3 轮中为每个团队分配一个对手,因为他们可能的对手在本轮已经分配了一场比赛(测试了 6 支球队,可能在第 3 轮中发生)
对我将谷歌搜索的任何帮助将不胜感激
algorithm - 安排 6 种不同游戏类型的 16 队 1v1 比赛
我的任务是为一家公司的团队比赛制定时间表。最初我认为这将是微不足道的,但我在想出一个有效的解决方案时遇到了一些麻烦。以下是需要满足的事实:
- 有16支球队
- 有 6 种不同的 1v1 游戏可供玩
- 每支球队必须参加所有 6 种比赛类型
- 没有两支球队可以交手两次
- 有 8 个可用的“回合”或“时间段”可供团队玩游戏。这意味着一支球队将有两轮休息,不参加比赛
- 任何游戏类型都不能在同一轮中玩两次
这不是循环赛,因为所有球队都不会互相比赛。这有点类似于瑞士锦标赛,但有多种比赛类型的限制,所有球队都必须参加。我正在努力找出正确的算法来确定这个时间表,任何导致解决方案的帮助或信息都会很棒。
java - 3路/4路循环赛调度算法
我想创建/实现一个能够处理每场比赛超过 2 名参与者的锦标赛调度算法。
2 名参与者似乎都知道这个问题。例如,请参见此处:Round Robin Algorithm Implementation Java
与 6 支球队(A、B、C、D、E、F)的比赛示例:
- (ABC)(DEF)
- (ABD)(CEF)
- (安倍)(CDF)
- (ABF)(CDE)
- (ACD)(BEF)
- (王牌)(BDF)
- (ACF)(BDE)
- (ADE)(BEF)
- (ADF)(公元前)
- (AEF)(BCD)
如果团队数量为奇数(即 A、B、C、D、E),我希望每轮进行 3 路和 2 路比赛:(ABC)(DE)
一旦解决了 3 路问题,我想对 4 路游戏做同样的事情。
我无法创建这样的算法,也无法在互联网上找到类似的解决方案。
有人能指出我正确的方向吗?