15.1 Правила управления промыслом: концепция и классификация
Модель — это про то, «как устроен мир», а управление — про то, «что делать завтра». Правило регулирования промысла (ПРП, на англ. Harvest Control Rule, HCR) — та самая мостовая плита между оценкой и решением: простая и воспроизводимая функция, которая из состояния запаса делает рекомендацию по смертности или вылову. Здесь интуиция особенно любит крайности: «держать F постоянной — стабильно», «держать вылов постоянным — надёжно». На практике устойчивость промысла и риск для запаса меняются местами, как минимум потому, что природа и данные шумят.
Что такое HCR по делу. Это карта вида «если B/Bmsy такая-то, то F — такая-то», с предосторожными точками (Blim, Bpa), с ограничителями на межгодовое изменение TAC и с явным «буфером» на неопределённость (P*‑подход, нижние квантили биомассы). Важно, что правило — не случайная кривая, а договор о компромиссе между тремя силами: средним выловом, риском перелова и стабильностью межгодовой динамики.
Распространённые формы — и их характер. - Постоянная F (Fconstant): отзывчива к состоянию, но даёт переменный вылов; чувствительна к ошибкам в B. - Постоянный вылов (Cconstant): сглаживает экономику, но рискует «надавить» на слабый запас. - «Хоккейная клюшка» (hockey stick): F линейно снижается от Bmsy к Blim, при B<Blim — закрытие; понятна, наглядна, управляемо‑предосторожна. - 40–10 (дефолт на Тихом океане США): F=Ftarget при B/B0≥40%, линейно к нулю до 10%; работает, когда известна исходная биомасса B0. - Советы ICES: Fpa и Bpa как предосторожные точки, плюс ограничения ±15–20% к ОДУ; про устойчивость, а не про «максимум любой ценой».
15.1.1Типовые ловушки
Это ошибки при проектировании или реализации HCR, которые сводят на нет их эффективность и предосторожность.
Ловушка «Нож-на-ребре» (Knife-edge)
Суть: Использование жестких, абсолютных порогов без плавных переходов или “буферных зон”.
Проблема: Незначительное колебание оценки запаса вокруг жесткого порога (например, Blim) приводит к резким, скачкообразным изменениям в ОДУ: сегодня промысел открыт с хорошим квотой, завтра оценка чуть ниже — и полное закрытие. Это создает “пилу” в рекомендациях, что разрушительно для экономики.
Решение: Внедрение полосы нечувствительности и плавного “склона”. Например, как в правиле “хоккейная клюшка”, где снижение F начинается не резко, а линейно от Bpa до Blim.
Игнорирование неопределенности
Суть: Разработка правила, основанного исключительно на точечных оценках (“среднее по больице”), без учета ошибок и неопределенности в данных.
Проблема: В реальности наша оценка запаса — это не точное число, а вероятностное распределение. Если советовать вылов исходя из средней оценки, но реальное состояние запаса находится в “хвосте” распределения (т.е. хуже, чем мы думаем), это приведет к перелову.
Решение: Использование P*-подхода (подхода, основанного на вероятности). Управленческое решение принимается так, чтобы вероятность падения запаса ниже Blim не превышала заранее выбранного низкого уровня (напр., 5%). Фактически, мы рассчитываем ОДУ для пессимистичного сценария.
Оптимизация на средний (исторический) сценарий
Суть: Настройка правила так, чтобы оно идеально работало на исторических данных.
Проблема: Такое правило оказывается “заточено” под прошлые условия и оказывается хрупким. Первое же непредвиденное изменение в системе (например, дрейф уловистости — когда эффективность промысла меняется из-за погоды, поведения рыбы или технологий) опрокинет его.
Решение: Проверка (тестирование) правила не на истории, а в рамках оценки стратегии управления (MSE), где модель “генерирует” тысячи возможных будущих сценариев, включая ошибки и изменения. Правило должно быть робастным (устойчивым) к ним.
Слишком узкие «тормоза» на ОДУ
Суть: Введение очень жестких ограничений на межгодовое изменение ОДУ (например, не более ±5-10% в год) исключительно ради стабильности.
Проблема: Если запас объективно начал снижаться, такое правило не позволит быстро и адекватно сократить вылов. Неизбежное снижение ОДУ “откладывается” на годы, в течение которых промысел продолжается на чрезмерно высоком уровне, усугубляя проблему и увеличивая совокупный риск для запаса.
Решение: Поиск баланса. Ограничения на изменение TAC нужны (напр., ±20%), но они не должны быть слишком узкими, чтобы не мешать необходимой адаптации.
Что делаем в этой главе. - Формализуем HCR как функцию от B, Bmsy, Fmsy (и при необходимости B0, Blim, Bpa), обсуждаем буферы и квантильные ОДУ.
- Переводим F‑совет в ОДУ с учётом последнего года и его дисперсии; вводим ограничения на межгодовые изменения.
Сравниваем формы правил на одних и тех же оценках (SPiCT): где «клюшка» лучше, чем постоянная F, и чем советы ICES отличаются от 40–10.
Говорим о таблицах решений: прозрачные матрицы «если B/Bmsy в этом диапазоне — TAC такой», с колонкой риска.
- Подготавливаем правила к испытаниям в MSE: параметры правила — не «выбраны», а «настроены» под цели и риски.
Хорошее ПРП — это не «среднее арифметическое пожеланий», а записанный на одной странице договор о том, как мы обмениваем краткосрочную выгоду на долгосрочную устойчивость. Оно тем лучше, чем легче объясняется и воспроизводится, и тем надёжнее, чем честнее обращается с неопределённостью. Каждое из таких правил имеет свою область применения и обоснование. Выбор конкретного ПРП зависит от множества факторов: состояния запаса, качества данных, социально-экономического контекста и, что немаловажно, управленческой философии. Как заметил бы Довлатов, “управление рыболовством — это искусство находить компромисс между тем, что нужно рыбе, и тем, что хотят рыбаки”.
Полный скрипт можно скачать по ссылке. Ниже приводится исполнение скрипта и пояснения еще ниже.
# ===============================================================# СКРИПТ 2: ПРАВИЛА УПРАВЛЕНИЯ (HCR) И ОПРЕДЕЛЕНИЕ ОДУ# Курс: Оценка водных биоресурсов при недостатке данных в R# Автор: [Ваше имя]# Дата создания: 2024# ===============================================================# ======================= ВВЕДЕНИЕ =============================# Этот скрипт демонстрирует различные правила управления промыслом# (Harvest Control Rules - HCR) и методы определения общего # допустимого улова (ОДУ/TAC) на основе результатов SPiCT# ------------------- 1. ПОДГОТОВКА СРЕДЫ --------------------## 1.1 Очистка среды и загрузка библиотекrm(list =ls())library(spict)
Загрузка требуемого пакета: TMB
Welcome to spict_v1.3.8@107a32
library(tidyverse)
-- Attaching core tidyverse packages ------------------------ tidyverse 2.0.0 --
v dplyr 1.1.4 v readr 2.1.5
v forcats 1.0.0 v stringr 1.5.1
v ggplot2 3.5.2 v tibble 3.2.1
v lubridate 1.9.4 v tidyr 1.3.1
v purrr 1.0.4
-- Conflicts ------------------------------------------ tidyverse_conflicts() --
x dplyr::filter() masks stats::filter()
x dplyr::lag() masks stats::lag()
i Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(ggplot2)library(gridExtra)
Присоединяю пакет: 'gridExtra'
Следующий объект скрыт от 'package:dplyr':
combine
## 1.2 Загрузка результатов из первого скрипта# Предполагаем, что модель уже подогнана и сохраненаsetwd("C:/SPICT")fit <-readRDS("spict_model_fit.rds")cat("\n========== АНАЛИЗ ПРАВИЛ УПРАВЛЕНИЯ (HCR) ==========\n")
========== АНАЛИЗ ПРАВИЛ УПРАВЛЕНИЯ (HCR) ==========
========== СТАНДАРТНЫЕ СЦЕНАРИИ УПРАВЛЕНИЯ ==========
## 2.1 Использование функции sumspict.manage()# Эта функция рассчитывает прогнозы для различных сценариев управления# include.unc = TRUE включает оценку неопределенностиfit <-manage(fit)
# ------------------- 7. СРАВНЕНИЕ ВСЕХ ПРАВИЛ --------------------cat("\n========== СРАВНЕНИЕ ПРАВИЛ УПРАВЛЕНИЯ ==========\n")
========== СРАВНЕНИЕ ПРАВИЛ УПРАВЛЕНИЯ ==========
## 7.1 Функция для сравнения правил при разных уровнях биомассыcompare_HCRs <-function(B_range, Bmsy, Fmsy, K) { results <-data.frame(Biomass =rep(B_range, 4),B_Bmsy =rep(B_range / Bmsy, 4),HCR =rep(c("Hockey-stick", "ICES", "40-10", "Constant F"), each =length(B_range)),F_advice =NA )for (i in1:length(B_range)) { B <- B_range[i]# Hockey-stick results$F_advice[i] <-hockey_stick_HCR(B, Bmsy, Fmsy)# ICES ices <-ICES_advice_rule(B, Bmsy, Fmsy) results$F_advice[i +length(B_range)] <- ices$F_advice# 40-10 rule40 <-rule_40_10(B, K, Fmsy *0.75) results$F_advice[i +2*length(B_range)] <- rule40$F_advice# Constant F results$F_advice[i +3*length(B_range)] <- Fmsy }return(results)}## 7.2 Создание сравнительного графикаB_test_range <-seq(0.1, 2* Bmsy, length.out =100)comparison_df <-compare_HCRs(B_test_range, Bmsy, Fmsy, K)p_comparison <-ggplot(comparison_df, aes(x = B_Bmsy, y = F_advice, color = HCR, linetype = HCR)) +geom_line(linewidth =1.2) +geom_vline(xintercept =1, linetype ="dashed", alpha =0.5) +geom_hline(yintercept = Fmsy, linetype ="dashed", alpha =0.5) +labs(title ="Сравнение различных правил управления (HCR)",x ="B/Bmsy", y ="Рекомендованная F") +theme_minimal() +scale_color_brewer(palette ="Set2") +annotate("text", x =1, y =0, label ="Bmsy", vjust =-1)print(p_comparison)
# ------------------- 8. РАСЧЕТ ОДУ С УЧЕТОМ НЕОПРЕДЕЛЕННОСТИ --------------------cat("\n========== РАСЧЕТ ОДУ С НЕОПРЕДЕЛЕННОСТЬЮ ==========\n")
========== РАСЧЕТ ОДУ С НЕОПРЕДЕЛЕННОСТЬЮ ==========
## 8.1 Функция для расчета ОДУ с доверительными интерваламиcalculate_TAC_uncertainty <-function(fit, F_target_ratio =1.0, confidence_level =0.95) {# Извлечение параметров с неопределенностью B_est <-get.par("logB", fit, exp =TRUE) F_current <-get.par("logF", fit, exp =TRUE) Fmsy <-get.par("logFmsy", fit, exp =TRUE)# Целевая F F_target <- Fmsy[1] * F_target_ratio# Расчет TAC с квантилями TAC_median <- F_target * B_est[1] TAC_lower <- F_target * B_est[2] # Нижняя граница TAC_upper <- F_target * B_est[3] # Верхняя граница# Предосторожный подход - используем нижний квантиль биомассы TAC_precautionary <- F_target * B_est[2]return(list(TAC_median = TAC_median,TAC_lower = TAC_lower,TAC_upper = TAC_upper,TAC_precautionary = TAC_precautionary,F_target = F_target,B_estimate = B_est ))}## 8.2 Расчет TAC для разных сценариевscenarios_TAC <-list("F = Fmsy"=1.0,"F = 0.75*Fmsy"=0.75,"F = 0.5*Fmsy"=0.5,"F = 1.25*Fmsy"=1.25)cat("\n--- Расчет ОДУ для различных целевых F ---\n")
--- Расчет ОДУ для различных целевых F ---
for (scenario innames(scenarios_TAC)) { tac_result <-calculate_TAC_uncertainty(fit, scenarios_TAC[[scenario]])cat(sprintf("\n%s:\n", scenario))cat(sprintf(" TAC (медиана): %.1f тыс. т\n", tac_result$TAC_median))cat(sprintf(" TAC (95%% CI): [%.1f - %.1f] тыс. т\n", tac_result$TAC_lower, tac_result$TAC_upper))cat(sprintf(" TAC (предосторожный): %.1f тыс. т\n", tac_result$TAC_precautionary))}
F = Fmsy:
TAC (медиана): 14.9 тыс. т
TAC (95% CI): [15.0 - 15.1] тыс. т
TAC (предосторожный): 15.0 тыс. т
F = 0.75*Fmsy:
TAC (медиана): 11.2 тыс. т
TAC (95% CI): [11.3 - 11.3] тыс. т
TAC (предосторожный): 11.3 тыс. т
F = 0.5*Fmsy:
TAC (медиана): 7.4 тыс. т
TAC (95% CI): [7.5 - 7.6] тыс. т
TAC (предосторожный): 7.5 тыс. т
F = 1.25*Fmsy:
TAC (медиана): 18.6 тыс. т
TAC (95% CI): [18.8 - 18.9] тыс. т
TAC (предосторожный): 18.8 тыс. т
# ------------------- 9. МНОГОЛЕТНИЙ ПЛАН УПРАВЛЕНИЯ --------------------cat("\n========== МНОГОЛЕТНИЙ ПЛАН УПРАВЛЕНИЯ ==========\n")
========== МНОГОЛЕТНИЙ ПЛАН УПРАВЛЕНИЯ ==========
## 9.1 Функция для создания многолетнего планаcreate_management_plan <-function(fit, n_years =5, target_B_Bmsy =1.2,recovery_period =10) {# Текущее состояние B_current <-get.par("logB", fit, exp =TRUE)[1] Bmsy <-get.par("logBmsy", fit, exp =TRUE)[1] Fmsy <-get.par("logFmsy", fit, exp =TRUE)[1] r <-get.par("logr", fit, exp =TRUE)[1] K <-get.par("logK", fit, exp =TRUE)[1] B_Bmsy_current <- B_current / Bmsy# Определение стратегииif (B_Bmsy_current <0.5) { strategy <-"Восстановление запаса" F_multiplier_start <-0.3 F_multiplier_end <-0.7 } elseif (B_Bmsy_current <1.0) { strategy <-"Умеренное восстановление" F_multiplier_start <-0.7 F_multiplier_end <-0.9 } else { strategy <-"Устойчивый промысел" F_multiplier_start <-1.0 F_multiplier_end <-1.0 }# План по годам plan <-data.frame(Year =1:n_years,Strategy = strategy,F_multiplier =seq(F_multiplier_start, F_multiplier_end, length.out = n_years),F_target =NA,Expected_B =NA,Expected_B_Bmsy =NA,TAC =NA )# Прогнозирование B_proj <- B_currentfor (i in1:n_years) { plan$F_target[i] <- Fmsy * plan$F_multiplier[i] plan$Expected_B[i] <- B_proj plan$Expected_B_Bmsy[i] <- B_proj / Bmsy plan$TAC[i] <- plan$F_target[i] * B_proj# Обновление биомассы surplus <- r * B_proj * (1- B_proj/K) catch <- plan$F_target[i] * B_proj B_proj <- B_proj + surplus - catch }return(plan)}## 9.2 Создание и вывод планаmanagement_plan <-create_management_plan(fit, n_years =15)cat("\n--- 15-летний план управления ---\n")
Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
i Please use `linewidth` instead.
print(p_plan)
# ------------------- 10. ЭКСПОРТ РЕЗУЛЬТАТОВ --------------------#cat("\n========== СОХРАНЕНИЕ РЕЗУЛЬТАТОВ ==========\n")## 10.1 Сохранение всех графиков#pdf("HCR_analysis.pdf", width = 12, height = 8)#print(p_scenarios)#print(p_hockey)#print(p_comparison)#print(p_plan)#dev.off()#cat("Графики сохранены в 'HCR_analysis.pdf'\n")## 10.2 Экспорт таблицы с рекомендациямиrecommendations <-data.frame(Rule =c("Hockey-stick", "ICES", "40-10", "Current F", "Fmsy"),F_recommended =c(hockey_stick_HCR(B_current, Bmsy, Fmsy), ices_result$F_advice, result_40_10$F_advice,get.par("logF", fit, exp =TRUE)[1], Fmsy ),TAC_recommended =NA,Status =c("MSY-based", ices_result$status, result_40_10$status,"Status quo","Optimal" ))recommendations$TAC_recommended <- recommendations$F_recommended * B_currentwrite.csv(recommendations, "TAC_recommendations.csv", row.names =FALSE)cat("Рекомендации сохранены в 'TAC_recommendations.csv'\n")
Рекомендации сохранены в 'TAC_recommendations.csv'
## 10.3 Создание итогового отчетаsink("HCR_report.txt")cat("ОТЧЕТ ПО ПРАВИЛАМ УПРАВЛЕНИЯ И ОПРЕДЕЛЕНИЮ ОДУ\n")cat("=" , strrep("=", 50), "\n")cat("Дата:", format(Sys.Date(), "%d.%m.%Y"), "\n\n")cat("ТЕКУЩЕЕ СОСТОЯНИЕ ЗАПАСА:\n")cat("Биомасса:", round(B_current, 1), "тыс. т\n")cat("B/Bmsy:", round(B_current/Bmsy, 2), "\n")cat("F/Fmsy:", round(get.par("logF", fit, exp =TRUE)[1]/Fmsy, 2), "\n\n")cat("РЕКОМЕНДАЦИИ ПО ОДУ:\n")print(recommendations, digits =2)cat("\n\nПЯТИЛЕТНИЙ ПЛАН:\n")print(management_plan, digits =2)sink()cat("Отчет сохранен в 'HCR_report.txt'\n")
Отчет сохранен в 'HCR_report.txt'
cat("\n=============== АНАЛИЗ ЗАВЕРШЕН ===============\n")
=============== АНАЛИЗ ЗАВЕРШЕН ===============
15.2 Результаты применения правил управления: анализ второго скрипта
Выполнение второго скрипта наглядно демонстрирует, как теоретические правила управления превращаются в конкретные цифры вылова. Анализ восьми сценариев показывает существенный разброс в возможных последствиях управленческих решений.
Правило статус-кво (“Сохранить текущий уровень вылова”) предсказывает улов 11.8 тыс. тонн при относительной биомассе 1.31 B/Bmsy. Любопытно, что этот консервативный подход, вопреки ожиданиям, показывает не лучшие результаты по стабильности промысла. Широкие доверительные интервалы [1.12-1.52] для B/Bmsy свидетельствуют о значительной неопределенности.
Сценарий “Fish at Fmsy” дает максимальный предсказанный вылов — 22.0 тыс. тонн, но достигается это ценой снижения биомассы до 1.20 B/Bmsy. Примечательно, что доверительный интервал для F/Fmsy [0.45-2.23] превышает целевой уровень, что указывает на риск непреднамеренного перелова.
Полное закрытие промысла, как и ожидалось, приводит к восстановлению запаса до 1.42 B/Bmsy, но с очевидными социально-экономическими последствиями. Этот сценарий служит скорее теоретическим ориентиром, чем практическим решением.
Корректирующие правила показывают предсказуемую динамику: снижение F на 25% уменьшает вылов до 9.5 тыс. тонн при росте биомассы до 1.33 B/Bmsy, тогда увеличение F на 25% дает вылов 15.4 тыс. тонн, но снижает биомассу до 1.27 B/Bmsy.
Наиболее интересны современные адаптивные правила. MSY hockey-stick демонстрирует тот же вылов, что и Fmsy подход (22.0 тыс. тонн), но с лучшими показателями стабильности. Правило ICES показывает разумный компромисс — вылов 19.8 тыс. тонн при биомассе 1.23 B/Bmsy и значительно более узких доверительных интервалах.
Анализ доверительных интервалов заслуживает отдельного внимания. Широкие интервалы для всех сценариев (особенно для F/Fmsy) подчеркивают фундаментальную неопределенность в управлении рыболовством. Как мог бы заметить Довлатов, “рыболовство — это искусство принимать решения на основе неточных данных с точными последствиями”.
Результаты наглядно показывают, что не существует идеального правила — каждый выбор представляет собой компромисс между величиной вылова, стабильностью промысла и риском для запаса. Практическая ценность такого анализа заключается в возможности количественно оценить последствия каждого управленческого решения до его реализации.