Teste de regressão de modelos numéricos caóticos

10

Quando temos um modelo numérico que representa um sistema físico real e que exibe caos (por exemplo, modelos de dinâmica de fluidos, modelos climáticos), como podemos saber que o modelo está funcionando como deveria? Não podemos comparar diretamente dois conjuntos de resultados do modelo, porque mesmo pequenas alterações nas condições iniciais mudarão drasticamente os resultados das simulações individuais. Não podemos comparar a saída do modelo diretamente com as observações, porque nunca podemos conhecer com detalhes suficientes as condições iniciais das observações e a aproximação numérica causaria, de qualquer maneira, pequenas diferenças que se propagariam pelo sistema.

Essa questão é parcialmente inspirada na pergunta de David Ketcheson sobre o código científico de teste de unidade : estou particularmente interessado em como os testes de regressão para esses modelos podem ser implementados. Se uma pequena mudança nas condições iniciais pode levar a grandes mudanças na produção (que ainda podem ser representações adequadas da realidade), como podemos separar essas mudanças das mudanças causadas pela modificação de parâmetros ou pela implementação de novas rotinas numéricas?

naught101
fonte

Respostas:

7

Tudo o que você pode comparar nesses casos são as estatísticas da sua solução: médias, momentos mais altos, fluxos de calor através do limite e outras quantidades integrais. Dê uma olhada em um dos muitos trabalhos que discutem modelos de turbulência para as equações de Navier-Stokes, por exemplo: eles estão cheios de gráficos de potência, entalpias, entropias, enstrofias e outras palavras das quais você nunca ouviu falar antes. . Todos são uma quantidade integral do fluxo e são comparados com as mesmas quantidades integrais calculadas de outras simulações e / ou experimentos.

Wolfgang Bangerth
fonte
Você conhece um bom exemplo de trabalho? Seria uma boa adição à sua resposta.
naught101
Não estou de cabeça para baixo - eu não sou uma modelo de turbulência. Eu começaria com alguns dos trabalhos mais recentes de Tom Hughes, e trabalharia a partir daí.
Wolfgang Bangerth
Eu acho que este é um bom exemplo de como usar as estatísticas de resumo para determinar o regime de um sistema dinâmico: "A inferência estatística para sistemas dinâmicos não-lineares ecológica ruidosos"
Jugurta
4

Se o seu código puder ser executado em regimes não caóticos do seu problema subjacente, especialmente em regimes não caóticos, nos quais você pode usar o método de soluções fabricadas, escreva testes de regressão que são executados nesses regimes, mesmo que não sejam interessantes para você . Se esses testes falharem, você saberá imediatamente que algo deu errado nas alterações de código mais recentes. Depois, você pode passar para problemas mais relevantes fisicamente.

Bill Barth
fonte
Não acho que modelos climáticos inteiros possam ser executados dessa maneira, mas talvez componentes importantes possam. Algo como um teste de super-unidade. Boa ideia.
naught101
2
Mas esse é o ponto. Seus testes de regressão devem ter uma boa cobertura de código (gcov e outros são seus amigos) e devem ser executados rapidamente. Se você estiver executando um modelo climático inteiro como seu teste de regressão diário, suspeito que esteja perdendo muito tempo.
Bill Barth
Eu acho que estava pensando mais do seguinte modo: você executa o teste inicialmente e depois armazena várias métricas (como mencionado na resposta de Wolfgang). Depois, faça as alterações, execute os testes novamente e compare as mesmas métricas com as armazenadas na última vez. Se você melhorou o modelo (ou supercomponente do modelo), teoricamente, todas as métricas devem melhorar, ou pelo menos não piorar drasticamente (a menos que você tenha se adaptado demais antes ou algo assim, mas você pode tomar essa decisão subjetivamente) . Acho que os testes nesse sentido são muito mais qualitativos, mas ainda podem ser muito úteis.
precisa saber é o seguinte
Como discutido nesta resposta , suponho.
precisa saber é o seguinte
2

Primeiro, vou focar na sua última frase, enquanto você aborda algumas coisas diferentes na sua pergunta, mas acho que ela captura adequadamente o que você está perguntando. Se você estiver alterando rotinas numéricas, não deverá alterar as condições iniciais ou os parâmetros do sistema até ter validado a nova rotina da antiga. No nível mais fraco, vejo isso como uma comparação de alguns valores médios do tempo em relação à sua solução, e eles estão de acordo (mesmo que os comportamentos transitórios divergissem um do outro dentro do caos). No nível mais forte, você esperaria que as duas rotinas reproduzissem o comportamento transitório completo. Qual delas você deseja e qual é aceitável depende de quais perguntas você está fazendo e de quais conclusões você está tirando das soluções.

Quanto a dizer se um modelo está "funcionando como deveria", essa é uma questão totalmente diferente. Isso não tem nada a ver com as rotinas numéricas que você escolher. Como você constrói seu modelo, de suas suposições simplificadoras a suas medições / cálculos de parâmetros, você deve basear todas as suas decisões na física do problema e, esperançosamente, trabalhos anteriores feitos em casos semelhantes. Você pode validar um modelo com um caso simples reproduzido em uma configuração de laboratório, mas há momentos em que mesmo isso não é trivial. Se você não pode determinar um parâmetro importante do sistema dentro de uma ordem de magnitude, não pode esperar que alguém confie nos pequenos detalhes que você está calculando no comportamento local transitório.

Godric Seer
fonte