Pro dan kontra dari berbagai integrator [ditutup]


29

Saat membuat hal-hal seperti fisika dalam game, Anda memerlukan integrator. Saya telah melihat integrasi Verlet menyebutkan beberapa tempat sebagai alternatif yang bagus untuk integrasi Euler. Misalnya dalam dokumen terkenal oleh Thomas Jakobsen . Namun dalam artikel ini Glenn Fiedler menulis:

Daripada memperkenalkan Anda ke beragam integrator berbeda yang ada, saya akan memotong ke pengejaran dan langsung ke yang terbaik. Integrator ini disebut integrator Runge Kutta order 4 alias RK4.

Jadi ternyata tidak ada peluru perak. Apa pro dan kontra dari integrator yang berbeda? Mengenai kesederhanaan, kecepatan, ketepatan, stabilitas, dll. Integrator mana yang paling cocok untuk jenis permainan apa? Kapan Anda akan menggunakan Verlet, RK4 atau yang lainnya? Haruskah Anda menggunakan Euler?


Ada jawaban SO yang mungkin Anda sukai stackoverflow.com/questions/2769466/…
teodron

Terima kasih untuk tautannya. Saya sudah menyadarinya.
paldepind

Jawaban:


27

Pro dan kontra dari kedua metode:

RK4 Pro:

  1. keakuratan (berkat seri aproksimasinya yang lebih baik menghasilkan presisi urutan ke-4)
  2. redaman buatan / yang diinduksi secara inheren (sedikit seperti metode implisit melakukannya) menambah stabilitas (sedangkan langkah Euler sederhana tidak - justru melakukan yang sebaliknya, memperkenalkan energi hantu yang menumpuk dan dapat membuat sistem terjerumus ke dalam kekacauan)

Kontra RK4:

  1. biaya perhitungan: walaupun tidak terlalu menuntut dibandingkan dengan metode implisit atau metode IMEX hibrid, RK4 adalah 4 kali lebih mahal daripada Euler eksplisit karena memerlukan banyak evaluasi fungsi. Ini terlihat saat mengincar tepi optimisasi.
  2. masih tidak stabil: tergantung pada jenis kekuatan yang terlibat, RK4 bisa sama tidak stabilnya dengan Euler. Rata-rata, RK4 sedikit lebih stabil dan cenderung menarik manfaat ini dari "keterampilan" redamannya.
  3. Non-simplektik: redaman numerik disertai dengan biaya - Anda tidak dapat mensimulasikan sistem di mana energi / volume / dll. kerugian seharusnya tidak menerapkan efek yang terlihat dari waktu ke waktu (mis. Dinamika Molekuler, kekuatan turunan Potensi Lapangan, masalah variasi)

Prolet Prolet:

  1. satu atau dua kali kompleksitas langkah Euler (tergantung pada rasa Verlet Anda: posisi atau kecepatan).
  2. symplectic: menghemat energi internal
  3. akurasi urutan kedua: banyak game tidak memerlukan hasil floating point presisi tinggi, dan urutan kedua lebih dari menyenangkan mata dalam skenario game (plus: itu digunakan dalam simulasi skenario non-game ketika "ditemukan", jadi tidak seburuk itu)

Kekurangan Verlet:

  1. stabil, tetapi tetap: mungkin metode eksplisit terbaik dalam hal stabilitas. Ini cenderung memenangkan tepi ketika kendala keras ditambahkan ke sistem, sehingga memungkinkan untuk lebih sedikit sakit kepala ketika menerapkan kendala yang diproyeksikan di mesin dinamika berbasis posisi. Ini memicu hingga tak terbatas jika sistem terganggu dengan kekuatan eksternal yang besar dan tidak ada redaman / gesekan yang ditambahkan. Meski begitu, ada batas tertentu yang ditentukan secara numerik untuk seberapa besar kekuatan internal (pegas) dapat, tetapi mereka rata-rata lebih tinggi dari apa yang dapat dilakukan RK4
  2. akurasi yang lebih rendah: tidak berguna jika Anda ingin perkiraan prakiraan tinggi
  3. membutuhkan, rata-rata, langkah-langkah waktu yang lebih kecil daripada RK4 untuk beberapa simulasi (RK4 mendapat manfaat dari keakuratan dan redaman internal)

Menggunakan satu di atas yang lain tergantung pada skenario. Jika kekakuan dan kekuatan eksternal besar dan energi virtual adalah masalah, maka pertimbangkan metode lain yang memiliki kata "implisit" dalam deskripsi / judulnya.


Catatan beberapa penulis / buku menggunakan istilah semi-implisit Euler untuk integrator Euler eksplisit aktual yang disebut metode Euler symplectic (atau Euler Cromer) dari mana Verlet sebenarnya berasal. Verlet juga disebut oleh beberapa orang sebagai "metode leapfrog". Velocity Verlet dan metode titik tengah cukup mirip sejak estimasi pada langkah waktut + 0.5*dtdiperlukan untuk langkah prediktor-korektor. Metode IMEX (implisit-eksplisit) juga digunakan untuk memberi nama dua pendekatan yang serupa tetapi tidak identik: pisahkan perhitungan menjadi bagian kaku dan non-kaku dan gunakan integrator berbeda pada mereka (eksplisit untuk non-kaku, implisit untuk kaku) ATAU pecahkan untuk kecepatan dengan langkah pembaruan implisit dan memperbarui posisi secara eksplisit (ini adalah metode semi-implisit hybrid yang jatuh pada kelas metode IMEX karena bagian kaku paling mempengaruhi perhitungan akselerasi). Metode implisit lebih rumit dan membutuhkan penyelesaian sistem persamaan non-linear simultan untuk seluruh konfigurasi. Metode implisit digunakan untuk benda yang cacat dan biasanya tidak digunakan untuk benda kaku yang dipisahkan.

Seperti yang dinyatakan dalam salah satu komentar, jika Anda bisa, jangan gunakan Euler. Gunakan metode titik tengah, Euler semi-implisit atau, dengan biaya yang sama, posisi-Verlet. Semuanya memiliki akurasi sedikit lebih tinggi dan stabilitas yang lebih masuk akal daripada integrator Euler eksplisit.

Bacaan perbandingan kecil yang disarankan :

http://wiki.vdrift.net/Numerical_Integration


Satu pengamatan: kedua varian Verlet dapat dikodekan untuk mengevaluasi akselerasi hanya satu kali per pembaruan frame.
teodron

1
Terima kasih atas jawabannya! Cukup banyak apa yang saya cari.
paldepind

3

Implementasi Euler cenderung sangat cepat, tetapi jauh lebih tidak stabil daripada alternatifnya. Runge Kutta lebih lambat dari Euler, tetapi jauh lebih tepat dan stabil.

Saya tidak terlalu berpengetahuan tentang integrasi Verlet, jadi saya tidak tahu bagaimana hal itu terjadi terhadap Euler dan Runge Kutta.

Jika Anda membutuhkan simulasi Anda untuk lebih tepat, atau bahkan bukti numerik, Runge Kutta adalah yang terbaik dari keduanya.

Jika Anda membutuhkan fisika cepat dan berbiaya rendah untuk gim sederhana, Euler adalah pilihan yang lebih baik.


2
Runge Kutta oleh JAUH JAUH LEBIH STABIL DARI EULER. Itu masih Euler, dilakukan 8 kali per frame, bukan 1 (dengan sedikit prediksi dan koreksi tetapi masih ..) forums.evilmana.com/game-programming-theory/…
teodron

2
Tergantung dari apa yang Anda butuhkan untuk menjadi 'stabil'. mungkin saya harus menjelaskan, runge kutta secara numerik lebih stabil daripada euler. farside.ph.utexas.edu/teaching/329/lectures/node35.html
Timothy Groote

3
Sejauh yang saya tahu, tidak ada alasan mengapa Verlet akan lebih lambat dari Euler. Jadi dibandingkan dengan Verlet Euler tidak memiliki keunggulan kecepatan dan itu masih jauh lebih tepat dan lebih stabil. Karenanya saya pikir klaim Anda bahwa Euler adalah yang terbaik untuk fisika cepat dan sederhana adalah salah.
paldepind

4
Berikut adalah blogpost yang menunjukkan perbedaan akurasi yang sangat besar: kahrstrom.com/gamephysics/2011/08/03/euler-vs-verlet
paldepind

2
Pada level terakhir Transformers (PS2, 2004), model penerbangan yang saya implementasikan menggunakan integrator Euler yang saya perbarui 2000 kali per frame. (Tentu saja, itu adalah model penerbangan yang cukup realistis yang dipercepat ke kecepatan supersonik dan ditempatkan di dalam medan gravitasi melengkung, sehingga persyaratannya untuk stabilitas cukup kuat. Dan tidak ada banyak hal lain yang intensif CPU terjadi pada tingkat itu, jadi Saya bisa lolos begitu saja). Melempar iterasi ekstra di Euler seringkali jauh lebih mudah daripada beralih ke iterator yang berbeda.
Trevor Powell

1

Pertama dan terutama saya pikir Anda harus menggunakan Euler sampai Anda mengalami kebutuhan langsung untuk menggunakan skema integrasi yang lebih maju. Ini cepat dan mudah diimplementasikan.

Jika Anda mengalami masalah stabilitas seperti sistem mata air yang tidak pernah berhenti atau jika simulasi Anda membutuhkan tingkat akurasi yang tinggi, maka mulailah bereksperimen dengan yang lain.

Salah satu yang belum saya lihat disebutkan di atas adalah metode titik tengah yang sangat mudah diimplementasikan dan hanya membutuhkan satu langkah integrasi tambahan.


1
Saya pikir Verlet hanya sederhana dan mudah diimplementasikan
paldepind

Saya tidak pernah menggunakannya sendiri tetapi dari apa yang saya mengerti Anda mungkin benar.
Mikael Högström
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.