Вы находитесь на странице: 1из 178

19.

Автоадаптация
Руководство пользователя

Rock Flow Dynamics

Март 2019
19.1

Информация о правах собственности


Rock Flow Dynamics ® (RFD), 2004–2019. Все права защищены. Данный документ яв-
ляется объектом интеллектуальной собственности компании RFD. Данный документ не
разрешается копировать, сохранять, распространять, фотографировать, воспроизводить
иными способами, а также переводить и преобразовывать в любую электронную или
машинную форму полностью или частично, без предварительного письменного разре-
шения компании RFD.

Информация о товарном знаке


RFD, логотип компании RFD и продукт tNavigator ® , а также другие слова и символы,
идентифицирующие продукты компании и сервис, описанный здесь, являются товар-
ными знаками, товарными именами компании RFD. Запрещается подражание, исполь-
зование, копирование товарных знаков, полное или частичное, без предварительного
письменного разрешения компании RFD. Графический дизайн, иконки и другие элемен-
ты дизайна продуктов компании RFD также могут являться товарными знаками и/или
внешним видом компании RFD и не могут использоваться, копироваться или подражать-
ся, полностью или частично, без предварительного письменного разрешения компании
RFD. Другие компании, продукты/сервисы являются собственностью соответствующих
владельцев.

Информация о безопасности
Предлагаемые компанией RFD настройки программного продукта носят рекомендатель-
ный характер и не являются ограничением для выбора настроек, с которыми может
работать программный продукт. Рекомендуется работать с программным продуктом
в безопасной среде не зависимо от того, осуществляется ли работа на персональном
компьютере или в сети. Пользователь програмного продукта несет ответственность за
создание и поддержание безопасности сети и/или операционной системы. Если у Вас
возникли вопросы по требованиям безопасности для програмного продукта свяжитесь с
Вашим региональным представителем.

Ограничение ответственности
Информация, которая содержится в данном документе, может быть изменена без пред-
варительного уведомления и не должна рассматриваться как обязательства, взятые на
себя компанией RFD. RFD не несет ответственности за ошибки, которые могут присут-
ствовать в данном документе. В некоторых государствах или территориях не разрешены
подобные заявления об ограничении ответственности прямо установленных или кос-
венных гарантий в определенных сделках; поэтому данное утверждение может к Вам не
относиться. Поскольку программный продукт, для которого написан данный документ,
постоянно обновляется, некоторые описания в этом документе могут не полностью со-
ответствовать последней версии продукта.

2
19.1

Содержание
1. Введение 6

2. Задание переменных 8
2.1. Сценарии задания переменных в ГУИ . . . . . . . . . . . . . . . . . . . . 10
2.1.1. Равновесие . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2.1.2. Относительные фазовые проницаемости . . . . . . . . . . . . . . . . 14
2.1.3. Множители проницаемости по регионам . . . . . . . . . . . . . . . 17
2.1.4. Множители проницаемости по слоям . . . . . . . . . . . . . . . . . 20
2.1.5. Изменение KV/KH . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
2.1.6. Множители проводимости по регионам . . . . . . . . . . . . . . . . 25
2.1.7. Множители порового объема по регионам . . . . . . . . . . . . . . . 28
2.1.8. Массивы масштабирования фазовых . . . . . . . . . . . . . . . . . . 30
2.1.9. Проводимость разломов . . . . . . . . . . . . . . . . . . . . . . . . . 34
2.1.10. Другие . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
2.2. Структура файлов проекта адаптации . . . . . . . . . . . . . . . . . . . . 38
2.2.1. Структура файлов эксперимента . . . . . . . . . . . . . . . . . . . . 39
2.2.2. Сохранение изменений, сделанных в проекте . . . . . . . . . . . . . 41
2.2.3. Удаление результатов эксперимента . . . . . . . . . . . . . . . . . . 41
2.3. Задание переменных в моделях с опцией reservoir coupling . . . . . . . . 41

3. Методы планирования экспериментов 43


3.1. Анализ чувствительности . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
3.2. Пользовательский . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
3.3. Перебор по сетке . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
3.4. Латинский гиперкуб . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
3.5. Монте–Карло . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
3.6. Торнадо . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
3.7. Метод Плэкетта-Бермана . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
3.7.1. Стандартный Плэкетт–Берман . . . . . . . . . . . . . . . . . . . . . 53
3.7.2. Добавить строку с мин. значениями . . . . . . . . . . . . . . . . . . 53
3.7.3. Симметричный Плакетт–Берман . . . . . . . . . . . . . . . . . . . . 54
3.8. Применение фильтра для переменных . . . . . . . . . . . . . . . . . . . . 55

4. Целевая функция 56
4.1. Задание целевой функции . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
4.2. Целевая функция согласования с историей . . . . . . . . . . . . . . . . . 60
4.2.1. Целевая функция по разным объектам . . . . . . . . . . . . . . . . . 60
4.2.2. Формулы для вычисления целевой функции . . . . . . . . . . . . . . 61
4.2.3. Автоматическое вычисление весов . . . . . . . . . . . . . . . . . . . 63
4.2.4. Выбор исторических точек для адаптации . . . . . . . . . . . . . . . 64
4.2.5. Загрузка истории по давлению в базовую модель . . . . . . . . . . . 65
4.3. Целевая функция оптимизации на прогнозе . . . . . . . . . . . . . . . . 67

СОДЕРЖАНИЕ 3
19.1

4.3.1. Целевая функция по разным объектам . . . . . . . . . . . . . . . . . 67


4.3.2. Формулы для целевой функции . . . . . . . . . . . . . . . . . . . . . 67
4.4. Нормализация целевой функции . . . . . . . . . . . . . . . . . . . . . . . 69
4.5. Целевая функция по пользовательским графикам . . . . . . . . . . . . . 70
4.6. Использование UDQ в качестве целевой функции . . . . . . . . . . . . . 71
4.7. Примеры целевых функций . . . . . . . . . . . . . . . . . . . . . . . . . . 72

5. Оптимизационные алгоритмы 74
5.1. Создание нового эксперимента с выбранных вариантов . . . . . . . . . . 76
5.2. Критерии остановки оптимизационного алгоритма . . . . . . . . . . . . 78
5.3. Поверхности отклика (Прокси-модели) . . . . . . . . . . . . . . . . . . . 81
5.4. Дифференциальная эволюция . . . . . . . . . . . . . . . . . . . . . . . . 82
5.4.1. Краткое описание алгоритма . . . . . . . . . . . . . . . . . . . . . . 82
5.4.2. Подробнее о параметрах . . . . . . . . . . . . . . . . . . . . . . . . . 83
5.4.3. Версии алгоритма . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
5.5. Симплекс-метод . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
5.5.1. Определения и краткое описание алгоритма . . . . . . . . . . . . . . 87
5.5.2. Алгоритм . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
5.6. Метод роя частиц . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
5.6.1. Краткое описание алгоритма . . . . . . . . . . . . . . . . . . . . . . 92
5.6.2. Общий вид алгоритма метода роя частиц . . . . . . . . . . . . . . . 92
5.6.3. Формула изменения скорости . . . . . . . . . . . . . . . . . . . . . . 93
5.6.4. Влияние параметров на работу алгоритма . . . . . . . . . . . . . . . 95
5.7. Многокритериальный метод роя частиц . . . . . . . . . . . . . . . . . . . 99
5.7.1. Краткое описание алгоритма . . . . . . . . . . . . . . . . . . . . . . 99
5.7.2. Общий вид алгоритма многокритериального метода роя частиц . . 100
5.7.3. Параметры алгоритма . . . . . . . . . . . . . . . . . . . . . . . . . . 101

6. Анализ результатов 102


6.1. Информация о проекте . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
6.2. Расчеты . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
6.3. Результаты . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
6.3.1. Кнопки верхней панели . . . . . . . . . . . . . . . . . . . . . . . . . 107
6.3.2. Кнопки левой панели . . . . . . . . . . . . . . . . . . . . . . . . . . 108
6.3.3. Кнопки правой панели . . . . . . . . . . . . . . . . . . . . . . . . . . 108
6.4. Таблица результатов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109
6.4.1. Расчет невязок . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109
6.5. Графики . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
6.6. Калькулятор графиков . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112
6.6.1. Функции и структуры данных . . . . . . . . . . . . . . . . . . . . . . 114
6.6.2. Импорт библиотек . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121
6.6.3. Примеры использования . . . . . . . . . . . . . . . . . . . . . . . . . 122
6.7. Кроссплот . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126
6.7.1. Визуализация фронта Парето . . . . . . . . . . . . . . . . . . . . . . 126

СОДЕРЖАНИЕ 4
19.1

6.8. Гистограмма . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129


6.9. Составная диаграмма . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130
6.10. Анализ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133
6.10.1. Диаграмма Парето . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133
6.10.2. График Торнадо . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135
6.10.3. Квантили . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136
6.10.4. Создание фильтра для переменных . . . . . . . . . . . . . . . . . . . 138
6.11. Mds . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139
6.11.1. Взвешенный алгоритм Mds . . . . . . . . . . . . . . . . . . . . . . . 140
6.12. Cdf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142
6.13. Прокси модель . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143
6.13.1. Построение формулы Прокси модели . . . . . . . . . . . . . . . . . 143
6.13.2. Использование нейронных сетей . . . . . . . . . . . . . . . . . . . . 145
6.13.3. Анализ методом Монте–Карло . . . . . . . . . . . . . . . . . . . . . 147
6.14. Создание групп вариантов модели . . . . . . . . . . . . . . . . . . . . . . 148
6.15. Таблица коэффициентов R2 . . . . . . . . . . . . . . . . . . . . . . . . . . 152
6.16. Кластеризация . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154

7. Переход от задачи адаптации к прогнозу 155


7.1. Создание прогноза в ГУИ . . . . . . . . . . . . . . . . . . . . . . . . . . . 156
7.1.1. NFA (No Further Action) сценарий . . . . . . . . . . . . . . . . . . . 158
7.1.2. Загрузка пользовательского schedule для создания прогноза . . . . . 159
7.1.3. Загрузка пользовательского schedule прогноза с переменными . . . 161

8. Скрипты построения модели (Workflows) 164


8.1. Редактирование workflow . . . . . . . . . . . . . . . . . . . . . . . . . . . 164
8.2. Создание переменных . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166
8.3. Воспроизведение workflow . . . . . . . . . . . . . . . . . . . . . . . . . . 167

9. Запуск адаптации из Дизайнера Моделей и Геологии 168


9.1. Использование дискретного преобразования Фурье в адаптации . . . . . 171
9.1.1. Дискретное косинусное преобразование . . . . . . . . . . . . . . . . 171
9.1.2. Дискретное косинусное преобразование в GUI . . . . . . . . . . . . 174

10. Список литературы 177

СОДЕРЖАНИЕ 5
19.1

1. Введение
tNavigator представляет собой единый программный пакет, который позволяет создавать
статические и динамические модели нефтегазовых месторождений, выполнять расчет
модели, анализ неопределенностей, построение поверхностной сети сбора продукции
в рамках единого интерфейса. Все модули tNavigator используют общую внутреннюю
систему хранения данных, расчётное ядро, обеспечивающее параллельный расчет на
всех доступных вычислительных мощностях, общие форматы ввода/вывода данных и
графический интерфейс. tNavigator поддерживает системы единиц измерения METRIC,
LAB, FIELD.
tNavigator является единым программным комплексом, разработанным на C++. Дан-
ное программное обеспечение может быть установлено на операционных системах
Windows, Linux 64-bit, на системах с общей или распределенной памятью. tNavigator
может использоваться как консольная версия, так и как версия с графическим интер-
фейсом (локальным или удаленным). Расчет может осуществляться на рабочих станциях
и кластерах. Доступны облачные вычисления с полными возможностями графического
интерфейса пользователя для удаленного рабочего стола.
tNavigator содержит 8 независимо лицензируемых функциональных модулей:

• Дизайнер Геологии (включает PVT Дизайнер и VFP Дизайнер);

• Дизайнер Моделей (включает PVT Дизайнер и VFP Дизайнер);

• Дизайнер Сетей (включает PVT Дизайнер и VFP Дизайнер);

• Черная нефть (расчетный модуль);

• Композиционная модель (расчетный модуль);

• Термическая модель (расчетный модуль);

• Автоадаптация (автоадаптация, оптимизация и анализ неопределенностей);

• Графический интерфейс.

Доступная документация по tNavigator перечислена в Списке документации.

В данном документе описана работа с модулем Автоадаптация, интегрированным с


расчетными модулями tNavigator (Черная нефть, Композиционная модель, Термическая
модель) и с Графическим интерфейсом.

Модуль Автоадаптация может быть использован для:


• Анализа чувствительности;

• Оценки неопределенности;

• Адаптации моделей по истории;

1. Введение 6
19.1

• Многовариантной адаптации модели;

• Вероятностного прогноза;

• Оптимизации разработки;

• Анализа рисков;

• Обоснования программы исследований.

Техническое руководство tNavigator по работе с гидродинамической моделью содер-


жит описание физической модели, математической модели и ключевых слов.

1. Введение 7
19.1

2. Задание переменных
Для запуска любого алгоритма необходимо предварительно задать переменные. В ка-
честве переменных для адаптации и анализа чувствительности могут использоваться
разнообразные параметры. Например:

• различные геологические реализации;

• проницаемость;

• ОФП;

• параметры аквифера;

• данные скважин;

• проводимость разломов.

Для оптимизации на прогнозе в качестве переменных могут быть выбраны следую-


щие параметры:

• траектории скважин;

• параметры скважин.

Количество переменных, задаваемых пользователем в проекте, не ограничено. Од-


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

• в графическом интерфейсе (ГУИ);

• с помощью ключевого слова DEFINES (см. 12.1.24) в data файле (для моделей
формата tN, E1, E3, IM, ST, GE) и ключевого слова VDEF (см. 12.1.25) (для моделей
формата MO).

Выбор переменных в ГУИ ограничен набором стандартных сценариев. C помощью


ключевого слова DEFINES (см. 12.1.24) можно задать любой параметр в качестве пере-
менной.

2. Задание переменных 8
19.1

Примеры задания переменных в модуле автоадаптации приведены


в учебных курсах:

• AHM1.1. Автоадаптация: теоретический курс;

• AHM1.2. Автоадаптация;

• AHM1.3. Использование RFT данных в автоадаптации;

• AHM1.4. Поиск лучшей траектории скважины;

• AHM1.5. Адаптация по ОФП;

• AHM1.6. Автоадаптация для ГРП;

• AHM1.7. Автоадаптация для разных геологических реали-


заций;

• AHM1.8. Переход от задачи адаптации к расчету прогноза;

• AHM1.9. Анализ неопределенностей.

2. Задание переменных 9
19.1

2.1. Сценарии задания переменных в ГУИ


Для выбора и задания переменных в графическом интерфейсе используйте кнопку
Менеджер переменных для адаптации модели, показанную на рис. 1. Если проект
адаптации модели создается через главное окно tNavigator (см. рис. 2), то программа
автоматически предложит выбрать переменные для проекта адаптации модели. Никакая
предварительная подготовка модели не требуется.
Появление некоторых сценариев в окне Менеджера переменных для адаптации
модели зависит от ключевых слов, присутствующих в модели. Выбрав сценарий, га-
лочкой отметьте те переменные, которые будут использованы для адаптации модели.
Задайте диапазон изменения выбранных переменных, т.е. минимальное и максимальное
значения.

Рис. 1. Менеджер переменных для адаптации модели.

Предлагаются следующие сценарии задания переменных:

• Равновесие;

• Относительные фазовые проницаемости;

• Множители проницаемости по регионам;

• Множители проницаемости по слоям;

• Изменение KV/KH;

• Множители проводимости по регионам;

• Множители порового объема по регионам;

2.1. Сценарии задания переменных в ГУИ 10


19.1

• Массивы масштабирования фазовых;

• Проводимость разломов;

• Другие.

Рис. 2. Создание проекта адаптации из главного окна.

2.1. Сценарии задания переменных в ГУИ 11


19.1

2.1.1. Равновесие
Переменные сценария
В данном сценарии адаптации глубины газо-нефтяного контакта GOC (ГНК) и глу-
бины водо-нефтяного контакта WOC (ВНК) используются в качестве переменных.
Доступ к сценарию в ГУИ
Данный сценарий доступен в менеджере переменных ГУИ для адаптации модели,
если в модели задано ключевое слов EQUIL (см. 12.16.2). На рис. 3 показан выбор WOC
в первом регионе равновесия в качестве переменной.

Рис. 3. Задание глубины WOC в качестве переменной в ГУИ.

Файл сценария, автоматически созданный в папке USER


После запуска проекта адаптации модели в папку USER будет автоматически со-
хранен файл <имя_проекта>_equil.inc. В этом файле запишется ключевое слово
DEFINES (см. 12.1.24), имена переменных, диапазоны их изменения, их типы. Имена
переменных используются внутри символов @ в ключевом слове EQUIL (см. 12.16.2).
В процессе автоадаптации на место каждой переменной будет подставлено число из
заданного в DEFINES (см. 12.1.24) диапазона.

2.1.1. Равновесие 12
19.1

Пример
DEFINES
'WOC_EQLREG_1' 1877 1876 1878 REAL/
/
...
EQUIL
– depth pres depth-wo pres-wo depth-go pres-go rsvd rvvd
accuracy
1816 180 @WOC_EQLREG_1@ 0 1816 0 0 /
/

В данном примере глубина ВНК (WOC) задается как переменная. Ее начальное зна-
чение 1877, минимальное значение 1876, максимальное значение 1878. При помощи
ключевого слова EQUIL (см. 12.16.2) глубине водо-нефтяного контакта DWOC приравни-
вается значение переменной WOC_EQLREG_1 во всех блоках модели.

2.1.1. Равновесие 13
19.1

2.1.2. Относительные фазовые проницаемости


Переменные сценария
В данном сценарии адаптации концевые точки относительных фазовых проницаемо-
стей (ОФП) используются в качестве переменных.
Доступ к сценарию в ГУИ
Данный сценарий доступен в менеджере переменных ГУИ, если в модели ОФП
заданы с помощью корреляций Кори (COREYWO (см. 12.6.3), COREYGO (см. 12.6.4),
COREYWG, см. 12.6.5) или LET (LETWO (см. 12.6.8), LETGO (см. 12.6.9), LETWG,
см. 12.6.10). Пользователь задает только концевые точки, а кривые ОФП строятся ав-
томатически по корреляциям Кори (ЛЕТ).

Приемущество задания ОФП через корреляции: В процессе автоадаптации нет


необходимости перестраивать вручную таблицы ОФП при изменении одной точки.

Если ОФП заданы таблицей, например SWOF (см. 12.6.1), SGOF (см. 12.6.2), то
необходимо конвертировать таблицу в корреляции Кори (LET), а после запустить дан-
ный сценарий. Для конвертации ОФП таблиц в корреляции Кори (LET) перейдите в
меню Документы и выберите в появившемся меню Аппроксимировать ОФП – Кон-
вертировать в корреляции Кори или LET.
Переменные по регионам можно задать следующим образом (см. рис. 4):

• Установить по регионам. Задается величина переменной в указанном регионе


или общая переменная на несколько регионов. Значению целевого параметра будет
присвоено значение переменной;

• Умножить по регионам. Значение целевого параметра будет домножено на зна-


чение переменной в регионе (регионах);

• Прибавить по регионам. Значение целевого параметра будет суммировано со зна-


чением переменной в регионе (регионах).

Файл сценария, автоматически созданный в папке USER


После запуска проекта адаптации модели в папку USER будет автоматически сохра-
нен файл <имя_проекта>_rp.inc. В этом файле запишется ключевое слово DEFINES
(см. 12.1.24), имена переменных, диапазоны их изменения, их типы. Имена перемен-
ных используется внутри символов @ в соответствующих ключевых словах, например,
COREYWO (см. 12.6.3), COREYGO, см. 12.6.4) или ЛЕТ (LETWO (см. 12.6.8), LETGO,
см. 12.6.9). В процессе автоадаптации на место каждой переменной будет подставлено
число из заданного в DEFINES (см. 12.1.24) диапазона.

2.1.2. Относительные фазовые проницаемости 14


19.1

Рис. 4. Задание концевых точек в качестве переменных в ГУИ.

Пример
DEFINES
'K_RORW_M_2_4' 1 0.5 2 REAL /
'N_W_P_2_4' 0 -0.1 0.1 REAL /
'S_WCR_S_2_4' 0.39 0.29 0.49 REAL /
/
...
COREYWO
– SWL SWU SWCR SOWCR KROLW KRORW KRWR KRWU PCOW NOW NW NP SPC0
0.238 1 0.296 0.254 0.8 0.52 0.28 1 0 3.3 2.4 0 -1 /
0.238 1 @S_WCR_S_2_4@ 0.23 0.8 @0.11 * K_RORW_M_2_4@ 0.22 1 0
4 @2.4 + N_W_P_2_4@ 0 -1 /
0.238 1 0.34 0.265 0.8 0.435 0.398 1 0 3.5 2.4 0 -1 /
0.238 1 @S_WCR_S_2_4@ 0.27 0.8 @0.217 * K_RORW_M_2_4@ 0.302 1
0 3.3 @1.8 + N_W_P_2_4@ 0 -1 /
0.238 1 0.3 0.266 0.8 0.58 0.344 1 0 2.8 2 0 -1 /
/

В Примере 1 в качестве переменных задаются точки фазовых проницаемостей для


2–го и 4–го регионов насыщенности. Далее данные переменные используются в качестве
параметров в ключевом слове COREYWO (см. 12.6.3). При этом:

2.1.2. Относительные фазовые проницаемости 15


19.1

• значение krORW , равное 0.217, будет домножено на значение переменной


K_RORW_M_2_4 (буква M в имени переменной), меняющееся в диапазоне от 0.5
до 2;

• к значению nW , равному 1.8, будет прибавлено значение переменной N_W_P_2_4


(буква P в имени переменной) в диапазоне от -0.1 до 0.1;

• значению SWCR будет присвоено значение S_WCR_S_2_4 (буква S в имени пере-


менной) в диапазоне от 0.29 до 0.49.

По умолчанию значение переменной K_RORW_M_2_4 равно 1, значение переменной


N_W_P_2_4 равно 0 и значение переменной S_WCR_S_2_4 равно 0.39. В случае если
выбраны все регионы, в имени переменной будет указан диапазон регионов, например
K_RORW_M_1TO5 означает, что берутся регионы от 1 до 5.

Пример
COREYWO
– SWL SWU SWCR SOWCR KROLW KRORW KRWR KRWU PCOW NOW NW NP SPC0
0.24 1 0.29 0.25 0.8 0.5 @0.28+K_RWR_P_1TO5@ 1 0 3 2 0 -1 /
0.24 1 0.39 0.23 0.8 0.11 @0.22+K_RWR_P_1TO5@ 1 0 4 3 0 -1 /
0.24 1 0.34 0.27 0.8 0.43 @0.4+K_RWR_P_1TO5@ 1 0 3 2 0 -1 /
0.24 1 0.35 0.28 0.8 0.2 @0.3+K_RWR_P_1TO5@ 1 0 3.3 2 0 -1 /
0.24 1 0.31 0.26 0.8 0.58 @0.34+K_RWR_P_1TO5@ 1 0 3 2 0 -1 /
/

Заметим, что для операций прибавить и умножить по регионам программа автомати-


чески контролирует выход переменных за физические границы параметра, не позволяя
задать переменные, которые приведут к не физичным результатам. Если значение пере-
менной выходит за границу корректного диапазона значений, цвет ее значения станет
красным. В следующем примере (Пример 2) видно, что в регионе 2 относительная фазо-
вая проницаемость воды krW R равна 0.22, krW R будет равна 0 при значении переменной
K_RWR_P_1TO5 = -0.22.

2.1.2. Относительные фазовые проницаемости 16


19.1

2.1.3. Множители проницаемости по регионам


Переменные сценария
В данном сценарии адаптации множители проницаемости по выбранным регионам
используются в качестве переменных. Все 3 куба проницаемости PERMX (см. 12.2.13),
PERMY (см. 12.2.13) и PERMZ (см. 12.2.13) умножаются на множители проницаемости.
Для расчета проницаемости PERMZ (см. 12.2.13) по проницаемости в X направлении
PERMX (см. 12.2.13), PERMZ = PERMX ∗ @KV _KH@, можно использовать сценарий
Изменение KV/KH.
Доступ к сценарию в ГУИ
На рис. 5 показан выбор множителей проницаемости по регионам в качестве пере-
менных в ГУИ.

Рис. 5. Задание множителей проницаемости по регионам в качестве переменных в ГУИ.

2.1.3. Множители проницаемости по регионам 17


19.1

Файл сценария, автоматически созданный в папке USER


После запуска проекта адаптации модели в папку USER проекта адаптации модели
будет автоматически сохранен файл <имя_проекта>_hm_mult_perm_by_regs.inc.
В этом файле запишется ключевое слово DEFINES (см. 12.1.24), имена переменных, диа-
пазоны их изменения, их типы. Имена переменных используются внутри символов @
в ключевом слове ARITHMETIC (см. 12.3.2). В процессе автоадаптации на место каждой
переменной будет подставлено число из заданного в DEFINES (см. 12.1.24) диапазона.
Пример
DEFINES 'M_PERM_FIPNUM_1' 1.000000 0.100000 10.000000 REAL /
'M_PERM_FIPNUM_2' 1.000000 0.100000 10.000000 REAL /
'M_PERM_FIPNUM_3' 1.000000 0.100000 10.000000 REAL /
/ ...

ARITHMETIC PERMX = IF (IWORKFIPNUM == 1, PERMX *


@M_PERM_FIPNUM_1@, PERMX)
PERMY = IF (IWORKFIPNUM == 1, PERMY * @M_PERM_FIPNUM_1@,
PERMY)
PERMZ = IF (IWORKFIPNUM == 1, PERMZ * @M_PERM_FIPNUM_1@,
PERMZ)
PERMX = IF (IWORKFIPNUM == 2, PERMX * @M_PERM_FIPNUM_2@,
PERMX)
PERMY = IF (IWORKFIPNUM == 2, PERMY * @M_PERM_FIPNUM_2@,
PERMY)
PERMZ = IF (IWORKFIPNUM == 2, PERMZ * @M_PERM_FIPNUM_2@,
PERMZ)
PERMX = IF (IWORKFIPNUM == 3, PERMX * @M_PERM_FIPNUM_3@,
PERMX)
PERMY = IF (IWORKFIPNUM == 3, PERMY * @M_PERM_FIPNUM_3@,
PERMY)
PERMZ = IF (IWORKFIPNUM == 3, PERMZ * @M_PERM_FIPNUM_3@,
PERMZ)
/

В данном примере для каждого региона задается переменная множителя проницае-


мости: для первого региона – M_PERM_FIPNUM_1 и т. д. Для всех переменных началь-
ное значение 1, минимальное значение — 0.1 и максимальное — 10. Тип переменных
REAL.
В процессе адаптации (см. Пример 1) PERMX, PERMY и PERMZ умножаются на
значения переменных в разных регионах FIPNUM. PERMX, PERMY и PERMZ зада-
ются в файле grid.inc. В data файле модели секция GRID расположена ранее секции
REGIONS, в которой находятся все данные о регионах FIPNUM. Поэтому в создан-
ном файле, куб FIPNUM подключается как пользовательский куб свойств (массив), имя

2.1.3. Множители проницаемости по регионам 18


19.1

которого IWORKFIPNUM (см. ключевое слово IWORK, см. 12.3.6). Далее мы можем
использовать этот FIPNUM-массив в арифметике.
В секции EDIT c помощью ключевого слова ARITHMETIC (см. 12.3.2) для каждого
региона FIPNUM проницаемости PERMX (см. 12.2.13), PERMY (см. 12.2.13) и PERMZ
(см. 12.2.13) умножаются на данные множители.

2.1.3. Множители проницаемости по регионам 19


19.1

2.1.4. Множители проницаемости по слоям


Переменные сценария
В данном сценарии адаптации множители проницаемости, заданные в выбранных
слоях (группах слоев), используются в качестве переменных. В выбранном слое (группе
слоев) на множитель проницаемости можно умножить по соответствующим галочкам:

• все 3 куба проницаемости PERMX (см. 12.2.13), PERMY (см. 12.2.13) и PERMZ
(см. 12.2.13);

• кубы проницаемости PERMX (см. 12.2.13) и PERMY (см. 12.2.13);

• куб PERMZ (см. 12.2.13).

Рис. 6. Задание множителей проницаемости по выбранным слоям в качестве перемен-


ных в ГУИ.

Доступ к сценарию в ГУИ


На рис. 6 показан выбор множителей проницаемости по слоям в качестве перемен-
ных в ГУИ. Для разбиения модели на группы слоев (по Z), для которых будут заданы

2.1.4. Множители проницаемости по слоям 20


19.1

общие множители, задайте в поле Количество частей для разделения необходимое


число и нажмите на кнопку Разделить.
Для расчета проницаемости PERMZ (см. 12.2.13) по проницаемости в X направлении
PERMX (см. 12.2.13), PERMZ = PERMX ∗ @KV _KH@, можно использовать сценарий
Изменение KV/KH.
Файл сценария, автоматически созданный в папке USER
После запуска проекта адаптации модели в папку USER проекта адаптации модели
будет автоматически сохранен файл <имя_проекта>_hm_mult_by_layers.inc. В
этом файле запишется ключевое слово DEFINES (см. 12.1.24), имена переменных, диа-
пазоны их изменения, их типы. Имена переменных используются внутри символов @
в ключевом слове ARITHMETIC (см. 12.3.2). В процессе автоадаптации на место каждой
переменной будет подставлено число из заданного в DEFINES (см. 12.1.24) диапазона.
Пример
DEFINES 'MULT_PERMXYZ_1_12' 1 0.1 15 REAL /
'MULT_PERMXYZ_13_25' 1 1 10 REAL /
'MULT_PERMXYZ_26_38' 1 1 10 REAL /
'MULT_PERMXYZ_39_51' 1 0.5 5 REAL /
'MULT_PERMXYZ_52_64' 1 0.1 10 REAL /
'MULT_PERMXYZ_65_76' 1 0.1 10 REAL/
'MULT_PERMXYZ_77_89' 1 0.2 3 REAL /
'MULT_PERMXYZ_90_102' 1 0.1 10 REAL/
'MULT_PERMXYZ_103_115' 1 0.1 10 REAL/
'MULT_PERMXYZ_116_128' 1 0.1 10 REAL/
/ ...

ARITHMETIC PERMX („1:12) = PERMX(„1:12)*@MULT_PERMXYZ_1_12@


PERMY („1:12) = PERMY(„1:12)*@MULT_PERMXYZ_1_12@
PERMZ („1:12) = PERMZ(„1:12)*@MULT_PERMXYZ_1_12@
PERMX („13:25) = PERMX(„13:25)*@MULT_PERMXYZ_13_25@
PERMY („13:25) = PERMY(„13:25)*@MULT_PERMXYZ_13_25@
PERMZ („13:25) = PERMZ(„13:25)*@MULT_PERMXYZ_13_25@
PERMX („26:38) = PERMX(„26:38)*@MULT_PERMXYZ_26_38@
PERMY („26:38) = PERMY(„26:38)*@MULT_PERMXYZ_26_38@
PERMZ („26:38) = PERMZ(„26:38)*@MULT_PERMXYZ_26_38@
...
/

В данном примере задается множитель проницаемости для каждой группы слоев по


Z: для слоев с номерами от 1 до 12 множитель MULT_PERMXYZ_1_12 и т.д. Все пе-
ременные имеют тип REAL и начальное значение 1. Диапазон изменения для каждой
переменной свой. В секции EDIT c помощью ключевого слова ARITHMETIC (см. 12.3.2)

2.1.4. Множители проницаемости по слоям 21


19.1

для каждого слоя (например („1:12)) PERMX (см. 12.2.13) (проницаемость в направле-
нии X), PERMY (см. 12.2.13) (проницаемость в направлении Y), PERMZ (см. 12.2.13)
(проницаемость в направлении Z) умножаются на данные множители.
Пример
DEFINES 'MULT_PERMZ_1_12' 1 0.1 15 REAL /
'MULT_PERMZ_13_25' 1 1 10 REAL /
'MULT_PERMZ_26_38' 1 1 10 REAL /
'MULT_PERMZ_39_51' 1 0.5 5 REAL /
'MULT_PERMZ_52_64' 1 0.1 10 REAL /
'MULT_PERMZ_65_76' 1 0.1 10 REAL/
'MULT_PERMZ_77_89' 1 0.2 3 REAL /
'MULT_PERMZ_90_102' 1 0.1 10 REAL/
'MULT_PERMZ_103_115' 1 0.1 10 REAL/
'MULT_PERMZ_116_128' 1 0.1 10 REAL/
/ ...

ARITHMETIC
PERMZ („1:12) = PERMZ(„1:12)*@MULT_PERMZ_1_12@
PERMZ („13:25) = PERMZ(„13:25)*@MULT_PERMZ_13_25@
PERMZ („26:38) = PERMZ(„26:38)*@MULT_PERMZ_26_38@
PERMZ („39:51) = PERMZ(„39:51)*@MULT_PERMZ_39_51@
PERMZ („52:64) = PERMZ(„52:64)*@MULT_PERMZ_52_64@
PERMZ („65:76) = PERMZ(„65:76)*@MULT_PERMZ_65_76@
PERMZ („77:89) = PERMZ(„77:89)*@MULT_PERMZ_77_89@
PERMZ („90:102) = PERMZ(„90:102)*@MULT_PERMZ_90_102@
PERMZ („103:115) = PERMZ(„103:115)*@MULT_PERMZ_103_115@
PERMZ („116:128) = PERMZ(„116:128)*@MULT_PERMZ_116_128@
/

В Примере 2 задается множитель проницаемости для каждой группы слоев по Z: для


слоев с номерами от 1 до 12 множитель MULT_PERMZ_1_12 и т. д. Однако, в отличие
от предыдущего примера, только проницаемость по Z PERMZ (см. 12.2.13) умножается
на множители в соответствующих слоях.

2.1.4. Множители проницаемости по слоям 22


19.1

2.1.5. Изменение KV/KH


Переменные сценария
В данном сценарии адаптации задается множитель KV_KH в качестве переменной.
Проницаемость PERMZ (см. 12.2.13) вычисляется по PERMX (см. 12.2.13) (проницаемо-
сти в X направлении) по формуле: PERMZ=PERMX * @KV_KH@.
Доступ к сценарию в ГУИ
На рис. 7 показан выбор множителя KV_KH в качестве переменной в ГУИ.

Рис. 7. Задание переменной KV_KH в ГУИ.

Файл сценария, автоматически созданный в папке USER


После запуска проекта адаптации модели в папку USER проекта адаптации моде-
ли будет автоматически сохранен файл <имя_проекта>_hm_adjust_kv_kh.inc. В
этом файле запишется ключевое слово DEFINES (см. 12.1.24), имя переменой, диапазон
ее изменения, ее тип. Имя переменной используется внутри символов @ в ключевом
слове ARITHMETIC (см. 12.3.2). В процессе автоадаптации на место переменной будет
подставлено число из заданного в DEFINES (см. 12.1.24) диапазона.
Пример
DEFINES 'KV_KH' 0.1 0.1 1 REAL /
/ ...

ARITHMETIC
PERMY = PERMX
PERMZ = PERMX * @KV_KH@
/

2.1.5. Изменение KV/KH 23


19.1

В данном примере задается переменная KV_KH. Начальное значение 0.1, минималь-


ное значение – 0.1 и максимальное – 1. Тип переменной – REAL. В секции EDIT c по-
мощью ключевого слова ARITHMETIC (см. 12.3.2). Проницаемость PERMZ (см. 12.2.13)
вычисляется как PERMZ=PERMX * @KV_KH@.

2.1.5. Изменение KV/KH 24


19.1

2.1.6. Множители проводимости по регионам


Переменные сценария
В данном сценарии адаптации множители проводимости по выбранным регионам ис-
пользуются в качестве переменных. MULTX (см. 12.2.15), MULTY (см. 12.2.17) и MULTZ
(см. 12.2.19) умножаются на переменные в соответствующих регионах.
Доступ к сценарию в ГУИ
На рис. 8 показан выбор множителей проводимости по регионам в качестве пере-
менных в ГУИ.

Рис. 8. Задание множителей проводимости по регионам в качестве переменных в ГУИ.

Файл сценария, автоматически созданный в папке USER


После запуска проекта адаптации модели в папку USER проекта адаптации модели
будет автоматически сохранен файл <имя_проекта>_hm_mult_trans_by_regs.inc.
В этом файле запишется ключевое слово DEFINES (см. 12.1.24), имена переменных, диа-
пазоны их изменений, их типы. Имена переменных используются внутри символов @
в ключевом слове ARITHMETIC (см. 12.3.2). В процессе автоадаптации на место каждой
переменной будет подставлено число из заданного в DEFINES (см. 12.1.24) диапазона.

2.1.6. Множители проводимости по регионам 25


19.1

Пример
DEFINES 'M_TRANSMISSIBILITY_FIPNUM_1' 1 0.1 15 REAL /
'M_TRANSMISSIBILITY_FIPNUM_2' 1 1 10 REAL /
'M_TRANSMISSIBILITY_FIPNUM_3' 1 0.1 10 REAL /
'M_TRANSMISSIBILITY_FIPNUM_4' 1 0.1 10 REAL /
/ ...

ARITHMETIC
MULTX = IF (IWORKFIPNUM == 1, MULTX *
@M_TRANSMISSIBILITY_FIPNUM_1@, MULTX)
MULTXM = IF (IWORKFIPNUM == 1, MULTXM *
@M_TRANSMISSIBILITY_FIPNUM_1@, MULTXM)
MULTY = IF (IWORKFIPNUM == 1, MULTY *
@M_TRANSMISSIBILITY_FIPNUM_1@, MULTY)
MULTYM = IF (IWORKFIPNUM == 1, MULTYM *
@M_TRANSMISSIBILITY_FIPNUM_1@, MULTYM)
MULTZ = IF (IWORKFIPNUM == 1, MULTZ *
@M_TRANSMISSIBILITY_FIPNUM_1@, MULTZ)
MULTZM = IF (IWORKFIPNUM == 1, MULTZM *
@M_TRANSMISSIBILITY_FIPNUM_1@, MULTZM)
MULTX = IF (IWORKFIPNUM == 2, MULTX *
@M_TRANSMISSIBILITY_FIPNUM_2@, MULTX)
MULTXM = IF (IWORKFIPNUM == 2, MULTXM *
@M_TRANSMISSIBILITY_FIPNUM_2@, MULTXM)
MULTY = IF (IWORKFIPNUM == 2, MULTY *
@M_TRANSMISSIBILITY_FIPNUM_2@, MULTY)
MULTYM = IF (IWORKFIPNUM == 2, MULTYM *
@M_TRANSMISSIBILITY_FIPNUM_2@, MULTYM)
MULTZ = IF (IWORKFIPNUM == 2, MULTZ *
@M_TRANSMISSIBILITY_FIPNUM_2@, MULTZ)
MULTZM = IF (IWORKFIPNUM == 2, MULTZM *
@M_TRANSMISSIBILITY_FIPNUM_2@, MULTZM)
...
/

В данном примере для каждого региона FIPNUM задается переменная множителя


проводимости: для первого региона – M_TRANSMISSIBILITY_FIPNUM_1 и т.д. Для
всех переменных начальное значение 1, минимальное значение — 0.1 и максимальное —
10. Тип переменных REAL.
MULTX (см. 12.2.15), MULTY (см. 12.2.17) и MULTZ (см. 12.2.19) задаются в файле
grid.inc. Однако, в data файле модели секция GRID расположена ранее секции REGIONS,
в которой находятся все данные о регионах FIPNUM. Поэтому в созданном файле,
куб FIPNUM подключается как пользовательский куб свойств (массив), имя которого

2.1.6. Множители проводимости по регионам 26


19.1

IWORKFIPNUM (ключевое слово IWORK, см. 12.3.6). Далее мы можем использовать


этот FIPNUM-массив в арифметике.
В секции EDIT c помощью ключевого слова ARITHMETIC (см. 12.3.2) для каждого
региона проводимости MULTX, MULTY, MULTZ умножаются на данные множители.

2.1.6. Множители проводимости по регионам 27


19.1

2.1.7. Множители порового объема по регионам


Переменные сценария
В данном сценарии адаптации множители порового объема по выбранным регионам
используются в качестве переменных.
Доступ к сценарию в ГУИ
Данный сценарий доступен в менеджере переменных ГУИ, если в data файле модели
присутствует секция EDIT. На рис. 9 показан выбор множителей порового объема в
качестве переменных в ГУИ.

Рис. 9. Задание множителей порового объема по регионам в качестве переменных в


ГУИ.

Файл сценария, автоматически созданный в папке USER


После запуска проекта адаптации модели в папку USER проекта адаптации модели
будет автоматически сохранен файл <имя_проекта>_hm_mult_porv_by_regs.inc.
В этом файле запишется ключевое слово DEFINES (см. 12.1.24), имена переменных, диа-
пазоны их изменения, их типы. Имена переменных используются внутри символов @
в ключевом слове ARITHMETIC (см. 12.3.2). В процессе автоадаптации на место каждой
переменной будет подставлено число из заданного в DEFINES (см. 12.1.24) диапазона.

2.1.7. Множители порового объема по регионам 28


19.1

Пример
DEFINES
'M_PORV_FIPNUM_1' 1.000000 0.100000 10.000000 REAL /
'M_PORV_FIPNUM_2' 1.000000 0.100000 10.000000 REAL /
'M_PORV_FIPNUM_3' 1.000000 0.100000 10.000000 REAL /
/ ...

ARITHMETIC
PORV = IF (IWORKFIPNUM == 1, PORV * @M_PORV_FIPNUM_1@, PORV)
PORV = IF (IWORKFIPNUM == 2, PORV * @M_PORV_FIPNUM_2@, PORV)
PORV = IF (IWORKFIPNUM == 3, PORV * @M_PORV_FIPNUM_3@, PORV)
/

В данном примере для каждого региона задается переменная для множителя поро-
вого объема: для первого региона – M_PORV_FIPNUM_1, и т.д. Для всех переменных
начальное значение 1, минимальное значение — 0.1 и максимальное — 10. Тип перемен-
ных REAL.
Эффективный поровый объем ячеек PORV (см. 12.2.27) изменяется в секции EDIT.
Однако, в data файле модели секция EDIT расположена ранее секции REGIONS, в
которой находятся все данные о регионах FIPNUM. Поэтому в созданном файле,
куб FIPNUM подключается как пользовательский куб свойств (массив), имя которого
IWORKFIPNUM (ключевое слово IWORK, см. 12.3.6). Далее мы можем использовать
этот FIPNUM-массив в арифметике.
В секции EDIT c помощью ключевого слова ARITHMETIC (см. 12.3.2) для каждого
региона поровый объем PORV (см. 12.2.27) умножаются на соответствующий множи-
тель.

2.1.7. Множители порового объема по регионам 29


19.1

2.1.8. Массивы масштабирования фазовых


Переменные сценария
В данном сценарии адаптации массивы концевых точек используются в качестве
переменных: SWCR (см. 12.6.29), SOWCR (см. 12.6.31), SWU (см. 12.6.33), SWL
(см. 12.6.26), KRW (см. 12.6.59), KRWR (см. 12.6.59), KRORW (см. 12.6.58), KRO
(см. 12.6.58), PCW (см. 12.6.62), SWLPC (см. 12.6.27), SGCR (см. 12.6.30), SOGCR
(см. 12.6.32), SGU (см. 12.6.34), SGL (см. 12.6.28), KRG (см. 12.6.60), KRGR (см. 12.6.60),
KRORG (см. 12.6.58), PCG (см. 12.6.63).

Рис. 10. Задание массивов концевых точек в качестве переменных в ГУИ.

Доступ к сценарию в ГУИ


Возможности для задания переменных аналогичны, описанным в сценарии Относи-
тельные фазовые проницаемости. На рис. 10 показан выбор переменных в ГУИ.

2.1.8. Массивы масштабирования фазовых 30


19.1

Переменные по регионам можно задать следующим образом (см. рис. 10):

• Установить по регионам. Задается величина переменной в указанном регионе


или общая переменная на несколько регионов. Значению целевого параметра будет
присвоено значение переменной;

• Умножить по регионам. Значение целевого параметра будет домножено на зна-


чение переменной в регионе (регионах);

• Прибавить по регионам. Значение целевого параметра будет суммировано со зна-


чением переменной в регионе (регионах);

Файл сценария, автоматически созданный в папке USER


Если в модели не задано ключевое слово ENDSCALE (см. 12.1.136), после за-
пуска проекта адаптации модели в папку USER будет автоматически сохранен файл
<имя_проекта>_runspec.inc с ключевым словом ENDSCALE (см. 12.1.136).
Пример
ENDSCALE
/

Кроме того в папку USER будет автоматически сохранен следующий файл


<имя_проекта>_hm_edit_endscale.inc. В этом файле запишется ключевое сло-
во DEFINES (см. 12.1.24), имена переменных, диапазоны их изменения, их типы. Име-
на переменных используются внутри символов @ в ключевом слове ARITHMETIC
(см. 12.3.2). В процессе автоадаптации на место каждой переменной будет подстав-
лено число из заданного в DEFINES (см. 12.1.24) диапазона.

2.1.8. Массивы масштабирования фазовых 31


19.1

Пример
IWORKSATNUM
14*0 4*2 14*0
6*2 10*0 8*2
10*0 9*2 9*0
...
/
DEFINES
'SATNUM_SWCR_S_1TO5' 0.296 0.196 0.396 REAL/
'SATNUM_SWU_P_2_4' 0 -0.1 0.1 REAL/
'SATNUM_KRW_M_1_3_5' 1 0.5 2 REAL/
/
...
ARITHMETIC
SWCR = IF(IWORKSATNUM == 1, @SATNUM_SWCR_S_1TO5@, SWCR)
SWCR = IF(IWORKSATNUM == 2, @SATNUM_SWCR_S_1TO5@, SWCR)
SWCR = IF(IWORKSATNUM == 3, @SATNUM_SWCR_S_1TO5@, SWCR)
SWCR = IF(IWORKSATNUM == 4, @SATNUM_SWCR_S_1TO5@, SWCR)
SWCR = IF(IWORKSATNUM == 5, @SATNUM_SWCR_S_1TO5@, SWCR)
SWU = IF(IWORKSATNUM == 2, SWU+@SATNUM_SWU_P_2_4@, SWU)
SWU = IF(IWORKSATNUM == 4, SWU+@SATNUM_SWU_P_2_4@, SWU)
KRW = IF(IWORKSATNUM == 1, KRW*@SATNUM_KRW_M_1_3_5@, KRW)
KRW = IF(IWORKSATNUM == 3, KRW*@SATNUM_KRW_M_1_3_5@, KRW)
KRW = IF(IWORKSATNUM == 5, KRW*@SATNUM_KRW_M_1_3_5@, KRW)
/

В данном примере (Пример 2) для всех регионов насыщенности задается перемен-


ная SATNUM_SWCR_S_1TO5 с начальным значением 0.296 и меняющаяся от 0.196 до
0.396. Для 1, 3 и 5 регионов задается переменная SATNUM_KRW_M_1_3_5 с началь-
ным значением 1 и меняющаяся от 0.5 до 2. Для 2 и 4 региона задается переменная
SATNUM_SWU_P_2_4 с начальным значением 0 и меняющаяся от -0.1 до 0.1. Все пе-
ременные имеют тип переменных REAL.
В процессе адаптации (см. Пример 2) мы изменяем SWCR, SWU и KRW, в соот-
ветствии с выбранными типами операций, в разных регионах SATNUM. SWCR, SWU
и KRW задаются в файле props.inc. В data файле модели секция PROPS расположена
ранее секции REGIONS, в которой находятся все данные о регионах. Поэтому в со-
зданном файле, куб SATNUM подключается как пользовательский куб свойств (массив),
имя которого IWORKSATNUM (ключевое слово IWORK, см. 12.3.6). Далее мы можем
использовать этот SATNUM-массив в арифметике.
В секции EDIT c помощью ключевого слова ARITHMETIC (см. 12.3.2):

• для всех регионов насыщенности значению SWCR присваивается значение пере-


менной SATNUM_SWCR_S_1TO5;

2.1.8. Массивы масштабирования фазовых 32


19.1

• для 1, 3 и 5 регионов значение KRW умножается на SATNUM_KRW_M_1_3_5;

• для 2 и 4 региона переменная SATNUM_SWU_P_2_4 прибавляется к значению


SWU.

2.1.8. Массивы масштабирования фазовых 33


19.1

2.1.9. Проводимость разломов


Переменные сценария
В данном сценарии адаптации множители проводимости разлома используются в
качестве переменных.
Доступ к сценарию в ГУИ
Данный сценарий появится в менеджере переменных, если в модели задано ключе-
вое слово MULTFLT (см. 12.2.39). На рис. 11 показан выбор множителей проводимости
по регионам в качестве переменных в ГУИ.

Рис. 11. Задание множителей проводимости разломов в качестве переменных в ГУИ.

Файл сценария, автоматически созданный в папке USER


После запуска проекта адаптации модели в папку USER проекта адаптации моде-
ли будет автоматически сохранен файл <имя_проекта>_hm_mult_faults.inc. В
этом файле запишется ключевое слово DEFINES (см. 12.1.24), имена переменных, диа-
пазоны их изменения, их типы. Имена переменных используются внутри символов @
в ключевом слове MULTFLT (см. 12.2.39). В процессе автоадаптации на место каждой
переменной будет подставлено число из заданного в DEFINES (см. 12.1.24) диапазона.

2.1.9. Проводимость разломов 34


19.1

Пример
DEFINES
'M_FAULT-1' 1 0 1 REAL /
'M_FAULT-2' 1 0 1 REAL /
'M_FAULT-3' 1 0 1 REAL /
'M_FAULT-4' 1 0 1 REAL /
'M_FAULT-5' 1 0 1 REAL /
/
MULTFLT
'FAULT-1'@M_FAULT-1@ /
'FAULT-2'@M_FAULT-2@ /
'FAULT-3'@M_FAULT-3@ /
'FAULT-4'@M_FAULT-4@ /
'FAULT-5'@M_FAULT-5@ /
/

В данном примере задаются множители проводимости разломов M_FAULT-1 и т. д.


Все переменные имеют тип REAL, начальное значение 1 и диапазон изменения от 0
до 1. В секции EDIT c помощью ключевого слова MULTFLT (см. 12.2.39) множителю
проводимости FAULT-1 присваивается значение переменной M_FAULT-1 и т. д.

2.1.9. Проводимость разломов 35


19.1

2.1.10. Другие
Переменные сценария
В данную вкладку включаются переменные, предварительно заданные в data файле
модели с помощью ключевого слова DEFINES (см. 12.1.24).
Пример
DEFINES
'L1' 50 50 50 REAL/
'L2' 50 50 50 REAL/
'DAYS' 100 100 100 INTEGER/
'AZIMUTH' 60 60 60 REAL/
PORO_FILENAME 'PORO_1' 1* 1* STRING/
/
...

INCLUDE
@PORO_FILENAME + ".inc"@ /

Доступны следующие типы переменной:


• INTEGER – целое число (минимум и максимум переменной должны быть также
целые);
• REAL – вещественное число;
• STRING – строка.

Доступ к сценарию в ГУИ


После запуска проекта адаптации модели в графическом интерфейсе можно изме-
нить диапазон переменных, заданных в data файле. Кроме того, в графическом интер-
фейсе можно добавить в проект адаптации переменные из стандартных сценариев. На
рис. 12 видно, что в проекте адаптации модели в качестве переменных будут использо-
ваться Другие переменные, а также множители проницаемости по регионам.
В данном примере заданы четыре переменных L1, L2, DAYS и AZIMUTH, три из ко-
торых имеют тип REAL, переменная DAYS имеет тип INTEGER. Для всех переменных
указывается начальное значение (первое число), и диапазон изменения (два последних
числа).
Переменная PORO_FILENAME имеет тип STRING и начальное значение PORO_1.
С помощью ключевого слова INCLUDE (см. 12.1.80) вместо переменной типа STRING в
модель можно подключать файлы (с расширением *.inc). В данном примере, в модель
будет загружаться файл, содержащий куб пористости, с именем PORO_1.inc.
Значения, принимаемые переменной типа STRING, могут управляться алгоритмом
или устанавливаться внешним перебором (см. рис. 13). При внешнем переборе создает-
ся серия экспериментов, т.е. для каждого значения переменной типа STRING создается

2.1.10. Другие 36
19.1

Рис. 12. Другие переменные для адаптации модели.

отдельный эксперимент для остальных переменных в модели. Внешний перебор может


использоваться во всех экспериментах (см. раздел Методы планирования эксперимен-
тов) и алгоритмах (см. раздел Оптимизационные алгоритмы).
Переменная типа STRING может управляться алгоритмом в методах планирования
эксперимента (Пользовательский, Перебор по сетке, Латинский гиперкуб, Монте–Карло)
и оптимизационных алгоритмах (Дифференциальная эволюция, Метод роя частиц). В
этом случае алгоритм сам определяет оптимальную комбинацию переменных, включая
типа STRING.
В окне Создать новый проект (см. рис. 14) двойной клик на поле Значения
для переменной PORO_FILENAME. В появившемся диалоге Настроить значение
переменной ”PORO_FILENAME” укажите через запятую имена необходимых фай-
лов без расширения *.inc. В проект будут по очереди загружаться файлы с именами
PORO_1.inc, PORO_2.inc, PORO_3.inc и PORO_4.inc. Для каждого значения переменной
типа STRING (PORO_1.inc, PORO_2.inc и т.д.) будет создан эксперимент с переменными
L1, L2, DAYS.

2.1.10. Другие 37
19.1

Рис. 13. Настройка значений переменной типа STRING.

2.2. Структура файлов проекта адаптации


Для корректной работы модуля адаптации не рекомендуется вносить изменения в струк-
туру файлов проектов адаптации вручную. Разрешенное удаление файлов возможно
только в графическом интерфейсе.
Проект адаптации модели сохраняется в файл с расширением hmp. Синхронно со-
здается папка проекта с именем <имя_проекта>.hmf. В данной папке будет одно-
временно создана папка MODELS, в которой в папку CURRENT будет записана копия
основной модели – data файл, включая папки RESULTS и USER. Файлы с расширени-
ем inc не копируются в папку CURRENT, поэтому, при задании переменных вручную,
необходимо их задавать в data файле или в файлах пользователя, находящиеся в USER
папке.
Для того, чтобы не испортить исходный data файл модели, в папке CURRENT будет
храниться копия модели. Любые изменения, произведенные в графическом интерфей-
се, будут сделаны только для копии, хранящейся в папке CURRENT. Также возможно

2.2. Структура файлов проекта адаптации 38


19.1

Рис. 14. Создание эксперимента с переменной типа STRING.

внесение изменений непосредственно в этот data файл.


После запуска эксперимента в папке проекта <имя_проекта>.hmf будет созда-
на папка с именем <имя_эксперимента>, например A001, содержащая data файлы
эксперимента и его вариантов. При этом текущая версия проекта, хранящаяся в папке
CURRENT, будет сохранена в папке MODELS/SAVE_1.

2.2.1. Структура файлов эксперимента


В data файле эксперимента (см. Пример 1) содержится информация о переменных, за-
данных в проекте, и указание на data файл копии базовой модели, находящийся в папке
MODELS/SAVE_1. Для каждого варианта эксперимента в data файле содержатся значе-
ния переменных для подстановки в исходную модель и имя файла эксперимента (см.
Пример 2).

2.2.1. Структура файлов эксперимента 39


19.1

Пример
– Experiment A001 [#1] (Латинский гиперкуб)
– experiment base parameter values
PREDEFINES
M_PERM_FIPNUM_1 1 0.1 10 REAL /
M_PERM_FIPNUM_2 1 0.1 10 REAL /
M_PERM_FIPNUM_3 1 0.1 10 REAL /
M_PERM_FIPNUM_4 1 0.1 10 REAL /
/
– project base data file
OPEN_BASE_MODEL
’../MODELS/SAVE_1/PUNQ_S3N.DATA’/

В Примере 1, в файле эксперимента e1.data, с помощью ключевого слова


PREDEFINES (см. 12.1.26), в качестве переменных указаны множители проницаемости
по регионам M_PERM_FIPNUM_1 и т. д., а также минимальное, максимальное значе-
ние переменной и тип. Ключевое слово OPEN_BASE_MODEL (см. 12.1.27) осуществляет
подстановку в исходную модель значений переменных на место @имя_переменной@.
Данное ключевое слово автоматически порождается tNavigator и не предназначено для
самостоятельного использования в моделях.
Пример
PREDEFINES
M_PERM_FIPNUM_1 3.1 0.1 10 REAL /
M_PERM_FIPNUM_2 7.127 0.1 10 REAL /
M_PERM_FIPNUM_3 8.455 0.1 10 REAL /
M_PERM_FIPNUM_4 5.507 0.1 10 REAL /
/
OPEN_BASE_MODEL
’e1.DATA’/

В Примере 2, в файле варианта эксперимента с помощью ключевого слова


PREDEFINES (см. 12.1.26) записаны значения множителей проницаемости по регионам
M_PERM_FIPNUM_1 и т. д., которые будут подставлены в исходную модель на место
@имя_переменной@. Также указаны минимальное, максимальное значения переменной
и ее тип. Подстановка переменных в модель осуществляется с помощью ключевого сло-
ва OPEN_BASE_MODEL (см. 12.1.27). При этом зачитываются файл модели и файлы,
находящиеся в папке USER.
Результаты расчета вариантов эксперимента (с различными значениями выбран-
ных переменных) сохраняются в папку RESULTS, созданную в соответствующей папке
<имя_эксперимента>.
Нажав правой кнопкой мыши на вариант модели в списке и выбрав Сохранить как...

2.2.1. Структура файлов эксперимента 40


19.1

можно сохранить вариант модели в виде стандартного data файла, в котором использу-
ются значения переменных этого варианта.

2.2.2. Сохранение изменений, сделанных в проекте


В процессе работы пользователь может вносить любые изменения в текущую модель
(т.е. в копию исходной модели, сохраненную в папке CURRENT). С данной моделью
можно работать как с обычной моделью. Для этого нажмите на кнопку Открыть базо-
вую модель . После этого можно вносить изменения в модель как в ГУИ, так и в
data файл. Например, изменять фазовые проницаемости, добавлять скважины и т. д. Все
пользовательские изменения сохраняются в соответствующих файлах (например, в слу-
чае изменения фазовых проницаемостей, в файле <имя_проекта>_rp.inc) в папке
CURRENT/USER. При создании нового эксперимента измененная базовая модель, вклю-
чая папку USER, будет сохранена в папке MODELS/SAVE_N, где N – номер, который
увеличивается, если в сохраняемую модель были внесены изменения. Для корректной
работы программы рекомендуется перезагрузить проект автоадаптации после внесения
в модель изменений, а затем запустить новый эксперимент, используя кнопку Создать
новый эксперимент с базовой моделью проекта . Если текущая базовая модель не
изменялась, то в новом эксперименте будет использоваться та же копия базовой модели,
что и в предыдущем (т.е. модель расположенная в папке MODELS/SAVE_N).

2.2.3. Удаление результатов эксперимента


Удалять результаты эксперимента рекомендуется только из графического интерфейса
(ГУИ), используя кнопки рядом с названием эксперимента на вкладке Информация о
проекте:

• – удалить эксперимент из проекта без возможности восстановления;

• – удалить файлы из эксперимента с возможностью последующего восстановле-


ния. Все файлы эксперимента будут удалены, но запись об эксперименте останется
в проекте. Настройки и список вариантов эксперимента будут доступны.

2.3. Задание переменных в моделях с опцией reservoir coupling


В tNavigator поддерживается опция совместного расчета моделей Reservoir Coupling (см.
раздел 5.13 Технического руководства tNavigator). Несколько подчиненных (SLAVE)
моделей объединяются посредством одной главной (MASTER) модели в совместную
(coupling) модель.
При расчете совместной (coupling) модели результаты расчета подчиненных моделей
записываются в папку RESULTS главной модели в соответствующие подпапки. Такой
способ записи результатов расчета для совместных (coupling) моделей позволяет:
• одновременно открывать и рассчитывать главную модель и связанную с ней под-
чиненную модель как отдельные модели;

2.2.2. Сохранение изменений, сделанных в проекте 41


19.1

• одновременно открывать и рассчитывать несколько вариантов главной модели,


имеющих общие подчиненные модели;

• запускать для совместной модели проект адаптации.

Переменные могут задаваться и в главной модели, и в подчиненных моделях в гра-


фическом интерфейсе, используя кнопку Менеджер переменных для адаптации
модели или с помощью ключевого слова DEFINES (см. 12.1.24). При этом имена пере-
менных в главной и в подчиненных моделях должны отличаться.
В случае если имена переменных в главной и в подчиненных моделях сов-
падают, то значения переменных в подчиненных моделях будут равны

!
значению в главной модели. Если одноимённые переменные есть только в
разных подчиненных моделях, то в главную модель попадет значение пе-
ременной из первой прочитанной подчиненной модели и это же значение
переменной будет использоваться во всех подчиненных моделях в каж-
дом из вариантов модели. После чтения информации из подчиненных
моделей значения переменных обновляются только в главной модели.

!
Если переменная была задана в графическом интерфейсе, то ее мож-
но переименовать в соответствующем файле, расположенном в папке
USER.
Проект адаптации запускается из главной модели. Заданные переменные для всех
подчиненных и главной модели будут показаны в окне запуска экспериментов.

2.3. Задание переменных в моделях с опцией reservoir coupling 42


19.1

3. Методы планирования экспериментов


Перед запуском оптимизационного алгоритма необходимо провести анализ чувствитель-
ности проекта адаптации к выбранным переменным. Для этого рекомендуется провести
эксперимент(ы).

В этом разделе описаны следующие методы планирования эксперимента:


• Пользовательский;
• Метод Плэкетта-Бермана;
• Перебор по сетке;
• Латинский гиперкуб;
• Монте–Карло;
• Торнадо.

Рис. 15. Создать эксперимент.

На рис. 15 показан пример создания эксперимента. Для удобства создания экспери-


мента в диалоге есть следующие кнопки:

• Изменить диапазон для выбранных переменных. Позволяет изменить диа-


пазон изменения выбранной переменной.

3. Методы планирования экспериментов 43


19.1

• Снять выделение для всех переменных.;

• Выбрать переменные фильтром. Позволяет включить в эксперимент только


выбранные с помощью фильтра переменные (см. Применение фильтра для пере-
менных);

• Спрятать неиспользуемые переменные. Переменные, не отмеченные галоч-


кой, будут спрятанны в диалоге Создать новый эксперимент;

• Показать неиспользуемые переменные.

Примеры работы с алгоритмами в модуле автоадаптации приве-


дены в учебных курсах:

• AHM1.1. Автоадаптация: теоретический курс;

• AHM1.2. Автоадаптация;

• AHM1.3. Использование RFT данных в автоадаптации;

• AHM1.4. Поиск лучшей траектории скважины;

• AHM1.5. Адаптация по ОФП;

• AHM1.6. Автоадаптация для ГРП;

• AHM1.7. Автоадаптация для разных геологических реали-


заций;

• AHM1.8. Переход от задачи адаптации к расчету прогноза;

• AHM1.9. Анализ неопределенностей.

3. Методы планирования экспериментов 44


19.1

3.1. Анализ чувствительности


Используя эксперименты, можно оценить насколько выбранные переменные и их диа-
пазоны изменения ”хорошие” (см. рис. 16), т.е. используя их, мы можем найти хороший
вариант адаптации модели. На рисунках видно, что исторические значения лежат между
рассчитанными или же рассчитанные графики ”приближаются” к историческим. Таким
образом, продолжая поиск решения с выбранными переменными и их заданными диа-
пазонами, мы сможем найти решение.

(a) (b)

Рис. 16. Анализ чувствительности: ”хорошие” варианты.

Проведенный анализ чувствительности может показывать, что переменные и/или их


диапазоны не удовлетворительны (см. пример на рис. 17), т.е. исторические значения да-
леко отстоят от рассчитанных и, продожая поиск решения с выбранными переменными
и их заданными диапазонами, мы можем не найти решение, а потратить время на рас-
четы. В этом случае стоит изменить переменные и/или их диапазоны и еще раз сделать
анализ чувствительности, используя эксперименты, перед запуском оптимизационных
алгоритмов.

Рис. 17. Анализ чувствительности: ”плохие” варианты.

3.1. Анализ чувствительности 45


19.1

Дополнительные примеры возможных расположений вариантов моделей показаны


на рис. 18.

Рис. 18. Анализ чувствительности: примеры возможных вариантов модели.

3.1. Анализ чувствительности 46


19.1

3.2. Пользовательский
Пользователь может задать значения переменных для каждого варианта эксперимента в
графическом интерфейсе.

Рис. 19. Эксперимент, созданный пользователем.

На рис. 19 показано, что каждого варианта эксперимента (Вариант #0, Вариант #1,
Вариант #2 и т.д.) пользователем указаны значения переменных.

3.2. Пользовательский 47
19.1

3.3. Перебор по сетке


Этот алгоритм последовательно перебирает точки сетки многомерного пространства.
Для M переменных алгоритм составит (s1 + 1) · (s2 + 1) · ... · (sM + 1) вариантов, где si –
количество интервалов для i-й переменной.

Рис. 20. Схема алгоритма перебора по сетке. Здесь M = 2, s1 = 3, s2 = 3.

3.3. Перебор по сетке 48


19.1

3.4. Латинский гиперкуб


Этот алгоритм создает варианты следующим образом: для N вариантов модели и M
переменных пространство поиска разделяется на N гиперплоскостей для каждой пере-
менной, а затем N точек выбираются так, что каждая гиперплоскость содержит ровно
одну точку. Одним из преимуществом данного алгоритм является то, что при доста-
точно небольшом количестве вариантов, за счет вышеописанного выбора точек, доста-
точно хорошо покрывается пространство поиска. Кроме того, количество вариантов,
т.е. количество запускаемых расчетов, задается пользователем, а не алгоритмом и при
необходимости может быть уменьшено.

Рис. 21. Схема алгоритма ”латинский гиперкуб”. Здесь N = 5, M = 2.

Распределение значений переменной в выбранном диапазоне может быть:


• Равномерное (см. рис. 22(a));
• Логнормальное (см. рис. 22(b)). Вершина логнормального распределения перемен-
ной расположена в базовом значении этой переменной;
• Нормальное (см. рис. 22(c));
• Треугольное (см. рис. 22(d)). Вершина треугольника расположена в базовом значе-
нии переменной;
• Дискретное (см. рис. 23). Необходимо задать Значение переменной и Вероят-
ность, с которой переменная принимает заданное значение. Для нормировки диа-
пазона значений вероятности нажмите на кнопку Нормировать диапазон значе-
ний.
Повторяемость результатов эксперимента. По умолчанию при запуске латинско-
го гиперкуба несколько раз будут создаваться разные варианты модели (в связи с тем,
что у данного алгоритма внутри используется случайное число). Таким образом, при
запуске на разных компьютерах, или при повторном запуске на одном компьютере бу-
дут получены разные варианты. Чтобы воспроизвести результаты предыдущего запуска
латинского гиперкуба задайте тоже самое Случайное число (отличное от нуля), что и в
предыдущем эксперименте (см. рис. 24).
Для вариантов модели, посчитанных с помощью метода Латинского гиперкуба, могут
быть вычислены квантили. Квантили доступны в закладке Результаты. Анализ.

3.4. Латинский гиперкуб 49


19.1

(a) (b)

(c) (d)

Рис. 22. Возможности распределения переменной в эксперименте ”Латинский гипер-


куб”

3.4. Латинский гиперкуб 50


19.1

Рис. 23. Задание дискретного распределения значений переменной.

Рис. 24. Эксперимент ”Латинский гиперкуб”.

3.5. Монте–Карло
В методе Монте–Карло для каждого варианта модели переменные генерируются незави-
симо, согласно выбранному распределению. Данный метод используется для построения

3.5. Монте–Карло 51
19.1

произвольного количества вариантов модели по созданной Прокси модели (см. 6.13).


В схеме, показанной на рис. 25, N = 5 вариантов модели с M = 2 переменными
генерируются независимо друг от друга.

Рис. 25. Схема алгоритма Монте–Карло. Здесь N = 5, M = 2.

Распределение значений переменной в выбранном диапазоне может быть:

• Равномерное (см. рис. 22(a));

• Логнормальное (см. рис. 22(b)). Вершина логнормального распределения перемен-


ной расположена в базовом значении этой переменной;

• Нормальное (см. рис. 22(c));

• Треугольное (см. рис. 22(d)). Вершина треугольника расположена в базовом значе-


нии переменной;

• Дискретное (см. рис. 23). Необходимо задать Значение переменной и Вероят-


ность, с которой переменная принимает заданное значение. Для нормировки диа-
пазона значений вероятности нажмите на кнопку Нормировать диапазон значе-
ний.

Повторяемость результатов эксперимента. Аналогично методу Латинский гипер-


куб данный алгоритма использует случайное число для генерации распределения пе-
ременных. Таким образом, при запуске на разных компьютерах, или при повторном
запуске на одном компьютере будут получены разные варианты. Чтобы воспроизвести
результаты предыдущего запуска алгоритма задайте тоже Случайное число (отличное
от нуля), что и в предыдущем эксперименте.
Для вариантов модели, посчитанных с помощью метода Монте–Карло, могут быть
вычислены квантили. Квантили доступны в закладке Результаты. Анализ.

3.5. Монте–Карло 52
19.1

3.6. Торнадо
Торнадо-эксперимент используется для построения диаграмм торнадо. В этом экспери-
менте каждая переменная устанавливается в свое минимальное и максимальное значе-
ния, в то время как значения остальных переменных остаются базовыми. Если варьиру-
ется M параметров, то создается 2M + 1 вариантов (включая базовую модель).

Рис. 26. Схема торнадо. Здесь M = 2.

Для Торнадо-эксперимента строится График Торнадо, которые доступны в закладке


Результаты. Анализ.

3.7. Метод Плэкетта-Бермана


Метод Плэкетта-Бермана используется для построения эксперимента. Доступны следу-
ющие виды метода:
• Стандартный Плэкетт–Берман;
• Добавить строку с мин. значениями;
• Симметричный Плакетт–Берман.

3.7.1. Стандартный Плэкетт–Берман


В данном методе строится матрица, строки которой являются комбинациями минималь-
ных и максимальных значений переменных. В стандартном методе каждая возможная
комбинация значений переменных (−−, −+ , +−, ++) встречается одинаковое коли-
чество раз.
На рис. 27 изображен пример. Знаком ”+” обозначено максимальное значение пере-
менной, ”-” – минимальное. По столбцам расположены переменные (их 3), по строками
– варианты модели (их 4). Каждая комбинация возможных значений пар переменных в
этой таблице встречается один раз.

3.7.2. Добавить строку с мин. значениями


К матрице стандартного метода Плэкетта–Бермана приписывается строка (вариант), со-
держащая только минимальные значения переменных.

3.6. Торнадо 53
19.1

Рис. 27. Метод Плэкетта-Бермана.

3.7.3. Симметричный Плакетт–Берман


К матрице стандартного метода Плэкетта–Бермана приписывается противоположная, где
минимальные значения переменных заменяются на их максимальные значения и наобо-
рот. Если число строк в стандартной матрице – n, то число строк в полученной матрице
– 2n.

3.7.3. Симметричный Плакетт–Берман 54


19.1

3.8. Применение фильтра для переменных


Фильтр для переменных позволяет при создании эксперимента использовать только пе-
ременные, наиболее влияющие на модель, и исключить слабо влияющие.
Фильтр для переменных создается на вкладке Анализ (см. Создание фильтра для
переменных).
Нажмите на кнопку чтобы создать новый эксперимент. Для того чтобы применить
созданный фильтр нажмите на кнопку и выберите необходимый фильтр, как показано
на рис. 28.

Рис. 28. Применить фильтр для переменных.

3.8. Применение фильтра для переменных 55


19.1

4. Целевая функция
Для работы оптимизационного алгоритма необходимо задание целевой функции (кри-
терия проверки качества модели). Главная задача целевой функции – помочь выбрать
наилучший вариант модели для заданных параметров. В tNavigator возможно задать два
вида целевой функции:

• Пользовательская (настраиваемая) целевая функция;

• Целевая функция эксперимента.

Целевая функция используется в сочетании с оптимизационными алгоритмами:

• Дифференциальной эволюции;

• Симплекс-метода;

• Метода роя частиц;

• Метод поверхности отклика (Прокси-модели).

В tNavigator реализованы следующие типы целевой функции:

• Согласование с историей, квадратичная;

• Согласование с историей, линейная;

• Оптимизации на прогнозе.

4. Целевая функция 56
19.1

4.1. Задание целевой функции


Параметры пользовательской и целевой функции эксперимента задаются в ГУИ на
вкладке Целевые функции (см. рис. 30). Кроме того, доступен следующий набор пред-
определенных целевых функций:

• Невязка по дебиту нефти;

• Невязка по дебиту воды;

• Невязка по дебиту жидкости;

• Невязка по дебиту газа;

• Разница накопл. добычи нефти;

• Разница накопл. добычи воды;

• Разница накопл. добычи жидкости;

• Разница накопл. добычи газа.

Формулы для расчета целевых функций приведены в разделе 6.4.1. Данные функции
нельзя редактировать.
Для создания настраиваемой целевой функции выберите в выпадающем списке
Пользовательская целевая функция или нажмите кнопку и задайте имя целе-
вой функции. Целевую функцию можно удалить , переименовать , дублировать
и загрузить из имеющегося проекта .
При загрузке целевой функции из другого проекта установите галочки для необхо-
димых функций. Загруженные функции появятся в списке целевых функций на вкладке
Целевые функции (см. рис. 29). Если целевая функция была создана в другом проек-
те для другой модели, то при переносе целевой функции некоторые настройки могут
быть утеряны, т.к. в моделях, между которыми выполняется перенос функции, могут не
совпадать объекты и шаги по времени. Например, настройки исторических точек для
несуществующих временных шагов будут отброшены.
Далее задется тип целевой функции и ее слагаемые. Чтобы добавить (удалить) сла-
гаемое в целевой функции нажмите на кнопку Добавить слагаемое (Удалить слагае-
мое). Несколько слагаемых можно добавить одновременно с помощью кнопки Добавить
несколько слагаемых. Для каждого слагаемого целевой функции выбираются Объек-
ты и соответствующие выбранному объекту Параметры. В качестве объектов могут
быть выбраны:

• Скважины;

• Группы;

• Месторождение;

4.1. Задание целевой функции 57


19.1

Рис. 29. Перенос целевых функций между проектами.

• RFT/PLT;
• Польз. график по месторожд.;
• Польз. график по скважинам;
• Польз. график по группам.
Для выбора только нагнетательных скважин нажмите на кнопку Все нагнетательные,
для выбора добывающих – Все добывающие.
В качестве параметров могут быть выбраны дебит нефти, дебит воды, дебит жидко-
сти и т.д. Для каждого параметра задается Ошибка (допустимая невязка) и Тип ошиб-
ки: относительная или абсолютная (см. раздел 4.2.2).
Для каждого объекта можно задать или вычислить его вес в целевой функции. Чтобы
задать Вес дважды щелкните на величину веса для соответствующего объекта. Веса
для объектов можно также вычислить на основе исторических данных по выбранному
параметру (см. раздел 4.2.3). Для этого выберите Весовой параметр из выпадающего
меню и нажмите кнопку Вычислить.
Исторические значения, значения абсолютных и относительных отклонений полу-
ченных значений от исторически можно увидеть ввиде таблицы справа, нажав на кноп-
ку на панели справа. Чтобы увидеть разницу между историческими и расчетными
значениями нажмите на кнопку .
Если целевая функция задана корректно, то внизу диалога появится надпись Ok. Зна-
чения построенной целевой функции для разных вариантов модели можно посмотреть
на вкладке Таблица результатов.

4.1. Задание целевой функции 58


19.1

Рис. 30. Настройка пользовательской целевой функции.

Оптимизационные алгоритмы ищут минимум заданной целевой функции экспери-


мента. После запуска оптимизационного алгоритма изменить параметры целевой функ-
ции эксперимента невозможно.
Пользовательская целевая функция в основном используется для анализа резуль-
татов. В процессе анализа результатов можно изменять параметры пользовательской
целевой функции, а также сравнивать пользовательскую целевую функцию с целевой
функции эксперимента. Кроме того, пользовательская целевая функция используется
для исключения ненадежных исторических точек.
Пользовательская (настраиваемая) целевая функция может быть использована в ка-
честве целевой функции эксперимента для оптимизационных алгоритмов. Для этого
нажмите на кнопку Выбрать целевую функцию и выберите нужную пользовательскую
целевую функцию из списка целевых функций, как показано на рис. 31.

4.1. Задание целевой функции 59


19.1

Рис. 31. Выбор целевой функции эксперимента.

4.2. Целевая функция согласования с историей


Целевая функция согласования с историей является показателем отличия между исто-
рическими и рассчитанными значениями параметров, выбранных пользователем. Напри-
мер, по минимальному суммарному значению невязок по дебиту нефти, обводненности
и давлению. При выборе лучшего варианта модели отдельно по невязке дебита нефти
может быть выбран не достаточно хороший вариант по давлению или обводненности.
Задание целевой функции обеспечивает выбор оптимального варианта по совокупности
параметров. Чем меньше значение целевой функции, тем лучше расчет совпадает с ис-
торией. Значение целевой функции вычисляется для каждого варианта модели, что и
помогает выбрать лучший среди них.

4.2.1. Целевая функция по разным объектам


Различные объекты, по которым ведется автоматизированная адаптация или оптимиза-
ция, можно компоновать в одной ЦФ. В этом случае целевая функция f для n объектов
будет являться суммой n слагаемых fi ( f1 , f2 , ..., fn ) с заданными весами wi .
Таким образом, в одной ЦФ согласования с историей могут быть включены одновре-
менно слагаемые по объектам разных типов: дебиты, давления, обводненность по сква-
жинам, данные по группам и месторождению, RFT-давления и т.д.

4.2. Целевая функция согласования с историей 60


19.1

4.2.2. Формулы для вычисления целевой функции


Целевая функция согласования с историей вычисляется следующим образом:
!!
N
∑ wob j ∑ wp ∑ ln S ,
ob j p n=k
где:

• параметр ob j в сумме – множество скважин или групп;

• wob j – вес скважины или группы. Веса для объектов можно также вычислить на
основе исторических данных по выбранному параметру (см. раздел 4.2.3);

• параметр p в сумме – множество всех выбранных параметров (Вода, Нефть, об-


водненность и др.);

• w p – вес параметра;

• n – номер временного шага;

• ln – длина временного шага n (от выбранного k до последнего N );

• S – ошибка (абсолютная или относительная);

В случае если Тип функции – квадратичная, то ошибка S вычисляется как:


value(H)−value(C) 2
 
• S= g , если ошибка абсолютная

value(H)−value(C) 2
 
• S= g·value(H) , если ошибка относительная.

где

• value(C) – рассчитанное значение;

• value(H) – историческое значение;

• g – значение ошибки (допустимой невязки по параметру), задаваемая пользовате-


лем. Например, если Ошибка выбрана равной 0.05 и Тип ошибки – Относитель-
ная, то S меньше 1 означает, что невязка между историческими и рассчитанными
значениями не превосходит 5%.

Если Тип функции – линейная, то ошибка S вычисляется как:


|value(H)−value(C)|
• S= g ; ошибка – абсолютная.
|value(H)−value(C)|
• S= g·value(H) ; ошибка – относительная.

4.2.2. Формулы для вычисления целевой функции 61


19.1

!
Если на каком-то шаге по времени исторический дебит (по нефти, воде
или газу) имеет нулевое значение, то данный шаг не учитывается при
вычислении целевой функции.

Если историческое значение value(H) равно 0, то значение в знамена-


теле g · value(H) также должно было бы быть равным 0, что недопу-
стимо. В этом случае в знаменателе значение произведения g · value(H)

!
полагается равным:

• для параметра RFT – 0.001 atm (METRIC);

• для параметров WCT и GOR – 0.0001;

• для всех остальных параметров – 0.1 (METRIC).

4.2.2. Формулы для вычисления целевой функции 62


19.1

4.2.3. Автоматическое вычисление весов


При задании целевой функции веса для объектов (скважин или групп) wob j можно
вычислить на основе исторических данных по выбранному параметру (см. рис. 32).
Исторические данные для выбранного параметра берутся на последнем шаге.

Рис. 32. Вычисление весов объектов целевой функции.

В качестве параметра могут выбираться:


• Накопл. нефть;
• Накопл. газ;
• Накопл. вода;
• Накопл. жидкость;
• Накопл. закачка газа;
• Накопл. закачка воды;
• Обводненность;
• Отнош. газ/нефть.
Веса для N объектов распределяются по следующей формуле:
pi
wiob j = N × 100%
∑i=1 pi
где pi – значение выбранного параметра для i-го объекта.

4.2.3. Автоматическое вычисление весов 63


19.1

4.2.4. Выбор исторических точек для адаптации


Ненадежные исторические данные могут быть исключены из процесса адаптации. Для
этого необходимо создать пользовательскую целевую функцию, из которой можно ис-
ключить ненадежные исторические точки следующим образом:

• Нажмите на кнопку Показывать точки. Разница между историческими и расчи-


танными значениями в абсолютных или относительных величинах будет показана
в виде ”отрезков” на историческом графике. Размер ”отрезка” задается пользова-
телем при создании целевой функции. Например, на рис. 33 выбран тип ошибки –
Относительная, величина ошибки 0.05. Тогда, погрешности исторических данных
меняется от −0.05 до 0.05. Данные точки будут учитываться в расчете целевой
функции.
Нажмите на кнопку чтобы увидеть исторические значения, значения абсолют-
ных и относительных отклонений в виде таблицы справа. Потянув за начало/конец
”отрезка” на графике можно изменить значение ошибки (значение абсолютных
и относительных отклонения от исторического значения) в таблице. И наоборот,
значения абсолютных или относительных отклонений в таблице можно редакти-
ровать, тогда длина соответствующего ”отрезка” на графике слева изменится.
Если кнопка нажата, то доступны кнопки и Снять/ отметить выбор
всех точек;

• Нажмите на кнопку Редактировать выбор точек;

• Нажмите правой кнопкой мыши на точку, чтобы исключить/выбрать точки одну за


одной. Нажмите и удерживайте Shift, чтобы выбрать точки прямоугольником;

• Создайте соответствующую целевую функцию;

• Запустите новый эксперимент (например, используя кнопку ) и в качестве це-


левой функции алгоритма выберите созданную (пользовательскую) целевую функ-
цию (см. рис. 31).

!
Необходимо исключать исторические точки по тому параметру(ам) и
объекту(ам), по которым будет считаться пользовательская целевая
функция.

4.2.4. Выбор исторических точек для адаптации 64


19.1

Рис. 33. Редактирование исторических точек.

4.2.5. Загрузка истории по давлению в базовую модель


Исторические значения забойного и устьевого давлений могут быть заданы с помощью
ключевого слова WCONHIST (см. 12.19.43) и затем автоматически загружены в про-
ект адаптации. Однако исторические значения давления WBP по скважинам и среднего
давления по месторождению загружаются в проект адаптации отдельно, т.к. с помо-
щью ключевых слов их задать нельзя. Это можно сделать в диалоге настроек целевой
функции (ЦФ) с помощью кнопки Загрузить давление (И).
Данные по скважинам должны загружаться в формате ”Well” ”Date” ”Pressure”,
где:

1. Well – название скважины;

2. Date – дата измерения в формате DD.MM.YYYY;

3. Pressure – значение давления.

Для скважин можно загрузить историю по следующим видам давления:

• BHP. При вычислении ЦФ этот параметр сравнивается с рассчитанным BHP;

• THP. При вычислении ЦФ этот параметр сравнивается с рассчитанным THP;

• WBP. При вычислении ЦФ этот параметр сравнивается с рассчитанными WBP,


WBP4, WBP5, WBP9 в зависимости от выбора соответствующей галочки при за-
дании ЦФ;

Данные по месторождению загружаются в формате ”FIELD” ”Date” ”Pressure”,


где:

4.2.5. Загрузка истории по давлению в базовую модель 65


19.1

1. FIELD – месторождение;

2. Date – дата измерения в формате DD.MM.YYYY;

3. Pressure – среднее пластовое давление.

При вычислении целевой функции загруженное Среднее давление сравнивается с


рассчитанным средним пластовым давлением.

4.2.5. Загрузка истории по давлению в базовую модель 66


19.1

4.3. Целевая функция оптимизации на прогнозе


Целевая функция оптимизации на прогнозе является суммарным показателем между
двумя типами рассчитанных параметров: теми, которые необходимо максимизировать
(напр., дебит нефти), и теми, которые необходимо минимизировать (напр., дебит воды).
Соответственно, чем эта величина больше, тем больше ”нужного” и меньше ”ненужно-
го” будет добыто. Значение целевой функции вычисляется для каждого варианта модели,
что и помогает выбрать лучший среди них. Пример целевой функции показан на рис. 34.

4.3.1. Целевая функция по разным объектам


Различные объекты, по которым ведется автоматизированная адаптация или оптимиза-
ция, можно компоновать в одной ЦФ. В этом случае целевая функция f для n объектов
будет являться суммой n слагаемых fi ( f1 , f2 , ..., fn ) с заданными весами wi .
Таким образом, в одной ЦФ оптимизации на прогнозе могут быть включены одновре-
менно слагаемые по объектам разных типов: максимизация дебитов по скважинам, по
группам и месторождению, по NPV и т.д.

4.3.2. Формулы для целевой функции


Формула для ЦФ этого типа выглядит следующим образом:
!
∑ wob j ∑ w pX ,
ob j p
где:
• параметр ob j в сумме – множество скважин или групп;
• wob j – вес скважины или группы;
• параметр p в сумме – множество всех выбранных параметров (Вода, Нефть, об-
водненность и др.);
• w p – вес параметра;
• X имеет разный смысл в зависимости от типа параметра ЦФ:
– Максимизировать накопленное. Тогда X – разница между накопленными
показателями в моменты t2 и t1 : X = T (t2 ) − T (t1 ),t2 > t1 , где t1 – временной
шаг с которого считается целевая функция, t2 – временной шаг до которого
считается целевая функция;
– Минимизировать накопленное. Этот случай противоположен предыдуще-
му: X – разница между накопленными показателями в моменты t1 и t2 :
X = T (t1 ) − T (t2 ), t2 > t1 , где t1 – временной шаг с которого считается це-
левая функция, t2 – временной шаг до которого считается целевая функция;

4.3. Целевая функция оптимизации на прогнозе 67


19.1

Рис. 34. Целевая функция оптимизация на прогнозе для скважин.

– Продолжительность постоянного дебита. Здесь X – количество дней, в те-


чении которых группа или скважина продержалась на контроле (т.е., время
удержания ”полки” по заданному параметру). X вычисляется как разница
между двумя моментами времени: X = t2 − t1 , t2 > t1 . Величина контроля,
на котором стоит данная скважина (группа), определяется автоматически как
значение дебита на нулевом шаге прогнозной модели. В окне параметры ц.ф.
задается точность (Точность дебита), с которой будут сравниваться дебиты
(по умолчанию 1%). Если расчётный дебит отклоняется от величины контро-
ля на величину меньшую чем 1%, то группа или скважина ”держится” на
контроле.

4.3.2. Формулы для целевой функции 68


19.1

4.4. Нормализация целевой функции


Нормализация целевой функции (по объектам/параметрам/времени) делает порядок ЦФ
независимым от количества объектов/параметров/шагов в модели.
Нормализация производиться автоматически по времени, объектам и параметрам.
Нормализация по времени производится отдельно для каждого объекта для тех времен-
ных шагов, на которых значения определены.
Нормированное значение ЦФ по объектам и по параметрам вычисляется делением
значения ЦФ на сумму весов объектов и на сумму весов параметров:

∑ob j wob j ∑ p w p S
.
∑ob j wob j ∑ p w p
Так как целевая функция нормируется на сумму весов объектов и параметров, то
значение целевой функции равное единице означает, что для всех компонент целевой
функции несоответствие между историей и расчетом имеет такой же порядок, что и
ошибка измерения.

4.4. Нормализация целевой функции 69


19.1

4.5. Целевая функция по пользовательским графикам


Целевая функция может компоноваться пользовательскими графиками по скважинам,
месторождениям, группам (см. 6.6. Калькулятор графиков). Для создания графиков на-
жмите кнопку Калькулятор графиков, расположенную на верхней панели.
Если выполняется автоматизированная адаптация (т.е. Тип функции – Согласование
с историей, линейная (или квадратичная)), для пользовательских графиков, если воз-
можно, автоматически вычисляется историческое значение, которое используется при
расчёте целевой функции.
В выпадающем меню Объекты выберите, например, Польз. график по скважинам
и любую скважину (см. рис. 35). В окне Параметры выберите нужный пользователь-
ский график.
Кроме того, пользовательские графики могут быть использованы для задания целе-
вой функции на прогнозе (Тип функции – Оптимизация на прогнозе)

Рис. 35. Целевая функция по пользовательскому графику для скважин ”User_graph”.

4.5. Целевая функция по пользовательским графикам 70


19.1

4.6. Использование UDQ в качестве целевой функции


С помощью ключевого слова UDQ (см. 12.19.165) в исходном data файле модели мож-
но задать произвольную целевую функцию, например, включающую параметры, не пе-
речисленные в окне Параметры на вкладке Целевые функции. Чтобы использовать
пользовательскую функцию для автоматизированной адаптации и создании прогноза
установите галочку Параметры. FUOBJF (см. рис. 36).

Рис. 36. Использование пользовательской целевой функции FUOBJF.

4.6. Использование UDQ в качестве целевой функции 71


19.1

4.7. Примеры целевых функций


Пример 1 (рис. 37). Объект – Группы, выбрана группа FIELD; параметры – Накоплен-
ная нефть, Накопленная вода; вес (W) – 1; ошибка (g) – 0.05; тип ошибки – относитель-
ная.
Целевая функция:

N N  2  2 !
FOPT − FOPT H FW PT − FW PT H
∑ ∑ ln S = ∑ 0.05 · FOPT H
+
0.05 · FW PT H
,
p=oil,water n=0 n=0

где:

• FOPT – накопленная добыча нефти по месторождению;

• FOPTH – накопленная историческая добыча нефти по месторождению;

• FWPT – накопленная добыча воды по месторождению;

• FWPTH – накопленная историческая добыча воды по месторождению.

Рис. 37. Целевая функция. Пример 1.

Данная ЦФ может быть использована при начале адаптации модели, когда необхо-
димо начать с обеспечения совпадения накопленных добыч по всему месторождению.
После этого может быть задана ЦФ, обеспечивающая более жесткие критерии настрой-
ки на историю.

4.7. Примеры целевых функций 72


19.1

Например, более жестким критерием является следующий ниже Пример 2 для де-
битов по скважинам.
Пример 2 (рис. 38). Объект – Скважины; в модели 7 добывающих скважин; пара-
метры – Дебит нефти, Дебит воды; вес (W) – 1; ошибка (g) – 1; тип ошибки – относи-
тельная; K = 0 – сумма по шагам с нулевого шага.
Целевая функция:
!  !
7 N 7 N  2 2
(WOPR −WOPRH) (WW PR −WW PRH)
∑ 1 · ∑ ∑ ln S = ∑ ∑ 1 ·WOPRH
+
1 ·WW PRH
ln ,
j=1 p=oil,water n=0 j=1 n=0

где:

• WOPR – дебит нефти;

• WWPR – дебит воды;

• WOPRH – исторический дебит нефти;

• WWPRH – исторический дебит воды.

Суммирование производится по всем 7 скважинам за все N временных шагов.

Рис. 38. Целевая функция. Пример 2.

4.7. Примеры целевых функций 73


19.1

5. Оптимизационные алгоритмы
В этом разделе описаны алгоритмы автоматизированной адаптации (Assisted History
Matching) и анализа неопределенностей (Uncertainty Analysis). Доступны следующие
оптимизационные алгоритмы:

• Поверхности отклика (Прокси-модели);

• Дифференциальная эволюция;

• Симплекс-метод;

• Метод роя частиц.

Для запуска любого алгоритма необходимо предварительно задать переменные и це-


левую функцию. Перед запуском оптимизационного алгоритма необходимо провести
анализ чувствительности переменных с помощью методов планирования эксперимен-
тов.
Критерии остановки оптимизационного алгоритма приведены в разделе – 5.2.

На рис. 15 показан пример создания эксперимента. Для удобства создания экспери-


мента в диалоге есть следующие кнопки:

• Изменить диапазон для выбранных переменных. Позволяет изменить диа-


пазон изменения выбранной переменной.

• Снять выделение для всех переменных.;

• Выбрать переменные фильтром. Позволяет включить в эксперимент только


выбранные с помощью фильтра переменные (см. Применение фильтра для пере-
менных);

• Спрятать неиспользуемые переменные. Переменные, не отмеченные галоч-


кой, будут спрятанны в диалоге Создать новый эксперимент;

• Показать неиспользуемые переменные.

5. Оптимизационные алгоритмы 74
19.1

Подробное описание возможностей модуля автоадаптации приве-


дено в учебных курсах:

• AHM1.1. Автоадаптация: теоретический курс;

• AHM1.2. Автоадаптация;

• AHM1.3. Использование RFT данных в автоадаптации;

• AHM1.4. Поиск лучшей траектории скважины;

• AHM1.5. Адаптация по ОФП;

• AHM1.6. Автоадаптация для ГРП;

• AHM1.7. Автоадаптация для разных геологических реали-


заций;

• AHM1.8. Переход от задачи адаптации к расчету прогноза;

• AHM1.9. Анализ неопределенностей.

5. Оптимизационные алгоритмы 75
19.1

5.1. Создание нового эксперимента с выбранных вариантов


Существует возможность запуска алгоритма с заданной пользователем начальной попу-
ляции. Для этого нужно рассчитать несколько вариантов модели, перейти на вкладку
Результаты, выделить нужные варианты и в контекстном меню выбрать пункт Создать
новый эксперимент с выбранных вариантов. При создании нового эксперимента с
нескольких выбранных вариантов доступны только оптимизационные алгоритмы (По-
верхности отклика (Прокси-модели), Дифференциальная эволюция и т.д.).
Исходные выбранные варианты не добавляются в список вариантов нового экспе-
римента, то есть в новом эксперименте вариант с номером 0 – это первый из новых
созданных алгоритмом вариантов. В частности, при задании Максимального числа за-
пусков симулятора в это число не включаются исходные выбранные варианты. При
этом исходные выбранные варианты используются в новом эксперименте в качестве
базовых вариантов, то есть включаются в начальную популяцию алгоритма.
Исходные выбранные варианты не пересчитываются, в новом эксперименте исполь-
зуются уже полученные результаты по этим вариантам. Поэтому при настройке конфигу-
рации переменных во время создания нового эксперимента любые изменения значений
переменных никак не влияют на исходные выбранные варианты и результаты их расчёта.
Все изменения будут учтены алгоритмом при создании новых вариантов.
Настройка конфигурации переменных при создании эксперимента с нескольких вы-
бранных вариантов позволяет:
• включать/исключить переменные;
• настраивать базовые значения;
• настраивать область поиска (так, чтобы она охватывала все исходные значения).
Переменные, значения которых различны хотя бы в двух исходных выбранных вари-
антах, являются ”значимыми” и отмечаются рыжим цветом (см рис. 39). Такие перемен-
ные по умолчанию используются в эксперименте (т.е. для них установлена галочка).
Переменные, значения которых одинаковы во всех исходных выбранных вариантах,
предполагаются ”незначимыми” и по умолчанию галочка для них снята. При редак-
тировании конфигурации переменных можно включить/исключить переменные из экс-
перимента. При этом исходно ”значимыми” переменные остаются выделенными цветом
до конца редактирования конфигурации.
В качестве базового значения (Баз. знач.) переменной указывается значение из пер-
вого исходного выбранного варианта. Если необходимо, данное значение можно изме-
нить. По умолчанию в качестве Мин. и Макс. задается Мин. и Макс. переменной,
используемые в исходном эксперименте. Если выбранные варианты взяты из разных
экспериментов, то в качестве Мин. и Макс. выбирается наименьший Мин. и наи-
больший Макс. переменной по всем экспериментам. Мин. и Макс. значения можно
поменять, увеличить или уменьшить. При этом новые Мин. и Макс. должны быть та-
кими, чтобы все значения данной переменной в выбранных вариантах попадали в новый
диапазон. Чтобы увидеть диапазон изменения переменной в исходных вариантах доста-
точно навести курсор на строчку с переменной (см. рис. 39). Всплывающая подсказка

5.1. Создание нового эксперимента с выбранных вариантов 76


19.1

показывает имя переменной и её значение (если оно одинаково во всех вариантах) или
диапазон изменения ее значений: от минимального до максимального. Сделанные из-
менения не влияют на переменные или расчёты исходных вариантов, а используются
только для создания новых вариантов эксперимента.
Например, диапазон изменения переменной M_PERM_FIPNUM_4, показанной на
рис. 39, в выбранных вариантах меняется от 0.25215 до 2.17595. По умолчанию Мин.
и Макс. значения переменной 0.1 и 10, соотвественно, и взяты из исходного экспери-
мента. Если необходимо уменьшить диапазон изменения переменной, то возможными
Мин. и Макс. значениями для этой переменной будут 0.25 и 2.176 (см. рис. 40). Как
можно заметить, не возможно задать Мин. значение больше, чем 0.25215 (например,
0.26), иначе значение переменной 0.25215 не попадет в создаваемый диапазон. Также
нельзя задать Макс. значение меньше, чем 2.17595 (например, 2.17), иначе значение
переменной 2.17595 будет вне создаваемого диапазона.

Рис. 39. Настройка конфигурации переменных при создании эксперимента с нескольких


выбранных вариантов.

5.1. Создание нового эксперимента с выбранных вариантов 77


19.1

Рис. 40. Изменение Мин. и Макс. значений переменной при создании эксперимента с
нескольких выбранных вариантов.

5.2. Критерии остановки оптимизационного алгоритма


В tNavigator поддержано 4 критерия остановки алгоритма – 1 абсолютный и 3 относи-
тельных:
• Целевое значение остановки;
• Вариация целевой функции;
• Вариация переменных;
• Остановка при медленной сходимости.
При выполнении хотя бы одного из четырех условий оптимизационный алгоритм за-
вершает свою работу. Первый критерий – абсолютный (задание целевого значения ЦФ).
Алгоритм остановится, если найдется вариант, значение ЦФ которого будет меньше
заданного пользователем. Другие три критерия – относительные.
Основная идея использования относительных критериев остановки алгорит-
ма. Возможна ситуация, когда при расчете вариантов модели варианты становятся все
”более и более похожи” друг на друга. Таким образом, значения ЦФ для них становят-
ся очень близкими (т.е. разброс значений ЦФ становится небольшим). Данная ситуация
означает, что достаточно хороший вариант модели (который мог быть найден для данно-
го случая) уже найден и необходимо остановить алгоритм. В этом случае вводятся отно-
сительные критерии остановки алгоритма. Будет выполнена проверка, насколько широк
диапазон значений ЦФ от минимума до максимума (Вариация целевой функции), и на-
сколько широк диапазон изменения значений переменных (Вариация переменных). Если
диапазон большой, алгоритм продолжает работу, если маленький, то алгоритм останав-
ливается.

5.2. Критерии остановки оптимизационного алгоритма 78


19.1

Таким образом, при выполнении хотя бы одного из описанных ниже условий опти-
мизационный алгоритм завершает свою работу.
Целевое значение остановки
Необходимо задать число (величину ЦФ). Алгоритм остановится, если найдется ва-
риант, значение ЦФ которого будет меньше заданного пользователем. По умолчанию –
0.
Вариация целевой функции
Необходимо задать величину (в процентах). Алгоритм остановится, если амплитуда
значений ЦФ в популяции (наборе вариантов модели) меньше заданной пользователем
в процентах доли от средней характеристики.
Вариация переменных
Необходимо задать величину (в процентах). Алгоритм остановится, если амплитуды
значений каждой переменной в популяции меньше заданной пользователем в процентах
доли от средней характеристики.
Остановка при медленной сходимости
Необходимо задать количество итераций (Кол-во итераций) и величину улучшения
значения ЦФ (Необходимое улучшение) за это число итераций в процентах. Алгоритм
остановится в случае, если целевая функция не улучшится за заданное число итераций
на указанное число процентов.

Уточнения.
Амплитуда значений ЦФ в популяции – разница между максимальным и минималь-
ным значением.
В качестве средней характеристики выступает среднее между минимумом и макси-
мумом в популяции.
Понятие популяции для проверки критерия остановки алгоритма (набор вариантов
модели) отличается в зависимости от вида оптимизационного алгоритма.
• Дифференциальная эволюция – размер популяции уже задан для алгоритма, мо-
жет быть изменен при ручной настройке параметров (значение 6 по умолчанию).
• Симплекс-метод – популяция - это набор из N + 1 вариантов модели (текущие
вершины симплекса).
• Метод Роя частиц (Классическая версия) – размер популяции уже задан для ал-
горитма, может быть изменен при ручной настройке параметров (параметр размер
роя, по умолчанию – 14).
• Метод Роя частиц (flexi) – размер популяции равен произведению размера роя
и разности единицы и доли исследователей, значения данных параметров могут
быть изменения при ручной настройке (по умолчанию: количество равно 10 ∗ (1 −
0.5) = 5).

5.2. Критерии остановки оптимизационного алгоритма 79


19.1

• Поверхности отклика – в качестве популяции для проверки критерия остановки


алгоритма берутся два последних рассчитанных варианта.

5.2. Критерии остановки оптимизационного алгоритма 80


19.1

5.3. Поверхности отклика (Прокси-модели)


Метод поверхностного отклика (англ. Response Surface) – оптимизационный алгоритм
минимизации целевой функции. Для этого алгоритма определяется максимальное число
итераций. На каждую итерацию приходится один запуск симулятора.
Для этого алгоритма необходимо задать целевую функцию.
На каждой итерации алгоритм строит аппроксимацию целевой функции квадратич-
ным полиномом. Сначала вычисляется корреляция Пирсона для каждого монома. Мо-
номы с меньшей корреляцией не используются для построения. Затем коэффициенты
полинома находятся с помощью метода наименьших квадратов. Затем находится мини-
мум полученного полинома, который становится следующей точкой алгоритма.

Подробное теоретическое описание построяния Прокси-моделей приведено в разде-


ле Прокси модель.

5.3. Поверхности отклика (Прокси-модели) 81


19.1

5.4. Дифференциальная эволюция


5.4.1. Краткое описание алгоритма
Дифференциальная эволюция (ДЭ) – это стохастический оптимизационный алгоритм,
нацеленный на минимизацию целевой функции в заданном пространстве поиска. Для
этого алгоритма устанавливается максимальное число итераций. За одну итерацию ал-
горитма происходит один запуск симулятора. Для этого алгоритма необходимо задать
целевую функцию.
Алгоритм оперирует с некоторым набором векторов из пространства поиска. Этот
набор называют популяцией. Чем больше размер популяции, тем лучше алгоритм будет
«чувствовать» целевую функцию.
На первых итерациях алгоритм заполняет начальную популяцию случайными векто-
рами из пространства поиска. Вектор, отвечающий базовой модели всегда включается
в популяцию. После того, как начальная популяция заполнена, ДЭ на каждой итерации
составляет пробный вектор и вычисляет на нём целевую функцию, запуская симуля-
тор. Пробный вектор составляется случайным смешением компонент целевого вектора
и мутантного вектора. Параметр Cr отвечает вероятности замещения компоненты це-
левого вектора компонентой мутантного вектора. Выбор целевого вектора из популяции
может быть изменён пользователем.

Vпробный = СмешениеCr (Vцелевой ,Vмутантный )


Мутантный вектор составляется как сумма базового вектора и нескольких разностей
случайных векторов из популяции, умноженных на параметр F .
Выбор базового вектора из популяции и числа разностей также настраиваются.
Пример формулы для числа разностей, равного двум:

Vмутантный = Vбазовый + F · (Vслучайный1 −Vслучайный2 ) + F · (Vслучайный3 −Vслуйчайный4 )

Когда целевая функция вычислена на пробном векторе, её значение сравнивается со


значением целевой функции на целевом векторе.

fцелевая (Vпробный ) ? fцелевая (Vцелевой )

Если пробный вектор предоставляет лучшее значение целевой функции, он замещает


целевой вектор в популяции. И так алгоритм продолжает делать итерации, пока их число
не превысит заданное пользователем значение.

5.4. Дифференциальная эволюция 82


19.1

5.4.2. Подробнее о параметрах

В этом разделе подробно рассматриваются параметры алгоритма и их влияние на его


работу. Для дальнейшего изложения будут использованы следующие условные обозна-
чения.
Условные обозначения

Niter — максимальное число запусков симулятора (число итераций)

Vsample — пробный вектор (рассчитывается на итерации)

Vtarget — целевой вектор (участвует в создании пробного, будет заменён на него,


если он окажется лучше)

Vbase — базовый вектор (участвует в создании мутантного)

Vmutant — мутантный вектор (участвует в создании пробного)

Vrandom1 , Vrandom2 , . . . — случайные векторы (отличные от целевого и базового,


участвуют в создании мутантного)

N p — размер популяции (число векторов, из которых выбираются целевой, базо-


вый и случайные)

F — вес разностей (участвует в создании мутантного вектора)

Cr — кроссовер (вероятность замещения координат, участвует в создании пробного


вектора)

N_di f f — число разностей (число пар случайных векторов, участвует в создании


мутантного вектора)

Random_seed — случайное число (задаёт начальное состояние генератора псевдо-


случайных чисел)

N_sim_calc — число одновременно считающихся вариантов (для параллельного


запуска)

Связь между параметрами.


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

Vmutant = Vbase + F · (Vrandom1 −Vrandom2 ) + F · (Vrandom3 −Vrandom4 ) + . . .


Vsample = mixCr (Vtarget ,Vmutant )

5.4.2. Подробнее о параметрах 83


19.1

Область определения параметров.


Niter — не менее N p + 1
Np — не менее 2 + 2 · Ndi f f

Vtarget — Худший (из популяции выбирается точка


с худшим значением целевой функции)
Случайный (из популяции выбирается случайная точка)
Vbase — Лучший (из популяции выбирается точка
с лучшим значением целевой функции)
Случайный (из популяции выбирается случайная точка)
F — в интервале (0, 1)
Cr — в интервале (0, 1)

Параметры N_di f f , Random_seed и N_sim_calc задаются целыми положительными


числами. При использовании Random_seed = 0 данный параметр генерируется автома-
тически.
Влияние параметров на работу алгоритма.
• Niter
Ограничивает количество итераций. Задаёт число вариантов, после которых ал-
горитм будет остановлен. Стоит отметить, что при использовании параллельного
запуска (см. ниже) число итераций по-прежнему означает максимальное число
вариантов, а не число вариантов, умноженное на параметр параллельного запуска.

• Np
Количество точек, которые на каждой итерации участвуют в создании новой точки.
В начале работы алгоритма начальная популяция разбрасывается по пространству
поиска.
При увеличении N p возрастает «чувствительность» алгоритма и инертность по-
пуляции. Это увеличивает вероятность нахождения глобального минимума, но за-
медляет сходимость к локальному. Связь между скоростью сходимости и размером
популяции неоднозначна.

• F Вес разностного вектора. Задаёт величину отклонения мутантного вектора от базо-


вого. При малом F возможно вырождение популяции по некоторым переменным.
Малые значения F приводят к локализации области поиска вблизи текущих точек
популяции, то есть соответствуют задаче поиска локального минимума. Большие
значения F позволяют исследовать область поиска выходящую далеко за пределы
текущей популяции, но снижают скорость сходимости, то есть соответствуют за-
даче поиска глобального минимума. В обоих случаях, однако, слишком малые и
слишком большие значения F не дают хорошего результата.

5.4.2. Подробнее о параметрах 84


19.1

Стоит также отметить, что F модифицируется в процессе работы алгоритма.

• Cr
Кроссовер. Задаёт вероятность замещения координат целевого вектора координата-
ми мутантного при создании пробного вектора. Для каждого следующего пробного
вектора разыгрывается одна координата, которая обязательно берётся из мутантно-
го вектора. Остальные координаты берутся из мутантного вектора с вероятностью
Cr . Таким образом, чем больше значение Cr , тем больше координат целевого век-
тора будут замещены. В случае сепарабельных задач хорошо брать меньшее значе-
ние Cr , для несепарабельных – большее. В случае адаптации моделей задачи как
правило несепарабельны, однако стоит учитывать, что слишком большие значения
Cr не дают хорошего результата.

• N_sim_calc
Параметр для параллельного запуска. Задаёт число вариантов, которые будут рас-
считываться параллельно.
Параллельная версия ДЭ является асинхронной, и параллельный запуск позволяет
увеличить «чувствительность» алгоритма при оценке свойств текущей популяции,
увеличивается полоса разброса порождаемых пробных точек. Локальную версию
с учётом увеличения числа итераций параллельность видоизменяет в сторону гло-
бальной, то есть за счёт увеличения «чувствительности» может быть получено
более качественное решение.
В случае запуска версии пользовательских настроек возможно улучшение при ис-
пользовании случайного выбора целевых и базовых векторов совместно с парал-
лельным запуском.
Рекомендуется ставить N_sim_calc = N p, если есть соответствующие вычисли-
тельные ресурсы. Можно получить ускорение и/или улучшение качества сходимо-
сти при использовании N_sim_calc ⩽ 2 · N p.
При использовании параллельного запуска можно (существенно при малом Niter )
увеличивать число итераций для улучшения качества сходимости при том же вре-
мени расчёта, что и последовательная версия (увеличение Niter в пределах до
Niter · N_sim_calc), или же (например, для изначально достаточно больших Niter )
число итераций можно оставить неизменным для уменьшения времени работы
алгоритма просто за счёт параллельности.
В целом, увеличение числа итераций при использовании параллельного запуска
желательно (может быть меньше, чем в N_sim_calc раз).

5.4.3. Версии алгоритма


Алгоритм имеет две предопределённые версии: для локального и глобального поиска.

• Версия локального поиска.

5.4.3. Версии алгоритма 85


19.1

Нацелена на быстрый поиск локального минимума. Данная версия не позволяет


оценить чувствительность целевой функции в пространстве поиска и искать гло-
бальный минимум.
Рекомендуемые значения Niter (для непараллельного запуска): 30-60.
Рекомендуемые значения N_sim_calc: 6 (допустимы значения ⩽ 12). Желательно
соответствующее увеличение Niter .

• Версия глобального поиска.

Нацелена на поиск глобального минимума. Данная версия требует большого числа


итераций, но позволяет искать наиболее качественные точки области поиска.
Рекомендуемые значения Niter : более 200.
Рекомендуемые значения N_sim_calc: 6, 12 (допустимы значения ⩽ 24). Жела-
тельно соответствующее увеличение Niter .

• Версия пользовательских настроек.

Позволяет менять параметры работы алгоритма.

5.4.3. Версии алгоритма 86


19.1

5.5. Симплекс-метод
5.5.1. Определения и краткое описание алгоритма
Алгоритм Нелдера-Мида [1] (или симплекс-метод) решает классическую задачу мини-
мизации функции от n переменных. Особенности метода:

• использует только значение функции в некоторых точках;

• не строит приближенные значения градиентов в каждой из этих точек.

Он принадлежит классу методов прямого поиска. Для этого алгоритма необходимо


задать целевую функцию.
Метод Нелдера-Мида основывается на симплексе. Симплекс S ⊂ Rn – это выпуклая
оболочка n + 1 точек x0 , x1 , ..., xn ∈ Rn . Например, симплекс в R2 – треугольник, в R3 –
тетраэдр.
Метод прямого поиска, основанный на симплексе, работает с симплексом S =
x0 , ..., xn ∈ Rn и соответствующими значениями функции f в его вершинах fi = f (xi ), i =
0, ..., n. Начальный симплекс должен быть невырожденным, т.е. состоять из точек, не ле-
жащих в одной плоскости.
Далее метод выполняет последовательность преобразований симплекса S , нацелен-
ных на уменьшение значений функции в его вершинах. На каждом шаге преобразование
определяется вычисленными одной или несколькими ”тестовых” точек и значениями
функции в этих точках, а также сравнением этих значений функции с ее значениями на
вершинах симплекса.
Процесс завершается, когда в некотором смысле либо симплекс S становится доста-
точно мал, либо значения fi близки (если f непрерывна).
Алгоритм Нелдера-Мида требует одно или два вычислений значений функции в от-
личие от других методов прямого поиска, требующих n или более таких вычислений.

5.5.2. Алгоритм
Начальный симплекс.
Начальный симплекс S обычно строится генерированием n + 1 точек вокруг данной
точки xin ∈ Rn . На практике чаще всего полагают x0 = xin для обеспечения надлежащих
рестартов алгоритма. Оставшиеся n вершин генерируются так, чтобы выполнилось одно
из двух условий:

• S , построенный на осях координат, имеет прямой угол в точке x0 , т.е.

xi = x0 + hi ei , i = 1, ..., n,

где hi – длина шага вдоль единичного вектора ei ∈ Rn .

• S – правильный многогранник.

5.5. Симплекс-метод 87
19.1

Алгоритм преобразования симплекса.


Одна итерация алгоритма Нелдера-Мида состоит из трех шагов:
1. Сортировка. Среди вершин симплекса находим 3 точки xh , xs , xl со следующими
свойствами:
f (xh ) = max fi
i
f (xs ) = max fi
i̸=h

f (xl ) = min fi
i

В некоторых реализация алгоритма вершины симплекса S сортируются вместе со


значениями функции так, чтобы f0 ⩽ ... ⩽ fn . Тогда l = 0, s = n − 1, h = n.
Назовем точку xh наихудшей, точку xs – второй наихудшей, а точку xl – лучшей.
2. Центрирование. Ищем центр тяжести c всех точек, за исключением xh (или центр
тяжести лучшей стороны):
1 n
c = ∑ xi .
n i̸=h

3. Преобразование. На этой стадии вычисляется новый симплекс на основе текуще-


го. Во-первых, попытаемся заменить наихудшую точку другой, используя отраже-
ние, растяжение или сжатие относительно лучшей стороны. Все тестовые точки
лежат на прямой, проходящей через xh и c, и не более двух из них вычисляются
на одной итерации. Если новая точка лучше (т.е. в новой точке значение функции
меньше, чем в наихудшей), то она заменяет наихудшую точку в симплексе. Иначе,
сожмем симплекс в направлении лучшей вершины xl . В этом случае вычисляются
n новых вершин.
Преобразования симплекса регулируются четырьмя параметрами: α , соответству-
ющий отражению, β – сжатию, γ – растяжению и δ – сокращению. Они должны
удовлетворять следующим ограничениям:

α > 0,

0 < β < 1,
γ > 1, γ > α,
0 < δ < 1.

Обычно эти параметры имеют следующие значения:


1 1
α = 1, β= , γ = 2, δ= .
2 2

Эффекты от вышеуказанных преобразований схематично показаны ниже. Новый


симплекс изображен зеленым цветом.

5.5.2. Алгоритм 88
19.1

• Отражение. Координаты отраженной точки xr вычисляются по следующей


формуле:
xr = c + α(c − xh ).
Значение функции f в этой точке обозначим fr . Если fl ⩽ fr < fs , то точка
xh заменяется точкой xr , и итерация завершается.

Рис. 41. Отражение.

• Растяжение. Если fr < fl , то вычисляется точка расширения xe = c + γ(xr −


c); fe – значение f в этой точке. Если fe < fr , то точка xe заменяет точку xh
в симплексе; иначе, точка xh заменяется точкой xr . В обоих случаях итерация
завершается.

Рис. 42. Растяжение.

• Сжатие. Если fr ⩾ fs , то с помощью лучшей из двух точек xh и xr вычисля-


ется точка сжатия xc .
– Сжатие ”наружу”. Если fs ⩽ fr < fh , то xc = c + β (xr − c); fc – зна-
чение f в точке xc . Если fc ⩽ fr , то точка xc заменяет xr , и итерация
завершается. Иначе, производится сокращение симплекса.
– Сжатие ”внутрь”. Если fr ⩾ fh , то xc = c + β (xh − c); fc – значение f в
точке xc . Если fc < fh , то точка xc заменяет xh , и итерация завершается.
Иначе, производится сокращение симплекса.

5.5.2. Алгоритм 89
19.1

Рис. 43. Сжатие ”наружу”.

Рис. 44. Сжатие ”внутрь”.

• Сокращение. Вычисляются n новых вершин симплекса xi = xl + δ (xi −


xl ); fi = f (xi ) для i = 0, ..., n, j ̸= l .

Рис. 45. Сокращение.

5.5.2. Алгоритм 90
19.1

Преобразование симплекса с помощью сокращения было введено для предот-


вращения некорректного завершения работы алгоритма. Оно может произой-
ти, когда ”впадина” функции изогнута, и одна из точек симплекса находится
гораздо дальше от подножия впадины, чем остальные. В этом случае сжатие
может отодвинуть отраженную точку еще дальше вместо того, чтобы прибли-
зить. Дальнейшие сжатия оказываются бесполезными. Предложенное преоб-
разование сжимает симплекс в сторону самой нижней точки, и в конце концов
оно приведет к тому, что все точки будут лежать во впадине.

Проверка на завершение алгоритма.


Практические реализации метода Нелдера-Мида содержат тесты, гарантирующие за-
вершение алгоритма за конечное время. Проверка на завершение часто состоит из трех
различных частей: termx ,term f и f ail .

• termx – это тест на сходимость симплекса. Тест завершается успешно, если сим-
плекс S достаточно мал в некотором смысле (например, все или некоторые вер-
шины достаточно близки друг к другу).

• term f – это тест на сходимость значений функции. Этот тест завершается успешно,
когда все или некоторые значения функции достаточно близки друг к другу.

• f ail – тест на расходимость. Тест завершается успешно, если число итераций или
вычислений значений функции превышает заранее заданного их числа.

Алгоритм завершает работу если хотя бы один из тестов завершается успешно.


Если алгоритм работает с разрывной функцией f , то тест termx должен иметь
несколько другую форму. Этот тест также полезен для непрерывных функций, когда
необходимо как достаточно точное вычисление точки минимума, так и минимального
значения функции. В таких случаях тест term f является полезным только для ”обыч-
ных” функций.

5.5.2. Алгоритм 91
19.1

5.6. Метод роя частиц


5.6.1. Краткое описание алгоритма
Метод роя частиц (МРЧ) – это стохастический оптимизационный алгоритм, нацелен-
ный на минимизацию целевой функции в заданном пространстве поиска. Изначально
алгоритм был разработан для имитации социального поведения. Впоследствии было
замечено, что он пригоден для оптимизационных задач.
Для этого алгоритма устанавливается максимальное число итераций. За одну итера-
цию алгоритма происходит один запуск симулятора. Для этого алгоритма необходимо
задать целевую функцию.
Алгоритм работает с некоторым множеством частиц, называемым роем. Каждая ча-
стица описывается позицией в пространстве поиска и вектором скорости. Кроме того
каждая частица запоминает свою локальную лучшую позицию. Рой, в свою очередь,
хранит глобальную лучшую позицию. Чем размер роя больше, тем лучше будет иссле-
доваться пространство поиска.
На первых итерациях алгоритм заполняет рой частицами со случайными позициями
и векторами скорости. Позиция, отвечающая базовой модели, всегда включается в рой.
После вычисления целевой функции в точках пространства поиска, соответствующим
позициям частиц роя, обновляются глобальные и локальные лучшие позиции. По об-
новлённым данным изменяется вектор скорости частицы. Частица перемещается вдоль
полученного вектора скорости на новую позицию.
Таким образом рой частиц исследует заданное пространство поиска, оптимизируя
целевую функцию.
Ядром метода является формула изменения вектора скорости. Ее вид зависит от
версии алгоритма. Были реализованы две версии: Классический метод роя частиц и
FlexiPSO (по работе Muhammad Kathrada [2]).

5.6.2. Общий вид алгоритма метода роя частиц


Рассмотрим общий вид алгоритма МРЧ:

1. Инициализация компонентов частиц роя: позиций в пространстве поиска, век-


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

2. Расчёт целевой функции. Производится вычисление целевой функции в точках,


которые соответствуют позициям частиц. Возможен параллельный расчёт.

3. Обновление локальных и глобальных лучших позиций и других параметров


алгоритма.

4. Изменение векторов скорости частиц.

5.6. Метод роя частиц 92


19.1

Центральная часть алгоритма. Изменение вектора скорости в разных версиях ал-


горитма происходит по разным формулам. В различных версиях формулы могут
зависеть от большого количества внутренних и внешних параметров. Формулы
изменения скорости конкретных версий приведены ниже.

5. Сдвиг позиций частиц вдоль их векторов скорости.


Происходит обновление позиций частиц роя. Частицы передвигаются по направ-
лению нового вектора скорости.

6. Обработка краевых условий.


После сдвига вдоль своего вектора скорости частица может покинуть заданное
пространство поиска. Для предотвращения этого реализован механизм отражения
частиц от границ пространство поиска. Характер отражения регулируется соответ-
ствующим параметром.

7. Проверка условий завершения алгоритма.


Существует несколько условий остановки алгоритма:

• Достижение определённого значения целевой функции.


• Достижение максимального количества итераций.
• Достижение вариации позиций частиц некоторого достаточно малого значе-
ния.

При выполнении хотя бы одного из условий алгоритм заканчивает свою работу. В


противном случае процесс продолжается с пункта №2.

5.6.3. Формула изменения скорости


В данном разделе будут подробно рассмотрены различные формулы изменения скорости
частицы.
Формула изменения скорости в классической версии МРЧ.
В данной версии формула имеет следующий вид:

V̂ = w ·V + r1 · nostalgia · (PBest − X) + r2 · sociality · (GBest − X),


где

V̂ — новый вектор скорости данной частицы;

V — старый вектор скорости данной частицы;

X — вектор в пространстве поиска, описывающий позицию данной частицы;

PBest — вектор в пространстве поиска, описывающий лучшую локальную пози-


цию данной частицы;

5.6.3. Формула изменения скорости 93


19.1

GBest — вектор в пространстве поиска, описывающий лучшую глобальную пози-


цию роя;

w — текущий коэффициент инерции;

r1 , r2 — случайные числа из интервала [0, 1];

nostalgia — коэффициент ностальгии (внешний параметр алгоритма);

sociality — коэффициент социальности (внешний параметр алгоритма).

Формула изменения скорости в версии FlexiPSO.


В данной версии, разработанной Muhammad Kathrada [2], формула скорости имеет
более сложный вид. По сравнению с классической версией, количество параметров в ней
увеличилось. Также выделено три типа поведения частиц: стандартное поведение, эгои-
стическое поведение и поведение с высокой социальностью. Для каждой из частиц тип
поведения определяется на каждом шаге независимо от других частиц. Частоты, с ко-
торыми будут выставляться последние два типа поведения, определяются параметрами
egoism_rate и comm_rate. Сама формула выглядит следующим образом:


w ·V + r1 · nostalgia · (PBest − X) + r2 · sociality · (GBest − X)+







 +r3 · neighborliness · (LBest − X), в случае стандартного поведения;
V̂ =
w ·V + r1 · nostalgia · (PBest − X), в случае эгоистического поведения;







w ·V + r · sociality · (GBest − X), в случае поведения с высокой социальностью.
2

где

V̂ — новый вектор скорости данной частицы;

V — старый вектор скорости данной частицы;

X — вектор в пространстве поиска, описывающий позицию данной частицы;

PBest — вектор в пространстве поиска, описывающий лучшую локальную пози-


цию данной частицы;

GBest — вектор в пространстве поиска, описывающий лучшую глобальную пози-


цию роя;

LBest — вектор в пространстве поиска, описывающий лучшую позицию среди


Nneigbor соседних частиц;

w — текущий коэффициент инерции;

r1 , r2 , r3 — случайные числа из интервала [0, 1];

5.6.3. Формула изменения скорости 94


19.1

nostalgia — коэффициент ностальгии (внешний параметр алгоритма);

sociality — коэффициент социальности (внешний параметр алгоритма);

neigborliness — коэффициент добрососедства (внешний параметр алгоритма).

Кроме того, из роя выделена группа частиц-«исследователей», вектор скорости кото-


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

5.6.4. Влияние параметров на работу алгоритма


• Ns
Количество частиц в рое. В начале работы алгоритма частицы роя случайно раз-
брасываются по пространству поиска.
При увеличении Ns возрастает вероятность нахождения глобального минимума,
но замедляется сходимость к локальному. Связь между скоростью сходимости и
размером роя неоднозначна.

• Niter
Ограничивает количество итераций. Задаёт число вариантов, после расчёта кото-
рых алгоритм будет остановлен. Стоит отметить, что при использовании парал-
лельного запуска (см. ниже) число итераций по-прежнему означает максимальное
число вариантов, а не число вариантов, умноженное на параметр параллельного
запуска.
Необходимо чтобы количество итераций было не меньше числа частиц в рое, т.е.
Niter ≥ Ns .

• N_sim_calc
Параметр для параллельного запуска. Задаёт число вариантов, которые будут рас-
считываться параллельно.
В целом данный параметр не влияет на «чувствительность» алгоритма, но позволя-
ет быстрее проводить эксперимент и рассматривать большее количество вариантов
за то же время.
Необходимо чтобы данный параметр был не больше числа частиц в рое, т.е.
N_sim_calc ≤ Ns .

• wstart , w f inish
Начальное и конечное значения коэффициента инерции. Желательно, чтобы коэф-
фициент инерции не возрастал в процессе работы алгоритма, т.е. рекомендуется
обеспечить условие 0 ≤ w f inish ≤ wstart ≤ 1.
Данный параметр позволяет частицам достаточно тщательно исследовать про-
странство поиска на начальных итерациях, но быстрее сходиться на завершающих
итерациях.

5.6.4. Влияние параметров на работу алгоритма 95


19.1

• nostalgia
Величина ностальгии частиц роя.
Данный параметр отвечает за стремление частицы к своей локальной лучшей пози-
ции. Увеличение данного параметра приводит к более тщательному исследованию
пространства поиска. Однако вместе с этим уменьшается скорость сходимости
алгоритма.
• sociality
Величина социальности частиц роя.
Данный параметр отвечает за стремление частицы к глобальной лучшей позиции
роя. Увеличение данного параметра приводит к увеличению скорости сходимости
алгоритма. Но вместе с этим это ухудшает качество исследования пространства
поиска и способствует остановке алгоритма в локальном минимуме.
• damping_ f actor
Коэффициент упругости границ области поиска. Данный параметр характеризует
поведение частиц роя вблизи границы области поиска.
В алгоритме реализован механизм отражения частиц от границы области поиска.
Он применяется случае, когда частица пытается выйти из области поиска. В та-
ком случае эмулируется упругое столкновение частицы с границей и отражение
первой обратно в область поиска. В результате столкновения скорость частицы
уменьшается. Коэффициент упругости характеризует потери скорости при таком
столкновении.
Другими словами, при коэффициенте упругости, равном 1, мы получаем абсолют-
но упругий удар, и частицы не замедляются от ударов о границы области поиска.
Наоборот, при нулевом коэффициенте упругости частицы полностью теряют ско-
рость при столкновении с границей и прилипают к ней.
Данный параметр важен при исследовании приграничных участков области поис-
ка. Не рекомендуется устанавливать данный параметр в граничные значения, так
как это приведёт к тому, что частицы либо будут постоянно прилипать к границе,
либо не будут иметь никакой возможности закрепиться около неё.
Параметр определён на отрезке [0, 1].
• Nneigbor
Количество соседей у частицы роя. Используется только в версии FlexiPSO.
Позволяет использовать не только локальную и глобальную лучшие позиции, но
и лучшие позиции соседей. Это позволяет более тщательно исследовать область
поиска. Рекомендуемое значение – 25% от размера роя.
Соотвественно, необходимо чтобы количество соседей частицы было меньше ко-
личества частиц в рое, т.е. Nneighbor ≤ Ns .
• neigborliness
Коэффициент добрососедства частиц роя. Используется только в версии FlexiPSO.

5.6.4. Влияние параметров на работу алгоритма 96


19.1

Данный параметр характеризует стремление частиц роя к лучшей позиции среди


соседних частиц и является некоторым осреднением двух полярных параметров
nostalgia и sociality.

• explorer_rate
Доля частиц с особым типом поведения «исследователь». Используется только в
версии FlexiPSO.
Данный параметр отображает долю особых частиц, для которых характерны более
широкие шаги по области поиска. Увеличение параметра влечёт улучшение каче-
ства исследования области поиска в целом, но препятствует детальному изучению
локальных участков.
Параметр определён на отрезке [0, 1]. Рекомендуемое значение 0.5.

• egoism_rate
Доля эгоизма в поведении частиц роя. Используется только в версии FlexiPSO.
Параметр определяет частоту случаев, когда для частицы включается особый ре-
жим поведения «эгоизм».
Параметр определён на отрезке [0, 1]. Рекомендуемое значение 0.1.

• comm_rate
Доля коллективности в поведении частиц роя. Используется только в версии
FlexiPSO.
Параметр определяет частоту случаев, когда для частицы включается особый ре-
жим поведения «коллективизм».
Параметр определён на отрезке [0, 1]. Рекомендуемое значение 0.6.
Кроме того, существует связь между полярными параметрами egoism_rate и
comm_rate. Эгоистическое поведение и поведение с высокой социальностью вза-
имоисключают друг друга, т.е. egoism_rate + comm_rate ≤ 1.

• rel_crit_dist
Относительное критическое расстояние – это минимальное относительное рас-
стояние, на которое может приблизиться частица-”исследователь” к глобальной
лучшей позиции роя. Используется только в версии FlexiPSO. Параметр опреде-
лён на отрезке [0, 1].
Частицы-”исследователи” ищут новые глобальные лучшие позиции роя, при этом
частицы не должны подходить слишком близко к найденной лучшей позиции
GBest . Для положения каждой исследовательской частицы X , для каждой пере-
менной i должно выполняться условие: |X(i)−GBest| > (imax −imin )×rel_crit_dist ,
где imax – максимальное значение i-ой переменной, imin – минимальное значе-
ние i-ой переменной. Если частица приближается к глобальной лучшей позиции
слишком близко, происходит отталкивание частицы. Параметр rel_crit_dist фор-
мализует понятие ”слишком близко”. Таким образом, исследовательская частица

5.6.4. Влияние параметров на работу алгоритма 97


19.1

должна отстоять от найденной лучшей позиции GBest минимум на величину


(imax − imin ) × rel_crit_dist по каждой координате.

5.6.4. Влияние параметров на работу алгоритма 98


19.1

5.7. Многокритериальный метод роя частиц


Данный метод является расширением стандартного метода роя частиц. В однокрите-
риальном оптимизационном алгоритме минимизируется общая целевая функция, явля-
ющаяся суммой (с весами) отдельных слагаемых по разным параметрам (невязок по
дебитам и т.д.) и объектам (скважин, групп и т.д.) (см. раздел 4.2.2). Во многокрите-
риальном методе задаются множество критериев (частных целевых функций), каждый
из которых может быть отдельным слагаемым или суммой слагаемых. Предполагает-
ся, что существует множество решений, обеспечивающих оптимальный баланс между
различными критериями, при этом поддерживая разнообразность таких решений.
Многокритериальный метод роя частиц основан на использовании механизма вытес-
няющего расстояния и опции мутации для обеспечения разнообразности решений [7].
Преимуществами данного метода является обеспечение большего разнообразия реше-
ний и нахождение всех возможных вариантов решений, хорошо адаптирующих модель
с одинаковым качеством. Все это уменьшает вероятность ”скатывания” алгоритма в ло-
кальный минимум, а также обеспечивает более надежный прогноз.

5.7.1. Краткое описание алгоритма


В отличии от однокритериальной оптимизации, ищущей оптимальное значение по од-
ному критерию, главная проблема многокритериальной оптимизации – существование
множества конфликтующих критериев (частных целевых функций). В этом случае улуч-
шение по одному критерию может вызывать ухудшение по другому. Однако между кон-
фликтующими критериями существуют компромиссы и задача состоит в нахождении
решений, которые уравновешивают эти компромиссы. Равновесие достигается для тако-
го решения, когда улучшение по любому критерию приводит к ухудшению по одному
или более другим критериям. Такие решения существуют и называются недоминируе-
мыми. Подмножество точек, среди которых нет доминируемых, образуют фронт Парето
(см. рис. 46).
Задача многокритериальной оптимизации основана на построении фронта Парето
и нахождении лучшего (leader) решения в нем с помощью механизма вытесняющего
расстояния, поддерживая разнообразие (диверсификацию) Парето фронта.
Вытесняющее расстояние вычисляется следующим образом [7]. Для каждой целевой
функции множество частиц (вариантов модели) упорядочивается по убыванию значений
этой функции. Вытесняющее расстояние для некоторой частицы есть усредненное рас-
тояние между ней и двумя ближайшими частицами в пространстве целевых функций.
Полное вытесняющее расстояние получается суммированием по всем расстояниям для
всех целевых функций.
Аналогично методу роя частиц алгоритм работает с некоторым множеством частиц
(роем), для которого строится фронт Парето (архив недоминируемых решений). Лучшая
глобальная позиция роя входит в фронт Парето. Для определения глобальной лучшей по-
зиции и удаления частиц из ограниченного внешнего архива недоминируемых решений
используется механизм вытесняющего расстояния.

5.7. Многокритериальный метод роя частиц 99


19.1

Рис. 46. Фронт Парето.

5.7.2. Общий вид алгоритма многокритериального метода роя частиц


Общий вид алгоритма ММРЧ:

1. Инициализация компонентов частиц роя: позиций в пространстве поиска, век-


торов скорости и лучших локальных позиций. Генерируется определённое коли-
чество частиц роя, одна из которых соответствует базовой модели. Размер роя по
умолчанию равен 14 и может быть изменен при ручной настройке параметров
(Дополнительные параметр).

2. Построение фронта Парето. Инициализация лучшей глобальной позиции роя во


фронте Парето (внешнем архиве). Фронт Парето можно визуализировать на крос-
сплоте (см. 6.7.1).

3. Изменение векторов скорости частиц. Формулы изменения скорости конкретных


версий алгоритма PSO приведены в разделе 5.6.

4. Сдвиг позиций частиц вдоль их векторов скорости.


Обновление позиций частиц роя. Частицы передвигаются по направлению нового
вектора скорости.

5. Мутация. Если используется версия Flexi PSO (см. раздел 5.6.3).

6. Расчёт частных целевых функций.

7. Обновление локальных лучших позиции частиц.

5.7.2. Общий вид алгоритма многокритериального метода роя частиц 100


19.1

8. Обновление фронта Парето. Произвольная замена частиц при переполнении ар-


хива.

9. Определение глобальной лучшей позиции.

10. Проверка условий завершения алгоритма. Условия остановки алгоритма следу-


ющие:

• Достижение максимального количества итераций;


• Если амплитуда значений ЦФ в популяции (наборе вариантов модели) мень-
ше заданной пользователем в процентах доли от средней характеристики
(Вариация целевой функции, см. раздел 5.2)
• Если амплитуды значений каждой переменной в популяции меньше задан-
ной пользователем в процентах доли от средней характеристики (Вариация
переменных, см. раздел 5.2).

При выполнении хотя бы одного из условий алгоритм заканчивает свою работу. В


противном случае процесс продолжается с пункта №3.

5.7.3. Параметры алгоритма


Narch – размер архива всех локальных недоминируемых решений. Данный архив исполь-
зуется для нахождения лучшей глобальной позиции роя.

5.7.3. Параметры алгоритма 101


19.1

6. Анализ результатов
В этом разделе описаны средства работы с автоматизированной адаптацией в графи-
ческом интерфейсе (ГУИ). Окно проекта адаптации показано на рис. 47. Окно содер-
жит горизонтальную панель опций: Файл, Очередь, Результаты, Настройки. Меню
Очередь и Результаты становятся активными при переключении на вкладку Расчеты
и Результаты, соответственно, расположенных ниже. Ниже находится верхняя панель
кнопок.
Три вкладки позволяют переключаться между Информацией о проекте, Расчетами и
Результатами.
Горизонтальная панель опций состоит из:

1. меню Файл:
• Создать новый эксперимент;
• Загрузить модели для сравнения. Позволяет загрузить вариант(ы) мо-
дели для сравнения с имеющимися вариантами модели. Данная опция дает
возможность слияния проектов адаптации, созданных для одной модели и об-
щего набора переменных, но с различными рассчитанными экспериментами
(созданными, например, на разных компьютерах);
• Загрузить все модели из папки для сравнения. Укажите путь к пап-
ке, в которой хранятся папки с вариантами модели. Варианты модели будут
последовательно загружены из всех подпапок;
• Открыть базовую модель. Модель, хранящаяся в папке CURRENT, бу-
дет открыта. Далее с данной моделью можно работать как с обычной моде-
лью, т.е. можно вносить изменения в модель (например, изменять фазовые
проницаемости, добавлять скважины и т. д.);
• Закрыть.
2. меню Очередь (Очередь задач)
3. меню Результаты:

• Отметить/снять отметки со всех моделей;


• Отмечать новые модели. Если выбрана данная опция, то при расчете ре-
зультаты новых вариантов автоматически добавляются во вкладку Результаты
(в Графики, Таблицу результатов и т.д.);
• Скрывать модели с ошибками;
• Поддерживать сортировку. Если выбрана данная опция, то при до-
бавлении нового посчитанного варианта модели происходит автоматическая
пересортировка вариантов в соответствии с ранее выбранной сортировкой
(например, по убыванию невязки по дебиту нефти);

6. Анализ результатов 102


19.1

• Группировать отмеченные. Если выбрана данная опция, то отмеченные


варианты группируются вверху списка вариантов модели;
• Экспорт;
• Загрузить давление. Открывает диалоговое меню для загрузки давления
в базовую модель;
• Настройки.

4. меню Настройки:

• Основные настройки;
• Настройки расчета для новых задач;
• Настройки расчета для новых задач (расширенные);
• Общие настройки почты. Позволяет настроить электронную почту для по-
лучение уведомлений о ходе расчета;
• Настройки почты текущего окна. Настройка уведомлений о завершении
задания и/или о ходе расчета;
• Энергосбережение;
• Внешний вид;
• Колонки. Позволяет выбрать колонки для вкладки Расчеты.

6. Анализ результатов 103


19.1

6.1. Информация о проекте


На вкладке Информация о проекте показана вся информация о проекте адаптации (см.
рис. 47). Указано имя проекта, имя базовой модели, для которой был создан проект, на-
звание используемого эксперимента, параметры эксперимента. После создания проекта
создается очередь вариантов эксперимента, расчет которых запускается автоматически.
Рядом с названием эксперимента расположенны кнопки, позволяющие работать с ним:

• – остановить расчет. Останавливает все запущенные задачи;

• – запустить расчет. Запускает расчет задач эксперимента, в соответствии с


настройками запуска;

• – удалить эксперимент из проекта без возможности восстановления;

• – удалить файлы из эксперимента с возможностью последующего восстанов-


ления;

• – восстановить файлы эксперимента и добавить их в очередь;

• – добавить комментарий к эксперименту.

Слева расположено окно с вариантами эксперимента. Указывается id варианта, расчитан,


не расчитан вариант эксперимента и т. д. Нажав правой кнопкой мыши на выбранный
вариант, можно получить информацию о варианте, или создать новый эксперимент с
этого варианта, или создать пользовательский вариант с этого варианта (см рис. 47).

Рис. 47. Автоадаптация. Информацией о проекте.

6.1. Информация о проекте 104


19.1

6.2. Расчеты
Вкладка Расчеты содержит полную информацию о состоянии расчетов (рис. 48). Указы-
вается полный Путь к варианту эксперимента, Тип модели, Количество ядер, исполь-
зуемых в расчете и Статус расчета. Если расчет завершился, то указывается затраченное
на него время. Если расчет в процессе, то показано также предположительно оставшееся
до завершения расчета время.

Рис. 48. Автоадаптация. Расчеты.

Справа расположен набор команд для работы с расчетами:

• Запустить. Запускает расчет выбранного варианта эксперимента;

• Приостановить. Приостанавливает текущий расчет варианта;

• Остановить. Останавливает расчет эксперимента;

• Пересчитать. Пересчитать выбранный вариант эксперимента;

• Удалить из очереди.

• Посмотреть результаты. Посмотреть результаты для выбранного варианта экспе-


римента;

• Посмотреть графики.

• Посмотреть лог.

• Вверх. Переместить вариант в очереди на расчет вверх;

• Вниз. Переместить вариант в очереди на расчет вниз;

6.2. Расчеты 105


19.1

• Выделить все/снять выделение.

• Показывать завершенные.

• Лог.

• Опции. см Настройки.

6.2. Расчеты 106


19.1

6.3. Результаты
Вкладка Результаты позволяет посмотреть полученные результаты и провести их ана-
лиз для оценки качества адаптации. Основные вкладки окна Результаты:
• Таблица результатов;
• Расчет невязок;
• Графики;
• Кроссплот;
• Гистограмма;
• Составная диаграмма;
• Анализ;
• Mds.
Ниже описаны общие интерфейсные элементы окна Результаты.

6.3.1. Кнопки верхней панели


Кнопки, расположенные на верхней панели, используются для выполнения общих дей-
ствий, таких, как кластеризация, задание пользовательской функции и т.д.

• – создать новый эксперимент с базовой моделью проекта;

• – загрузить модели для сравнения;

• – открыть базовую модель. Открывает базовую модель проекта адаптации для


внесения изменений.
• Менеджер групп. Раскрашивает в цвета, заданные пользователем или уста-
новленные по умолчанию, варианты модели, эксперименты, созданные кластеры
и группы. Кроме того, позволяет удалить созданные группы и кластеры;

• Создать кластеризацию. Делает кластеризацию расчитанных вариантов мо-


дели;

• R2 таблица. Вычисляет таблицу коэффициентов R2 для анализа качества адап-


тации модели по ее объектам и параметрам;

• Загрузить исторические данные по BHP, THP или WBP из файла в ба-


зовую модель. Открывает диалоговое меню для загрузки давления в базовую мо-
дель;

• Калькулятор графиков. Калькулятор графиков позволяет выполнять различ-


ные операции с графиками и т.д. с помощью языка программирования Python.

6.3. Результаты 107


19.1

6.3.2. Кнопки левой панели


Кнопки, расположенные на левой панели, используются для выполнения операций со
списком моделей, находящимся правее.

• Отметить/снять отметки со всех моделей;

• Скрывать модели с ошибками;

• Фильтр вариантов. Позволяет выбрать необходимые для визуализации вари-


анты;

• Отмечать новые модели. Если выбрана данная опция, то при расчете, ре-
зультаты новых вариантов автоматически добавляются во вкладку Результаты (в
Графики, Таблицу результатов и т.д.);

• Группировать отмеченные. Если выбрана данная опция, то отмеченные ва-


рианты группируются в вверху списка вариантов модели;

• Поддерживать сортировку. Если выбрана данная опция, то при добавле-


нии нового посчитанного варианта модели, происходит автоматическая пересор-
тировка вариантов в соответствии с ранее выбранной сортировкой (например, по
убыванию невязки по дебиту нефти);

• Показать/скрыть лог.

6.3.3. Кнопки правой панели


Кнопки, расположенные на правой панели, выполняют действия, доступные на конкрет-
ной вкладке.

• Экспорт;

• Настройки.

6.3.2. Кнопки левой панели 108


19.1

6.4. Таблица результатов


Таблица результатов содержит полученные параметры расчетов (дебит нефти, дебит во-
ды, среднее давление и т.д.), невязки и переменные для всех вариантов эксперимента
(рис. 49). Результаты расчета показываются на том временном шаге, на котором стоит
временной слайдер. Доступна возможность отображать данные по объектам (группы,
скважины, невязки, переменные и т.д.).
Результаты, отображаемые в таблице, можно настраивать с помощью кнопки На-
стройки. В диалоге Настройка списка параметров (см. рис. 50) в верхнем левом окне
выбираются объекты (группы, скважины, невязки, переменные и т.д.), а нижнем окне
соответствующие параметры. Чтобы добавить выбранный параметр нажмите кнопку
Добавить параметр. Выбранные параметры показаны справа. Чтобы удалить параметр
из списка выделите параметр и нажмите на кнопку Удалить выбранные параметры.

Рис. 49. Автоадаптация. Таблица результатов.

6.4.1. Расчет невязок


В таблице результатов Невязки показываются за весь период времени: с нулевого шага
до конца расчета.
Невязки по дебиту (по нефти, воде, жидкости, . . . ) вычисляются, используя формулу:
N
Mismatch = ∑ ln|Rate(H) − Rate(C)|
n=0

где n — количество временных шагов (от нулевого до последнего шага N ), ln — длина


временного шага, Rate(H) и Rate(C) – историческое (H ) и рассчитанное (C ) значения
дебита на n-ом временном шаге.
Разница по накопленным добычам (по нефти, воде, жидкости, . . . ) вычисляется как:
N
Di f f = ∑ ln|Total(H) − Total(C)|
n=0

где Total(H) и Total(C) — историческое (H) и рассчитанное (С) значения накопленных


добыч на n-ом временном шаге.

6.4. Таблица результатов 109


19.1

Рис. 50. Настройка списка параметров.

!
Для расчета невязки по дебиту или разницы по накопленным добыче за
определенный период времени, с некоторого шага k, можно использо-
вать целевую функцию.

!
Для каждого варианта модели переменные запишутся в соответ-
ствующем файле варианта модели, в ключевом слове PREDEFINES
(см. 12.1.26).

6.4.1. Расчет невязок 110


19.1

6.5. Графики
Данная вкладка визуализирует полученные результаты расчетов.

Рис. 51. Автоадаптация. Графики.

Пример вкладки Графики показан на рис. 51. В верхнем окне выбирается объект, для
которого будет построен графики: скважины, месторождение и т.д. В нижнем – парамет-
ры, которые будут визуализированы: дебит нефти, дебит воды и т.д. Кнопка Добавить
новый график под списком параметров открывает диалог создания пользовательского
графика (см. 6.6. Калькулятор графиков).
Справа на панели расположенны дополнительные кнопки:

• Показывать значения в виде таблицы;

• Показывать разницу между историческими и расчетными значениями.

6.5. Графики 111


19.1

6.6. Калькулятор графиков


Калькулятор графиков позволяет построить произвольную комбинацию имеющихся па-
раметров и рядов данных модели с использованием математических функций, численно-
го дифференцирования/интегрирования, условных операторов, циклов и прочих средств
языка программирования Python.

Использование калькулятора графиков описано в учебном курсе


COMMON1.4. Калькулятор графиков Python.

Калькулятор графиков доступен также в интерфейсе симулятора и дизайнера моде-


лей, где он позволяет работать с отдельными интервалами перфорации.

Рис. 52. Калькулятор графиков

В текстовом редакторе окна калькулятора можно писать произвольный код с ис-


пользованием синтаксиса Python. Код выполняется по нажатию кнопки Вычислить.
Возможен импорт стандартных библиотек (import <имя>); см. также Импорт библио-
тек. Консольный выходной поток Python направлен в текстовое поле ниже и может
использоваться для отладки.
Можно создать произвольное количество пользовательских скриптов и управлять
ими кнопками Добавить / Удалить. Скрипты сохраняются в отдельных файлах
*.py в каталоге hmf/GraphCalculator/ при сохранении проекта.

6.6. Калькулятор графиков 112


19.1

Чтобы вычисленные графики появились в интерфейсе пользователя, они должны


быть экспортированы вызовом функции export() (см. ниже). Скрипт может содержать
произвольное число вызовов этой функции. После выполнения скрипта с вызовом функ-
ции экспорта соответствующий график появляется в списке доступных графиков (см.
рис. 53) и может быть выбран для отображения отдельно или одновременно с другими.
Его имя и размерность задаются при вызове функции экспорта. То, для какого объекта
он будет отображаться (месторождение, скважина, группа, регион, или интервал пер-
форации) определяется его типом, который в свою очередь определяется декларацией
переменной (см. ниже описание функции graph из Глобальных функций) или типом того
графика или графиков, из которых он выведен вычислениями. Разночтения в этих типах
могут привести к ошибке в скрипте.
Если скрипт не экспортирует ни одного графика, при его выполнении выдаётся пре-
дупреждение и предложение использовать кнопку автоматического экспорта. Её нажатие
добавляет в конец кода вызов функции export(), применённой к переменной из послед-
него по очереди оператора присваивания. Калькулятор может использоваться и без экс-
порта графиков, только для кратких вычислений, результат которых показывается тут же
в окне консольного вывода. В таком случае предупреждение можно игнорировать.

Рис. 53. Пользовательские графики

!
Обратите внимание, что пользовательские графики из других скриптов,
включая созданные в этом же шаблоне, недоступны из скрипта. Но при
необходимости можно создать несколько графиков из одного скрипта.
Пользовательский график может быть задействован в целевой функции (см. Целевая
функция по пользовательским графикам).

6.6. Калькулятор графиков 113


19.1

6.6.1. Функции и структуры данных


График как объект программы представляет собой сложную структуру данных, со-
держащую записи за все временные шаги для всех объектов соответствующего типа
(скважины, группы, интервалы перфорации, отчётные регионы) и для всех загруженных
моделей. Графики одинакового типа можно трансформировать друг в друга и комбини-
ровать с помощью арифметических операций и математических функций, действующих
на них поэлементно. Графики можно также комбинировать со скалярными величинами
или с графиками меньшей размерности. Кроме того, имеются специальные функции,
осуществляющие численное дифференцирование, интегрирование, усреднение по мно-
жествам объектов и т.д.
Справа внизу приведён список мнемоник (формат ключевого слова SUMMARY,
см. 12.18.1); их назначение объяснено во всплывающей подсказке. Мнемоники сгруппи-
рованы по типам (месторождение, группа, скважина и т.д.), которые выбираются слева.
Можно использовать мнемоники непосредственно в коде. Они интерпретируются как
объекты типа график и содержат массив данных для всех объектов соответствующего
типа (скважин, интервалов перфорации и т.д.) и для всех шагов по времени.
Мнемоники доступны только на тех шагах расчёта модели, для кото-
! рых записаны графики. На тех шагах, когда графики не записаны, они
интерполируются предыдущим значением. Варианты частичной записи
результатов описаны в разделе 9.1 Технического руководства tNavigator.
Если в модели присутствуют переменные, заданные ключевым словом UDQ
(см. 12.19.165), они могут быть вызваны по имени в коде. Они тоже интерпретиру-
ются как объекты типа график.
С точки зрения извлечения отдельных значений объект типа график функционирует
как многомерный массив, индексированный объектами следующих типов (в зависимо-
сти от его собственного подтипа):

Подтип графика Чем индексирован


Скважина Модель, врем. шаг, скважина
Группа Модель, врем. шаг, группа
Инт. перф. Модель, врем. шаг, инт. перф.
Отч. рег. Модель, врем. шаг, отч. рег.
Месторождение Модель, врем. шаг

Например, wopr[m1,w1,t1] возвращает одно число — дебит нефти для скважины w1 в мо-
дели m1 на шаге t1. Индексирующие элементы могут быть заданы в любом порядке (так,
пример выше мог быть записан в виде wopr[t1,w1,m1]). Выражение, в котором задана
только часть индексов, возвращает график с соответствующим подмножеством значе-
ний. Так, wopr[m1, w1] возвращает график дебита нефти для скважины w1 в модели m1
на всех временных шагах.

6.6.1. Функции и структуры данных 114


19.1

В коде можно использовать предопределённые объекты (скважины, группы, времен-


ные шаги, в интерфейсе симулятора также интервалы перфорации и отчётные регионы).
Для обращения с ними доступны следующие свойства и функции, сгруппированные на
правой панели:
• Объект скважина
Объект скважина имеет следующие доступные свойства и методы:
◦ .name — свойство, содержащее имя скважины.
Пример: s1 = w1.name

!
Фрагменты кода, приведённые здесь и ниже, служат только
для иллюстрации синтаксиса. Они не являются самодостаточ-
ными примерами и не будут работать, если их скопировать в
окно ввода калькулятора. Полноценные примеры см. в разделе
Примеры использования.
◦ .is_producer() (без аргументов) возвращает зависящий от времени график, эк-
вивалентный True, когда скважина является добывающей, и False в противном
случае.
Пример: if w1.is_producer(): ⟨некоторые действия⟩
◦ .is_opened() (без аргументов) возвращает зависящий от времени график, экви-
валентный True, когда скважина открыта, и False в противном случае.
Пример: if w1.is_opened(): ⟨некоторые действия⟩
◦ .is_stopped() (без аргументов) возвращает зависящий от времени график, экви-
валентный True, когда скважина остановлена, и False в противном случае.
Пример: if w1.is_stopped(): ⟨некоторые действия⟩
◦ .is_shut() (без аргументов) возвращает зависящий от времени график, эквива-
лентный True, когда скважина закрыта, и False в противном случае.
Пример: if w1.is_shut(): ⟨некоторые действия⟩
• Объект группа
Объект группа представляет группу скважин и имеет следующие доступные свой-
ства:
◦ .name — свойство, содержащее название группы.
Пример: s1 = g1.name
◦ .wells — свойство, содержащее итератор по всем скважинам группы.
Пример: for w in g1.wells: ⟨некоторые действия⟩

Итератор — структура, обеспечивающая доступ к своим эле-


ментам методом перебора (for ... in ...). Может быть преоб-
i разован в массив, в котором доступ осуществляется по номеру
элемента:
wells = [*g1.wells()]
w = wells[5]

6.6.1. Функции и структуры данных 115


19.1

◦ .parent_group — свойство, содержащее родительскую группу данной.


Пример: g2 = g1.parent_group
◦ .child_groups — свойство, содержащее итератор по всем дочерним группам.
Пример: for g in g1.child_groups: ⟨некоторые действия⟩

• Объект модель
Объект модель имеет следующее доступное свойство:

◦ .name — свойство, содержащее название модели (актуально, когда загружены


результаты расчёта нескольких моделей).
Пример: s1 = m1.name

• Объект врем. шаг


Объект данного типа представляет один шаг по времени, и имеет следующие до-
ступные свойства и методы:

◦ .name — свойство, содержащее представление даты шага в виде строки соглас-


но шаблону (шаблон выбирается из выпадающего списка Формат дат ниже).
Пример: s1 = t1.name
◦ .to_datetime() (без аргументов) возвращает объект datetime, имеющий стан-
дартные для Python свойства и методы. Пример:
dt1 = t1.to_datetime()
if dt1.year > 2014: ⟨некоторые действия⟩

• Объект график
Объект типа график представляет один из графиков, как предопределённых, так и
полученных в результате вычислений. Результат выполнения скрипта также явля-
ется объектом этого типа. Он имеет следующие доступные методы:

◦ .fix(model=<модель>,object=<объект>,date=<врем. шаг>) возвращает значе-


ние указанного графика для указанной модели, объекта и временного шага,
которые должны быть заданы как соответствующие объекты Python, т.е. не
по имени. Тип объекта (скважина, группа, в интерфейсе симулятора также
интервал перфорации или отчётный регион) должен соответствовать типу
графика. Все аргументы опциональны. Если каких-то из них нет, функция
возвратит структуру данных, содержащую значения графика для всех воз-
можных значений пропущенных аргументов.
Пример:
graph2 = graph1.fix(object=get_well_by_name('PROD1'))
берёт график для всех скважин и возвращает график только для одной сква-
жины, а именно PROD1.
◦ max,min,avg,sum(models=<модели>,objects=<объекты>,dates=<врем. шаги>)
извлекает подмножество значений для указанных моделей, объектов и вре-
менных шагов (все аргументы могут содержать как массив, так и одно зна-
чение), и затем возвращает минимум, максимум, среднее, или сумму этого

6.6.1. Функции и структуры данных 116


19.1

подмножества. Аргументы должны быть заданы как соответствующие объ-


екты Python, т.е. не по имени. Тип объектов должен соответствовать типу
графика. Все аргументы опциональны. Если каких-то из них нет, функция
возвращает объект, содержащий значения минимума, максимума, среднего,
или суммы по всем значениям заданных аргументов для всех возможных зна-
чений пропущенных аргументов.
Пример:
graph2 = graph1.max(objects=get_wells_by_mask('WELL3*'))
возвращает график, содержащий максимум из значений первоначального гра-
фика для скважин с именами WELL3*, т.е. WELL31, WELL32, WELL33 и т.д.;
graph2 = graph1.avg(dates=get_all_timesteps()[15:25])
возвращает график, содержащий значение первоначального графика, усред-
нённое по временным шагам с 15-го по 24-й.
◦ .aggregate_by_time_interval(interval='<интервал>',type='<тип>') возвращает кусочно-
постоянный график, интервалы постоянства которого задаются аргументом
interval, а значения вычисляются из значений первоначального графика на
этих интервалах по закону, указанному в аргументе type:
– avg: среднее;
– min: минимум;
– max: максимум;
– last: последнее значение;
– sum: сумма значений;
– total: разность последнего и первого значений.
Возможные значения аргумента interval:
– month — месяц;
– quarter — квартал;
– year — год.
Пример:
w1 = wopr.aggregate_by_time_interval(interval = 'year', type = 'avg')
возвращает график, кусочно-постоянный по годовым интервалам, где значе-
ние в каждом году равно среднему значению первоначального графика (wopr,
т.е. дебит нефти) за этот год.
◦ .to_list() (без аргументов) возвращает список значений графика. Эта функция
работает только в случае, если график является одномерным, т.е. зависит
только от времени; в противном случае будет выдана ошибка. Чтобы по-
лучить одномерный график, необходимо исключить зависимость от модели
и скважины, либо указав их явно через .fix(), либо найдя значение .min(),
.max() и т.п. по всем моделям и/или скважинам. Пример:
x=fopr.fix(model='BRUGGE_VAR_1').to_list()
возвращает массив значений дебита нефти всего месторождения на всех вре-
менных шагах.

6.6.1. Функции и структуры данных 117


19.1

• Глобальные функции
Функции общего назначения, включая:

◦ exp(<число>), ln(<число>), sqrt(<число>) — математические функции (экс-


понента, логарифм и квадратный корень, соответственно). При передаче гра-
фика в качестве аргумента применяются к нему поэлементно.
Примеры:
t = ln(y)
x = exp(r)
◦ diff(<ряд>) — численное дифференцирование временного ряда, т.е. его преоб-
разование в ряд разностей.
Пример: graph2 = diff(graph1)
Здесь мы расчитываем значения нефтедобычи за временной шаг по накоплен-
ным значениям:

465, 1165, 2188, 3418, 4968 . . . → 465, 700, 1023, 1230, 1550 . . .

◦ diff_t(<ряд>) — то же, что diff, с последующим делением результатов на длины


временных шагов в днях. Пример: graph2 = diff_t(graph1)
Здесь мы расчитываем значения дебитов скважин по накопленным значениям.
Пусть шаги по времени соответствуют месяцам и имеют длину 31, 28, 31, 30,
31... дней. Тогда:

465, 1165, 2188, 3418, 4968 . . . → 15, 25, 33, 41, 50 . . .

◦ cum_sum(<ряд>) — численное интегрирование временного ряда, т.е. его пре-


образование в ряд сумм.
Пример: graph3 = cum_sum(graph1)
Здесь мы расчитываем накопленные значения нефтедобычи по значениям за
временной шаг:

465, 700, 1023, 1230, 1550 . . . → 465, 1165, 2188, 3418, 4968 . . .

◦ cum_sum_t(<ряд>) — то же, что cum_sum, с умножением добавляемых вели-


чин на длины временных шагов в днях.
Пример: graph3 = cum_sum_t(graph1)
Здесь мы расчитываем накопленные значения нефтедобычи по дебитам.
Пусть шаги по времени соответствуют месяцам и имеют длину 31, 28, 31,
30, 31... дней. Тогда:

15, 25, 33, 41, 50 . . . → 465, 1165, 2188, 3418, 4968 . . .

◦ if_then_else(<условие>,<вариант если да>,<вариант если нет>) — условный


оператор, который применяется к графикам поэлементно.
Пример: graph1 = if_then_else(wopr > 10, 1, 0)

6.6.1. Функции и структуры данных 118


19.1

◦ get_well_by_name(<имя>) — возвращает объект скважины по её имени.


Пример: w1 = get_well_by_name('prod122')
◦ get_group_by_name(<имя>) — возвращает объект группы по её имени.
Пример: g1 = get_group_by_name('group21')
◦ get_all_wells() (без аргументов) возвращает итератор, содержащий все скважи-
ны.
Пример: for w in get_all_wells: ⟨некоторые действия⟩
◦ get_all_groups() (без аргументов) возвращает итератор, содержащий все груп-
пы.
Пример: for g in get_all_groups: ⟨некоторые действия⟩
◦ get_all_models() (без аргументов) возвращает итератор, содержащий все моде-
ли (актуально, когда загружены результаты расчёта нескольких моделей).
Пример: for m in get_all_models: ⟨некоторые действия⟩
◦ get_all_timesteps() (без аргументов) возвращает итератор, содержащий список
всех временных шагов.
Пример: for t in get_all_timesteps: ⟨некоторые действия⟩
◦ get_timestep_from_datetime(<дата>,mode = '<режим>') возвращает времен-
ной шаг по указанной дате, которая должна являться объектом Python типа
date или datetime. В зависимости от значения параметра mode поиск шага
происходит следующим образом:
– exact_match: берётся шаг с датой, в точности совпадающей с указанной;
– nearest: берётся ближайший шаг к указанной дате;
– nearest_before: берётся ближайший шаг, предшествующий указанной да-
те;
– nearest_after: берётся ближайший шаг, следующий за указанной датой;
По умолчанию: exact_match.
Если шаг не может быть найден с учётом заданного режима поиска, или если
дата находится за пределами интервала моделирования, возвращается ошиб-
ка.
Пример: t1 = get_timestep_from_datetime(date(2012,7,1), mode='nearest_after')

!
Большинство манипуляций с объектом datetime требу-
ют предварительной загрузки соответствующей биб-
лиотеки (см. Импорт библиотек). Это делается так:
from datetime import datetime
◦ create_table_vs_time(<ряд>) возвращает график, содержащий кусочно-линейную
интерполяцию данного ряда значений. Ряд должен представлять собой массив
кортежей из двух элементов (дата,значение). Дата должна являться объектом
Python типа date или datetime.
Пример:

6.6.1. Функции и структуры данных 119


19.1

oil_price_list = []
oil_price_list.append((date(2011,1,1),107.5))
oil_price_list.append((date(2012,1,1),109.5))
oil_price_list.append((date(2013,1,1),105.9))
oil_price_list.append((date(2014,1,1), 96.3))
oil_price_list.append((date(2015,1,1), 49.5))
oil_price_list.append((date(2016,1,1), 40.7))
oil_price = create_table_vs_time(oil_price_list)
Здесь мы строим график цен на нефть. Для наглядности точки в массив до-
бавляются по одной.
◦ get_wells_by_mask(<маска>) возвращает итератор, содержащий все скважи-
ны, подходящие под маску. Маска может содержать символы ? (любой сим-
вол) и * (любое количество символов, возможно, 0).
Пример: for w in get_wells_by_mask('prod1*'): ⟨некоторые действия⟩
◦ get_wells_from_filter(<имя фильтра>) возвращает итератор, содержащий все
скважины, включённые в фильтр по скважинам. Фильтр должен быть создан
заранее кнопкой Фильтр по скважинам (см. Руководство пользователя
tNavigator).
Пример: for w in get_wells_from_filter('first'): ⟨некоторые действия⟩
◦ shift_t(<ряд>,<сдвиг>,<значение по умолчанию>) возвращает первоначаль-
ный график, сдвинутый на указанное число шагов. Пропущенные позиции
заполняются указанным значением по умолчанию.
Пример: graph2 = shift_t(graph1,3,10)
В этом примере мы смещаем ряд исторических значений дебита нефти, кото-
рый был ошибочно введён с неправильными датами. Смещение производится
на 3 шага вправо, пустые позиции заполняются значением дебита на первом
шаге (10):

10, 12, 19, 24, 30, 33, 31, 27, 25 . . . −→ 10, 10, 10, 10, 12, 19, 24, 30, 33 . . .
| {z } | {z }
graph1 shift_t(graph1,3,10)

◦ get_project_folder() (без аргументов) возвращает полный путь к директории,


содержащей данную модель. Он может потребоваться для операции записи
на диск.
Пример: path = get_project_folder()
◦ get_project_name() (без аргументов) возвращает имя файла текущей модели
(без расширения).
Пример: fn = get_project_name()
◦ export(<выражение>,name='<имя>',units='<единицы>') экспортирует передан-
ное выражение в пользовательский график, задавая также его имя и (опцио-
нально) единицы измерения.
Выражение должно быть объектом типа график, иначе будет возвращена

6.6.1. Функции и структуры данных 120


19.1

ошибка.
Единицы измерения задаются мнемоническим именем, которое можно вы-
брать из выпадающего списка справа.
Пример: export(w1, name='graph1')
◦ graph(type='<тип>',default_value=<значение>) — создаёт график указанного
типа (field, well, group, в интерфейсе симулятора также conn — интервалы пер-
форации или fip — отчётные регионы) и заполняет его значениями по умол-
чанию.
Пример: tmp = graph(type='field', default_value=1)

6.6.2. Импорт библиотек


На языке Python имеется обширный набор библиотек для обработки данных, включая
сложные математические методы, экспорт в Excel и другие распространённые форматы
и т.д. Все эти библиотеки доступны в графическом калькуляторе.
Стандартные библиотеки Python могут быть подключены непосредственно:
import sys
Чтобы подключить собственные или сторонние библиотеки, необходимо проделать
следующее:
1. Установите Python 3.6.4 или более поздней версии для всех пользователей.
2. Если необходимо взаимодействие с Win32 API:
2.1. Установите пакет pywin32.
2.2. Запустите команду
⟨Место установки Python⟩\Scripts\pywin32_postinstall.py -install
3. В этом экземпляре Python установите нужные Вам библиотеки.
4. В главном окне tNavigator перейдите на Настройки → Опции → Пути.
5. Измените следующие параметры:
5.1. Отметьте Использовать внешнюю библиотеку Python и введите путь к
Python36.dll (или аналогичной библиотеке) для нового экземпляра Python.
5.2. При надобности отметьте Вручную задать путь к модулям Python и введи-
те путь к импортированным библиотекам Python. Можно вводить несколько
путей, разделённых точками с запятой.

Чтобы получить путь к библиотекам, уже используемый


установленным экземпляром Python, выполните в интерактивном
i интерпретаторе Python следующие команды:
import sys
’;’.join(sys.path)

6.6.2. Импорт библиотек 121


19.1

Если внешний экземпляр Python удалён, tNavigator автоматически переключается на


использование внутренней копии Python.

6.6.3. Примеры использования


Данные фрагменты кода будут функционировать полноценно только при условии их
запуска на модели, в которой имеются все объекты и структуры, подразумеваемые в
коде. Например, если код обращается к скважине под названием P1, а в модели её нет,
будет возвращена ошибка.
Пример 1
Предположим, мы хотим узнать, сколько нефти накоплено скважиной за определён-
ный период, или (в зависимости от времени) за прошедшую часть этого периода.
Скрипт работает следующим образом:

1. Создать график (x) со значением дебита нефти (wopr) на интересующем нас ин-
тервале, и 0 за его границами. Для этого сравнить time (время со старта, в днях)
с границами интервала и затем использовать результаты сравнений в арифмети-
ческом выражении. При этом булевские величины автоматически приводятся к
целым: True становится 1, False — 0.

2. Посчитать накопленную сумму от x.

3. Экспортировать получившийся график.

Пример
x = wopr * (time >= 215) * (time <= 550)
w1 = cum_sum_t(x)
export (w1, name = 'PeriodProd', units = "liquid_surface_volume")

Созданный график может быть отображён на секторных диаграммах.


Пример 2
Предположим, мы хотим узнать, какая часть дебита скважин идёт из слоёв сетки
70 ⩽ k < 100.

!
Это возможно в интерфейсе симулятора или Дизайнера моделей, где
графический калькулятор имеет доступ к данным по отдельным ин-
тервалам перфорации, но не в интерфейсе модуля автоадаптации.
Скрипт работает следующим образом:

1. Инициализировать временную структуру данных (tmp) типа график по скважинам


и заполнить её значением 0;

2. Итератором пройти по всем интервалам перфорации, и на каждом:

6.6.3. Примеры использования 122


19.1

Рис. 54. Пользовательский график на секторной диаграмме

• Проверить, находится ли интервал перфорации в нужной области, и если да,


то:
– Добавить дебит этого интервала во временную структуру данных на по-
зицию соответствующей скважины;

3. Экспортировать временную структуру, делённую на общие дебиты по скважинам


(деление графиков происходит поэлементно, т.е. сумма по интервалам перфорации
для каждой скважины делится на дебит этой скважины).

Пример
tmp = graph(type='well', default_value=0)
for c in get_all_connections():
if c.k in range(70,100):
tmp[c.well] += copr[c]
export(tmp/wopr, name='wopr_layer2')

!
Обратите внимание на пробелы в начале строк. Они синтаксически
важны в языке Python, но могут быть потеряны при копировании и
вставке.

6.6.3. Примеры использования 123


19.1

Пример 3
Предположим, мы хотим рассчитать средний дебит нефти для подмножества сква-
жин, названия которых начинаются с 'WELL3', затем сравнить его с историческими
данными, которые необходимо прочитать из файла, и использовать результат как целе-
вую функцию для адаптации. Скрипт работает следующим образом:
1. Импортировать стандартную библиотеку datetime, которая позволяет более гибко
манипулировать датами.

2. Передать в функцию avg итератор по нужному подмножеству скважин, чтобы по-


лучить требуемое среднее (obs).

3. Открыть для чтения файл input.txt, находящийся в директории модели.

4. Преобразовать массив строк файла в массив кортежей (строка,значение).

5. Перебрать массив ещё раз с разбором строк, чтобы получить массив кортежей
(дата,значение).

6. Построить график интерполяции по прочитанным данным (hist).

7. Построить и экспортировать график квадрата отклонения наблюдаемых данных от


исторических.

Пример
from datetime import datetime
obs = wopr.avg (objects = get_wells_by_mask ('WELL3*'))
inpf = open(get_project_folder()+'/input.txt', 'r')
raw = [(line.split()[0],float(line.split()[1])) for line in inpf]
arr = [(datetime.strptime(x[0], '%d.%m.%Y'),x[1]) for x in raw]
hist = create_table_vs_time(arr)
export((obs - hist)**2, name='fuobj')

Пример 4
Предположим, имеется график исторического забойного давления по скважинам, где
только часть измерений реальны; остальные позиции заполнены нулями. Мы хотим
интерполировать данные на весь диапазон по времени. Скрипт работает следующим
образом:

1. Инициализировать временную структуру данных (tmp) типа график по скважинам


и заполнить её значением 0;

2. Итератором пройти по всем моделям и всем скважинам, и на каждой сделать сле-


дующее:

• Извлечь BHP для данной скважины;

6.6.3. Примеры использования 124


19.1

• Создать пустой массив для хранения реально измеренных BHP (observed);


• Итератором пройти по всем шагам по времени:
– Если на этом шаге BHP > 0, то
– добавить его в массив;
• Если в массиве хотя бы 2 элемента,
• создать интерполированный график и поместить его во временную структуру;

3. Экспортировать временную структуру.

Пример
tmp = graph (type = 'well', default_value = 0)
for m in get_all_models():
for w in get_all_wells():
current = wbhph[m,w]
observed = []
for t in get_all_timesteps():
if current[t] > 0:
observed.append ((t.to_datetime(), current[t]))
if len (observed) >= 2:
tmp[m,w] = create_table_vs_time(observed)
export(tmp, name='interpolated_wbhph')

6.6.3. Примеры использования 125


19.1

6.7. Кроссплот
Кроссплот позволяет построить зависимость между двумя выбранными параметрами
(см. рис. 55). По оси Y в верхнем окне выбираются объекты (например, Группы, Сква-
жины, Невязки и т.д.), в нижнем – параметры, соответствующие выбранному объекту.
Аналогичное меню для выбора параметра доступно по оси X. На рис. 55 показан крос-
сплот между настраиваемой целевой функции и номером варианта модели, созданной
оптимизационным алгоритмом (например, Дифференциальная эволюция). Каждому ва-
рианту запуска алгоритма соответствует своя величина ЦФ. Видно, что с ростом числа
вариантов модели целевая функция стремится к минимуму. При наведении курсора мы-
ши на точку кроссплота в строке статуса (внизу окна) появится следующая информация:
номер эксперимента, номер варианта и значение ЦФ.

Рис. 55. Автоадаптация. Кроссплот.

6.7.1. Визуализация фронта Парето


Фронт Парето (см. раздел 5.7.1), как группу вариантов, можно визуализировать на произ-
вольном кроссплоте. Фронт Парето может строиться по произвольному набору целевых
функций (критериев).
Для визуализации фронта Парето выполните следующие шаги:
• Постройте кроссплот по выбранным параметрам. В примере, показанном на
рис. 57, кроссплот построен по ранее созданным целевым функциям oil_rate_of
и water_rate_of (см. раздел 4.1). По оси Y выбрана целевая функция oil_rate_of,
по оси X – water_rate_of, где oil_rate_of – целевая функция согласования с ис-
торией (квадратичная) по дебиту нефти (параметр) и группе ”FIELD” (объект);

6.7. Кроссплот 126


19.1

water_rate_of – целевая функция согласования с историей (квадратичная) по деби-


ту воды (параметр) и группе ”FIELD” (объект);

• Выберите варианты моделей в дереве моделей;

• Нажмите правой кнопкой мыши на выбранные варианты и в появившемся меню


выберите Создать Парето–фронт с выбранных вариантов;

• В диалоге Создать Парето–фронт необходимо выбрать целевые функции (мини-


мум 2), по которым строится фронт Парето. Список доступных целевых функций
показан слева. Чтобы добавить функцию нажмите на кнопку Добавить запись
(см. рис. 56);

• Выбранные целевые функции появятся в окне справа.

Рис. 56. Создание Парето-фронта.

В общем случае фронт Парето представляет собой группу вариантов модели, поэто-
му для работы с ним можно использовать тот же функционал, доступный для работы с
обычной группой (см. 6.14). Можно построить несколько фронтов Парето. Чтобы пере-
ключаться между ними нажмите на кнопку Менеджер групп и выберите нужный
фронт.

6.7.1. Визуализация фронта Парето 127


19.1

Рис. 57. Визуализация Парето фронта.

6.7.1. Визуализация фронта Парето 128


19.1

6.8. Гистограмма
Гистограмма позволяет оценить насколько велико число вариантов эксперимента, име-
ющих значение выбранного параметр в определенном диапазоне. По оси X задается
параметр, с помощью меню, расположенного в нижней половине вкладки, задающей
настройки гистограммы. Отрезок между максимальным X max и минимальным X min
значениями параметра разбивается на заданное число интервалов. Число интервалов
по X можно регулировать в поле Частей. Для каждого отрезка [X i , X i+1 ] отображается,
сколько вариантов имеют значение параметра X в этом диапазоне. Перемещаем слайдер
времени для просмотра гистограммы в нужный момент времени. Период времени, за
который показана гистограмма, выделяется красной линией на временой шкале.
Можно выбрать горизонтальную или вертикальную ориентацию гистограммы. Зна-
чения параметра могут быть представлены в процентах. При наведении курсора мыши
на столбец гистограммы, соответствующие диапазоны и количество вариантов выводят-
ся в строке статуса.
Например, на рис. 58 4 варианта имеют накопленную нефть в диапазоне [355098,
359290] ст. м3. Варианты, соответствующие этому диапазону подсвечиваются синим в
списке вариантов модели, расположенного слева.

Рис. 58. Автоадаптация. Гистограмма.

6.8. Гистограмма 129


19.1

6.9. Составная диаграмма


Составная диаграмма показывает вклад каждого параметра (или объекта) в целевую
функцию с помощью разных цветов. Задайте целевую функцию (выберите объекты,
параметры и период С вр. шага — До вр. шага). Период времени, за который вычисляется
целевая функция, отмечен красным на временной шкале.
Составная диаграмма может быть разложена на:

• Объекты;

• Компоненты;

• Слагаемые.

Рис. 59. Автоадаптация. Составная диаграмма – Объекты. Режим – Невязки.

Для составной диаграммы можно выбрать один из следующих режимов:

• Невязки.
В данном режиме составная диаграмма показывает вклад невязок по скважинам в
целевую функцию. Невязки вычисляются по формуле:
 2
value(H) − value(C)
∑∑ g
ob j p

– ob j в сумме – множество объектов (скважин или групп);


– p в сумме – множество параметров (дебит нефти и т.д.);
– value(C) – рассчитанное значение;

6.9. Составная диаграмма 130


19.1

– value(H) – историческое значение;


– g – значение ошибки (допустимой невязки по параметру), задаваемая поль-
зователем. Например, если Ошибка выбрана равной 0.05 и Тип ошибки –
Относительная, то S меньше 1 означает, что невязка между историческими и
рассчитанными значениями не превосходит 5%.

• Абсолютный.
В данном режиме составная диаграмма определяет высокодебитные скважины для
подбора весов для целевой функции. Для построения диаграммы используется
следующая формула:
value(C) 2
 
∑∑ g
ob j p

На рис. 59 показан пример составной диаграммы, разложенной на объекты, режим –


невязки. В качестве целевой функции задается настраиваемая целевая функция. Целевая
функция построена по скважинам (объекты), а в качестве параметров выбраны дебит
нефти и воды. Функция вычисляется за подчеркнутый красным период. При нажатии
правой кнопкой мыши на столбец диаграммы, в строке статуса выводятся значение це-
левой функции и номер варианта модели.

Рис. 60. Автоадаптация. Составная диаграмма – Объекты. Режим – Абсолютный.

Используя диаграмму, например, можно оценить для каких скважин у нас есть про-
блемы адаптации и нам нужно сосредоточиться. На рис. 59 видно, что скважины ”PRO-
20” и ”PRO-4” вносят значительный вклад в ЦФ, т.е. являются проблемными. Возмож-
но, для их настройки на историю были выбраны не совсем подходящие переменные или
диапазоны. В таком случае можно попробовать поменять переменные и/или диапазоны.

6.9. Составная диаграмма 131


19.1

Составная диаграмма с режимом Абсолютный на рис. 60 показывает высокоде-


битные скважины – ”PRO-1”, ”PRO-4”, ”PRO-5” и ”PRO-11”. Такие скважины долж-
ны иметь больший вес при расчете целевой функции, чем оставшиеся низкодебитные
скважины.
На рис. 61 показан пример составной диаграммы разложенной на компоненты –
нефть и воду. Диаграмма показывает вклад невязок дебита нефти и воды в целевую
функцию. Нажмите на столбец диаграммы, чтобы увидеть значение для выбранной ком-
поненты и номер варианта модели в строке статуса.

Рис. 61. Автоадаптация. Составная диаграмма – Компоненты.

6.9. Составная диаграмма 132


19.1

6.10. Анализ
Для анализа полученных результатов используются следующие инструменты:

• Диаграмма Парето
• График Торнадо
• Квантили
• Создание фильтра для переменных

6.10.1. Диаграмма Парето


Диаграмма Парето считается по корреляциям. Доступны следующие типы корреляции:
• Корреляция Пирсона;
• Корреляция Спирмена.
Корреляция Пирсона
Корреляция Пирсона устанавливает прямые связи между переменными модели и
параметрами модели (дебит воды, нефти, газа, невязки и т.д.) по следующей формуле:
∑(X − X̄)(Y − Ȳ )
rXY = p
∑(X − X̄)2 ∑(Y − Ȳ )2
Построенные корреляции позволяют оценить, какая переменная сильнее влияет на
параметры модели и целевую функцию. Установите слайдер времени на временной шаг,
на котором вы хотите увидеть результаты.
Чем длиннее прямоугольник, тем ближе значение корреляции между параметрами к
1 (абсолютное значение), а связь между параметрами ближе к линейной зависимости.
Цвет прямоугольника:
• Зеленый цвет — положительные значения корреляции. Увеличение переменной
приводит к увеличению параметра модели;
• Синий цвет — отрицательные значения корреляции. Увеличение переменной при-
водит к уменьшению параметра модели.
Установленные эффективные переменные могут быть использованы в следующих
экспериментах; неэффективные переменные могут быть исключены из рассмотрения.
На рис. 62 показана корреляция переменных модели M_PERM_FIPNUM_1 и
т. д. с параметрами модели. Чтобы отсортировать столбец значений нажмите на
имя параметра. Переменные, значительно влияющие на целевую функцию, бу-
дут расположены в верху столбца. Изменение переменных M_PERM_FIPNUM_2 и
M_PERM_FIPNUM_3 приводит к значительным изменениям накопленной нефти, но
изменение M_PERM_FIPNUM_1 слабо воздействует на изменения накопленной неф-
ти.

6.10. Анализ 133


19.1

Рис. 62. Автоадаптация. Диаграмма Парето по корреляции Пирсона.

Корреляция Спирмена
Корреляция Спирмена определяет степень зависимости двух случайных величин X
и Y на основе анализа получаемых результатов (X1 ,Y1 ), . . . , (Xn ,Yn ). Каждой величине
X и Y присваивается ранг. Ранги значений для величины X расположены по порядку
i = 1, 2, . . . , n. Ранг величины Y Yi соответствует рангу пары (X,Y ), для которой ранг
величины X равен i. Тогда коэффициент корреляции Спирмена вычисляется как:
6 ∑ di2
ρ = 1−
n(n2 − 1)
где di – разность рангов Xi и Yi , i = 1, 2, . . . , n. Значение коэффициента корреляции
меняется от -1 (последовательности рангов полностью противоположны) до +1 (после-
довательности рангов полностью совпадают). Нулевое значение означает, что величины
независимы.
Корреляция Пирсона показывает меру линейности зависимости между величинами:
если коэффициент равен 1 (по абсолютной величине), то зависимость линейная. Кор-
реляция Спирмена же показывает меру монотонности зависимости: если коэффициент
равен 1 (по абсолютной величине), то зависимость монотонная, но не обязательно ли-
нейная.
Установите слайдер времени на временной шаг, на котором вы хотите увидеть резуль-
таты. Чем длиннее прямоугольник, тем ближе значение корреляции между параметрами
к 1 (абсолютное значение), а связь между величинами ближе к монотонной зависимо-
сти.
Цвет прямоугольника:
• Зеленый цвет — положительные значения коэффициента корреляции. Зависимость
между переменной и параметром модели монотонно возрастающая (коэффициент
равен 1);
• Синий цвет — отрицательные значения коэффициента корреляции. Зависимость
между переменной и параметром модели монотонно убывающая (коэффициент
равен -1).
На рис. 63 показана корреляция переменных модели M_PERM_FIPNUM_1 и т. д.
с параметрами модели. Чтобы отсортировать столбец значений по возрастанию или

6.10.1. Диаграмма Парето 134


19.1

Рис. 63. Автоадаптация. Диаграмма Парето по корреляции Спирмена.

убыванию нажмите на имя параметра. Среднее давление не зависит от переменной


M_PERM_FIPNUM_4 (коэффициент корреляции около 0), но Обводненность монотонно
зависит от M_PERM_FIPNUM_4 (коэффициент корреляции около 1).

6.10.2. График Торнадо


График Торнадо может быть построен только для эксперимента Торнадо. Данная диа-
грамма позволяет оценить влияние изменения переменных (уменьшение и увеличение
значений переменной) на изменение функций (невязок по дебитам, разниц по накоплен-
ным параметрам, целевой функции). Пример графика приведен на рис. 64.

Чем длиннее соответствующий прямоугольник гистограммы, тем больше зависи-


мость между изменением переменной и изменением функции.
Цвет прямоугольника:
• Синий цвет — значение переменной уменьшается;

• Зеленый цвет — значение переменной возрастает.


Направление гистограммы:
• Влево — значение функции уменьшается;

• Вправо — значение функции возрастает.


Пример построения для параметра Разница накопленной добычи нефти.
1. Разница считается по формуле:

(|TotalValue(H) − TotalValue(calc)|)L − (|TotalValue(H) − TotalValue(calc)|)C

где:

• H – историческое значение Накопленной добычи нефти;


• calc – рассчитанное значение Накопленной добычи нефти;
• L – разница на последнем временном шаге;

6.10.2. График Торнадо 135


19.1

Рис. 64. График Торнадо.

• C – разница на текущем временном шаге (где стоит слайдер времени).

2. Если необходимо проанализировать данные за весь период расчета, то График


Торнадо необходимо просматривать при положении слайдера времени на нулевом
шаге.

3. Далее выбирается, в каком эксперименте значение переменной максимально и ми-


нимально.

4. Для этих экспериментов оценивается, увеличивается или уменьшается Разница


накопленной добычи нефти. Процент считается относительно эксперимента 0000.

5. Уменьшение переменной — синий цвет, увеличение — зеленый. Уменьшение раз-


ницы — левая сторона, увеличение — правая.

6. В случае, если получается, что гистограмма направлена в одну и ту же сторо-


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

6.10.3. Квантили
Для вариантов модели, посчитанных с помощью метода Латинский гиперкуб и для про-
гнозных моделей, могут быть вычислены квантили.
Диапазон неопределенности получаемых параметров (например, накопленная нефть,
запасы и т.д.) может оцениваться с помощью вероятностного распределения. В случае
если диапазон неопределенности представлен с помощью вероятностного распределе-
ния, то должны быть предусмотрены нижняя, лучшая и верхняя оценки значений вы-
бранного параметра такие, что:

• P90 – нижняя оценка, т.е. величина, которую с вероятностью 90% будут превышать
значения выбранного параметра;

6.10.3. Квантили 136


19.1

Рис. 65. Квантили.

• P50 – лучшая оценка, т.е. величина, которую с вероятностью 50% будут превышать
значения выбранного параметра;

• P10 – верхняя оценка, т.е. величина, которую с вероятностью 10% будут превышать
значения выбранного параметра.

Таким образом, квантили для любого параметра удовлетворяют условию:

P10 ≥ P50 ≥ P90

Квантили считаются для каждого параметра отдельно. Для множества значений вы-
бранного параметра, полученных в вариантах численного эксперимента, определяются
значения параметра, соответствующие нижней P90, лучшей P50 и верхней оценки P10.
Значения квантилей рассчитываются на каждом временном шаге: чтобы увидеть их,
передвиньте слайдер времени на нужный временной шаг.
Квантилям, посчитанным для разных параметров, могут соответствовать разные ва-
рианты модели. Например, квантилю P10 для накопленной нефти соотвествует третий
вариант модели, а квантилю P10 для накопленной воды – первый вариант модели. Для
того чтобы перейти к варианту для выбранного квантиля, нажмите правой кнопкой мы-
ши на значение квантиля и выберите Перейти к модели для данного квантиля. Соот-
ветствующая модель будет подсвечена в дереве вариантов.

Квантили P90, P50 и P10, соответствующие вариантам модели, визуализируются на


вкладке Cdf с помощью закрашенных ромбов.
Формула расчета квантилей. Квантили вычисляются для успешно рассчитанных
вариантов одного эксперимента в предположении, что эти варианты равновероятны.

6.10.3. Квантили 137


19.1

В упорядоченном по возрастанию наборе из N значений параметра Vi , где i =


1, ..., N , номер i значения квантиля Pα (т.е. Pα = Vi ) равен ⌊(1 − α)(N + 1)⌋ (данный
знак скобок обозначает округление до целого значения (снизу) данной величины) для
N N
α ∈ (0, (N+1) ]. Для α = 0 номер i = N , для α > (N+1) номер i = 1.
То есть, предположим, у нас есть N вариантов Латинского гиперкуба, и мы хотим по-
строить α -квантиль добычи нефти, где α – число от 0 до 1. Для этого сначала варианты
сортируются по значению добычи нефти, а потом вычисляется номер нужного варианта
по формуле ⌊(1 − α)(N + 1)⌋. В итоге мы получаем номер варианта i (i = 1, ..., N ), зна-
чение которого соответствует α -квантилю для данного параметра по данному набору
вариантов (т.е. Pα = Vi ).
В графическом интерфейсе α -квантиль представлен в процентах, т.е. α × 100%.
Добавление пользовательского квантиля.
По умолчанию отображается 3 вида квантилей: P10, P50 и P90. Для добавления поль-
зовательского квантиля нужно нажать Добавить квантиль и ввести значение. Значение
вводится в процентах (от 0 до 100). Например, для создания квантиля P75 ввести значе-
ние α равное 75.

6.10.4. Создание фильтра для переменных


На вкладке Анализ может быть создан фильтр для переменных модели, который далее
используется при создании эксперимента (см. Применение фильтра для переменных).
Фильтр позволяет исключить переменные, слабо влияющие на модель.
Выделите переменные и нажмите на них правой кнопкой мыши в появившемся меню
выберите Создать фильтр для переменных (см. рис. 66). Задайте имя фильтра. Фильтр
будет создан.

Рис. 66. Создать фильтр для переменных.

6.10.4. Создание фильтра для переменных 138


19.1

6.11. Mds
Mds (multi-dimensional scaling) – многомерное масштабирование. Метод визуализации
данных с помощью расположения точек, соответствующих изучаемым объектам, в про-
странстве меньшей размерности чем пространство признаков объектов [3, 4]. При этом
точки размещаются так, чтобы попарные расстояния между ними в новом пространстве
как можно меньше отличались от расстояний в пространстве признаков изучаемых объ-
ектов.

Используя Mds, можно оценить:

• насколько хорошо мы покрываем пространство поиска;

• насколько близки по значению переменных варианты модели друг к другу.

Mds подход используется для наглядной визуализации результатов работы авто-


адаптации. Результатом работы автоадаптации является набор векторов переменных
M = {mm1 , . . . , m K } (где K – число вариантов модели). Для каждого варианта модели,
с помощью выбранного алгоритма, генерируется вектор переменных m i , длина которо-
го равна числу переменных N , заданных в проекте адаптации модели. Преимуществом
отображения результатов с помощью многомерного масштабирования по сравнению с
другими подходами (например, кроссплотом) является то, что данный подход позволяет
оценить близость расположения точек между собой в N -пространстве.
Пусть с помощью адаптации получен набор векторов переменных M = {m m1 , . . . , m K }
для K вариантов модели, т.е. i вариант модели имеет вектор переменных m i . Размер
вектора равен числу переменных N , заданных в проекте адаптации модели. Рассмот-
рим N -мерное пространстве, в котором каждый объект является вариантом модели с
координатами, заданными вектором переменных варианта. Попарные расстояния между
точками mi и m j в N -мерном пространстве вычисляются как:
s
N
mi , m j ) =
di j = d(m ∑ (msi − msj )2
s=1

Пусть набор P = {pp1 , . . . , p K } — координаты точек проекции объектов M =


{m
m1 , . . . , m K } на двумерную плоскость. Тогда, попарные расстояния между проекция-
ми p i и p j вычисляется как:
q
dbi j = (p2i − p2j )2
Таким образом, цель алгоритма Mds — найти такой набор координат проекций P, для
которого достигается минимум функции:
 2
1/2
∑ (di j − dc
i j)
 i< j
F =

di2j


i< j

6.11. Mds 139


19.1

Другими словами алгоритм Mds проецирует каждый объект N -мерного пространства


на двумерную плоскость таким образом, чтобы расстояния между точками в N -мерном
пространстве как можно лучше соответствовали расстояниям между их проекциями на
двумерную плоскость.
Пример проекции набора точек (набора векторов переменных) алгоритмом Mds на
плоскость показана на рис. 67.

Рис. 67. Mds–многомерное масштабирование.

6.11.1. Взвешенный алгоритм Mds


Взвешенное многомерное масштабирование позволяет задать вес каждой переменной,
который будет учитываться при вычислении попарных расстояний между точкам. Та-
ким образом, изменения переменных, имеющих небольшой вес, будут слабо влиять на
попарные расстояние между точками и на картину mds в целом.
По умолчанию все переменные имеют одинаковый вес. Для того чтобы изменить вес
переменной нажмите на кнопку и в появившемся окне задайте вес для выбранной

!
переменной, дважды щелкнув на величину веса (см. рис. 68).
Разные веса для переменных могут быть также заданы при разбиении
множества вариантов на кластеры (см. Кластеризация).

6.11.1. Взвешенный алгоритм Mds 140


19.1

Рис. 68. Задание весов в алгоритме Mds.

6.11.1. Взвешенный алгоритм Mds 141


19.1

6.12. Cdf
На данной вкладке визуализируется график накопленной функции распределения (Cdf
– Cumulative distribution function) для выбранного параметра (накопленная нефть, вода
и т.д.) и вариантов модели. По горизонтальной оси графика откладываются значения
выбранного параметра. Значения Cdf функции по вертикальной оси изменяются от 0 до
1. Каждому варианту модели соотвествует точка (X,Y ) на графике Cdf функции, которая
показывает что с вероятностью Y значение выбранного параметра больше или равно X .
На рисунке рис. 69 видно, что с вероятностью Y=0.906 накопленная нефть больше чем
X =294.86 тыс.ст.м 3 .
Cdf функция считается в предположении о равновероятном распределении точек
(X,Y ) – вариантов модели, т.е. точки графика функции расположены равномерно по
вертикальной оси.
Чтобы увидеть квантили P10, P50 и P90 на графике Cdf функции установите галочку
для опции Показать квантили.

Рис. 69. Cdf функция.

Квантили P10, P50 и P90, показанные на графике Cdf функции в виде


пустых ромбов (см. рис. 69), могут не совпадать с точками, соответ-
ствующими вариантам моделей. Тогда вариант модели, реализующий

!
данный квантиль, будет расположен левее (закрашенный ромб), а зна-
чение параметра модели для квантиля соотвествует значению, расчи-
танному в таблице квантилей на вкладке Анализ.
На рис. 69 квантили P10 и P90 не совпадают с вариантами модели.
Для P90 значение накопленной нефти равно 295.59 тыс.ст.м3 . Но для
варианта модели (левее), соответствующего квантилю P90, значение
накопленной нефти равно 294.86 тыс.ст.м3 (это же значение указано
для P90 в таблице квантилей на вкладке Анализ).

6.12. Cdf 142


19.1

6.13. Прокси модель


Если полный расчет варианта модели является затратным по времени и вычислительным
ресурсам, то использование Прокси модели позволяет очень быстро построить произ-
вольное количество вариантов модели с помощью метода Монте–Карло. В графическом
интерфейсе доступно построение и вывод пользователю уравнения квадратичной Прок-
си модели, которая может быть далее использована для создания вариантов модели с
помощью метода Монте–Карло (см. 6.13.3). Прокси модель строит квадратичное при-
ближение выбранного параметра по выбранным вариантам модели.
Пусть задана некоторая функция F , определённая в каждой точке множестве D ⊂
n
R . Обозначим исходные переменные как x1 , . . . xn . Введём новые переменные z по
следующему правилу:

z1 = x1 , z2 = x2 , . . . zn = xn ,
zn+1 = x1 · x1 , zn+2 = x1 · x2 , ... zm = xn · xn , (6.1)
2
m = (n + n)/2
Строиться квадратичный многочлен P по переменным xi , содержащий n + 1 моном.
Будем рассматривать его как линейный многочлен от переменных z j . Для этого снача-
ла вычислим для каждой переменной z j коэффициент корреляции Пирсона с исходной
функцией F , используя данные о всех имеющихся точках. Выберем n переменных с са-
мым большим коэффициентом корреляции и переобозначим их как z1 , . . . zn . В качестве
первого монома всегда выступает свободный член. Тогда приближающий многочлен
может быть записан в виде:
n
P(z) = ∑ pi · zi , z0 = 1 (6.2)
i=0

где pi i = (0, . . . , n) – вектор коэффициентов многочлена.


Коэффициенты многочлена pi находятся с помощью метода наименьших квадратов:

(F − P(z1 , . . . zn ))2 → min (6.3)

6.13.1. Построение формулы Прокси модели


Для построения формулы Прокси модели выполните следующие шаги (см. рис. 70):
• Выберите варианты моделей в дереве моделей;

• Нажмите правой кнопкой мыши на выбранные варианты и в появившемся меню


выберите Создать Прокси модель с выбранных вариантов;

• В диалоге Создать Прокси модель необходимо выбрать объекты (в верхнем окне):


Группы, Скважины, Месторождения и т.д. и соответствующие параметры в ниж-
нем окне;

• Задайте временной шаг, для которого будет построена Прокси модель;

6.13. Прокси модель 143


19.1

• Задайте величину Порогового коэфф. корреляции. Все коэффициенты корреля-


ции Пирсона меньше порогового значения будут проигнорированы при построе-
нии многочлена;
• Нажмите на кнопку Добавить запись;
• Параметры Прокси модели появятся в окне справа.

Рис. 70. Окно Создать Прокси модель.

На рис. 71 показана созданная по всем вариантам модели Прокси модель. В верхнем


левом окне указывается имя Прокси модели, а также объект, параметр и временной
шаг, для которых она была построена. В нижнем окне приведен полученный многочлен,
аппроксимирующий заданную функцию (в данном примере – дебит нефти).
Реальные значения дебита нефти откладываются по оси абсцисс, а по оси ординат
– аппроксимированные значения, т.е. значения дебита нефти, вычисленные по формуле
для Прокси модели с переменными, соответствующими варианту модели. Серая ли-
ния соотвествует графику y = x . Считается, что варианты модели, сгруппированные
вдоль линии (например, вариант 5), наилучшим образом приближаются созданным мно-
гочленом. Варианты, расположенные далеко от нее (например, варианты 1 и 8), плохо
аппроксимируются многочленом.
Качество совпадения значений, предсказанных Прокси моделью, с рассчитанными
значениями оценивается с помощью коэффициента R2 (см. раздел Таблица коэффи-
циентов R2). Чем ближе коэффициент R2 к 1, тем лучше Прокси модель приближает
рассчитанные значения. В примере полученный R2 равен 0.808.

6.13.1. Построение формулы Прокси модели 144


19.1

Рис. 71. Прокси модель.

6.13.2. Использование нейронных сетей


Искусственная нейронная сеть – математическая модель, построенная по подобию био-
логических нейронных сетей – сетей нервных клеток живого организма. Нейронная сеть
не является алгоритмом, а скорее структурой для множества различных алгоритмов ма-
шинного обучения, работающих вместе и обрабатывающие сложных входные данные
[8, 9]. Аналогично системе нейронов в мозге, модель искусственной нейронной сети
представляет собой систему соединённых и взаимодействующих между собой простых
процессоров – искусственных нейронов (см. рис. 72). Каждое соединение, подобно си-
напсам биологического мозга, может передавать информацию, сигнал, от одного искус-
ственного нейрона к другому. Искусственный нейрон, получая сигнал, обрабатывает его
и затем посылает сигнал другим нейронам, связанным с ним. В стандартной сети сиг-
нал в соединениях между нейронами – вещественное число. Каждый нейрон вычисляет
взвешенную сумму всех элементов входного вектора, а затем к результату применяется
функция активации (полулинейная или сигмоидальная функция). Искусственные ней-
роны могут иметь пороговое значение: сигнал будет послан, если суммарный сигнал
превысит это пороговое значение. Соединения между искусственными нейронами на-
зываются ребрами. Обычно искусственные нейроны расположены слоями. Разные слои
могут выполнять разные преобразования над входящими в них данными. Сигналы пере-
мещаются от первого слоя (входной слой) к последнему слою (выходной слой), проходя
через внутренние слои.
Нейронные сети не программируются в привычном смысле этого слова, они обу-
чаются, выполняя задачи на обучающем множестве. Искусственные нейроны и ребра
имеют веса, которые меняются в процессе обучения сети. Вес уменьшает или увели-
чивает силу сигнала на соединениях. Обучение заключается в нахождении весов на
соединениях между нейронами. Глубокое обучение использует множество скрытых сло-
ев искусственной нейронной сети. Данный подход моделирует работу человеческого

6.13.2. Использование нейронных сетей 145


19.1

мозга при преобразовании света и звука в зрение и слух.


В процессе обучения нейронная сеть способна выявлять сложные зависимости меж-
ду входными данными и выходными, а также выполнять обобщение. Это значит, что в
случае успешного обучения сеть сможет вернуть верный результат на основании дан-
ных, которые отсутствовали в обучающем множестве, а также неполных и/или «зашум-
ленных», частично искажённых данных.

Рис. 72. Схема искусственной нейронной сети.

Для построения Прокси модели с помощью нейронных сетей установите галочку


Нейронная Прокси. Схема нейронной сети показана на рис. 72. Входными данны-
ми для нейроной сети являются переменные модели (x1 , x2 , ..., xn , n – число пере-
менных) для каждого из вариантов модели. Переменные выбираются в окне Создать
прокси модель (см. рис. 70). Число нейронов в скрытых слоях нейроной сети зада-
ются опцией Количество нейронов в скрытом слое. Для каждого варианта модели
результатом работы сети является значение параметра в выбранный момент времени.
Обучение нейронной сети происходит посредством корректировки весов соединений
(1) (m)
(w11 , ..., w(1)nn , ..., w11 , ..., w(m)nn , m – число скрытых слоев нейронной сети). Веса се-
ти изменяют до тех пор, пока для всех выбранных вариантов модели не будет получен
приемлемый уровень отклонения выходного значения параметра (y на рис. 72) от его
рассчитанного значения или не будет достигнуто заданное Количество эпох обучения.

!
Количество нейронов в скрытом слое и эпох обучения подбираются эм-
пирически. Количество нейронов не должно быть очень большим, иначе
сеть будет хорошо работать только на обучающем множестве или
очень маленьким, иначе сеть будет плохо обучаться.
На рис. 73 показана Прокси модель, полученная с помощью искусственной нейрон-
ной сети. Количество нейронов в скрытом слое было выбрано равным 20, а кол-во эпох
обучения – 100. Можно видеть, что качество модели очень высокое: R2 равно 0.999.

6.13.2. Использование нейронных сетей 146


19.1

Рис. 73. Прокси модель, полученная с помощью искусственной нейронной сети.

6.13.3. Анализ методом Монте–Карло


Полученная квадратичная Прокси модель может быть использована для анализа методом
Монте–Карло. Для анализа расчитываются множество вариантов модели по выбранно-
му параметру с помощью полученной формулы, подставляя в нее переменные модели.
Распределение значений переменных задается с помощью метода Монте–Карло и может
быть равномерным, нормальным, логнормальным и дискретным (см. раздел 3.5). Коли-
чество вариантов, распределение значений переменных и т.д. задается пользователем
(см. рис. 74) при запуске метода Монте–Карло.

Рис. 74. Настройки метода Монте–Карло для Прокси модели.

Для запуска расчета нажмите на кнопку Запустить Монте–Карло (см. рис. 71) и
задайте необходимые параметры. Вкладка Результаты Монте–Карло будет создана ав-
томатически. На этой вкладке для дальнейшего анализа полученных вариантов модели
доступны Таблица результатов, Кроссплот, Гистограмма, Анализ и Cdf.

6.13.3. Анализ методом Монте–Карло 147


19.1

Рис. 75. Кроссплот: дебит нефти (для разных вариантов модели) – Ось Y и переменная
M_PERM_FIPNUM_2 по оси X.

6.14. Создание групп вариантов модели


Для работы только с определенным набором вариантов модели существует возможность
создания групп вариантов модели. Кроме того, автоматически создаются набор групп
Experiments (Эксперименты), в который группируются варианты по сделанным экспе-
риментам (см. раздел Методы планирования экспериментов), и набор групп Variants
(Варианты), который содержит все варианты модели.
Для создания произвольного набора групп вариантов выберите варианты модели в
дереве вариантов и нажмите на них правой кнопкой мыши. В появившемся меню вы-
берите Добавить варианты в группу. Создать новую группу вариантов. Задайте имя
группы в появившемся окне. Для редактирования групп нажмите на кнопку Мене-
джер групп или в меню Добавить варианты в группу выберите Менеджер групп.
Вариантам модели, вошедшим в одну группу, присваивается одинаковый цвет. На-
жмите кнопку Раскрасить, чтобы раскрасить варианты модели по группам в дереве
вариантов, на вкладках Mds, Графики и Кроссплот. Варианты, не вошедшие в группы,
будут окрашены в серый цвет. Для группы Variants существует возможность раскраски
вариантов по градиенту выбранного параметра (дебит нефти, воды и т.д.), как показано
на рис. 76. В окне Менеджер групп выберите группу Variants и нажмите на кнопку
Создать градиент и выберите параметр, по которому будет построен градиент (см.
рис. 77).
Для создаваемых групп в окне Менеджер групп можно:

• Задать цвет вариантов модели, входящих в группу, нажав на цветной прямо-


угольник, соответствующий группе. Чтобы вернуться к заданным по умолчанию
цветам нажмите на кнопку Установить цвета по умолчанию;

• Добавить новую группу, нажав на кнопку Добавить новую группу;

6.14. Создание групп вариантов модели 148


19.1

Рис. 76. Раскрашивание вариантов модели по градиенту дебита нефти

• Добавить варианты в группу. Для этого выберите в дереве вариантов модели


варианты. Откройте диалог Менеджер групп, установите галочку для группы, в
которую нужно добавить выбранные варианты, а затем нажмите Добавить вари-
анты в эту группу. Выбранные в дереве варианты можно также добавить в группу,
нажав на них правой кнопкой мыши и в появившемся меню выбрав Добавить ва-
рианты в группу и группу, в которую нужно добавить эти варианты.
Кроме того, варианты модели можно перемещать между группами. Выберите ва-
рианты модели в группе или прочих данных и нажмите на них правой кнопкой
мыши. В появившемся меню укажите в какую группу переместить выбранные ва-
рианты. Чтобы удалить выбранные варианты из группы выберите в меню Удалить
варианты из группы (см. рис. 78).

Варианты модели, входящие в группу, визуализируются заданным (в Менеджер


групп) цветом на вкладках Mds, Графики или Кроссплот. Для настройки цвета или ре-
дактирования группы на этих вкладках нажмите на кнопку Настройки (см. рис. 79).
В появившемся диалоговом окне нажмите на кнопку Выбрать способ раскрашивания,
а затем в окне Менеджер групп выберите группу для редактирования или настройки
цвета. На рис. 79 показана 2 группы вариантов модели (красные точки –GroupSet[1] и
зеленые точки – GroupSet[2]), остальные варианты модели показаны серым.
При переключении на вкладку Графики можно аналогичным образом настроить (ис-
пользуя Настройки) раскрашивание графиков, созданной группы, в один цвет. На
рис. 80 красным показаны графики группы GroupSet[1], зеленым – GroupSet[2], а серым
– все остальные.

6.14. Создание групп вариантов модели 149


19.1

Рис. 77. Менеджер групп. Добавить градиент

Рис. 78. Менеджер групп. Созданные группы

6.14. Создание групп вариантов модели 150


19.1

Рис. 79. Mds. Группировка вариантов модели.

Рис. 80. Графики. Группировка вариантов модели.

6.14. Создание групп вариантов модели 151


19.1

6.15. Таблица коэффициентов R2


Для анализа качества адаптации модели по ее объектам (например, скважинам, место-
рождению и т.д.) и параметрам (например, дебиту нефти, воды и т.д.) строится таблица
коэффициентов R2.
В заголовках таблицы по столбцам задаются параметры, по строкам – объекты. Для
каждой пары объект (O) – параметр (P) вычисляется коэффициент R2 следующим об-
разом. Для выбранного объекта и параметра строится множество точек (Pk (H), Pk (C)),
k = 1, ..., N на плоскости, где Pk (H) – историческое значение данного параметр и Pk (C)
– рассчитанное значение данного параметр на k−ом временном шаге, N – число вре-
менных шагов. Для построенного множества точек вычисляется тренд Tk с помощью
метода наименьших квадратов. Затем рассчитываются коэффициент R2 по формуле:

∑(Pk (C) − Tk )2
R2 = 1 −
∑(Pk (C) − ∑ Pk (C))2
Данный коэффициент показывает, насколько хорошо рассчитанные данные Pk (C) ло-
жатся на тренд. Если коэффициент R2 равен 1, то рассчитанные данные совпадают
с историческими. Если коэффициент близок к нулю, то исторические и рассчитанные
сильно различаются.
В качестве объектов в таблице могут быть заданы:

• Скважины;

• Месторождение;

• Группы.

Рис. 81. Таблица R2.

6.15. Таблица коэффициентов R2 152


19.1

Объекты и параметры, показываемые в таблице, могут добавляться и удаляться с


помощью кнопки Объекты и Параметры (см. рис. 81). В таблице можно задать ниж-
нюю и верхнюю границу качества адаптации. Если R2 меньше нижней границы, то
качество адаптации считается не удовлетворительным и подсвечивается красным. Если
R2 больше верхней границы, то качество адаптации хорошее и ячейка таблицы подсве-
чивается зеленым. Промежуточные значения R2 подсвечиваются желтым. Кроме того,
данная таблица может строиться как для выбранного варианта модели, так и для груп-
пы вариантов. Для этого выберите вариант(ы) в списке вариантов модели и нажмите на
кнопку R2 таблица.
Для удобства работы с таблицей можно создать (удалить) шаблон, используя кнопку
Добавить новый шаблон (Удалить шаблон), в котором сохраняются все выбранные
объекты и параметры для таблицы.
Пример таблицы для 8-го варианта модели показан на рис. 81. На рисунке видно,
что расчитанный данные по дебиту нефти для скважины ’PRO-15’ совпадают с истори-
ческими (R2 коэффициент равен 0.999), однако сильно отличаются по дебиту воды (R2
коэффициент равен 0.072).

6.15. Таблица коэффициентов R2 153


19.1

6.16. Кластеризация
Кластеризация – разбиение множества объектов на сравнительно однородные группы.
Позволяет выделить группы вариантов (кластеры), близкие по значениям переменных.
В дальнейшем из кластера можно взять по представителю для расчета прогноза.
Пусть с помощью адаптации получен набор векторов переменных {m m1 , . . . , m K } для
вариантов модели, т.е. i-ый вариант модели имеет вектор переменных mi . Длина век-
тора равна числу переменных N , заданных в проекте адаптации модели. Рассмотрим
N-мерное пространство RN , в котором каждый объект является вариантом модели, а
координаты объекта – вектор переменных данного варианта.
Для кластеризации набора точек M = {m m1 , . . . , m K } в пространстве RN на число
кластеров L применяется алгоритм K–средних (K–means) [5, 6]. Действие алгоритма
таково, что он стремится минимизировать суммарное квадратичное отклонение точек
кластеров от центров этих кластеров:
L
V=∑ ∑ m j − µ i )2
(m
i=1 m j ∈Ki

где Ki — получившиеся кластеры, µ i — центры масс системы точек (векторов) m j ∈ Ki ,


i = 1, ..., L .
На каждой итерации алгоритма вычисляется новый центр масс µ i для каждого кла-
стера Ki , i = 1, ..., L , полученного на предыдущем шаге:
1
µi = mj
|Ki | m ∑
j ∈Ki

µ i = {µi1 , . . . , µiN }
где |Ki | – количество точек входящих в кластер Ki . Затем имеющийся набор точек M
разбивается на кластеры вновь так, что расстояние от точки до нового центра класте-
ра было бы минимальным. Т.е. для каждой точки m j из набор точек M вычисляется
расстояния di до всех центров:
s
N
µ i, m j ) =
di = d(µ ∑ (µis − msj )2, i = 1, ..., L
s=1

Полагается, что точка будет входить в кластер K p , если расстояние от нее до центра
масс этого кластера минимально. Из полученных расстояний выбирается минимальное
dmin = d p , тогда точка входит в кластер K p .
Алгоритм завершается, если центры масс кластеров не изменяются. Это происхо-
дит за конечное число итераций, так как количество возможных разбиений конечного
множества конечно, а на каждом шаге суммарное квадратичное отклонение V не увели-
чивается, поэтому зацикливание невозможно. Начальные центры кластеров выбираются
из соображений максимизации расстояния между ними.

6.16. Кластеризация 154


19.1

7. Переход от задачи адаптации к прогнозу


Разные варианты адаптации модели могут приводить к различным значениям накоп-
ленных показателей на прогнозе, поэтому рассчитывать прогноз нужно для нескольких
вариантов модели с хорошим качеством адаптации.
Для перехода от адаптации к прогнозу, из полученных вариантов адаптации истории,
выбираем набор лучших вариантов (например, первые 20 вариантов). Проектируем эти
точки алгоритмом Mds на плоскость.

Пример создания прогноза приведен в учебном курсе AHM1.8. Пе-


реход от задачи адаптации к расчету прогноза.

Если образуются кластеры (группы точек), как показано на рис. 82, то это означает,
что значения переменных для вариантов, входящих в кластер, близки. Таким образом,
чтобы создать прогноз модели достаточно взять только по одному варианту (предста-
вителю) из имеющихся кластеров. В отличии от адаптации, в данном случае, ищется
максимум целевой функции на прогнозе.

Рис. 82. Кластеризация множества вариантов для создания прогноза.

Преимуществом такого подхода является, то что, во-первых, такой подход позволяет


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

7. Переход от задачи адаптации к прогнозу 155


19.1

7.1. Создание прогноза в ГУИ


Выберите набор лучших вариантов адаптации истории и выделите их. Нажмите на вы-
бранные варианты правой кнопкой мыши и выберите из появившегося меню Создать
пользовательские прогнозы с выбранных вариантов. В окне загруженной базовой
модели выберите меню Документы. Настроить прогноз из проекта адаптации... В от-
крывшемся окне доступны следующие параметры для настройки прогноза (см. рис. 83):
• Основные настройки:

– Прогноз с вр.шага;
– Длина шага – (один год, шесть месяцев, три месяца, месяц, неделя, день);
– Длина прогноза – (один год, 5 лет, 15 лет, Пользовательский).

• Параметры скважин.

• Загрузить пользовательский Schedule прогноза.

Рис. 83. Окно настройки параметров прогноза.

Доступны три возможности создания прогноза:

7.1. Создание прогноза в ГУИ 156


19.1

• NFA (No Further Action) сценарий;

• Загрузка пользовательского schedule для создания прогноза;

• Загрузка пользовательского schedule прогноза с переменными.

7.1. Создание прогноза в ГУИ 157


19.1

7.1.1. NFA (No Further Action) сценарий


В данном сценарии все скважины находятся на контроле по забойному давлению с
последнего шага (см. рис. 83). В диалоге Создать прогноз галочка установлена для
Забойного давления по умолчанию. Можно выбрать Длину шага и Длину прогноза.
Schedule файл создается автоматически.
Далее необходимо пересчитать выбранные модели с другими настройками записи ре-
зультатов (по умолчанию на диск сохраняются только данные по скважинам, а для того
чтобы запустить расчет прогноза, нужны также свойства сетки (давление, насыщенно-
сти и т.д.)). На вкладке Расчеты прогнозы будут в очереди и расчет начнется, когда
соответствующий базовый вариант будет пересчитан с новыми настройками записи ре-
зультатов. На рис. 84 показан диапазон изменения накопленной нефти для выбранных
вариантов в будущем.

Рис. 84. Прогноз накопленной нефти на 15 лет.

7.1.1. NFA (No Further Action) сценарий 158


19.1

7.1.2. Загрузка пользовательского schedule для создания прогноза


Прогноз может быть также загружен как пользовательский schedule файл. Для этого в
диалоге Создать прогноз нажмите на кнопку Загрузить пользовательский Schedule
прогноза и выберите файл. В примере schedule файла (см. рис. 85) задана новая скважи-
на ”PRO-N” и для всех скважин задан контроль по забойному давлению (WCONPROD,
см. 12.19.42). Необходимо задать также даты прогноза (DATES, см. 12.19.124), которые
будут использоваться вместо создаваемых автоматически.

Рис. 85. Пример пользовательского schedule файла.

Далее необходимо пересчитать выбранные модели с другими настройками записи


результатов (по умолчанию на диск сохраняются только данные по скважинам, а для
того чтобы запустить расчет прогноза, нужны также свойства сетки (давление, насы-
щенности и т.д.)). На вкладке Расчеты прогнозы будут в очереди и расчет начнется,
когда соответствующий базовый вариант будет пересчитан с новыми настройками запи-
си результатов.
На рис. 86 показан диапазон изменения накопленной нефти для скважины ”PRO-
N” в будущем. Разные варианты адаптации дают разные прогнозные показатели для
скважины”PRO-N”.

7.1.2. Загрузка пользовательского schedule для создания прогноза 159


19.1

Рис. 86. Прогнозные значения накопл. нефти для скважины”PRO-N”.

7.1.2. Загрузка пользовательского schedule для создания прогноза 160


19.1

7.1.3. Загрузка пользовательского schedule прогноза с переменными


Прогноз может быть загружен как пользовательский schedule файл с переменными,
определяющими что будет происходить на прогнозе. Например, изменение положения
траекторий скважин, контролей по скважинам, и т.д. В schedule файле с помощью клю-
чевого слова DEFINES (см. 12.1.24) задаются переменные и диапазоны их изменений,
а также другие необходимые слова (например, WELSPECS (см. 12.19.3), WCONPROD
(см. 12.19.42) и т.д.). Необходимо задать также даты прогноза для событий (ключе-
вое слово DATES, см. 12.19.124), которые будут использоваться вместо создаваемых
автоматически.

Рис. 87. Пример пользовательского schedule файла с переменными.

В примере schedule файла (см. рис. 87) задана новая скважина ”PRO-N” и для всех
скважин определен контроль по забойному давлению (WCONPROD, см. 12.19.42). В
ключевом слове DEFINES (см. 12.1.24) заданы 2 переменные для прогноза: BHP1 и
BHPN – забойное давления для скважины ”PRO-1” и для новой скважины ”PRO-N”.

7.1.3. Загрузка пользовательского schedule прогноза с переменными 161


19.1

Если было выбрано Создать эксперимент прогнозов с выбранных вариантов, то


для каждого выбранного варианта адаптации посчитается несколько вариантов прогно-
за. Число прогнозов для варианта адаптации определяется выбранным алгоритмом (см.
рис. 88).

Рис. 88. Выбор эксперимента прогнозов с выбранных вариантов.

Далее необходимо пересчитать выбранные модели с другими настройками записи


результатов (по умолчанию на диск сохраняются только данные по скважинам, а для
того чтобы запустить расчет прогноза, нужны также свойства сетки (давление, насы-
щенности и т.д.)). На вкладке Расчеты прогнозы будут в очереди и расчет начнется,
когда соответствующий базовый вариант будет пересчитан с новыми настройками запи-
си результатов.
В примере, показанном на рис. 88, выбран эксперимент Торнадо. Для каждого вари-
анта адаптации посчиталось пять прогнозных вариантов (см. рис. 89).

7.1.3. Загрузка пользовательского schedule прогноза с переменными 162


19.1

Рис. 89. Группа прогнозов для выбранных вариантов.

7.1.3. Загрузка пользовательского schedule прогноза с переменными 163


19.1

8. Скрипты построения модели (Workflows)


Все Дизайнеры tNavigator поддерживают графы моделирования (workflows) на языке
Python. Это позволяет пользователям записывать и автоматически воспроизводить по-
следовательность действий для работы с моделью: загрузка данных, построение геоло-
гической модели, анализ результатов, адаптация и анализ неопределенностей. Workflow
могут быть также использованы для интеграции разных модулей tNavigator, запуска
сторонних скриптов и использования стороннего ПО, например Excel™.
Например, может быть создано пользовательское workflow пошагового построения
геологической модели в Дизайнере Геологии, включающее учет неопределенности сей-
смических данных, возможность «подтянуть» трендовый горизонт к маркерам, создание
сетки, ремасштабирование (upscaling), интерполяция методом SGS, инициализация гид-
родинамической модели и задание переменных. Таким образом, полный цикл адаптации
и анализа неопределенностей может быть запущен через workflow и обеспечит анализ
чувствительности изменения результатов расчета в зависимости от изменения исходных
геологических и гидродинамических параметров модели.

Примеры работы с workflow приведены в учебных курсах:

• GDAHM1.1. How To Use Integrated Workflow AHM (Workflow


и Интегрированная автоадаптация).

• GDAHM1.2. How To Use Integrated Uncertainty (Интегриро-


ванный анализ неопределенностей).

8.1. Редактирование workflow


Проект может содержать несколько workflow. Они хранятся как скрипты *.py в под-
директории Workflows в директории проекта, и могут быть загружены в другой про-
ект (см. Загрузить workflow ниже). Редактировать их вручную не рекомендуется. Если
Вы всё же намереваетесь сделать это на свой страх и риск, не удаляйте комментарии
#region...#endregion. Они важны для препроцессинга скриптов.
Редактирование workflow производится в окне Расчёты и Workflows, которое от-
крывается либо из верхнего меню (Файл → Workflows), либо клавиатурной комбина-
цией Alt+W.
На верхней панели окна находится интерфейс для работы с workflow, в том числе
следующие элементы:
• Выпадающий список позволяет выбрать workflow из числа содержащихся в проекте.

• Добавить создаёт новый, пустой объект workflow.

• Удалить удаляет текущее workflow, если их в проекте больше одного (иначе


кнопка недоступна).

8. Скрипты построения модели (Workflows) 164


19.1

• Создать копию копирует текущее workflow.

• Переименовать переименовывает текущее workflow.

• Загрузить workflow (справа) позволяет прочитать workflow из файла.

В левой части окна перечислены все имеющиеся операции.


Список операций разбит на следующие группы:

• Утилиты — операции общего назначения, в том числе:

◦ Печать лог отправляет сообщение в лог-файл.


◦ Добавить код вручную позволяет выполнить произвольный код, в том числе
другие workflow (выберите Workflows на правой нижней панели).

• Целевая функция создаёт целевую функцию из стандартных слагаемых (невязки по


нефти, газу, воде, BHP и др).

• Фильтр переменных создаёт фильтр переменных.

• Запуск эксперимента позволяет запустить эксперименты определённых типов, а


именно — Латинский гиперкуб и любой из методов Оптимизации.

В средней части окна перечислены расчёты, уже присутствующие в данном workflow.


Их можно выполнить все по очереди или выборочно, см. Воспроизведение workflow.
Кроме того, здесь содержится список переменных модели, см. Создание переменных.
Между этими колонками находится интерфейс для работы с отдельными расчётами,
включающий следующие кнопки:

• Вставить добавляет расчёт, выбранный на дереве слева, в текущее workflow.

• Удалить удаляет выбранный расчёт из текущего workflow.

• Вверх, Вниз перемещают выбранный расчёт вверх/вниз в последовательности


шагов текущего workflow.

• Создать копию копирует выбранный расчёт.

• Показать код скрипта показывает (только для чтения) исходный код выбранного
расчёта на Python.

В правой части окна перечислены параметры выделенного расчёта.

8.2. Создание переменных 165


19.1

Рис. 90. Создание переменной

8.2. Создание переменных


Переменные служат для задания серий отличающихся моделей в ходе работы моду-
ля автоадаптации, см. Руководство по модулю автоадаптации. Почти любой числовой
параметр в расчётах может быть заменён на переменную.
В окне Расчеты и Workflows нажмите на кнопку Добавить переменную (см.
рис. 90) или нажмите правой кнопкой мыши на любое место под списком перемен-
ных. Необходимо задать:

• Имя. Имя переменной;

• Значение. Исходное значение переменной;

• Мин. Минимальное значение переменной;

• Макс. Максимальное значение переменной;

• Тип. Тип переменной. Доступны следующие типы переменной:

– INTEGER – целое число (минимум и максимум переменной должны быть так-


же целые);
– REAL – вещественное число;
– STRING – строка. В этом случае вместо максимума и минимума вводится
список возможных значений.

Чтобы использовать переменную в расчёте, впишите её имя вместо значения пара-


метра.

8.2. Создание переменных 166


19.1

8.3. Воспроизведение workflow


Чтобы воспроизвести workflow, откройте его в окне Расчёты и Workflows. В сред-
ней колонке появится список расчётов, записанных в workflow. Каждое из них можно
включать и отключать индивидуально.
Чтобы выполнить все отмеченные расчёты, нажмите кнопку Запустить Workflow
внизу. Расчёты начнут выполняться в порядке их следования в списке. Каждая успеш-
но выполненная строка подсвечивается зелёным. Все происходящие изменения модели
немедленно отображаются в графической области.
Если какая-то строка не может быть выполнена из-за ошибки (например, для её
выполнения требуется объект, который отсутствует в данной модели), то она подсве-
чивается красным и выполнение останавливается. В таком случае можно отключить
эту и все предыдущие строки, выполнить требуемое действие в интерфейсе обычным
способом (если оно нужно) и запустить выполнение workflow дальше.
Можно проверить workflow, не запуская его. Для этого нажмите кнопку Проверить
слева внизу. Все отмеченные действия будут проверены на самосогласованность. Те,
которые не готовы к выполнению (например, отсутствуют необходимые данные) будут
подсвечены красным.

8.3. Воспроизведение workflow 167


19.1

Рис. 91. Использование переменной SEISER в калькуляторе.

9. Запуск адаптации из Дизайнера Моделей и Геологии


Автоматизированную адаптацию и анализ неопределенностей можно запускать через
workflow из Дизайнера Моделей и Геологии. Интегрированная автоадаптация позволяет
варьировать структуры и динамические параметры для нахождений лучшей реализации
модели, настроенной на историю разработки.
Для использования адаптации в workflow перейдите в верхнее меню Документы и
выберите из списка Workflows.
Добавьте переменные, как описано в разделе 8.2. Создание переменных. Созданную
переменную можно использовать следующим образом:

• В калькуляторе. Переменная задается внутри символов @...@ (см. рис. 91);

• В расчете. Введите вместо значения параметра созданную переменную. Напри-


мер, в расчете Настроить вариограмму через переменные задаются ее Азимут
и Ранги (см. рис. 92). Начальное значение переменной показано справа. В расче-
те Настройки таблиц ОФП все параметры, заданные переменными, отображены
зеленым цветом;

9. Запуск адаптации из Дизайнера Моделей и Геологии 168


19.1

Рис. 92. Использование переменной в расчете.

Примеры работы с workflows приведены в учебных курсах:

• GDAHM1.1. How To Use Integrated Workflow AHM (Workflow


и Интегрированная автоадаптация);

• GDAHM1.2. How To Use Integrated Uncertainty (Интегриро-


ванный анализ неопределенностей.

Модуль Адаптации из Дизайнера Моделей и Геологии может запускаться двумя спо-


собами:

• Используя текущую гидродинамическую модель (интегрированное моделиро-


вание).
Интеграция модулей Дизайнер Геологии, Дизайнер Моделей, Симулятор, Адапта-
ции;

• Используя таблицу.
Данный способ может использоваться для анализа неопределенности, анализа чув-
ствительности объемов и запасов к изменению переменных. В данном случае не
нужно строить полную гидродинамическую модель.
В workflow необходимо задать переменные и использовать их в расчете, напри-
мер, объемов и запасов. Создайте статистическую таблицу. Workflow должен за-

9. Запуск адаптации из Дизайнера Моделей и Геологии 169


19.1

Рис. 93. Запуск анализа неопределенности, используя таблицу.

канчиваться созданной таблицей. При запуске модуля адаптации выберите Исп.


таблицу. Используйте Методы планирования экспериментов для анализа неопре-
делённостей или Оптимизационные алгоритмы для оптимизации.

Пример запуск анализа неопределенности, используя таблицу, при-


веден в учебном курсе:

• GD3.4. How To Do Volume Estimation (Подсчет запасов и


объемов).

9. Запуск адаптации из Дизайнера Моделей и Геологии 170


19.1

9.1. Использование дискретного преобразования Фурье в адаптации


На практике измеренные значение проницаемости породы пласта доступны лишь в тех
блоках, где были взяты образцы породы, поэтому для построения геологической модели
выполняется интерполяция проницаемости по известным данным. При этом результаты
расчета модели, построенной таким образом, могут не соответствовать историческим
данным.
Возникает необходимость решения обратной задачи, т.е. нахождения параметров мо-
дели, при которых расчетные данные наиболее близки к историческим. В общем случае
необходимо решать минимизационную задачу, размерность которой равна числу блоков
сетки, т.е. порядка 105 ÷ 107 . Очевидно, что большинство стандартных оптимизацион-
ных алгоритмов (например, Дифференциальная эволюция, Метод роя частиц) становятся
неэффективными при таком количестве переменных.
Стандартный подход к решению данной проблемы – разбиение сетки модели на
регионы, задание множителя для каждого региона и затем использование множителей
в качестве переменных при адаптации модели. В результате число переменных суще-
ственно сокращается. Однако у данного подхода есть недостатки:

• нет универсального способа разбиения сетки на регионы, поэтому изначально не


понятно, как выбирать эти регионы;

• так как значения в разных регионах домножаются на разные независимые множи-


тели, то может нарушаться геологическая структура модели.

В tNavigator реализован подход, основанный на дискретном косинусном преобразо-


вании (ДКП), в котором при небольшом числе переменных удается преодолеть выше-
указанные проблемы стандартного подхода.

Пример использования дискретного косинусного преобразования в


адаптации приведен в учебном курсе:

• MDAHM1.2 How To Use 3D Cos Transf Workflow AHM (Уско-


ренный переход от дизайнера моделей к адаптации на ос-
нове дискретного преобразования Фурье куба проницаемо-
сти).

9.1.1. Дискретное косинусное преобразование


Если значения параметров в блоках сетки не являются независимыми величинами и
существует пространственная корреляция, число параметров, требуемых для описания
свойства сетки можно уменьшить. Чем сильнее корреляция, тем меньше требуется па-
раметров.

9.1. Использование дискретного преобразования Фурье в адаптации 171


19.1

Обозначим вектор значений свойства сетки как m = (m1 , ..., mN )T , где N = Nx × Ny ×


Nz – количество блоков сетки. Разложим вектор значений m в некотором ортонормиро-
ванном базисе e i = (e1i , ..., eNi )T :
N N
m = ∑ ci ei = ∑ li , (9.1)
i=1 i=1

где li = ci e i и c = (c1 , ..., cN )T – вектор коэффициентов разложения (спектр) значений


куба свойств m .
Для разложения вектора значений свойства сетки используется трехмерное дискрет-
ное косинусное преобразование (ДКП) II типа. Тогда коэффициенты разложения c вы-
числяются как:
N −1
s
8 Nx −1 y Nz −1
     
π(i + 1/2)p π( j + 1/2)q π(k + 1/2)s
c pqs = ∑ ∑ ∑ mi jk cos cos cos
Nx Ny Nz i=0 j=0 k=0 Nx Ny Nz

где p = 1, ..., Nx , q = 1, ..., Ny и s = 1, ..., Nz .


Очевидно, что не все вектора li вносят одинаковый вклад в разложение (9.1). Для
того чтобы оценить вклад некоторого вектора li вводится понятие относительного ин-
формационного веса, который вычисляется как:

|ci |2
E(li ) = × 100%.
∑Nj=1 |c j |2

Эта величина показывает долю данных (по сравнению со всеми данными, хранящи-
мися в кубе свойств), содержащихся в векторе li .
Отсортируем все слагаемые из правой части уравнения (9.1) по убыванию относи-
тельного информационного веса и отсеим векторы с малым вкладом в данные. Обо-
значем долю (в процентах) отбрасываемых векторов через Pcomp (задается параметром
Уровень сжатия). Пусть отсортированный набор векторов {li1 , li2 , ..., liN }. Тогда после
отбрасывания Ncomp = N × Pcomp /100 векторов с минимальным информационным весом
получим усеченный набор векторов Ω = {li1 , li2 , ..., li′N }, где N ′ = N − Ncomp . Разложение
(9.1) можно переписать как:
N′
m = ∑ li j + lcomp ,
i=1
где
N
lcomp = ∑ li j
j=N ′

и относительный информационный вес определяется как:

|ci |2
E(li ) = × 100%.
∑l j ∈Ω |c j |2

9.1.1. Дискретное косинусное преобразование 172


19.1

Тогда относительный информационный вес для набора векторов Ω = {li1 , li2 , ..., liN ′ }
вычисляется как:
N′

E(N ) = ∑ E(li j )
j=1

и показывает долю данных (по сравнению со всеми данными, хранящимися в кубе


свойств), содержащуюся в наборе Ω. Относительный информационный вес является
функцией N ′ .
Резкое возрастание функции E(N ′ ) при увеличении N ′ означает, что данные куба
свойств хранятся в меньшем количестве коэффициентов (т.е. данные хорошо коррели-
руются) и требуется задание меньшего числа переменных в модели. Плоская функция
E(N ′ ) указывает на то, что необходимо много коэффициентов для воспроизведения ос-
новных особенностей куба свойств, т.е. требуется много переменных в модели.
Новые переменные модели – множители W1 , W2 , ..., на которые будут по отдельности
умножаться слагаемые разложения (9.1) c наибольшими относительными информацион-
ными весами. Обозначим эти слагаемые как {l˜1 , l˜2 , ..., l˜k }. Количество относительного
информационного веса (т.е. доля данных), которое будет содержаться в этом наборе
векторов, равно Evariation (задается параметром Уровень вариации). Выберем в каче-
стве набора векторов {l˜1 , l˜2 , ..., l˜k } первые k векторов из набора Ω = {li1 , li2 , ..., liN ′ } так,
чтобы сумма их относительных энергий превышала Evariation . Если значение Evariation ,
заданное параметром Уровень вариации, равно 100%, то в набор векторов {l˜1 , l˜2 , ..., l˜k }
попадут все вектора из Ω.
Пусть необходимое число переменных модели Nvar (задается параметром Количе-
ство получаемых переменных). Если число векторов с наибольшими значениями от-
носительного информационного веса k больше чем заданное число переменных модели
Nvar , тогда набор {l˜1 , l˜2 , ..., l˜k } разбивается на Nvar групп, состоящих из подряд идущих
векторов (обозначим эти группы через Gi ), так чтобы относительные информационные
веса групп Gi были приблизительно одинаковыми. Каждой группе ставится в соответ-
ствие множитель Wi , на который будут одновременно умножаться все векторы из этой
группы.
Таким образом разложение (9.1) можно переписать в следующем виде:
Nvar N′ Nvar
m = l˜1 + ∑ Wi ∑ l˜j + ∑ li j + lcomp = mMean + ∑ Wi mi + mnoise + lcomp
i=1 l˜j ∈Gi j=k+1 i=1

где

• mMean = l˜1 – среднее значение;

• mi = ∑l˜j ∈Gi l˜j ;

• mrest = ∑Nj=k+1 li j – содержит оставшиеся данные;

• W1 ,...,WNvar – множители, используемые в качестве переменных модели.

9.1.1. Дискретное косинусное преобразование 173


19.1

Рис. 94. Задание параметров алгоритма DCT.

9.1.2. Дискретное косинусное преобразование в GUI


Куб свойств может быть разложен по косинусам в Дизайнере Моделей и Дизайнере
Геологии (Расчеты → Вспомогательные расчеты → Дискретное косинусное преоб-
разование). Чтобы использовать дискретное косинусное преобразование куба свойств в
адаптации существующей модели рекомендуется использовать Дизайнер моделей. Для
этого следуйте шагам:
1. Импортируйте модель в Дизайнер Моделей: перейдите в верхнее меню Докумен-
ты и выберите Загрузить данные из существующей модели;

2. Нажмите на кнопку Открыть гидродинамическую модель на верхней пане-


ли, чтобы создать гидродинамическую модель;
3. Перейдите в верхнее меню Документы и выберите Workflows;

4. Нажмите на кнопку и выберите Дискретное косинусное преобразование (см.


рис. 94). Необходимо задать следующие параметры:
• Сетка. Выберите сетку;
• Свойство. Задайте свойство, к которому применяется дискретное косинусное
преобразование;
• Количество получаемых переменных. Количество переменных в модели
Nvar ;
• Уровень сжатия. Pcomp – доля (в процентах) из набора {li1 , li2 , ..., liN };
• Уровень вариации. Evariation – доля данных в процентах о свойстве, содер-
жащаяся в наборе векторов (коэффициентов) с наибольшим вкладом в разло-
жение;
• Префикс выходного свойства сетки – префикс в названии выходных векто-
ров {mi , ..., mNvar } и mrest ;

9.1.2. Дискретное косинусное преобразование в GUI 174


19.1

Рис. 95. Получившиеся кубы дискретного косинусного преобразования: permX_Mean


— куб, содержащий среднее значение, кубы-члены разложения permX_1, permX_2 и
permX_3, оставшиеся данные – permX_rest .

• Префикс выходных переменных – префикс в названии выходных перемен-


ных W1 ,...,WNvar .

5. После выполнения дискретного косинусного преобразования на вкладке Геомет-


рические объекты. Свойства будут созданы кубы свойств, содержащие среднее
значение mMean , члены разложения mi и оставшиеся данные mrest (см. рис. 95).
Созданные переменные будут показаны на вкладке Добавить переменные, а
арифметическое выражение, которое будет использоваться в адаптации, показа-
но на вкладке Калькулятор;

6. Выберите Добавить переменные (см. рис. 96). Созданные переменные в разложе-


нии показаны справа. Начальное, Мин. и Макс. значения переменных могут быть
изменены (двойной щелчок мыши на выбранное значение);

7. Выберите Калькулятор (см. рис. 97) формула разложения выбранного свойства


показана справа;

8. Для запуска адаптации нажмите на кнопку .

!
Количество выходных переменных может быть меньше, чем Nvar .
Это происходит из-за того что относительные веса набора векто-
ров {l˜1 , l˜2 , ..., l˜k } могут быть очень большими и количество векторов k
соответственно меньше Nvar .
Эта возможность доступна также в качестве отдельной процедуры в workflow, см.
8.1.

9.1.2. Дискретное косинусное преобразование в GUI 175


19.1

Рис. 96. Переменные в дискретном косинусном разложении.

Рис. 97. Формула разложения для адаптации.

9.1.2. Дискретное косинусное преобразование в GUI 176


19.1

10. Список литературы


[1] Nelder, J.A. and Mead, R., A simplex method for function minimization, Comput. J., 7, pp.
308–313, 1965.

[2] Kathrada, Muhammad, Uncertainty evaluation of reservoir simulation models using particle
swarms and hierarchical clustering Doctoral dissertation, Heriot-Watt University, 2009.

[3] Kruskal, J. B., Multidimensional scaling by optimizing goodness of fit to a nonmetric hypothesis
Psychometrika, pp. 1–27, 1964.

[4] Richard A. Johnson and Dean W. Wichern, Applied Multivariate Statistical Analysis - 6th ed
Pearson, 2007.

[5] H. Steinhaus, Sur la division des corps materiels en parties Bulletin Polish Acad. Sci. Math, 1956.

[6] S. P. Lloyd, Least square quantization in PCM IEEE Transactions on Information Theory, 1982.

[7] L. Mohamed, M. Christie, V. Demyanov, History Matching and Uncertainty Quantification:


Multiobjective Particle Swarm Optimisation Approach SPE 143067, Vienna, Austria, 23–26 May
2011.

[8] J. Hertz; R.G. Palmer, A.S. Krogh, Introduction to the theory of neural computation Addison-
Wesley, 1991.

[9] C.C. Aggarwal, Neural Networks and Deep Learning Springer, 2018.

[10] Н. С. Бахвалов, Н. П. Жидков, Г. М. Кобельков, Численные методы, М. «Наука», 1987

[11] Clayton V. Deutsch, Geostatistical Reservoir Modeling, Oxford University Press, 2002

[12] A. Bardossy Introduction to Geostatistics University of Stuttgart

[13] S. D. Conte, Carl de Boor Elementary Numerical Analysis McGraw-Hill Book Company, 1980.

[14] J-P Chiles, P. Delfinder Geostatistics Modeling Spatial Uncertainty Wiley & Sons, Canada, 1999.

[15] В. В. Демьянов, Е.А Савельева Геостатистика теория и практика М. Наука, 2010.

10. Список литературы 177


Rock Flow Dynamics

Тел.: +7 (499) 409-05-00


Адрес: 117418, г. Москва, Профсоюзная ул. 25А
E-mail: tnavigator@rfdyn.ru

Для получения более актуальной информации посетите http://rfdyn.ru

© Rock Flow Dynamics. Все права защищены. Версия от 22.03.2019

Вам также может понравиться