Детерминированный расчёт объёмов: почему одна и та же съёмка должна давать одно число
Объём, который меняется при повторном нажатии «Рассчитать», — не измерение, а отложенный спор. Ежемесячная сверка, оплата земляных работ и аудит исходят из того, что одна и та же поверхность, контур и база дают одно и то же число всегда и на любой машине. В статье — что должен гарантировать детерминированный расчёт и как это делает движок выемки и насыпи STREAM.
Что на самом деле делает расчёт
STREAM считает выемку и насыпь по сетке отметок. Ячейка учитывается, когда её центр лежит внутри нарисованного контура. Для каждой учтённой ячейки берётся Δz = рельеф − база — после того как к поверхности применены правки рельефа и смещение по высоте; положительное Δz добавляет Δz × площадь ячейки к выемке, отрицательное — к насыпи. Ячейки без данных пропускаются и никогда не считаются нулём.
Рядом выдаётся наклонная (3D) площадь: каждая ячейка вносит свою площадь в плане × √(1 + gx² + gy²), а градиент берётся по соседям на той же исправленной поверхности.
Правила, делающие расчёт повторяемым
Детерминированность не появляется сама: её дают несколько осознанных решений. Каждое закрывает путь, по которому одни и те же входные данные могли бы дать другое число.
| Правило | Что предотвращает |
|---|---|
| Ячейки обходятся в фиксированном порядке (полосы строк, строка за строкой) в один сумматор | Суммы с плавающей точкой, меняющиеся от планирования потоков |
| Сетки выборки считаются целыми числами, а не многократным прибавлением шага | Последнюю строку или столбец, которые в одном запуске есть, а в другом пропадают |
| Ячейка учитывается по тому, лежит ли её центр внутри контура | Неоднозначные частичные ячейки, решаемые каждый раз по-разному |
| NoData пропускается и никогда не читается как ноль | Превращение пропусков в ложную насыпь или выемку |
| База «самая низкая точка» берётся с той же исправленной поверхности | Базу с одной поверхности, а объём — с другой |
| Нет случайной выборки, часов и зависимости от порядка файлов | Результаты, зависящие от того, когда и где выполнен расчёт |
Скорость без изменения ответа
Чтобы измерить штабель 40 м, не нужно просматривать поверхность на 18 ГБ из конца в конец. Поэтому STREAM читает только окно вокруг контура — описанный прямоугольник плюс одна ячейка, чтобы уклон по соседям не потерял соседей. Ячейки вне контура всё равно ничего не вносят, так что окно меняет время, а не результат.
Тот же принцип относится к любой оптимизации расчёта количества: быстрый путь обязан вернуть в точности то же число, и сравнение делается на известной поверхности до выпуска.
Что по-прежнему меняет число — и должно
Детерминированность означает, что одинаковые входные данные дают одинаковый результат; она не скрывает входные данные. База, контур, правки рельефа и версия поверхности меняют объём и должны быть указаны в отчёте рядом с ним. Поскольку ячейка учитывается по центру, контур разрешается с точностью до размера ячейки: более мелкая сетка точнее следует за криволинейным контуром.
Любой инструмент расчёта объёмов можно проверить так же: постройте плоскую тестовую поверхность с известным ответом — площадку 40 м × 30 м с подъёмом 2 м, дающую 600 м³ чистой выемки относительно 101,5 м, — и запустите расчёт дважды. Результат должен совпасть с аналитическим значением и сам с собой до последней цифры.
Частые вопросы
Что такое детерминированный расчёт объёмов?
Расчёт, при котором одна и та же поверхность, контур, база и настройки всегда дают в точности один и тот же объём, независимо от времени и машины.
Почему два запуска инструмента расчёта объёмов могут дать немного разные числа?
Обычно из-за параллельных сумм с плавающей точкой, порядок которых меняется с планированием потоков, сеток выборки, построенных многократным прибавлением шага, или случайной выборки. Каждое делает результат зависимым не только от входных данных.
Как проверить, повторяем ли инструмент расчёта объёмов?
Возьмите плоскую поверхность с известным ответом, например площадку 40 м × 30 м с подъёмом 2 м вдоль неё (600 м³ чистой выемки относительно отметки 101,5 м), и запустите расчёт дважды. Оба результата должны совпасть между собой и с аналитическим значением.
Рассчитайте повторяемые объёмы выемки и насыпи в STREAM
Нативное Windows-приложение · полностью офлайн · бесплатная бета