Ưu và nhược điểm của các nhà tích hợp khác nhau [đóng]


29

Khi tạo ra những thứ như vật lý trong các trò chơi, bạn cần một nhà tích hợp. Tôi đã thấy tích hợp Verlet đã đề cập đến một số nơi như là một thay thế tuyệt vời cho tích hợp Euler. Ví dụ trong tài liệu nổi tiếng của Thomas Jakobsen . Tuy nhiên trong bài viết này Glenn Fiedler viết:

Thay vì giới thiệu cho bạn một loạt các nhà tích hợp khác nhau tồn tại, tôi sẽ cắt giảm để theo đuổi và đi thẳng đến điều tốt nhất. Bộ tích hợp này được gọi là bộ tích hợp Runge Kutta order 4 hay còn gọi là RK4.

Vì vậy, rõ ràng là không có viên đạn bạc. Những ưu và nhược điểm của các nhà tích hợp khác nhau là gì? Liên quan đến sự đơn giản, tốc độ, độ chính xác, độ ổn định, v.v ... Những nhà tích hợp nào phù hợp nhất với loại trò chơi nào? Khi nào bạn sẽ sử dụng Verlet, RK4 hoặc những người khác? Bạn có nên sử dụng Euler?


Có một câu trả lời SO bạn có thể ưa thích stackoverflow.com/questions/2769466/ từ
teodron

Cảm ơn các liên kết. Tôi đã nhận thức được về nó mặc dù.
paldepind

Câu trả lời:


27

Ưu và nhược điểm của cả hai phương pháp:

Ưu điểm RK4:

  1. độ chính xác (nhờ chuỗi xấp xỉ tốt hơn của nó, nó mang lại một bậc thứ 4)
  2. giảm xóc nhân tạo / vốn đã gây ra (hơi giống các phương pháp ngầm) làm tăng tính ổn định (trong khi bước Euler đơn giản không - thực tế thì ngược lại, đưa năng lượng ma tích tụ và có thể khiến hệ thống rơi vào hỗn loạn)

Nhược điểm RK4:

  1. chi phí tính toán: mặc dù không đòi hỏi so với các phương thức ngầm hoặc phương pháp IMEX lai, RK4 đắt hơn 4 lần so với Euler rõ ràng vì nó yêu cầu nhiều đánh giá chức năng hơn. Điều này cho thấy khi nhắm đến lợi thế tối ưu hóa.
  2. vẫn không ổn định: tùy thuộc vào các loại lực liên quan, RK4 có thể không ổn định như Euler. Trung bình, RK4 ổn định hơn một chút và có xu hướng thu được lợi ích này từ "kỹ năng" giảm xóc.
  3. Không đối xứng: giảm xóc số đi kèm với chi phí - bạn không thể mô phỏng các hệ thống có năng lượng / âm lượng / vv. mất không nên áp dụng hiệu ứng có thể nhìn thấy theo thời gian (ví dụ: Động lực học phân tử, lực xuất phát từ trường tiềm năng, các vấn đề đa dạng)

Ưu điểm của Verlet:

  1. một hoặc hai lần độ phức tạp của bước Euler (tùy thuộc vào hương vị Verlet của bạn: vị trí hoặc vận tốc).
  2. symplectic: bảo tồn năng lượng bên trong
  3. Độ chính xác của lệnh thứ hai: nhiều trò chơi không yêu cầu kết quả điểm nổi chính xác cao và thứ hai không chỉ làm hài lòng mắt trong kịch bản trò chơi (cộng với: nó được sử dụng trong mô phỏng kịch bản không chơi game khi được "phát hiện", vì vậy nó không tệ)

Nhược điểm:

  1. ổn định, nhưng vẫn: có lẽ là phương pháp rõ ràng nhất về mặt ổn định. Nó có xu hướng giành lợi thế khi các ràng buộc cứng được thêm vào hệ thống, do đó cho phép giảm đau đầu khi thực hiện các ràng buộc dự kiến ​​trong các động cơ động lực học dựa trên vị trí. Nó khởi hành đến vô cùng nếu hệ thống bị nhiễu loạn với các lực bên ngoài lớn và không có giảm xóc / ma sát được thêm vào. Mặc dù vậy, có một số giới hạn nhất định về số lượng đối với lực bên trong (lò xo) có thể lớn đến mức nào, nhưng chúng trung bình cao hơn những gì RK4 có thể làm
  2. độ chính xác thấp hơn: không hữu ích nếu bạn muốn ước tính tiền cao
  3. trung bình, yêu cầu các bước thời gian nhỏ hơn RK4 đối với một số mô phỏng (RK4 được hưởng lợi từ cả độ chính xác và giảm xóc bên trong của nó)

Sử dụng cái này hơn cái kia phụ thuộc vào kịch bản. Nếu độ cứng và lực bên ngoài lớn và năng lượng ảo là một vấn đề, thì hãy xem xét các phương pháp khác có từ "ẩn" trong mô tả / tiêu đề của chúng.


Lưu ý rằng một số tác giả / sách sử dụng thuật ngữ Euler bán ẩn cho một nhà tích hợp Euler rõ ràng thực tế được gọi là phương pháp Euler đối xứng (hay Euler Cromer) mà Verlet thực sự có nguồn gốc. Verlet cũng được một số người gọi là "phương pháp nhảy vọt". Velocity Verlet và phương thức trung điểm khá giống nhau vì ước tính ở bước thời gian làt + 0.5*dtlà cần thiết cho một bước giống như bộ dự đoán. Các phương pháp IMEX (ẩn rõ ràng) cũng được sử dụng để đặt tên cho hai cách tiếp cận tương tự nhưng không giống nhau: tách các phép tính thành các phần cứng và không cứng và sử dụng các tích hợp khác nhau trên chúng (rõ ràng cho không cứng, ẩn cho cứng) HOẶC giải quyết cho vận tốc với bước cập nhật ngầm và cập nhật vị trí một cách rõ ràng (đây là phương pháp bán ẩn lai thuộc lớp phương pháp IMEX vì các phần cứng ảnh hưởng nhiều nhất đến tính toán gia tốc). Các phương thức ngầm là cồng kềnh hơn và yêu cầu giải một hệ phương trình phi tuyến tính đồng thời cho toàn bộ cấu hình. Các phương pháp ngầm được sử dụng cho các cơ thể biến dạng và thường không được sử dụng cho các cơ thể cứng nhắc tách rời.

Như đã nêu trong một trong những ý kiến, nếu bạn có thể, không sử dụng Euler. Sử dụng phương thức trung điểm, Euler bán ẩn hoặc, với cùng một chi phí, Verlet vị trí. Tất cả chúng đều có độ chính xác cao hơn một chút và ổn định hơn so với tích hợp Euler rõ ràng.

Đề nghị so sánh nhỏ:

http://wiki.vdrift.net/Numerical_Integration


Một quan sát: cả hai biến thể Verlet đều có thể được mã hóa để đánh giá gia tốc chỉ một lần trên mỗi lần cập nhật khung.
teodron

1
Cảm ơn câu trả lời! Khá nhiều những gì tôi đang tìm kiếm.
paldepind

3

Việc thực hiện Euler có xu hướng rất nhanh, nhưng kém ổn định hơn nhiều so với các giải pháp thay thế. Runge Kutta chậm hơn Euler, nhưng chính xác và ổn định hơn nhiều.

Tôi không rành về tích hợp Verlet, vì vậy tôi không biết làm thế nào nó chống lại Euler và Runge Kutta.

Nếu bạn cần mô phỏng của mình chính xác hơn, hoặc thậm chí bằng chứng số, Runge Kutta là tốt hơn cả hai.

Nếu bạn cần vật lý nhanh, chi phí thấp cho một trò chơi đơn giản, Euler là lựa chọn tốt hơn.


2
Runge Kutta là bởi FAR KHÔNG CÒN ỔN ĐỊNH HƠN NỮA. Nó vẫn Euler, thực hiện 8 lần mỗi khung thay vì 1 (với một chút dự đoán và sửa chữa nhưng vẫn ..) forums.evilmana.com/game-programming-theory/...
teodron

2
Phụ thuộc vào những gì bạn cần là 'ổn định'. có lẽ tôi nên xây dựng, runge kutta ổn định hơn về số lượng. farside.ph.utexas.edu/teaching/329/lectures/node35.html
Timothy Groote

3
Theo như tôi có thể nhận ra thì không có lý do gì mà Verlet lại chậm hơn Euler. Vì vậy, so với Verlet Euler không có lợi thế về tốc độ và nó vẫn chính xác và ổn định hơn nhiều. Do đó tôi nghĩ rằng tuyên bố của bạn rằng Euler là tốt nhất cho một vật lý nhanh và đơn giản là không chính xác.
paldepind

4
Đây là một blogpost cho thấy sự khác biệt lớn về độ chính xác: kahrstrom.com/gamephysics/2011/08/03/euler-vs-verlet
paldepind

2
Ở cấp độ cuối cùng của Transformers (PS2, 2004), mô hình chuyến bay tôi triển khai đã sử dụng bộ tích hợp Euler mà tôi đã cập nhật 2000 lần trên mỗi khung hình. (Tất nhiên, đó là một mô hình chuyến bay khá thực tế được tăng tốc đến tốc độ siêu âm và được đặt bên trong trường trọng lực cong, do đó, yêu cầu về độ ổn định của nó là khá dữ dội. Tôi đã có thể thoát khỏi nó). Ném các vòng lặp bổ sung vào Euler thường dễ dàng hơn nhiều so với việc chuyển sang một vòng lặp khác.
Trevor Powell

1

Trước hết tôi nghĩ bạn nên sử dụng Euler cho đến khi bạn có nhu cầu trực tiếp để sử dụng sơ đồ tích hợp nâng cao hơn. Nó là nhanh chóng và dễ dàng để thực hiện.

Nếu bạn gặp các vấn đề về độ ổn định như hệ thống lò xo không bao giờ dừng lại hoặc nếu mô phỏng của bạn đòi hỏi độ chính xác cao thì hãy bắt đầu thử nghiệm với các hệ thống khác.

Một phương pháp mà tôi chưa thấy được đề cập ở trên là phương pháp trung điểm rất dễ thực hiện và chỉ cần một bước tích hợp bổ sung.


1
Tôi nghĩ Verlet chỉ đơn giản và dễ thực hiện
paldepind

Tôi chưa bao giờ sử dụng nó nhưng theo những gì tôi hiểu thì có lẽ bạn đã đúng.
Mikael Högström
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.