Pro e contro di diversi integratori [chiuso]


29

Quando si creano cose come la fisica nei giochi, è necessario un integratore. Ho visto l'integrazione di Verlet menzionata in diversi punti come un'ottima alternativa all'integrazione di Eulero. Ad esempio nel famoso documento di Thomas Jakobsen . Tuttavia in questo articolo Glenn Fiedler scrive:

Invece di presentarti la vasta gamma di diversi integratori esistenti, ho intenzione di andare al sodo e andare dritto al meglio. Questo integratore è chiamato integratore di ordine 4 Runge Kutta aka RK4.

Quindi a quanto pare non esiste un proiettile d'argento. Quali sono i pro e i contro di diversi integratori? Per quanto riguarda semplicità, velocità, precisione, stabilità, ecc. Quali integratori sono più adatti per quali tipi di giochi? Quando useresti Verlet, RK4 o altri? Dovresti mai usare Euler?


C'è una risposta SO che potresti immaginare stackoverflow.com/questions/2769466/…
teodron

Grazie per il link Ne sono già consapevole però.
paldepind,

Risposte:


27

Pro e contro di entrambi i metodi:

Pro RK4:

  1. precisione (grazie alla sua migliore serie di approssimazione produce una precisione del 4 ° ordine)
  2. lo smorzamento artificiale / intrinsecamente indotto (un po 'come i metodi impliciti lo fanno) aggiunge stabilità (mentre un semplice passo di Eulero non lo fa - in realtà fa il contrario, introducendo l'energia fantasma che si accumula e potrebbe immergere il sistema nel caos)

Contro RK4:

  1. spese di calcolo: sebbene non sia così impegnativo rispetto ai metodi impliciti o ai metodi IMEX ibridi, RK4 è 4 volte più costoso dell'Euler esplicito poiché richiede molte più valutazioni delle funzioni. Questo dimostra quando si punta al limite massimo dell'ottimizzazione.
  2. ancora instabile: a seconda dei tipi di forze coinvolte, RK4 può essere altrettanto instabile di Eulero. In media, RK4 è un po 'più stabile e tende a trarre questo vantaggio dalle sue "abilità" di smorzamento dotate.
  3. Non simplettico: lo smorzamento numerico ha un costo: non è possibile simulare sistemi in cui energia / volume / ecc. la perdita non dovrebbe applicare un effetto visibile nel tempo (ad es. dinamica molecolare, forze derivate dal campo potenziale, problemi variazionali)

Pro di Verlet:

  1. una o due volte la complessità di un passaggio di Eulero (a seconda del sapore del Verlet: posizione o velocità).
  2. simpatico: conserva l'energia interna
  3. accuratezza del secondo ordine: molti giochi non richiedono risultati in virgola mobile ad alta precisione e il secondo ordine è più che piacevole per gli occhi in uno scenario di gioco (in più: è stato utilizzato in una simulazione di scenario non di gioco quando è stato "scoperto", quindi non è così male)

Verlet Contro:

  1. stabile, ma comunque: probabilmente il migliore esplicito metodo in termini di stabilità. Tende a vincere il vantaggio quando si aggiungono forti vincoli al sistema, consentendo così meno mal di testa durante l'implementazione di vincoli proiettati nei motori dinamici basati sulla posizione. Si avvia all'infinito se il sistema è perturbato da grandi forze esterne e non viene aggiunto smorzamento / attrito. Anche così, ci sono alcuni limiti numericamente imposti a quanto possono essere grandi le forze interne (a molla), ma sono in media più alte di quello che RK4 può fare
  2. precisione inferiore: non utile se si desidera una stima della precisione elevata
  3. richiede, in media, intervalli di tempo più piccoli rispetto a RK4 per alcune simulazioni (RK4 beneficia sia della sua precisione che dello smorzamento interno)

L'uso l'uno rispetto all'altro dipende dallo scenario. Se la rigidità e le grandi forze esterne e le energie virtuali sono un problema, allora considera altri metodi che hanno la parola "implicita" nella loro descrizione / titolo.


Nota alcuni autori / libri usano il termine Euler semi-implicito per un vero integratore esplicito di Eulero chiamato il metodo Euler simplettico (o Euler Cromer) da cui Verlet è effettivamente derivato. Verlet è anche chiamato da alcune persone il "metodo leapfrog". Velocity Verlet e il metodo del punto medio sono abbastanza simili da una stima in una fase temporale dit + 0.5*dtè richiesto per un passaggio simile a un correttore predittore. I metodi IMEX (implicito-esplicito) sono anche usati per nominare due approcci simili ma non identici: separare i calcoli in parti rigide e non rigide e utilizzare su di essi integratori diversi (l'esplicita per non rigida, implicita per rigida) OPPURE risolvere per la velocità con un passo di aggiornamento implicito e aggiorna la posizione in modo esplicito (questo è un metodo ibrido semi-implicito che rientra nella classe di metodi IMEX perché le parti rigide influenzano maggiormente il calcolo dell'accelerazione). I metodi impliciti sono più ingombranti e richiedono la risoluzione di un sistema di equazioni non lineari simultanee per l'intera configurazione. I metodi impliciti sono usati per corpi deformabili e di solito non sono usati per corpi rigidi disaccoppiati.

Come indicato in uno dei commenti, se è possibile, non utilizzare Euler. Utilizzare il metodo del punto medio, l'Euler semi-implicito o, a parità di spesa, il Verlet di posizione. Tutti hanno una precisione leggermente superiore e sensibilmente più stabilità rispetto all'integratore Euler esplicito.

Lettura mini-confronto consigliata :

http://wiki.vdrift.net/Numerical_Integration


Un'osservazione: entrambe le varianti di Verlet possono essere codificate per valutare l'accelerazione solo una volta per aggiornamento di frame.
teodron,

1
Grazie per la risposta! Praticamente quello che stavo cercando.
paldepind,

3

Le implementazioni di Euler tendono ad essere molto veloci, ma molto meno stabili delle alternative. Runge Kutta è più lento di Eulero, ma molto più preciso e stabile.

Non sono molto informato sull'integrazione di Verlet, quindi non ho idea di come si contrapponga a Euler e Runge Kutta.

Se hai bisogno che le tue simulazioni siano più esatte, o anche a prova numerica, Runge Kutta è la migliore delle due.

Se hai bisogno di una fisica veloce ed economica per un gioco semplice, Euler è la scelta migliore.


2
Runge Kutta è di gran lunga non più stabile di EULER. È ancora Eulero, fatto 8 volte per fotogramma anziché 1 (con un po 'di predizione e correzione ma comunque ..) forums.evilmana.com/game-programming-theory/…
teodron

2
Dipende da cosa devi essere "stabile". forse avrei dovuto elaborare, Runge Kutta è numericamente più stabile di Eulero. farside.ph.utexas.edu/teaching/329/lectures/node35.html
Timothy Groote

3
Per quanto riesco a capire non c'è motivo per cui Verlet sarebbe più lento di Eulero. Quindi rispetto a Verlet Euler non ha alcun vantaggio di velocità ed è ancora molto più preciso e più stabile. Quindi penso che la tua affermazione che Euler sia la migliore per una fisica semplice e veloce sia errata.
paldepind,

4
Ecco un post sul blog che mostra la grande differenza nella precisione: kahrstrom.com/gamephysics/2011/08/03/euler-vs-verlet
paldepind

2
Nell'ultimo livello di Transformers (PS2, 2004), il modello di volo che ho implementato utilizzava un integratore Euler che ho aggiornato 2000 volte per frame. (Certo, era un modello di volo abbastanza realistico che veniva accelerato a velocità supersoniche e collocato all'interno di un campo di gravità curvo, quindi i suoi requisiti di stabilità erano piuttosto intensi. E non c'era molto altro ad alta intensità di CPU in quel livello, quindi Sono stato in grado di cavarmela). Generare iterazioni extra su Euler è spesso molto più semplice che passare a un iteratore diverso.
Trevor Powell,

1

Innanzitutto penso che dovresti usare Euler fino a quando non sperimenterai un'esigenza diretta di utilizzare uno schema di integrazione più avanzato. È veloce e facile da implementare.

Se riscontri problemi di stabilità come sistemi di molle che non si fermano mai o se la tua simulazione richiede un alto livello di precisione, inizia a sperimentare con gli altri.

Uno di quelli che non ho visto menzionato sopra è il metodo del punto medio che è molto facile da implementare e richiede solo un ulteriore passaggio di integrazione.


1
Penso che Verlet sia solo un semplice e facile da implementare
paldepind

Non l'ho mai usato da solo, ma da quello che ho capito probabilmente hai ragione.
Mikael Högström,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.