Avantages et inconvénients des différents intégrateurs [fermé]

29

Pour créer des choses comme la physique dans les jeux, vous avez besoin d'un intégrateur. J'ai vu l'intégration de Verlet mentionnée à plusieurs endroits comme une excellente alternative à l'intégration d'Euler. Par exemple dans le célèbre document de Thomas Jakobsen . Cependant, dans cet article, Glenn Fiedler écrit:

Plutôt que de vous présenter la vaste gamme d'intégrateurs différents qui existent, je vais aller droit au but et aller directement au meilleur. Cet intégrateur s'appelle l'intégrateur Runge Kutta order 4 aka RK4.

Donc, apparemment, il n'y a pas de solution miracle. Quels sont les avantages et les inconvénients des différents intégrateurs? Concernant la simplicité, la vitesse, la précision, la stabilité, etc. Quels intégrateurs conviennent le mieux à quels types de jeux? Quand utiliseriez-vous Verlet, RK4 ou autres? Devriez-vous jamais utiliser Euler?

paldepind
la source
Il y a une réponse SO que vous pourriez avoir envie de stackoverflow.com/questions/2769466/…
teodron
Merci pour le lien. Mais j'en suis déjà conscient.
paldepind

Réponses:

27

Avantages et inconvénients des deux méthodes:

Avantages du RK4:

  1. précision (grâce à sa meilleure série d'approximation, elle donne une précision de 4ème ordre)
  2. l'amortissement artificiel / intrinsèquement induit (un peu comme les méthodes implicites le font) ajoute de la stabilité (alors qu'une simple étape d'Euler ne fait pas - elle fait le contraire en fait, introduisant l'énergie fantôme qui s'accumule et pourrait plonger le système dans le chaos)

RK4 Contre:

  1. frais de calcul: bien qu'il ne soit pas si exigeant par rapport aux méthodes implicites ou hybrides IMEX, le RK4 est 4 fois plus cher que l'Euler explicite car il nécessite beaucoup plus d'évaluations de fonctions. Cela se voit lorsque vous visez la pointe de l'optimisation.
  2. toujours instable: selon les types de forces impliquées, RK4 peut être tout aussi instable qu'Euler. En moyenne, RK4 est un peu plus stable et tend à tirer cet avantage de ses "compétences" d'amortissement.
  3. Non symplectique: l'amortissement numérique a un coût - vous ne pouvez pas simuler des systèmes où l'énergie / le volume / etc. la perte ne devrait pas appliquer d'effet visible dans le temps (par exemple, dynamique moléculaire, forces dérivées du champ potentiel, problèmes variationnels)

Verlet Pros:

  1. une ou deux fois la complexité d'une étape Euler (selon votre saveur Verlet: position ou vitesse).
  2. symplectique: conserve l'énergie interne
  3. précision du second ordre: de nombreux jeux ne nécessitent pas de résultats en virgule flottante de haute précision, et le second ordre est plus que plaisant pour l'œil dans un scénario de jeu (plus: il a été utilisé dans une simulation de scénario non-jeu lorsqu'il a été "découvert", donc c'est pas si mal)

Verlet Inconvénients:

  1. stable, mais quand même: probablement la meilleure méthode explicite en termes de stabilité. Il a tendance à prendre l'avantage lorsque des contraintes dures sont ajoutées au système, permettant ainsi de réduire les maux de tête lors de la mise en œuvre des contraintes projetées dans les moteurs dynamiques basés sur la position. Il part à l'infini si le système est perturbé par de grandes forces externes et qu'aucun amortissement / frottement n'est ajouté. Même ainsi, il existe certaines limites imposées numériquement à la taille des forces internes (ressort), mais elles sont en moyenne plus élevées que ce que RK4 peut faire
  2. précision inférieure: pas utile si vous voulez des estimations de haute précision
  3. nécessite, en moyenne, des pas de temps plus petits que RK4 pour certaines simulations (RK4 bénéficie à la fois de sa précision et de son amortissement interne)

Utiliser l'un sur l'autre dépend du scénario. Si la rigidité et les grandes forces externes et énergies virtuelles sont un problème, alors envisagez d'autres méthodes ayant le mot "implicite" dans leur description / titre.


Notez que certains auteurs / livres utilisent le terme Euler semi-implicite pour un intégrateur Euler explicite réel appelé la méthode Euler symplectique (ou Euler Cromer) dont Verlet est réellement dérivé. Verlet est aussi appelée par certains la "méthode du saute-mouton". Velocity Verlet et la méthode des points médians sont assez similaires car une estimation à un pas de temps det + 0.5*dtest nécessaire pour une étape de type prédicteur-correcteur. Les méthodes IMEX (implicite-explicite) sont également utilisées pour nommer deux approches similaires mais non identiques: séparer les calculs en parties rigides et non rigides et utiliser différents intégrateurs sur celles-ci (explicites pour non-rigides, implicites pour raides) OU résoudre pour la vitesse avec une étape de mise à jour implicite et mettre à jour la position de manière explicite (il s'agit d'une méthode hybride semi-implicite tombant dans la classe de méthodes IMEX car les parties rigides affectent le plus le calcul de l'accélération). Les méthodes implicites sont plus lourdes et nécessitent de résoudre un système d'équations non linéaires simultanées pour la configuration entière. Les méthodes implicites sont utilisées pour les corps déformables et ne sont généralement pas utilisées pour les corps rigides découplés.

Comme indiqué dans l'un des commentaires, si vous le pouvez, n'utilisez pas Euler. Utilisez soit la méthode du point médian, l'Euler semi-implicite ou, au même prix, la position-Verlet. Tous ont une précision légèrement supérieure et sensiblement plus de stabilité que l'intégrateur Euler explicite.

Lecture de mini-comparaison recommandée :

http://wiki.vdrift.net/Numerical_Integration

Gabriel Conrad
la source
Une observation: les deux variantes de Verlet peuvent être codées pour évaluer l'accélération une seule fois par mise à jour de trame.
teodron
1
Merci d'avoir répondu! À peu près ce que je cherchais.
paldepind
3

Les implémentations d'Euler ont tendance à être très rapides, mais beaucoup moins stables que les alternatives. Runge Kutta est plus lent qu'Euler, mais beaucoup plus précis et stable.

Je ne suis pas très bien informé sur l'intégration de Verlet, donc je ne sais pas comment cela se compare à Euler et Runge Kutta.

Si vous avez besoin que vos simulations soient plus exactes, voire numériques, Runge Kutta est la meilleure des deux.

Si vous avez besoin d'une physique rapide et peu coûteuse pour un jeu simple, Euler est le meilleur choix.

Timothy Groote
la source
2
Runge Kutta est de loin PAS PLUS STABLE QUE EULER. C'est toujours Euler, fait 8 fois par image au lieu de 1 (avec un peu de prédiction et de correction mais quand même ..) forums.evilmana.com/game-programming-theory/…
teodron
2
Cela dépend de ce dont vous avez besoin pour être «stable». j'aurais peut-être dû élaborer, le runge kutta est numériquement plus stable que euler. farside.ph.utexas.edu/teaching/329/lectures/node35.html
Timothy Groote
3
Autant que je sache, il n'y a aucune raison pour que Verlet soit plus lent qu'Euler. Donc, par rapport à Verlet, Euler n'a aucun avantage en termes de vitesse et il est toujours beaucoup plus précis et plus stable. Par conséquent, je pense que votre affirmation selon laquelle Euler est le meilleur pour une physique simple et rapide est incorrecte.
paldepind
4
Voici un article de blog montrant la grande différence de précision: kahrstrom.com/gamephysics/2011/08/03/euler-vs-verlet
paldepind
2
Dans le dernier niveau de Transformers (PS2, 2004), le modèle de vol que j'ai implémenté utilisait un intégrateur Euler que j'ai mis à jour 2000 fois par image. (Bien sûr, c'était un modèle de vol assez réaliste accéléré à des vitesses supersoniques et placé à l'intérieur d'un champ de gravité incurvé, donc ses exigences de stabilité étaient assez intenses. Et il n'y avait pas grand-chose d'autre nécessitant beaucoup de CPU à ce niveau, donc J'ai pu m'en tirer). Lancer des itérations supplémentaires sur Euler est souvent beaucoup plus facile que de passer à un autre itérateur.
Trevor Powell,
1

Tout d'abord, je pense que vous devriez utiliser Euler jusqu'à ce que vous éprouviez un besoin direct d'utiliser un schéma d'intégration plus avancé. Il est rapide et facile à mettre en œuvre.

Si vous rencontrez des problèmes de stabilité tels que des systèmes de ressorts qui ne s'arrêtent jamais ou si votre simulation nécessite un haut niveau de précision, commencez à expérimenter avec les autres.

L'une que je n'ai pas vue mentionnée ci-dessus est la méthode du milieu qui est très facile à mettre en œuvre et ne nécessite qu'une seule étape d'intégration supplémentaire.

Mikael Högström
la source
1
Je pense que Verlet est juste un simple et facile à mettre en œuvre
paldepind
Je ne l'ai jamais utilisé moi-même, mais d'après ce que je comprends, vous avez probablement raison.
Mikael Högström