Регрессионное тестирование хаотических численных моделей


10

Когда у нас есть числовая модель, представляющая реальную физическую систему и демонстрирующая хаос (например, модели гидродинамики, модели климата), как мы можем знать, что модель работает так, как должна? Мы не можем сравнивать два набора выходных данных модели напрямую, потому что даже небольшие изменения начальных условий резко изменят результаты отдельных симуляций. Мы не можем сравнивать результаты модели непосредственно с наблюдениями, потому что мы никогда не сможем с достаточной детализацией узнать начальные условия наблюдений, и численное приближение в любом случае вызовет незначительные различия, которые распространятся по всей системе.

Этот вопрос частично вдохновлен вопросом Дэвида Кетчона о модульном тестировании научного кода : меня особенно интересует, как можно реализовать регрессионные тесты для таких моделей. Если незначительное изменение начальных условий может привести к значительным выходным изменениям (которые вполне могут быть адекватными представлениями реальности), то как мы можем отделить эти изменения от изменений, вызванных изменением параметров или внедрением новых числовых процедур?

Ответы:


7

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


Вы знаете хороший пример бумаги? Будет хорошим дополнением к вашему ответу.
naught101

Не в голове - я не модельер турбулентности. Я хотел бы начать с некоторых из более поздних работ Тома Хьюза и работать там.
Вольфганг Бангерт

Я думаю, что это хороший пример использования сводной статистики для определения режима динамической системы: «Статистический вывод для шумных нелинейных экологических динамических систем»
Jugurtha

4

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


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

2
Но в этом все дело. Ваши регрессионные тесты должны иметь хорошее покрытие кода (gcov и т.п. - ваши друзья) и должны выполняться быстро. Если в качестве ежедневного регрессионного теста вы используете целую климатическую модель, я подозреваю, что вы теряете много времени.
Билл Барт

Я думаю, что я думал в большей степени: сначала вы запускаете тест, а затем сохраняете несколько метрик (как упоминалось в ответе Вольфганга). Затем вы вносите изменения, снова запускаете тесты и сравниваете те же самые показатели с теми, которые вы сохранили в прошлый раз. Если вы улучшили модель (или суперкомпонент модели), то теоретически все показатели должны улучшаться или, по крайней мере, не ухудшаться кардинально (если только вы не подходили ранее или что-то в этом роде, но вы можете принять это решение субъективно) , Я думаю, что тесты в этом смысле намного качественнее, но они все еще могут быть очень полезными.
naught101

Как обсуждалось в этом ответе , я полагаю.
naught101

2

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

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.