Перейти к содержимому

Экономика блока

Ценность блока — главный вход оптимизации: алгоритм ищет набор блоков с максимальной суммой ценностей при заданных откосах.

ценность = выручка - затраты на переработку - затраты на добычу

Выручка появляется только у блоков, которые идут на переработку. Затраты на добычу есть у любого блока, вскрышные породы тоже вынимаются и вывозятся в отвал, так что у пустого блока ценность отрицательна.

Вычисляемые колонки считаются сверху вниз, и каждая строка может ссылаться на колонки, посчитанные выше. Поэтому порядок строк важен. Ниже он взят из встроенного шаблона Mono metal:

Колонка Выражение Смысл
volume xinc * yinc * zinc Объём блока, м³
tonnage volume * density Масса блока, т
is_ore case when sort = 0 then false else true end Признак руды
mining_cost tonnage * ставка добычи Затраты на добычу, ден.ед
processing_cost case when is_ore then $processing_ore * tonnage else 0 end Затраты на переработку
metal_mass case when is_ore then grade * tonnage else 0 end Масса металла до извлечения
recovered_metal recovery * metal_mass Извлекаемый металл
revenue recovered_metal * $metal_price Выручка, ден.ед
block_value revenue - processing_cost - mining_cost Чистая ценность блока

block_value и выбирается при запуске как колонка ценности блока. Остальные строки цепочки — заготовка отчёта, где tonnage даст запасы и коэффициент вскрыши, metal_mass с recovered_metal — металл и среднее содержание, а mining_cost с processing_cost — затраты (Цикл работы).

Шаги можно проверить и до итогового отчёта. Каждая колонка видна в таблице сразу после Применить, так что ошибку в размерности или в коде типа руды видно на своём шаге, а не на итоговой ценности.

Таблица показывает порядок, а не готовый рецепт. Какие колонки нужны от модели и как записывается каждый шаг, включая доплату за глубину и разбор по типам руды, — Рецепты выражений.

Константами задают всё, что меняется от сценария к сценарию, и тогда «что если» сводится к правке одного значения с повторным запуском. Ниже те, что встречаются в расчёте чаще всего.

Цена металла — обычно долгосрочная, а не спотовая. Фактор при запуске всё равно перебирает доли от неё.

Себестоимость добычи — выемка и транспортировка одной тонны горной массы, от буровзрывных работ до вывоза. У руды и вскрышных пород ставки чаще всего разные, отсюда две константы.

Себестоимость переработки — дробление, измельчение, обогащение (за тонну руды).

Извлечение — полнота использования добытого сырья при обогащении, долей единицы. Живёт колонкой recovery либо константой.

Доплата за глубину — с понижением горных работ растёт дальность и высота транспортирования, себестоимость добычи увеличивается. Задаётся отметкой начала доплаты, высотой ступени и надбавкой за ступень.

Бортовое содержание — наименьшее содержание полезного компонента в пробе, при котором она включается в контур подсчитываемых блоков запасов. Задаётся кондициями на минеральное сырьё. В шаблоне признак руды берётся из кода типа, потому что геологическая модель руду и породу уже разделила. Когда разделение идёт по содержанию, вместо кода пишется порог — Рецепты выражений.

Прочие статьи — роялти, затраты на реализацию, рекультивацию — добавляются такими же константами и слагаемыми в затраты.

Программа проверяет синтаксис выражений, но не их смысл. От пустых, NaN и бесконечных значений в колонке ценности она защищает сама — с такими запустить расчёт не получится, программа откажет и укажет, сколько строк не в порядке. А вот единицы измерений и порядок величин остаются на пользователе. Такая ошибка не ломает синтаксис и не даёт пустых значений, контур посчитается, просто неверный.

Размерности. Самая частая ошибка — несогласованные единицы. Проверяются по слагаемым:

выручка: [единиц металла] * [ден.ед за единицу] = ден.ед
затраты: [т] * [ден.ед за тонну] = ден.ед

Если grade в г/т, то масса металла получается в граммах, и цена должна быть задана за грамм. Унции переводят заранее (1 тройская унция — 31.1035 г), держать всё в одних единицах проще, чем помнить о переводе в каждой формуле.

Пропуски. Лучше закрывать их заранее, на своём шаге цепочки. Например volume * coalesce(density, $density_default) — Работа с NULL.

Колонка ценности. Её стоит пролистать в таблице:

  • Значения в разумных пределах, без порядков «мимо»
  • У рудных блоков плюс, у вскрышных минус