Детерминированный расчёт объёмов: почему одна и та же съёмка должна давать одно число

Объём, который меняется при повторном нажатии «Рассчитать», — не измерение, а отложенный спор. Ежемесячная сверка, оплата земляных работ и аудит исходят из того, что одна и та же поверхность, контур и база дают одно и то же число всегда и на любой машине. В статье — что должен гарантировать детерминированный расчёт и как это делает движок выемки и насыпи 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-приложение · полностью офлайн · бесплатная бета

Программа для расчёта земляных работ