返回 CoursePace

CoursePace 如何工作

CoursePace 会把马拉松赛道转化为可执行的分段目标。我们不会假设每一公里消耗都一样,而是估算爬升和下降如何改变努力程度,再把它转换成稳定的比赛计划。

数据

每场赛事都会从我们能找到的最佳路线文件开始,优先使用主办方官方 GPX。如果没有官方文件,我们会使用经过审核的社区路线,并标注较低的可信等级。

我们会把路线标准化到马拉松距离,并接入可信来源的海拔数据。

预处理

海拔数据通常有噪声,因此在用于配速前需要清理。路线会检查异常断点,按稳定距离重新采样,并进行平滑处理,避免地图伪影制造假的加速或减速。

我们也会审核地图地形可能不适合跑者的位置。桥梁、隧道、地下通道或高架可能高于或低于海拔服务返回的地表,所以这些路段可以加入人工赛道路面修正。

算法

赛道模型准备完成后,CoursePace 会把距离转换为努力调整距离。坡度到努力系数的曲线参考了 Aaron Schroeder 对 Strava 坡度调整配速模型的反向工程。

阅读反向工程文章
g_i = Δh_i / Δd_i

对于分段 i,g_i 表示坡度,Δh_i 表示垂直位移,Δd_i 表示赛道距离。

f_i = F(clip(g_i, -45%, 45%)) D_i* = Δd_i · f_i

F 将坡度映射为努力系数,D_i* 是该分段的努力调整距离。

D* = Σ D_i* P* = T_goal / D*

D* 是总努力调整距离,T_goal 是目标完赛时间,P* 是平路等效努力配速。

P_j = P* · (D_j* / D_j) C_j = P* · Σ_{k≤j} D_k*

对于分段 j,P_j 是目标配速,D_j* / D_j 是分段调整比例,C_j 是到该分段为止的累计时间。

在分段表中,系数高于 1.000 表示该段比平路更费力,低于 1.000 表示更省力。目标配速是为了保持稳定努力,该分段实际应跑出的配速。