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_iF 将坡度映射为努力系数,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 表示更省力。目标配速是为了保持稳定努力,该分段实际应跑出的配速。