Regressionstests chaotischer numerischer Modelle


10

Wenn wir ein numerisches Modell haben, das ein reales physikalisches System darstellt und Chaos aufweist (z. B. Modelle der Fluiddynamik, Klimamodelle), wie können wir dann wissen, dass das Modell so funktioniert, wie es sollte? Wir können zwei Sätze von Modellausgaben nicht direkt vergleichen, da selbst kleine Änderungen der Anfangsbedingungen die Ausgaben einzelner Simulationen dramatisch verändern. Wir können die Modellausgabe auch nicht direkt mit Beobachtungen vergleichen, da wir die Anfangsbedingungen der Beobachtungen nie genau genug kennen können und die numerische Approximation ohnehin geringfügige Unterschiede verursachen würde, die sich durch das System ausbreiten würden.

Diese Frage ist teilweise von David Ketchesons Frage zum wissenschaftlichen Code von Unit-Tests inspiriert : Ich bin besonders daran interessiert, wie Regressionstests für solche Modelle implementiert werden könnten. Wenn eine geringfügige Änderung der Anfangsbedingungen zu größeren Änderungen der Ausgabe führen kann (was durchaus noch eine angemessene Darstellung der Realität sein kann), wie können wir diese Änderungen dann von Änderungen trennen, die durch Ändern von Parametern oder Implementieren neuer numerischer Routinen verursacht werden?

Antworten:


7

In solchen Fällen können Sie nur die Statistiken Ihrer Lösung vergleichen: Durchschnittswerte, höhere Momente, Wärmeströme über die Grenze und andere ganzzahlige Größen. Schauen Sie sich eines der vielen Papiere an, in denen Turbulenzmodelle für die Navier-Stokes-Gleichungen diskutiert werden: Sie sind randvoll mit Darstellungen von Leistungsspektren, Entalpien, Entropien, Enstrophien und anderen Wörtern, von denen Sie noch nie zuvor gehört haben . Alle sind eine ganzzahlige Größe des Durchflusses und werden mit denselben integralen Größen verglichen, die aus anderen Simulationen und / oder Experimenten berechnet wurden.


Kennen Sie ein gutes Beispielpapier? Wäre eine gute Ergänzung zu Ihrer Antwort.
naught101

Nicht aus dem Kopf - ich bin kein Turbulenzmodellierer. Ich würde jedoch mit einigen der neueren Arbeiten von Tom Hughes beginnen und von dort aus arbeiten.
Wolfgang Bangerth

Ich denke, dies ist ein gutes Beispiel für die Verwendung von zusammenfassenden Statistiken zur Bestimmung des Regimes eines dynamischen Systems: "Statistische Inferenz für verrauschte nichtlineare ökologische dynamische Systeme"
Jugurtha,

4

Wenn Ihr Code in nicht chaotischen Regimen Ihres zugrunde liegenden Problems ausgeführt werden kann, insbesondere in nicht chaotischen Regimen, in denen Sie die Methode der hergestellten Lösungen verwenden können, sollten Sie Regressionstests schreiben, die in diesen Regimen ausgeführt werden, auch wenn sie für Sie ansonsten nicht interessant sind . Wenn diese Tests fehlschlagen, wissen Sie sofort, dass bei Ihren letzten Codeänderungen ein Fehler aufgetreten ist. Dann können Sie zu physikalisch relevanteren Problemen übergehen.


Ich denke nicht, dass ganze Klimamodelle so laufen könnten, aber vielleicht könnten es Hauptkomponenten sein. So etwas wie ein Super-Unit-Test. Gute Idee.
Naught101

2
Aber das ist der Punkt. Ihre Regressionstests sollten eine gute Codeabdeckung aufweisen (gcov und dergleichen sind Ihre Freunde) und schnell ausgeführt werden. Wenn Sie ein ganzes Klimamodell als täglichen Regressionstest ausführen, verschwenden Sie vermutlich viel Zeit.
Bill Barth

Ich glaube, ich habe mehr nach dem Motto gedacht: Sie führen den Test zunächst aus und speichern dann eine Reihe von Metriken (wie in Wolfgangs Antwort erwähnt). Anschließend nehmen Sie Änderungen vor, führen die Tests erneut aus und vergleichen dieselben Metriken mit denen, die Sie zuletzt gespeichert haben. Wenn Sie das Modell (oder die Modellsuperkomponente) verbessert haben, sollten sich theoretisch alle Metriken verbessern oder zumindest nicht dramatisch verschlechtern (es sei denn, Sie waren zuvor überanpassend oder so, aber Sie können diese Entscheidung subjektiv treffen). . Ich denke, Tests in diesem Sinne sind viel qualitativer, aber sie könnten immer noch sehr nützlich sein.
naught101

Wie in dieser Antwort besprochen , nehme ich an.
Naught101

2

Zunächst werde ich mich auf Ihren letzten Satz konzentrieren, während Sie einige verschiedene Dinge in Ihrer Frage ansprechen, aber ich bin der Meinung, dass er Ihre Fragen angemessen erfasst. Wenn Sie numerische Routinen ändern, sollten Sie die Anfangsbedingungen oder Systemparameter erst ändern, wenn Sie die neue Routine von der alten validiert haben. Auf der schwächsten Ebene sehe ich darin einen Vergleich einiger zeitlich gemittelter Werte über Ihre Lösung, und sie stimmen überein (selbst wenn die vorübergehenden Verhaltensweisen innerhalb des Chaos voneinander abweichen). Auf der stärksten Ebene würden Sie erwarten, dass die beiden Routinen das vollständige Übergangsverhalten reproduzieren. Welche davon Sie wollen und welche akzeptabel ist, hängt davon ab, welche Fragen Sie stellen und welche Schlussfolgerungen Sie aus den Lösungen ziehen.

Für die Feststellung, ob ein Modell "so funktioniert, wie es sollte", ist dies eine ganz andere Frage. Dies hat nichts mit den von Ihnen gewählten numerischen Routinen zu tun. Wie Sie Ihr Modell erstellen, von Ihren vereinfachenden Annahmen bis zu Ihren Messungen / Berechnungen von Parametern, sollten Sie alle Ihre Entscheidungen auf die Physik des Problems stützen und hoffentlich vorher an ähnlichen Fällen arbeiten. Möglicherweise können Sie ein Modell anhand eines einfachen Falls validieren, der in einer Laborumgebung reproduziert wurde. Manchmal ist dies jedoch nicht trivial. Wenn Sie einen wichtigen Systemparameter nicht innerhalb einer Größenordnung bestimmen können, können Sie nicht erwarten, dass jemand den kleinen Details vertraut, die Sie im vorübergehenden lokalen Verhalten berechnen.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.