问题标签 [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.

0 投票
1 回答
2012 浏览

php - 足球联赛 - 生成比赛

我目前正在制作足球在线经理游戏,但我一直在尝试生成比赛。

这是我的 SQL 结构:

我的联赛将包含许多球队,因此一个球队将无法与所有其他球队竞争。

到目前为止,我的解决方案是遍历所有可能的匹配,然后给它一个唯一的日期(基于一定数量的给定日期)。但是,现在我在联赛中有太多球队,这行不通。

逻辑:

  • home 和 away 不能包含相同的 id。
  • 如果找不到具有给定日期的比赛和其中一支参赛球队,则比赛具有唯一的日期。
  • 所有球队必须有相同数量的比赛(为了公平起见)
  • 球队必须有相同数量的主场和客场比赛。

联盟:

  • 联盟中的球队数量是统一的。
  • 整个季节是一次生成的。
  • 赛季持续 1 周,该周内有 28 个特定日期,可用作比赛日期。


    我没有任何代码要显示,因为我的代码已经变得无关紧要(因为我正在寻找不同的解决方案)。我不是在寻找完整的代码,只是指导我的方式。

    * 更新 *

    所代表的数组跟踪球队在主场和客场比赛的次数。请注意,一个球队最多可以有 50% 的日期作为主场比赛。

    示例输出:

    正如你所看到的,最后被循环的球队并没有像其他球队那样打 14 场主客场比赛。

  • 0 投票
    1 回答
    10756 浏览

    java - 循环算法实现 Java

    我认为我的问题相当简单,但我觉得我需要一些不同的观点,因为我似乎无法将这个算法翻译成代码。

    我需要制定一个运动队时间表,其中 n 支球队(在本例中为 10 支球队)以循环赛形式进行比赛。规则遵循基本的循环赛形式,其中一支球队在给定时间只能与另一支球队比赛,并且所有球队必须与所有其他球队比赛一次。

    我发现算法是将第 1 队保持在原地,然后顺时针旋转其余的。虚拟团队可用于处理 n 的奇数。问题出现在算法的“顺时针”部分。我不知道如何将顺时针旋转的概念传达给我的团队。例如,如果我让他们将其拆分为数组 TeamArray,并且 TeamArray[0] 在第 1 周播放 TeamArray[10] 等,我怎样才能让它们在第 2 周顺时针移动?

    我不是在寻找一个讲义的答案,而是寻求一些帮助,以创造性的方式看待这个算法,以便我可以翻译顺时针移动团队的概念。

    我感谢所有帮助,并很乐意回答我最初的问题中可能令人困惑的任何问题。谢谢!

    0 投票
    4 回答
    9209 浏览

    python - 瑞士锦标赛 - 配对算法

    我正在使用 Python 开发一个瑞士锦标赛系统,并且正在尝试找出最佳配对算法。
    我最大的问题是,我提出的每个算法都会在几个序列中产生错误,其中最后一个被选中的对已经互相玩了,裁定配对无效。

    我正在研究的瑞士系统很简单:即使是球员,每个人都在每一轮比赛,并且根据获胜的距离进行配对(所以强者对抗强者,弱者对抗弱者)。
    No Bye,只有赢/输(没有平局),对手不能互相比赛两次。

    我所做的当前算法如下:

    1. 按排名顺序生成玩家列表(最多获胜到最少获胜)
    2. 选择玩家,从获胜最多的玩家开始
    3. 将他与排名最接近的玩家匹配。如果他们已经玩过,将他与下一个匹配,直到找到匹配
    4. 将这对从列表中弹出并返回到 1

    例如:
    2轮后的排名:

    第一个选择是 P1,第一个匹配是 P5。将 (P1,P5) 从列表中取出。

    第一个选择是 P3,已经玩过 P4,所以比赛是 P2。将 (P3,P2) 从列表中删除。
    在这个序列中,我以一对相互对战并且配对无效:


    问题:是否有任何算法可以保证最佳配对模块,同时确保我不会在最后被两个互相玩的玩家“卡住”?

    0 投票
    2 回答
    851 浏览

    java - 创建一个不会重复分配团队的程序?

    我正在寻找创建一个程序,该程序将分配six团队每天互相比赛一次three。但我也希望每支球队每天都打two比赛。我不希望他们在同一three天内两次扮演同一个人。

    我需要对每个游戏进行分组two和随机化。将同时进行两场比赛。

    这是所需的输出:

    它不需要完全像这样格式化,但这只是一个一般的想法。

    首先,我想让它循环三次,但我想确保它不会分配一个数字,如果该数字已经在这个循环序列中使用过。

    我相信代码会是这样的:

    这是我使用此代码得到的输出。

    这样做的问题是:

    - 如果 3 号被分配给 5 号队,那么以后不应将 5 号分配给 3 号。

    - 1号不能分配给1号队。

    - 如果第 4 队在第 1 天获得编号 5,则不应在第 2 天或第 3 天分配相同的编号。

    - 团队名单需要随机分组,并由两人分组。

    我不太确定如何解决这些问题。任何帮助,将不胜感激。

    0 投票
    1 回答
    1438 浏览

    javascript - 循环赛定位算法

    我正在尝试找出一种算法来为循环赛设置比赛位置。

    • 每支球队与对方球队交手两次,一次在主场,一次在客场。
    • 每支球队都有一个主场。
    • 比赛中有许多球队共享相同的主场。

    我已经有一个包含所有匹配项的数组。一场比赛看起来像:

    我想遍历所有匹配项并分配location. 我尝试了各种解决方案,但还没有一个完美的解决方案。

    • 当然,如果 Bob 的家庭位置可用,date我们就可以使用它。
    • 我们必须考虑鲍勃和弗兰克参加的另一场比赛。可以切换主队/客队,但我​​们必须确保它是平衡的。(即鲍勃和弗兰克在家里各玩一次)
    • 如果即使在尝试切换回家/离开之后也无法分配位置,那么我们必须尝试位置拆分

    位置拆分

    可以拆分比赛地点,以便在一个地点同时进行多场比赛。我们如何确定一个位置是否可以拆分超出了这个问题的范围,但我们只是说我们有一个调用的函数canLocationBeSplit(location),它返回bool真或假。

    两支球队之间的任何一场比赛的主场或客场位置都可以分开。但是,除非绝对必要,否则我们只想开始拆分位置。同样,每支球队必须在主场比赛一次,在客场比赛一次。

    如果仍然没有匹配的可用位置,我们将其保留为null

    问题

    所以我的问题是,是否有人对可以解决此问题的合适递归算法有任何建议?谢谢你的时间。

    0 投票
    1 回答
    2336 浏览

    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:

    0 投票
    1 回答
    229 浏览

    php - 轮询调度程序填写“再见”

    我正在使用循环来安排比赛。我希望每支球队打“n”场比赛,我有“x”支球队。如果“x”是偶数,一切都很好,但如果“x”是奇数,我必须添加另一个团队,“再见”才能让它工作。

    当我有 11 支球队每人打 4 场比赛时,轮空的结果是 4 支球队得到轮空。这是低效的,因为他们只能互相比赛,这样每支球队都打 4 场比赛。

    在安排了包括一支球队“再见”的比赛在内的所有比赛之后,我试图让所有有过“再见周”的球队都进行一场比赛。我需要确保这些球队以前没有参加过比赛。

    由于我使用的是少数团队,因此我只是使用随机发生器来尝试组合,直到一个有效。但是,我无法让它发挥作用。

    这是我的代码,用于安排按回合进行的团队之间的比赛。我想检查一下他们以前是否玩过,如果有,随机排列列表,以便我们可以尝试不同的组合。我不认为检查球队到目前为止是否打过球是有效的,因为即使球队有重叠,它也不会洗牌。

    0 投票
    1 回答
    232 浏览

    php - 没有RoundRobin的联赛调度

    目前我实际上正在寻找一个专门针对我的问题的术语:

    我创建了一个超过 4 支球队的联赛 联赛持续 3 轮(为了简单起见,编号) 比赛应从一支球队尚未交战的球队中随机分配。

    我正在努力让我当前的代码在每个边缘情况下运行,所以我想查找为这种情况开发的“标准”算法,但我无法想出我正在寻找的术语。

    一个时间表示例是:

    在这方面我找不到任何东西,因为这似乎是一个非常非常不可能在联赛/锦标赛中使用的东西——但这是我的要求。

    这是我当前创建 ONE Round 的代码。可能会发生,此代码不会在第 3 轮中为每个团队分配一个对手,因为他们可能的对手在本轮已经分配了一场比赛(测试了 6 支球队,可能在第 3 轮中发生)

    对我将谷歌搜索的任何帮助将不胜感激

    0 投票
    1 回答
    320 浏览

    algorithm - 安排 6 种不同游戏类型的 16 队 1v1 比赛

    我的任务是为一家公司的团队比赛制定时间表。最初我认为这将是微不足道的,但我在想出一个有效的解决方案时遇到了一些麻烦。以下是需要满足的事实:

    • 有16支球队
    • 有 6 种不同的 1v1 游戏可供玩
    • 每支球队必须参加所有 6 种比赛类型
    • 没有两支球队可以交手两次
    • 有 8 个可用的“回合”或“时间段”可供团队玩游戏。这意味着一支球队将有两轮休息,不参加比赛
    • 任何游戏类型都不能在同一轮中玩两次

    这不是循环赛,因为所有球队都不会互相比赛。这有点类似于瑞士锦标赛,但有多种比赛类型的限制,所有球队都必须参加。我正在努力找出正确的算法来确定这个时间表,任何导致解决方案的帮助或信息都会很棒。

    0 投票
    1 回答
    857 浏览

    java - 3路/4路循环赛调度算法

    我想创建/实现一个能够处理每场比赛超过 2 名参与者的锦标赛调度算法。

    2 名参与者似乎都知道这个问题。例如,请参见此处:Round Robin Algorithm Implementation Java

    与 6 支球队(A、B、C、D、E、F)的比赛示例:

    1. (ABC)(DEF)
    2. (ABD)(CEF)
    3. (安倍)(CDF)
    4. (ABF)(CDE)
    5. (ACD)(BEF)
    6. (王牌)(BDF)
    7. (ACF)(BDE)
    8. (ADE)(BEF)
    9. (ADF)(公元前)
    10. (AEF)(BCD)

    如果团队数量为奇数(即 A、B、C、D、E),我希望每轮进行 3 路和 2 路比赛:(ABC)(DE)

    一旦解决了 3 路问题,我想对 4 路游戏做同样的事情。

    我无法创建这样的算法,也无法在互联网上找到类似的解决方案。

    有人能指出我正确的方向吗?