Академический Документы
Профессиональный Документы
Культура Документы
Автоадаптация
Руководство пользователя
Март 2019
19.1
Информация о безопасности
Предлагаемые компанией 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
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
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
СОДЕРЖАНИЕ 4
19.1
СОДЕРЖАНИЕ 5
19.1
1. Введение
tNavigator представляет собой единый программный пакет, который позволяет создавать
статические и динамические модели нефтегазовых месторождений, выполнять расчет
модели, анализ неопределенностей, построение поверхностной сети сбора продукции
в рамках единого интерфейса. Все модули tNavigator используют общую внутреннюю
систему хранения данных, расчётное ядро, обеспечивающее параллельный расчет на
всех доступных вычислительных мощностях, общие форматы ввода/вывода данных и
графический интерфейс. tNavigator поддерживает системы единиц измерения METRIC,
LAB, FIELD.
tNavigator является единым программным комплексом, разработанным на C++. Дан-
ное программное обеспечение может быть установлено на операционных системах
Windows, Linux 64-bit, на системах с общей или распределенной памятью. tNavigator
может использоваться как консольная версия, так и как версия с графическим интер-
фейсом (локальным или удаленным). Расчет может осуществляться на рабочих станциях
и кластерах. Доступны облачные вычисления с полными возможностями графического
интерфейса пользователя для удаленного рабочего стола.
tNavigator содержит 8 независимо лицензируемых функциональных модулей:
• Графический интерфейс.
• Оценки неопределенности;
1. Введение 6
19.1
• Вероятностного прогноза;
• Оптимизации разработки;
• Анализа рисков;
1. Введение 7
19.1
2. Задание переменных
Для запуска любого алгоритма необходимо предварительно задать переменные. В ка-
честве переменных для адаптации и анализа чувствительности могут использоваться
разнообразные параметры. Например:
• проницаемость;
• ОФП;
• параметры аквифера;
• данные скважин;
• проводимость разломов.
• траектории скважин;
• параметры скважин.
• с помощью ключевого слова DEFINES (см. 12.1.24) в data файле (для моделей
формата tN, E1, E3, IM, ST, GE) и ключевого слова VDEF (см. 12.1.25) (для моделей
формата MO).
2. Задание переменных 8
19.1
• AHM1.2. Автоадаптация;
2. Задание переменных 9
19.1
• Равновесие;
• Изменение KV/KH;
• Проводимость разломов;
• Другие.
2.1.1. Равновесие
Переменные сценария
В данном сценарии адаптации глубины газо-нефтяного контакта GOC (ГНК) и глу-
бины водо-нефтяного контакта WOC (ВНК) используются в качестве переменных.
Доступ к сценарию в ГУИ
Данный сценарий доступен в менеджере переменных ГУИ для адаптации модели,
если в модели задано ключевое слов EQUIL (см. 12.16.2). На рис. 3 показан выбор WOC
в первом регионе равновесия в качестве переменной.
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
Если ОФП заданы таблицей, например SWOF (см. 12.6.1), SGOF (см. 12.6.2), то
необходимо конвертировать таблицу в корреляции Кори (LET), а после запустить дан-
ный сценарий. Для конвертации ОФП таблиц в корреляции Кори (LET) перейдите в
меню Документы и выберите в появившемся меню Аппроксимировать ОФП – Кон-
вертировать в корреляции Кори или LET.
Переменные по регионам можно задать следующим образом (см. рис. 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 /
/
Пример
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 /
/
которого 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) умножаются на данные множители.
• все 3 куба проницаемости PERMX (см. 12.2.13), PERMY (см. 12.2.13) и PERMZ
(см. 12.2.13);
для каждого слоя (например („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@
/
ARITHMETIC
PERMY = PERMX
PERMZ = PERMX * @KV_KH@
/
Пример
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)
...
/
Пример
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) умножаются на соответствующий множи-
тель.
Пример
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)
/
Пример
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@ /
/
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"@ /
2.1.10. Другие 36
19.1
2.1.10. Другие 37
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’/
можно сохранить вариант модели в виде стандартного data файла, в котором использу-
ются значения переменных этого варианта.
!
значению в главной модели. Если одноимённые переменные есть только в
разных подчиненных моделях, то в главную модель попадет значение пе-
ременной из первой прочитанной подчиненной модели и это же значение
переменной будет использоваться во всех подчиненных моделях в каж-
дом из вариантов модели. После чтения информации из подчиненных
моделей значения переменных обновляются только в главной модели.
!
Если переменная была задана в графическом интерфейсе, то ее мож-
но переименовать в соответствующем файле, расположенном в папке
USER.
Проект адаптации запускается из главной модели. Заданные переменные для всех
подчиненных и главной модели будут показаны в окне запуска экспериментов.
• AHM1.2. Автоадаптация;
(a) (b)
3.2. Пользовательский
Пользователь может задать значения переменных для каждого варианта эксперимента в
графическом интерфейсе.
На рис. 19 показано, что каждого варианта эксперимента (Вариант #0, Вариант #1,
Вариант #2 и т.д.) пользователем указаны значения переменных.
3.2. Пользовательский 47
19.1
(a) (b)
(c) (d)
3.5. Монте–Карло
В методе Монте–Карло для каждого варианта модели переменные генерируются незави-
симо, согласно выбранному распределению. Данный метод используется для построения
3.5. Монте–Карло 51
19.1
3.5. Монте–Карло 52
19.1
3.6. Торнадо
Торнадо-эксперимент используется для построения диаграмм торнадо. В этом экспери-
менте каждая переменная устанавливается в свое минимальное и максимальное значе-
ния, в то время как значения остальных переменных остаются базовыми. Если варьиру-
ется M параметров, то создается 2M + 1 вариантов (включая базовую модель).
3.6. Торнадо 53
19.1
4. Целевая функция
Для работы оптимизационного алгоритма необходимо задание целевой функции (кри-
терия проверки качества модели). Главная задача целевой функции – помочь выбрать
наилучший вариант модели для заданных параметров. В tNavigator возможно задать два
вида целевой функции:
• Дифференциальной эволюции;
• Симплекс-метода;
• Оптимизации на прогнозе.
4. Целевая функция 56
19.1
Формулы для расчета целевых функций приведены в разделе 6.4.1. Данные функции
нельзя редактировать.
Для создания настраиваемой целевой функции выберите в выпадающем списке
Пользовательская целевая функция или нажмите кнопку и задайте имя целе-
вой функции. Целевую функцию можно удалить , переименовать , дублировать
и загрузить из имеющегося проекта .
При загрузке целевой функции из другого проекта установите галочки для необхо-
димых функций. Загруженные функции появятся в списке целевых функций на вкладке
Целевые функции (см. рис. 29). Если целевая функция была создана в другом проек-
те для другой модели, то при переносе целевой функции некоторые настройки могут
быть утеряны, т.к. в моделях, между которыми выполняется перенос функции, могут не
совпадать объекты и шаги по времени. Например, настройки исторических точек для
несуществующих временных шагов будут отброшены.
Далее задется тип целевой функции и ее слагаемые. Чтобы добавить (удалить) сла-
гаемое в целевой функции нажмите на кнопку Добавить слагаемое (Удалить слагае-
мое). Несколько слагаемых можно добавить одновременно с помощью кнопки Добавить
несколько слагаемых. Для каждого слагаемого целевой функции выбираются Объек-
ты и соответствующие выбранному объекту Параметры. В качестве объектов могут
быть выбраны:
• Скважины;
• Группы;
• Месторождение;
• RFT/PLT;
• Польз. график по месторожд.;
• Польз. график по скважинам;
• Польз. график по группам.
Для выбора только нагнетательных скважин нажмите на кнопку Все нагнетательные,
для выбора добывающих – Все добывающие.
В качестве параметров могут быть выбраны дебит нефти, дебит воды, дебит жидко-
сти и т.д. Для каждого параметра задается Ошибка (допустимая невязка) и Тип ошиб-
ки: относительная или абсолютная (см. раздел 4.2.2).
Для каждого объекта можно задать или вычислить его вес в целевой функции. Чтобы
задать Вес дважды щелкните на величину веса для соответствующего объекта. Веса
для объектов можно также вычислить на основе исторических данных по выбранному
параметру (см. раздел 4.2.3). Для этого выберите Весовой параметр из выпадающего
меню и нажмите кнопку Вычислить.
Исторические значения, значения абсолютных и относительных отклонений полу-
ченных значений от исторически можно увидеть ввиде таблицы справа, нажав на кноп-
ку на панели справа. Чтобы увидеть разницу между историческими и расчетными
значениями нажмите на кнопку .
Если целевая функция задана корректно, то внизу диалога появится надпись Ok. Зна-
чения построенной целевой функции для разных вариантов модели можно посмотреть
на вкладке Таблица результатов.
• wob j – вес скважины или группы. Веса для объектов можно также вычислить на
основе исторических данных по выбранному параметру (см. раздел 4.2.3);
• w p – вес параметра;
value(H)−value(C) 2
• S= g·value(H) , если ошибка относительная.
где
!
Если на каком-то шаге по времени исторический дебит (по нефти, воде
или газу) имеет нулевое значение, то данный шаг не учитывается при
вычислении целевой функции.
!
полагается равным:
!
Необходимо исключать исторические точки по тому параметру(ам) и
объекту(ам), по которым будет считаться пользовательская целевая
функция.
1. FIELD – месторождение;
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
где:
Данная ЦФ может быть использована при начале адаптации модели, когда необхо-
димо начать с обеспечения совпадения накопленных добыч по всему месторождению.
После этого может быть задана ЦФ, обеспечивающая более жесткие критерии настрой-
ки на историю.
Например, более жестким критерием является следующий ниже Пример 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
где:
5. Оптимизационные алгоритмы
В этом разделе описаны алгоритмы автоматизированной адаптации (Assisted History
Matching) и анализа неопределенностей (Uncertainty Analysis). Доступны следующие
оптимизационные алгоритмы:
• Дифференциальная эволюция;
• Симплекс-метод;
5. Оптимизационные алгоритмы 74
19.1
• AHM1.2. Автоадаптация;
5. Оптимизационные алгоритмы 75
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 будет вне создаваемого диапазона.
Рис. 40. Изменение Мин. и Макс. значений переменной при создании эксперимента с
нескольких выбранных вариантов.
Таким образом, при выполнении хотя бы одного из описанных ниже условий опти-
мизационный алгоритм завершает свою работу.
Целевое значение остановки
Необходимо задать число (величину ЦФ). Алгоритм остановится, если найдется ва-
риант, значение ЦФ которого будет меньше заданного пользователем. По умолчанию –
0.
Вариация целевой функции
Необходимо задать величину (в процентах). Алгоритм остановится, если амплитуда
значений ЦФ в популяции (наборе вариантов модели) меньше заданной пользователем
в процентах доли от средней характеристики.
Вариация переменных
Необходимо задать величину (в процентах). Алгоритм остановится, если амплитуды
значений каждой переменной в популяции меньше заданной пользователем в процентах
доли от средней характеристики.
Остановка при медленной сходимости
Необходимо задать количество итераций (Кол-во итераций) и величину улучшения
значения ЦФ (Необходимое улучшение) за это число итераций в процентах. Алгоритм
остановится в случае, если целевая функция не улучшится за заданное число итераций
на указанное число процентов.
Уточнения.
Амплитуда значений ЦФ в популяции – разница между максимальным и минималь-
ным значением.
В качестве средней характеристики выступает среднее между минимумом и макси-
мумом в популяции.
Понятие популяции для проверки критерия остановки алгоритма (набор вариантов
модели) отличается в зависимости от вида оптимизационного алгоритма.
• Дифференциальная эволюция – размер популяции уже задан для алгоритма, мо-
жет быть изменен при ручной настройке параметров (значение 6 по умолчанию).
• Симплекс-метод – популяция - это набор из N + 1 вариантов модели (текущие
вершины симплекса).
• Метод Роя частиц (Классическая версия) – размер популяции уже задан для ал-
горитма, может быть изменен при ручной настройке параметров (параметр размер
роя, по умолчанию – 14).
• Метод Роя частиц (flexi) – размер популяции равен произведению размера роя
и разности единицы и доли исследователей, значения данных параметров могут
быть изменения при ручной настройке (по умолчанию: количество равно 10 ∗ (1 −
0.5) = 5).
• Np
Количество точек, которые на каждой итерации участвуют в создании новой точки.
В начале работы алгоритма начальная популяция разбрасывается по пространству
поиска.
При увеличении N p возрастает «чувствительность» алгоритма и инертность по-
пуляции. Это увеличивает вероятность нахождения глобального минимума, но за-
медляет сходимость к локальному. Связь между скоростью сходимости и размером
популяции неоднозначна.
• 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.5. Симплекс-метод
5.5.1. Определения и краткое описание алгоритма
Алгоритм Нелдера-Мида [1] (или симплекс-метод) решает классическую задачу мини-
мизации функции от n переменных. Особенности метода:
5.5.2. Алгоритм
Начальный симплекс.
Начальный симплекс S обычно строится генерированием n + 1 точек вокруг данной
точки xin ∈ Rn . На практике чаще всего полагают x0 = xin для обеспечения надлежащих
рестартов алгоритма. Оставшиеся n вершин генерируются так, чтобы выполнилось одно
из двух условий:
xi = x0 + hi ei , i = 1, ..., n,
• S – правильный многогранник.
5.5. Симплекс-метод 87
19.1
f (xl ) = min fi
i
α > 0,
0 < β < 1,
γ > 1, γ > α,
0 < δ < 1.
5.5.2. Алгоритм 88
19.1
5.5.2. Алгоритм 89
19.1
5.5.2. Алгоритм 90
19.1
• termx – это тест на сходимость симплекса. Тест завершается успешно, если сим-
плекс S достаточно мал в некотором смысле (например, все или некоторые вер-
шины достаточно близки друг к другу).
• term f – это тест на сходимость значений функции. Этот тест завершается успешно,
когда все или некоторые значения функции достаточно близки друг к другу.
• f ail – тест на расходимость. Тест завершается успешно, если число итераций или
вычислений значений функции превышает заранее заданного их числа.
5.5.2. Алгоритм 91
19.1
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
где
• Niter
Ограничивает количество итераций. Задаёт число вариантов, после расчёта кото-
рых алгоритм будет остановлен. Стоит отметить, что при использовании парал-
лельного запуска (см. ниже) число итераций по-прежнему означает максимальное
число вариантов, а не число вариантов, умноженное на параметр параллельного
запуска.
Необходимо чтобы количество итераций было не меньше числа частиц в рое, т.е.
Niter ≥ Ns .
• N_sim_calc
Параметр для параллельного запуска. Задаёт число вариантов, которые будут рас-
считываться параллельно.
В целом данный параметр не влияет на «чувствительность» алгоритма, но позволя-
ет быстрее проводить эксперимент и рассматривать большее количество вариантов
за то же время.
Необходимо чтобы данный параметр был не больше числа частиц в рое, т.е.
N_sim_calc ≤ Ns .
• wstart , w f inish
Начальное и конечное значения коэффициента инерции. Желательно, чтобы коэф-
фициент инерции не возрастал в процессе работы алгоритма, т.е. рекомендуется
обеспечить условие 0 ≤ w f inish ≤ wstart ≤ 1.
Данный параметр позволяет частицам достаточно тщательно исследовать про-
странство поиска на начальных итерациях, но быстрее сходиться на завершающих
итерациях.
• nostalgia
Величина ностальгии частиц роя.
Данный параметр отвечает за стремление частицы к своей локальной лучшей пози-
ции. Увеличение данного параметра приводит к более тщательному исследованию
пространства поиска. Однако вместе с этим уменьшается скорость сходимости
алгоритма.
• sociality
Величина социальности частиц роя.
Данный параметр отвечает за стремление частицы к глобальной лучшей позиции
роя. Увеличение данного параметра приводит к увеличению скорости сходимости
алгоритма. Но вместе с этим это ухудшает качество исследования пространства
поиска и способствует остановке алгоритма в локальном минимуме.
• damping_ f actor
Коэффициент упругости границ области поиска. Данный параметр характеризует
поведение частиц роя вблизи границы области поиска.
В алгоритме реализован механизм отражения частиц от границы области поиска.
Он применяется случае, когда частица пытается выйти из области поиска. В та-
ком случае эмулируется упругое столкновение частицы с границей и отражение
первой обратно в область поиска. В результате столкновения скорость частицы
уменьшается. Коэффициент упругости характеризует потери скорости при таком
столкновении.
Другими словами, при коэффициенте упругости, равном 1, мы получаем абсолют-
но упругий удар, и частицы не замедляются от ударов о границы области поиска.
Наоборот, при нулевом коэффициенте упругости частицы полностью теряют ско-
рость при столкновении с границей и прилипают к ней.
Данный параметр важен при исследовании приграничных участков области поис-
ка. Не рекомендуется устанавливать данный параметр в граничные значения, так
как это приведёт к тому, что частицы либо будут постоянно прилипать к границе,
либо не будут иметь никакой возможности закрепиться около неё.
Параметр определён на отрезке [0, 1].
• Nneigbor
Количество соседей у частицы роя. Используется только в версии FlexiPSO.
Позволяет использовать не только локальную и глобальную лучшие позиции, но
и лучшие позиции соседей. Это позволяет более тщательно исследовать область
поиска. Рекомендуемое значение – 25% от размера роя.
Соотвественно, необходимо чтобы количество соседей частицы было меньше ко-
личества частиц в рое, т.е. Nneighbor ≤ Ns .
• neigborliness
Коэффициент добрососедства частиц роя. Используется только в версии FlexiPSO.
• 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 фор-
мализует понятие ”слишком близко”. Таким образом, исследовательская частица
6. Анализ результатов
В этом разделе описаны средства работы с автоматизированной адаптацией в графи-
ческом интерфейсе (ГУИ). Окно проекта адаптации показано на рис. 47. Окно содер-
жит горизонтальную панель опций: Файл, Очередь, Результаты, Настройки. Меню
Очередь и Результаты становятся активными при переключении на вкладку Расчеты
и Результаты, соответственно, расположенных ниже. Ниже находится верхняя панель
кнопок.
Три вкладки позволяют переключаться между Информацией о проекте, Расчетами и
Результатами.
Горизонтальная панель опций состоит из:
1. меню Файл:
• Создать новый эксперимент;
• Загрузить модели для сравнения. Позволяет загрузить вариант(ы) мо-
дели для сравнения с имеющимися вариантами модели. Данная опция дает
возможность слияния проектов адаптации, созданных для одной модели и об-
щего набора переменных, но с различными рассчитанными экспериментами
(созданными, например, на разных компьютерах);
• Загрузить все модели из папки для сравнения. Укажите путь к пап-
ке, в которой хранятся папки с вариантами модели. Варианты модели будут
последовательно загружены из всех подпапок;
• Открыть базовую модель. Модель, хранящаяся в папке CURRENT, бу-
дет открыта. Далее с данной моделью можно работать как с обычной моде-
лью, т.е. можно вносить изменения в модель (например, изменять фазовые
проницаемости, добавлять скважины и т. д.);
• Закрыть.
2. меню Очередь (Очередь задач)
3. меню Результаты:
4. меню Настройки:
• Основные настройки;
• Настройки расчета для новых задач;
• Настройки расчета для новых задач (расширенные);
• Общие настройки почты. Позволяет настроить электронную почту для по-
лучение уведомлений о ходе расчета;
• Настройки почты текущего окна. Настройка уведомлений о завершении
задания и/или о ходе расчета;
• Энергосбережение;
• Внешний вид;
• Колонки. Позволяет выбрать колонки для вкладки Расчеты.
6.2. Расчеты
Вкладка Расчеты содержит полную информацию о состоянии расчетов (рис. 48). Указы-
вается полный Путь к варианту эксперимента, Тип модели, Количество ядер, исполь-
зуемых в расчете и Статус расчета. Если расчет завершился, то указывается затраченное
на него время. Если расчет в процессе, то показано также предположительно оставшееся
до завершения расчета время.
• Удалить из очереди.
• Посмотреть графики.
• Посмотреть лог.
• Показывать завершенные.
• Лог.
• Опции. см Настройки.
6.3. Результаты
Вкладка Результаты позволяет посмотреть полученные результаты и провести их ана-
лиз для оценки качества адаптации. Основные вкладки окна Результаты:
• Таблица результатов;
• Расчет невязок;
• Графики;
• Кроссплот;
• Гистограмма;
• Составная диаграмма;
• Анализ;
• Mds.
Ниже описаны общие интерфейсные элементы окна Результаты.
• Отмечать новые модели. Если выбрана данная опция, то при расчете, ре-
зультаты новых вариантов автоматически добавляются во вкладку Результаты (в
Графики, Таблицу результатов и т.д.);
• Показать/скрыть лог.
• Экспорт;
• Настройки.
!
Для расчета невязки по дебиту или разницы по накопленным добыче за
определенный период времени, с некоторого шага k, можно использо-
вать целевую функцию.
!
Для каждого варианта модели переменные запишутся в соответ-
ствующем файле варианта модели, в ключевом слове PREDEFINES
(см. 12.1.26).
6.5. Графики
Данная вкладка визуализирует полученные результаты расчетов.
Пример вкладки Графики показан на рис. 51. В верхнем окне выбирается объект, для
которого будет построен графики: скважины, месторождение и т.д. В нижнем – парамет-
ры, которые будут визуализированы: дебит нефти, дебит воды и т.д. Кнопка Добавить
новый график под списком параметров открывает диалог создания пользовательского
графика (см. 6.6. Калькулятор графиков).
Справа на панели расположенны дополнительные кнопки:
!
Обратите внимание, что пользовательские графики из других скриптов,
включая созданные в этом же шаблоне, недоступны из скрипта. Но при
необходимости можно создать несколько графиков из одного скрипта.
Пользовательский график может быть задействован в целевой функции (см. Целевая
функция по пользовательским графикам).
Например, wopr[m1,w1,t1] возвращает одно число — дебит нефти для скважины w1 в мо-
дели m1 на шаге t1. Индексирующие элементы могут быть заданы в любом порядке (так,
пример выше мог быть записан в виде wopr[t1,w1,m1]). Выражение, в котором задана
только часть индексов, возвращает график с соответствующим подмножеством значе-
ний. Так, wopr[m1, w1] возвращает график дебита нефти для скважины w1 в модели m1
на всех временных шагах.
!
Фрагменты кода, приведённые здесь и ниже, служат только
для иллюстрации синтаксиса. Они не являются самодостаточ-
ными примерами и не будут работать, если их скопировать в
окно ввода калькулятора. Полноценные примеры см. в разделе
Примеры использования.
◦ .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: ⟨некоторые действия⟩
• Объект модель
Объект модель имеет следующее доступное свойство:
• Объект график
Объект типа график представляет один из графиков, как предопределённых, так и
полученных в результате вычислений. Результат выполнения скрипта также явля-
ется объектом этого типа. Он имеет следующие доступные методы:
• Глобальные функции
Функции общего назначения, включая:
465, 1165, 2188, 3418, 4968 . . . → 465, 700, 1023, 1230, 1550 . . .
465, 700, 1023, 1230, 1550 . . . → 465, 1165, 2188, 3418, 4968 . . .
!
Большинство манипуляций с объектом datetime требу-
ют предварительной загрузки соответствующей биб-
лиотеки (см. Импорт библиотек). Это делается так:
from datetime import datetime
◦ create_table_vs_time(<ряд>) возвращает график, содержащий кусочно-линейную
интерполяцию данного ряда значений. Ряд должен представлять собой массив
кортежей из двух элементов (дата,значение). Дата должна являться объектом
Python типа date или datetime.
Пример:
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)
ошибка.
Единицы измерения задаются мнемоническим именем, которое можно вы-
брать из выпадающего списка справа.
Пример: export(w1, name='graph1')
◦ graph(type='<тип>',default_value=<значение>) — создаёт график указанного
типа (field, well, group, в интерфейсе симулятора также conn — интервалы пер-
форации или fip — отчётные регионы) и заполняет его значениями по умол-
чанию.
Пример: tmp = graph(type='field', default_value=1)
1. Создать график (x) со значением дебита нефти (wopr) на интересующем нас ин-
тервале, и 0 за его границами. Для этого сравнить time (время со старта, в днях)
с границами интервала и затем использовать результаты сравнений в арифмети-
ческом выражении. При этом булевские величины автоматически приводятся к
целым: True становится 1, False — 0.
Пример
x = wopr * (time >= 215) * (time <= 550)
w1 = cum_sum_t(x)
export (w1, name = 'PeriodProd', units = "liquid_surface_volume")
!
Это возможно в интерфейсе симулятора или Дизайнера моделей, где
графический калькулятор имеет доступ к данным по отдельным ин-
тервалам перфорации, но не в интерфейсе модуля автоадаптации.
Скрипт работает следующим образом:
Пример
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, но могут быть потеряны при копировании и
вставке.
Пример 3
Предположим, мы хотим рассчитать средний дебит нефти для подмножества сква-
жин, названия которых начинаются с 'WELL3', затем сравнить его с историческими
данными, которые необходимо прочитать из файла, и использовать результат как целе-
вую функцию для адаптации. Скрипт работает следующим образом:
1. Импортировать стандартную библиотеку datetime, которая позволяет более гибко
манипулировать датами.
5. Перебрать массив ещё раз с разбором строк, чтобы получить массив кортежей
(дата,значение).
Пример
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
Предположим, имеется график исторического забойного давления по скважинам, где
только часть измерений реальны; остальные позиции заполнены нулями. Мы хотим
интерполировать данные на весь диапазон по времени. Скрипт работает следующим
образом:
Пример
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.7. Кроссплот
Кроссплот позволяет построить зависимость между двумя выбранными параметрами
(см. рис. 55). По оси Y в верхнем окне выбираются объекты (например, Группы, Сква-
жины, Невязки и т.д.), в нижнем – параметры, соответствующие выбранному объекту.
Аналогичное меню для выбора параметра доступно по оси X. На рис. 55 показан крос-
сплот между настраиваемой целевой функции и номером варианта модели, созданной
оптимизационным алгоритмом (например, Дифференциальная эволюция). Каждому ва-
рианту запуска алгоритма соответствует своя величина ЦФ. Видно, что с ростом числа
вариантов модели целевая функция стремится к минимуму. При наведении курсора мы-
ши на точку кроссплота в строке статуса (внизу окна) появится следующая информация:
номер эксперимента, номер варианта и значение ЦФ.
В общем случае фронт Парето представляет собой группу вариантов модели, поэто-
му для работы с ним можно использовать тот же функционал, доступный для работы с
обычной группой (см. 6.14). Можно построить несколько фронтов Парето. Чтобы пере-
ключаться между ними нажмите на кнопку Менеджер групп и выберите нужный
фронт.
6.8. Гистограмма
Гистограмма позволяет оценить насколько велико число вариантов эксперимента, име-
ющих значение выбранного параметр в определенном диапазоне. По оси X задается
параметр, с помощью меню, расположенного в нижней половине вкладки, задающей
настройки гистограммы. Отрезок между максимальным X max и минимальным X min
значениями параметра разбивается на заданное число интервалов. Число интервалов
по X можно регулировать в поле Частей. Для каждого отрезка [X i , X i+1 ] отображается,
сколько вариантов имеют значение параметра X в этом диапазоне. Перемещаем слайдер
времени для просмотра гистограммы в нужный момент времени. Период времени, за
который показана гистограмма, выделяется красной линией на временой шкале.
Можно выбрать горизонтальную или вертикальную ориентацию гистограммы. Зна-
чения параметра могут быть представлены в процентах. При наведении курсора мыши
на столбец гистограммы, соответствующие диапазоны и количество вариантов выводят-
ся в строке статуса.
Например, на рис. 58 4 варианта имеют накопленную нефть в диапазоне [355098,
359290] ст. м3. Варианты, соответствующие этому диапазону подсвечиваются синим в
списке вариантов модели, расположенного слева.
• Объекты;
• Компоненты;
• Слагаемые.
• Невязки.
В данном режиме составная диаграмма показывает вклад невязок по скважинам в
целевую функцию. Невязки вычисляются по формуле:
2
value(H) − value(C)
∑∑ g
ob j p
• Абсолютный.
В данном режиме составная диаграмма определяет высокодебитные скважины для
подбора весов для целевой функции. Для построения диаграммы используется
следующая формула:
value(C) 2
∑∑ g
ob j p
Используя диаграмму, например, можно оценить для каких скважин у нас есть про-
блемы адаптации и нам нужно сосредоточиться. На рис. 59 видно, что скважины ”PRO-
20” и ”PRO-4” вносят значительный вклад в ЦФ, т.е. являются проблемными. Возмож-
но, для их настройки на историю были выбраны не совсем подходящие переменные или
диапазоны. В таком случае можно попробовать поменять переменные и/или диапазоны.
6.10. Анализ
Для анализа полученных результатов используются следующие инструменты:
• Диаграмма Парето
• График Торнадо
• Квантили
• Создание фильтра для переменных
Корреляция Спирмена
Корреляция Спирмена определяет степень зависимости двух случайных величин 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.3. Квантили
Для вариантов модели, посчитанных с помощью метода Латинский гиперкуб и для про-
гнозных моделей, могут быть вычислены квантили.
Диапазон неопределенности получаемых параметров (например, накопленная нефть,
запасы и т.д.) может оцениваться с помощью вероятностного распределения. В случае
если диапазон неопределенности представлен с помощью вероятностного распределе-
ния, то должны быть предусмотрены нижняя, лучшая и верхняя оценки значений вы-
бранного параметра такие, что:
• P90 – нижняя оценка, т.е. величина, которую с вероятностью 90% будут превышать
значения выбранного параметра;
• P50 – лучшая оценка, т.е. величина, которую с вероятностью 50% будут превышать
значения выбранного параметра;
• P10 – верхняя оценка, т.е. величина, которую с вероятностью 10% будут превышать
значения выбранного параметра.
Квантили считаются для каждого параметра отдельно. Для множества значений вы-
бранного параметра, полученных в вариантах численного эксперимента, определяются
значения параметра, соответствующие нижней P90, лучшей P50 и верхней оценки P10.
Значения квантилей рассчитываются на каждом временном шаге: чтобы увидеть их,
передвиньте слайдер времени на нужный временной шаг.
Квантилям, посчитанным для разных параметров, могут соответствовать разные ва-
рианты модели. Например, квантилю P10 для накопленной нефти соотвествует третий
вариант модели, а квантилю P10 для накопленной воды – первый вариант модели. Для
того чтобы перейти к варианту для выбранного квантиля, нажмите правой кнопкой мы-
ши на значение квантиля и выберите Перейти к модели для данного квантиля. Соот-
ветствующая модель будет подсвечена в дереве вариантов.
6.11. Mds
Mds (multi-dimensional scaling) – многомерное масштабирование. Метод визуализации
данных с помощью расположения точек, соответствующих изучаемым объектам, в про-
странстве меньшей размерности чем пространство признаков объектов [3, 4]. При этом
точки размещаются так, чтобы попарные расстояния между ними в новом пространстве
как можно меньше отличались от расстояний в пространстве признаков изучаемых объ-
ектов.
!
переменной, дважды щелкнув на величину веса (см. рис. 68).
Разные веса для переменных могут быть также заданы при разбиении
множества вариантов на кластеры (см. Кластеризация).
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 квантили P10 и P90 не совпадают с вариантами модели.
Для P90 значение накопленной нефти равно 295.59 тыс.ст.м3 . Но для
варианта модели (левее), соответствующего квантилю P90, значение
накопленной нефти равно 294.86 тыс.ст.м3 (это же значение указано
для P90 в таблице квантилей на вкладке Анализ).
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
!
Количество нейронов в скрытом слое и эпох обучения подбираются эм-
пирически. Количество нейронов не должно быть очень большим, иначе
сеть будет хорошо работать только на обучающем множестве или
очень маленьким, иначе сеть будет плохо обучаться.
На рис. 73 показана Прокси модель, полученная с помощью искусственной нейрон-
ной сети. Количество нейронов в скрытом слое было выбрано равным 20, а кол-во эпох
обучения – 100. Можно видеть, что качество модели очень высокое: R2 равно 0.999.
Для запуска расчета нажмите на кнопку Запустить Монте–Карло (см. рис. 71) и
задайте необходимые параметры. Вкладка Результаты Монте–Карло будет создана ав-
томатически. На этой вкладке для дальнейшего анализа полученных вариантов модели
доступны Таблица результатов, Кроссплот, Гистограмма, Анализ и Cdf.
Рис. 75. Кроссплот: дебит нефти (для разных вариантов модели) – Ось Y и переменная
M_PERM_FIPNUM_2 по оси X.
∑(Pk (C) − Tk )2
R2 = 1 −
∑(Pk (C) − ∑ Pk (C))2
Данный коэффициент показывает, насколько хорошо рассчитанные данные Pk (C) ло-
жатся на тренд. Если коэффициент R2 равен 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
µ 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 не увели-
чивается, поэтому зацикливание невозможно. Начальные центры кластеров выбираются
из соображений максимизации расстояния между ними.
Если образуются кластеры (группы точек), как показано на рис. 82, то это означает,
что значения переменных для вариантов, входящих в кластер, близки. Таким образом,
чтобы создать прогноз модели достаточно взять только по одному варианту (предста-
вителю) из имеющихся кластеров. В отличии от адаптации, в данном случае, ищется
максимум целевой функции на прогнозе.
– Прогноз с вр.шага;
– Длина шага – (один год, шесть месяцев, три месяца, месяц, неделя, день);
– Длина прогноза – (один год, 5 лет, 15 лет, Пользовательский).
• Параметры скважин.
В примере schedule файла (см. рис. 87) задана новая скважина ”PRO-N” и для всех
скважин определен контроль по забойному давлению (WCONPROD, см. 12.19.42). В
ключевом слове DEFINES (см. 12.1.24) заданы 2 переменные для прогноза: BHP1 и
BHPN – забойное давления для скважины ”PRO-1” и для новой скважины ”PRO-N”.
• Показать код скрипта показывает (только для чтения) исходный код выбранного
расчёта на Python.
• Используя таблицу.
Данный способ может использоваться для анализа неопределенности, анализа чув-
ствительности объемов и запасов к изменению переменных. В данном случае не
нужно строить полную гидродинамическую модель.
В workflow необходимо задать переменные и использовать их в расчете, напри-
мер, объемов и запасов. Создайте статистическую таблицу. Workflow должен за-
|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
Тогда относительный информационный вес для набора векторов Ω = {li1 , li2 , ..., liN ′ }
вычисляется как:
N′
′
E(N ) = ∑ E(li j )
j=1
где
!
Количество выходных переменных может быть меньше, чем Nvar .
Это происходит из-за того что относительные веса набора векто-
ров {l˜1 , l˜2 , ..., l˜k } могут быть очень большими и количество векторов k
соответственно меньше Nvar .
Эта возможность доступна также в качестве отдельной процедуры в workflow, см.
8.1.
[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.
[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.
[11] Clayton V. Deutsch, Geostatistical Reservoir Modeling, Oxford University Press, 2002
[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.