确定性方量计算:为什么同一测量必须得出同一数字
按两次“计算”结果却不同的方量不是测量——而是一场迟早会发生的争议。月度对账、土方计量支付和审计都假定:同一表面、同一边界和同一基准,任何时候、任何电脑上都得出同一个数字。本文说明确定性方量计算必须保证什么,以及 STREAM 的挖填方引擎如何做到。
计算实际做了什么
STREAM 在高程格网上计算挖填方。格网中心落在您绘制的边界内时才计入。对每个计入的格网,在表面应用地形编辑与高程偏移之后,取 Δz = 地面 − 基准;Δz 为正则把 Δz × 格网面积计入挖方,为负则计入填方。无数据的格网被跳过——绝不当作零。
同时给出斜面(三维)面积:每个格网贡献其平面面积 × √(1 + gx² + gy²),坡度取自同一修正表面上的相邻格网。
让结果可重复的规则
确定性不是自然而然的,而是来自几项刻意的选择。每一项都堵住了同一输入可能得出不同数字的一条路径。
| 规则 | 防止什么 |
|---|---|
| 按固定顺序(行条带、逐行)遍历格网,累加到单一累加器 | 随线程调度变化的浮点求和 |
| 采样格网用整数计数,而不是反复累加步长 | 某一行或列这次出现、下次消失 |
| 以格网中心是否在边界内决定是否计入 | 含糊的部分格网每次判定不同 |
| NoData 被跳过,绝不读作零 | 空洞变成虚假的填方或挖方 |
| “最低点”基准取自同一修正表面 | 基准取自一个表面而方量取自另一个表面 |
| 没有随机采样、没有时钟、不依赖文件顺序 | 结果取决于何时或何地运行 |
提速而不改变答案
测量一个 40 m 的料堆,不应把 18 GB 的表面从头扫到尾。因此 STREAM 只读取边界周围的一个窗口——外接矩形再加一个格网,让基于相邻格网的坡度仍有相邻格网可用。边界外的格网本来就不贡献任何值,所以窗口改变的是耗时,而不是结果。
同样的原则适用于任何数量计算的优化:更快的路径必须返回完全相同的数字,并在发布前用已知表面做对比。
仍会改变数字——也应该改变——的因素
确定性指相同输入得出相同输出,它并不隐藏输入。基准、边界、地形编辑和表面版本都会改变方量,应在报告中与方量一并注明。由于按格网中心计入,边界的分辨率等于格网尺寸:格网越细,越能贴合曲线边界。
您可以用同样的方法检验任何方量工具:构建一个答案已知的平面测试表面——长 40 m、宽 30 m、沿长度升高 2 m 的平台,相对 101.5 m 净挖 600 m³——运行两次。结果应与解析值一致,两次之间也应完全一致,直到最后一位。
常见问题
什么是确定性方量计算?
指同一表面、边界、基准和设置,无论何时、在哪台电脑上运行,总是得出完全相同的方量。
为什么方量工具运行两次可能得出略有不同的数字?
通常是因为并行浮点求和的顺序随线程调度变化、采样格网通过反复累加步长构建,或使用了随机采样。这些都会让结果依赖于输入以外的因素。
如何检验方量工具是否可重复?
使用答案已知的平面表面,例如沿长度升高 2 m 的 40 m × 30 m 平台(相对 101.5 m 标高净挖 600 m³),运行两次。两次结果应彼此一致,并与解析值一致。
在 STREAM 中计算可重复的挖填方量
原生 Windows · 完全离线 · 免费测试版