Während der Entwicklung meiner N-Körpersimulation mit Visualisierung in WebGL habe ich eine Optimierung entwickelt und frage mich, ob sie einen Namen hat. Ich finde es unwahrscheinlich, dass es noch nie zuvor gemacht wurde.
Das funktioniert folgendermaßen: Führen Sie im ersten Zeitschritt eine Iteration aller Paare durch. Während dieser Iteration für jedes Partikel:
- Speichern Sie alle engen Wechselwirkungen in einer Liste - und repräsentieren Sie alle Partikel, die sich in der Nähe dieser befinden. Diese Wechselwirkungen werden fortan in jedem Zeitschritt ausgewertet. Diese Liste enthält normalerweise eine Handvoll Einträge.
- Iterate auf allen anderen Teilchen und berechnet eine Netto-weit Kraft , dass Sie mit dem Partikel speichern. Diese Nettokraft wird somit zwischen Zeitschritten gespeichert und kontinuierlich auf das Partikel ausgeübt.
Dann , als die Simulation weiter über seinen ersten Zeitschritt in einer Round-Robin - Mode, jeder Zeitschritt Update eine kleine Anzahl von Partikeln Listen schließen Wechselwirkungen und Netto-weit Kräfte . Damit über eine bestimmte Anzahl von Zeitschritten - beispielsweise 1000 - alle engen Wechselwirkungen und Nettofernkräfte der Partikel aktualisiert wurden. Diejenigen, die Sie nicht aktualisieren, überprüfen nur ihre engen Interaktionen und wenden die Nettofernkraft an. In diesem Beispiel ist die rechnerische Komplexität von jedem Zeitschritt so etwas wie statt N 2 .
Ein Trick, um dies auch einigermaßen genau zu machen, besteht darin, "enge Wechselwirkungen" besser zu identifizieren. Manchmal ist die Nähe nicht der beste Indikator - Sie können auch Masse und Relativgeschwindigkeit usw. berücksichtigen. "Wichtigste Interaktionen" könnte ein besseres Wort sein. Oder "am wahrscheinlichsten, dass sich Interaktionen bald ändern".
Diese Optimierung ermöglicht viel mehr interagierende Partikel als die All-Pair-Methode, aber ich bin mir nicht sicher, wie ich sie in O () - Begriffen beschreiben soll, da sie nicht bei jedem Zeitschritt eine vollständige Lösung darstellt, sondern (etwas falsch) alt wiederverwendet Informationen und verteilt den Rechenaufwand im Laufe der Zeit.
( Disclaimer: Meine webgl Simulation hat auch „vfx“ Partikel , die nur bekommen betroffen durch die Schwerkraft und nicht die Wirkung hin und her bewegt, so ist es nicht so unglaublich schnell , wie es erscheinen könnte )
Hat diese Optimierungstechnik also einen Namen?