ข้อดีและข้อเสียของผู้รวมระบบที่ต่างกัน [ปิด]


29

เมื่อสร้างสิ่งต่าง ๆ เช่นฟิสิกส์ในเกมคุณต้องมีผู้รวม ฉันเคยเห็นการรวม Verlet กล่าวถึงสถานที่ต่าง ๆ เป็นทางเลือกที่ดีในการรวมออยเลอร์ ยกตัวอย่างเช่นในเอกสารที่มีชื่อเสียงโดยโทมัส Jakobsen อย่างไรก็ตามในบทความนี้ Glenn Fiedler เขียน:

แทนที่จะแนะนำให้คุณรู้จักกับผู้รวมกลุ่มที่หลากหลายที่มีอยู่ฉันจะตัดการไล่ล่าและตรงไปที่ดีที่สุด ผู้ประกอบการนี้เรียกว่า Runge Kutta order 4 integrator aka RK4

เห็นได้ชัดว่าไม่มีกระสุนเงิน ข้อดีและข้อเสียของผู้รวมระบบที่ต่างกันคืออะไร เกี่ยวกับความเรียบง่าย, ความเร็ว, ความแม่นยำ, ความเสถียรและอื่น ๆ ผู้รวมระบบใดที่เหมาะสมที่สุดสำหรับเกมประเภทใด เมื่อใดที่คุณจะใช้ Verlet, RK4 หรืออื่น ๆ คุณควรใช้ออยเลอร์หรือไม่?


มีคำตอบที่เป็นดังนั้นคุณอาจแฟนซีstackoverflow.com/questions/2769466/...
teodron

ขอบคุณสำหรับลิงค์ ฉันก็รู้อยู่แล้ว
paldepind

คำตอบ:


27

ข้อดีและข้อเสียของทั้งสองวิธี:

ข้อดี RK4:

  1. ความแม่นยำ (ขอบคุณชุดการประมาณที่ดีกว่าซึ่งทำให้สามารถลดลำดับที่ 4 ได้)
  2. การทำให้หมาด ๆ ประดิษฐ์ / ทำให้หมาด ๆ (เหมือนวิธีโดยปริยายทำ) เพิ่มความมั่นคง (ในขณะที่ออยเลอร์ขั้นตอนง่าย ๆ ไม่ได้ - มันตรงกันข้ามจริงแนะนำพลังงานผีที่สร้างขึ้นและสามารถกระโดดเข้าไปในระบบความโกลาหล)

จุดด้อย RK4:

  1. ค่าใช้จ่ายในการคำนวณ: แม้ว่าจะไม่ใช่ความต้องการเมื่อเทียบกับวิธีการทางอ้อมหรือวิธีไฮบริดของ IMEX แต่ RK4 นั้นมีราคาแพงกว่าออยเลอร์อย่างชัดเจนถึง 4 เท่าเนื่องจากต้องการการประเมินฟังก์ชันจำนวนมาก สิ่งนี้แสดงเมื่อเล็งไปที่การตกเลือดของการปรับให้เหมาะสม
  2. ยังคงไม่แน่นอน: ขึ้นอยู่กับประเภทของกองกำลังที่เกี่ยวข้อง RK4 อาจไม่มั่นคงเหมือนออยเลอร์ โดยเฉลี่ยแล้ว RK4 นั้นมีความเสถียรมากกว่าและมีแนวโน้มที่จะได้รับผลประโยชน์นี้จาก "ทักษะ" ที่ทำให้หมาด ๆ
  3. Non-symplectic: การทำให้หมาด ๆ เป็นตัวเลขมาพร้อมกับค่าใช้จ่าย - คุณไม่สามารถจำลองระบบที่พลังงาน / ปริมาณ / ฯลฯ การสูญเสียไม่ควรใช้เอฟเฟ็กต์ที่มองเห็นได้ตลอดเวลา (เช่นโมเลกุล Dynamics แรงสนามที่ได้จากการเกิดปัญหาตัวแปร)

ข้อดีของ Verlet:

  1. หนึ่งหรือสองครั้งความซับซ้อนของขั้นตอนออยเลอร์ (ขึ้นอยู่กับรสชาติ Verlet ของคุณ: ตำแหน่งหรือความเร็ว)
  2. symplectic: อนุรักษ์พลังงานภายใน
  3. ความถูกต้องลำดับที่สอง: เกมจำนวนมากไม่ต้องการผลลัพธ์จุดลอยตัวที่มีความแม่นยำสูงและลำดับที่สองนั้นเป็นที่ชื่นชอบมากกว่าในสถานการณ์เกม (บวก: มันถูกใช้ในการจำลองสถานการณ์ที่ไม่ใช่เกมเมื่อมันถูก "ค้นพบ" ดังนั้น มันไม่ได้แย่ขนาดนั้น)

ข้อเสียของ Verlet:

  1. เสถียร แต่ยังคง: อาจเป็นวิธีที่ชัดเจนที่สุดในแง่ของความมั่นคง มันมีแนวโน้มที่จะชนะขอบเมื่อมีการเพิ่มข้อ จำกัด ที่ยากในระบบดังนั้นจึงช่วยลดอาการปวดศีรษะน้อยลงเมื่อใช้ข้อ จำกัด ที่คาดการณ์ไว้ในตำแหน่งของเครื่องยนต์พลศาสตร์ มันตั้งค่าเป็นอินฟินิตี้หากระบบถูกรบกวนด้วยแรงภายนอกขนาดใหญ่และไม่มีการทำให้หมาด ๆ / แรงเสียดทานเพิ่ม ถึงกระนั้นก็ยังมีข้อ จำกัด บางอย่างที่กำหนดว่ากองกำลังภายใน (สปริง) สามารถมีขนาดใหญ่ได้อย่างไร แต่โดยเฉลี่ยแล้วสูงกว่าที่ RK4 สามารถทำได้
  2. ความแม่นยำต่ำกว่า: ไม่มีประโยชน์ถ้าคุณต้องการการประมาณค่าการตกตะกอนสูง
  3. ต้องการขั้นตอนเวลาโดยเฉลี่ยน้อยกว่า RK4 สำหรับการจำลองบางอย่าง (ประโยชน์ RK4 จากทั้งความแม่นยำและการทำให้หมาด ๆ ภายใน)

การใช้รายการใดรายการหนึ่งขึ้นอยู่กับสถานการณ์ หากความฝืดและแรงภายนอกขนาดใหญ่และพลังงานเสมือนเป็นปัญหาให้พิจารณาวิธีอื่นที่มีคำว่า "นัย" ในคำอธิบาย / ชื่อ


หมายเหตุผู้แต่ง / หนังสือบางเล่มใช้คำว่า Euler กึ่งนัยโดยนัยสำหรับผู้รวบรวมออยเลอร์จริงที่เรียกว่า symplectic Euler method (หรือ Euler Cromer) ซึ่ง Verlet ได้มาจริง Verlet บางคนเรียกว่า "leapfrog method" Velocity Verlet และวิธีการจุดกึ่งกลางค่อนข้างคล้ายกันตั้งแต่การประเมินในขั้นตอนเวลาt + 0.5*dtเป็นสิ่งที่จำเป็นสำหรับขั้นตอนที่คล้ายกับตัวทำนาย วิธี IMEX (โดยนัย - ชัดแจ้ง) ใช้เพื่อตั้งชื่อสองวิธีที่คล้ายกัน แต่ไม่เหมือนกัน: แยกการคำนวณออกเป็นส่วนที่แข็งและไม่แข็งและใช้ผู้รวมที่แตกต่างกันในพวกเขา ความเร็วที่มีขั้นตอนการอัปเดตโดยนัยและอัปเดตตำแหน่งในลักษณะที่ชัดเจน (นี่คือวิธีกึ่งไฮบริดแบบกึ่งพ่วงที่ตกบนคลาสของวิธีการ IMEX เพราะส่วนที่แข็งส่งผลกระทบต่อการคำนวณการเร่งความเร็วมากที่สุด) วิธีการโดยนัยนั้นยุ่งยากกว่าและต้องการการแก้ระบบสมการไม่เชิงเส้นพร้อมกันสำหรับการกำหนดค่าทั้งหมด วิธีการโดยนัยนั้นใช้สำหรับวัตถุที่มีรูปร่างผิดปกติและมักจะไม่ใช้สำหรับวัตถุที่มีรูปร่างแข็ง

ตามที่ระบุไว้ในหนึ่งในความคิดเห็นหากคุณสามารถทำได้อย่าใช้ Euler ใช้วิธีการจุดกึ่งกลางออยเลอร์กึ่งนัยหรือด้วยค่าใช้จ่ายเดียวกันคือ position-Verlet พวกเขาทั้งหมดมีความแม่นยำสูงกว่าเล็กน้อยและมีความเสถียรมากกว่าผู้รวมออยเลอร์อย่างชัดเจน

การอ่านเปรียบเทียบขนาดเล็กที่แนะนำ :

http://wiki.vdrift.net/Numerical_Integration


การสังเกตหนึ่ง: ตัวแปรทั้งสองของ Verlet สามารถเขียนโค้ดเพื่อประเมินความเร่งเพียงครั้งเดียวต่อการอัพเดทเฟรม
Teodron

1
ขอบคุณสำหรับคำตอบ! ค่อนข้างมากสิ่งที่ฉันกำลังมองหา
paldepind

3

การใช้งานออยเลอร์มีแนวโน้มที่จะรวดเร็วมาก แต่มีความเสถียรน้อยกว่าทางเลือกอื่น Runge Kutta นั้นช้ากว่าออยเลอร์ แต่แม่นยำและเสถียรกว่ามาก

ฉันไม่ค่อยมีความรู้เกี่ยวกับการรวม Verlet ดังนั้นฉันจึงไม่รู้ว่ามันจะซ้อนทับกับออยเลอร์และ Runge Kutta ได้อย่างไร

หากคุณต้องการแบบจำลองของคุณให้แม่นยำยิ่งขึ้นหรือแม้แต่การพิสูจน์เชิงตัวเลข Runge Kutta นั้นดีกว่าของทั้งสอง

หากคุณต้องการฟิสิกส์ที่รวดเร็วและราคาถูกสำหรับเกมง่ายๆออยเลอร์เป็นตัวเลือกที่ดีกว่า


2
Runge Kutta นั้นไม่ไกลกว่าเสถียรมากนัก ก็ยังคงออยเลอร์ทำ 8 ครั้งต่อกรอบแทน 1 (มีบิตของการทำนายและการแก้ไข แต่ยังคง .. ) forums.evilmana.com/game-programming-theory/...
teodron

2
ขึ้นอยู่กับสิ่งที่คุณต้องเป็น 'มั่นคง' บางทีฉันควรจะทำอย่างละเอียด runge kutta มีเสถียรภาพมากกว่าตัวเลขออยเลอร์ farside.ph.utexas.edu/teaching/329/lectures/node35.html
Timothy Groote

3
เท่าที่ฉันสามารถหาเหตุผลได้ว่าทำไม Verlet จะช้ากว่าออยเลอร์ ดังนั้นเมื่อเปรียบเทียบกับ Verlet Euler จึงไม่มีข้อได้เปรียบด้านความเร็วและยังแม่นยำและเสถียรกว่า ดังนั้นฉันคิดว่าการอ้างสิทธิ์ของคุณว่าออยเลอร์นั้นดีที่สุดสำหรับฟิสิกส์ที่รวดเร็วและเรียบง่ายนั้นไม่ถูกต้อง
paldepind

4
นี่คือบล็อกโพสต์ที่แสดงความแตกต่างอย่างมากในความแม่นยำ: kahrstrom.com/gamephysics/2011/08/03/euler-vs-verlet
paldepind

2
ในระดับสุดท้ายของ Transformers (PS2, 2004) โมเดลการบินที่ฉันนำมาใช้นั้นใช้ตัวรวมออยเลอร์ซึ่งฉันอัปเดต 2,000 ครั้งต่อเฟรม (แน่นอนว่ามันเป็นแบบจำลองการบินที่สมจริงอย่างมากซึ่งถูกเร่งความเร็วไปที่ความเร็วเหนือเสียงและวางไว้ในสนามโน้มถ่วงโค้งดังนั้นความต้องการด้านเสถียรภาพจึงค่อนข้างเข้มข้นและไม่มีอะไรมากในซีพียูที่เกิดขึ้นในระดับนั้น ฉันสามารถไปกับมันได้) การโยนการวนซ้ำเป็นพิเศษที่ออยเลอร์มักจะง่ายกว่าการสลับเป็นตัววนซ้ำแบบอื่น
Trevor Powell

1

ก่อนอื่นฉันคิดว่าคุณควรใช้ออยเลอร์จนกว่าคุณจะประสบความต้องการโดยตรงในการใช้รูปแบบการรวมขั้นสูงกว่า มันรวดเร็วและใช้งานง่าย

หากคุณประสบปัญหาความมั่นคงเช่นระบบสปริงที่ไม่เคยหยุดนิ่งหรือหากการจำลองของคุณต้องการความแม่นยำระดับสูงให้เริ่มทดลองกับคนอื่น ๆ

สิ่งหนึ่งที่ฉันไม่ได้เห็นดังกล่าวข้างต้นคือวิธีการจุดกึ่งกลางซึ่งใช้งานง่ายมากและต้องการเพียงขั้นตอนการรวมขั้นสูงเพียงขั้นตอนเดียวเท่านั้น


1
ฉันคิดว่า Verlet เป็นวิธีที่ง่ายและสะดวกในการใช้งาน
paldepind

ฉันไม่เคยใช้มัน แต่จากสิ่งที่ฉันเข้าใจว่าคุณอาจถูกต้อง
Mikael Högström
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.