MatchFlow秒排

秒排是怎么排赛程的

这页写的是引擎实际在做的事,不是功能清单。给出方法和公式,你要愿意的话可以拿笔自己核对输出。

这里没有任何数字是大模型生成的。每个数都来自对你输入值的算术运算。同样的输入永远得到同样的方案,输出里任何一个数字都能追回到下面某一步。 这件事在你要向委员会解释报名费为什么定这个数、或者向教练解释为什么他的队周日早上 9 点开赛时,是有用的。

1. 先定有多少场比赛

赛制决定场次,场次决定后面的一切 —— 场地小时数、裁判场次、预算科目。所以这个先算。

单循环N × (N−1) / 2 场,分 N−1 轮(N 为奇数时 N 轮,每轮一支队轮空)
单败淘汰N−1 场。每场淘汰恰好一支队,所以无论怎么轮空都是这个数
小组 + 淘汰各小组场次求和,加上每一层的淘汰赛与排位赛场次

队数为奇数时会补一个虚拟轮空位把对阵表凑成偶数,这就是奇数队单循环的轮数等于队数的原因。

2. 校验场地装不装得下

这一步是多数表格会跳过的,也正是赛事当天拖堂的原因。容量在排任何一场比赛之前就先算。

一个时段多长比赛时长 + 换场时间
每块场地每天几场floor(每天可用分钟数 / 时段长度)
总容量每块场地每天场次 × 场地数 × 天数
需要几块场地ceil(总场次 / (每块场地每天场次 × 天数))
需要几天ceil(总场次 / (每块场地每天场次 × 场地数))

容量不足时,会在排程之前就告诉你差几块场地或几天,而不是等赛程画了一半才发现。余量不足约一轮时会标为紧张,不会当作通过悄悄放行。

3. 按硬约束逐场落位

比赛一场一场放,每次找最早可行的时段。一个时段可行,当且仅当它不违反下面任何一条。这些是约束不是偏好 —— 排程宁可往后排一天,也不会为了凑数破坏其中一条。

同队休息一支队打完到下一场之间必须满足最短休息时间(青少年通常设 60 分钟)
每队每天场次上限你设定的上限;某队当天打满后,当天不再给它排任何比赛
场地占用一块场地同一时间只能进行一场,换场时间计入占用
开放时段比赛只排进场地的开放时段内,且必须在同一时段内结束
场地规格匹配11 人制只排进能容纳的场地;大场地可以承办小规格比赛
阶段隔离同一组别的小组赛全部结束之前,不开始任何淘汰赛
轮次顺序同一层内,上一轮未结束不开始下一轮

一块场地一天可以有多个时段(比如 9–12 和 14–18,中午空出来),时段也可以只对某一天生效。场地还可以整天关闭。

4. 分配裁判,不撞场

赛程落位之后再排裁判,按时间顺序从前往后走。

不重叠已经接了时间重叠场次的裁判,不再被视为可用
回避本俱乐部名单里记录了俱乐部的(写作 姓名@俱乐部),永远不会被派到自己俱乐部的比赛
负荷均衡在可用裁判里,优先派目前场次最少的
每场几名按赛制来:7 人制通常 1 名,11 人制 1 主裁 + 2 助理

裁判名单不够覆盖全部场次时,会告诉你还差多少人次,而不是给你一份有场次没裁判、你自己发现不了的赛程。

5. 算成本,再倒推报名费

预算是从赛程长出来的,不是另外估的。场次和场地小时数直接来自第 1 到 3 步,所以两边的数字不会各说各话。

场地租金日单价 × 场地数 × 天数(按场次或按小时计价的,按你场地的实际计价方式算)
裁判费每场裁判人数 × 场次 × 单价
工作人员、医疗人数 × 天数 × 日单价
物资、奖品按场地数和组别数分摊
预备费直接成本小计的一个百分比
保本报名费总支出 / 参赛队数

单价按市场分别取值,不是拿一个币种换算出来的。英国的场地租金、裁判费和保险结构跟国内、跟美国都不一样 —— 比如英国注册俱乐部通过郡级注册已经自带公众责任险,而美国主办方是按场次单独买当日保险。

为什么非要可复现不可

排赛程不是\“看起来合理就行\”的活。一份看着没问题、但让某支队二十分钟内连打两场的赛程, 比没有赛程更糟 —— 因为一份看起来已经做完的文件,没有人会再去核对。

所以引擎是按\“算术 + 显式约束\”造的,不是让模型生成一份像模像样的赛程。 容量不够时它把排不下的比赛单独列出来告诉你差几场,而不是为了凑数把它们挤掉; 裁判名单不够时它报出缺口,而不是留下一批没人吹的比赛。出问题就大声说出来,这是有意为之。

它做不到的事

在你依赖它之前,这几件事值得先知道:

场馆之间的路程时间。多场馆赛事是按场地分别排的,引擎不知道两个场馆之间开车要多久。 你的场馆离得远,就自己把路程加进休息时间设置里。

天气和顺延。没有改期引擎。丢了一天就拿剩下的天数重新生成一份 —— 很快,但那是一份新方案,不是在旧方案上打补丁。

保证你当地的价格。默认单价是分市场调研出来的参考值,是起点,不是报价。场地租金尤其离谱,同一个国家内能差三倍。 拿到本地实际价格就立刻替换掉。

球队的个别诉求。「我们只能周日上午打」这类要求可以通过到场时间约束表达,但引擎不会在互相冲突的诉求之间做权衡。 它只执行你给它的约束。

拿你自己的赛事对一遍

填进队数、场地和天数,把输出和上面的公式对一对。 有哪个数对不上,那就是 bug,值得告诉我们 —— 每一个数字都应该是可追溯的。

免费生成方案 →
多少块场地才排得下 →示例赛事 →English →