0
Июл 11
Здравствуйте!
Автоадаптация тема уже не новая. Обсуждались существующие пакеты...
Но! У меня есть желание написать самому программу для этого.
Хотелось бы узнать Ваши мысли на этот счет.
Было бы не плохо почитать статьи и т.п. на эту тему. Может кто подкинет ссылку.
Можно так же поделиться своим опытом в этом деле.
Спасибо!
Опубликовано
30 Июл 2011
Активность
26
ответов
4665
просмотров
11
участников
0
Рейтинг
Мнение какое? Опытом могу поделится. А что надо то?
в этом направлении стои работать или ни чего интересней FronSim'a(хотя я его не знаю) придумать почти не реально
Интересуют алгоритмы в основном.
Какие параметры программы правили? Какое кол-во итераций? Какой итог работы программы?..
Работать над этим направлением ещё долго и долго.
Что почитать? Всевозможные алгоримты оптимизации, симплекс-методы, градиентные методы, генетические алгоритмы. Благо это все несложно и в обилии. Эти алгоритмы никак не связаны с гидродинамикой, а работают с моделью как с черным ящиком. В этом их самый серьезный минус.
Они бестолковые.
Какие параметры? Любые параметры
Количество итераций? Все равно, не в этом дело.
Какой итог? Разный.
Можно поподробней?
Есть ли идеи как сделать их "толковыми"?
В ходе адаптации моделист правит параметрв исходя из какой то логики. Так?
Если принять это за аксиому :), то эту логиуку можно заложить в программу...
Идеи конечно есть. Тешу надеждой завершить диссертацию
Набросал примерно как действую я при адаптации. Это грубо и нуждается в критики и дополнении. И вообще не очень себе пока представляю как должны быть устроены некоторые функции.
Написано в С++. Блок схему не стал состовлять. Извините.:)
Прошу отнестись весьма критически.
Очень буду рад любым дополнениям, исправлениям, советам.
Ну, допустим. Пусть так.
FrontSim - не средство автоматизированной адаптации, а симулятор.
К средствам можно отнести программы, реализующие алгоритм решения задачи оптимизации (такие средства тут в форуме обсуждались).
Бестолковость? Да, конечно, так все и останется еще долго (даже если кто-нибудь сошьет воедино оптимизатор и симулятор). Машина толковой сама по себе не станет, просто увеличивается "скорость молотилки".
Писать самому еще одну реализацию алгоритма? Вряд ли имеет смысл в силу предыдущего факта. Хотя, если обратиться к методам статистических ансамблей, может что и выудите, в том числе и дисер себе.
FrontSim - симулятор линий тока. Тут, наверно, подразумевался SimOpt...
Не существует даже алгоритма нахождения всех корней произвольно заданного уравнения с одной переменной в общем виде, а вы "автоматическая адаптация" :-)
Вот некоторые из причин почему никто еще не создал чего-то выдающегося в этой сфере:
- нет правильного решения. Все решения на заданной сетке и параметрами (напр. общие фазовые проницаемости), могут быть далеки от идеального соответственно трудно сказать какие решения лучше, а какие хуже. Любая проверка на сходимость затруднительна для полноразмерных моделей - какую функцию для оптимизации выбрать
- возможны не монотонные изменения входных параметров, например наличие разломов, выклинивания и т.д.
- часто присутствует противоречивость исходных данных, просто мы не всегда знаем об этом (где откуда что добывается и куда закачивается)
- пространство решений огромно по сравнению с количеством вариантов которые мы можем просчитать. Это как научить играть в шахматы компьютер делающий одну операцию в секунду
Существующие пакеты обычно не ставят целью найти глобальное правильное решение, только помочь инженеру. В чем их и польза. Мне кажется перспективным и мало проработанным направлением может быть поиск локальных решений в заданных условиях. Например поиск непроводящих разломов, решение аквифера по продуктивности и объему, что нибудь со скважинами там типа разделения добычи по пластам. Такие задачи могут быть по силам для авто-адаптаторов.
Меня раздражает остутствие в программах-автоадаптаторах физического наполнения. Это просто решатели уравнений (и то не факт что при заданных параметрах ты найдешь ответ, не факт).
Поэтому использовать их нужно для физически понятных человеку задач. То есть: сам знаешь что - програмка докручивает ответ до более точного. Но фокус такой, что гидродинамику знать точное значение нет нужды, он сам с двух-трех прогонов "поставит" нужное значение. Поэтому и ценность такого рода софта сомнительная.
Гораздо больший интерес вызывает физически наполненные автоадаптаторы...которые на словах я могу объяснить как работают, но не слышал о реализации.
Можете объяснить?..
Объясните.
Я считаю что програмка должна уметь "докручивать". Лично мне было бы приятней что бы это делала она. Тут нет ни какого творчиства. Но, конечно, если софт умеет только докручивать, то и цена должна быть ему соответствующая.
Цена ему 0.00 RUR (конечно больше, но я не виноват, что оптимизирующие пакеты выкладывают в свободный доступ). Наберусь терпения, и расскажу как один такой пакет можно прикрутить к ECLIPSE за просто так.
Среди оптимизационных алгоритмов есть эвристические - это такие, которые находят не самое оптимальное решение, а "одно из более-менее хороших" путем отсечения "предположительно ложных путей", существенно ускоряя время расчета. Основная идея таких алгоритмов - берется начальное допустимое решение, затем итерационно, исходя из какой-то логики (куда можно заложить то, что вы называете физической основой), выбирается следующее допустимое решение в некоторой "окрестности", которое "чуть-чуть получше" и т.д. "пока не надоест". При этом не перебираются все подряд варианты. Возможно включение случайных скачков к какому-либо похожему допустимому решению, но не обязательно более лучшему. Ну и всякие другие фишки. Именно в эвристику ИМХО можно заложить физическую основу. А т.к. у нас погрешности туда-сюда в 10%, то то что решение не совсем оптимальное, никак не повлияет.
У меня был опыт работы с "автоадаптаторами". Как мне показалось, основная проблема в том, что все сводится к типичной "молотилке" моделей. Очень тяжело оценить математически, что есть садаптированная модель.
Да, когда 10-20 скважин в модели можно еще что-то внятное сделать, но когда у тебя в модели over 100 скважин тут уже вряд ли что-то достойное получится.
ИМХО, пока не придумают первое подобие искусственного интелекта, вся это автоадаптация просто игрушка. Быстрее будет сделать руками.
Как раз математически все просто, построил прогнозы и сравнил с фактом.
Тяжело - наступить на горло собственной песне и признать, что модель совсем не "садаптирована" по итогам N дней работы...
Я не буду спорить - соль в том, что мозги соображают гибче, чем работает программа.
Авто-подход хорош для простого перебора некоторых параметров для первых приближений.
К счастью, работа инженера-гидродинамика, пока что не заменима машиной и это хорошо =D
"Гидродинамика" заменить машиной не проблема. С инженером по разработке месторождений все гораздо сложнее.
Если не проблема, покажите, где это было сделано?
Нет.
Собственно задача (полу)автоматической адаптации включает 3 пункта:
1) Параметризация модели - т.е. задаем, какие параметры будем менять (напр. множители проводимости, пор. объема и проч.).
Эта часть нетривиальна и требует хорошего понимания каждого конкретного м-рождения. И вообще опыта.
2) Задание целевой функции - т.е. задаем, как будет количественно отличаться хорошая модель от плохой.
Эта часть наиболее проста, к примеру берем сумму квадратов разностей по всем историческим и расчитанным скв. данным, добавляем где надо веса (либо ковариац. матрицы).
3) Задание алгоритма оптимизации, который будет минимизировать заданную целевую функцию, меняя указанные параметры.
Опять же это нетривиальная часть, т.к. нет универсальных алгоритмов. Из наиболее применяемых можно указать 2 группы:
а) Генетические, Имитация отжига, Метод роя частиц и проч. стохастические поделки. Их плюс - возможность избегать застревания в локальных минимумах целевой функции. Также некоторые алгоритмы позволяют находить не одну садаптированную модель, а некоторое их множество (ансамбль), что полезно для учета неопределенностей модели. Еще плюс - к этим алгоритмам легко прикручивается симулятор, т.к. здесь нам требуются только значения целевой функции (никаких градиентов). Минус таких алгоритмов - небольшое число параметров, которое можно задать - в диапазоне 10 - 100 штук. К тому же для адаптации потребуется прогон нескольких тысяч вариантов модели, т.о. модель должна быть небольшой.
б) Градиентные методы (Напр. метод Ньютона с ограничением шага. Собственно, таковой метод и используется в SimOpt). Плюс - можно брать много параметров (сотни, возможно и больше). Минус - возможность застревания в лок. минимумах. Еще минус - для работы таких алгоритмов нужно вычислять градиенты (и еще желательно гессианы) целевой функции. По соображениям экономии времени делать это надо напрямую в симуляторе, т.е. на руках должны быть, к примеру коды симулятора, или симулятор, который открыто выдает пользователю градиенты. Зато сходятся градиентные методы на порядки быстрее всяких генетических и проч.
в) есть еще методы с фильтрами Кальмана, но по ним много сказать не могу.
Имитация отжига в пункте а) заинтересовала
Ну не подобрали лучше перевода для слова "annealing". ЕМНИП метод и название не в России придуманы.
В Numerical Recipes есть глава про subj. Да и вообще, simulated annealing много где применяется. Я делал программу для картопостроения с его использованием. Решалась задача поиска оптимального расположения подписей для точечных и линейных элементов на карте.