การหาเส้นทางไดนามิกแบบเรียลไทม์?


19

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

ฉันได้ลองอัลกอริทึม A * และตัวแปรบางตัวแล้วพวกมันก็ทำงานได้อย่างสมบูรณ์ อย่างไรก็ตามตอนนี้ฉันสนใจการหาเส้นทางแบบไดนามิกมากขึ้น ตัวอย่างเช่นในขณะที่ค้นหาเส้นทางจากจุด A ไปยังจุด B หากมีสิ่งกีดขวางใหม่ปรากฏขึ้นมาทันทีฉันต้องการให้อัลกอริทึมของฉันสามารถวางแผนเส้นทางใหม่ได้ทันทีและไม่เริ่มค้นหาจากศูนย์อีกครั้ง

ฉันได้อ่านอัลกอริทึม D * แล้วและสงสัยว่าสิ่งนี้จะเหมาะสมกับสิ่งที่ฉันต้องการหรือสิ่งนี้ดูเหมือนว่าเกินความเป็นจริงหรือไม่

ดังนั้นคำถามของฉันคือ: อัลกอริธึมที่ดีที่สุดสำหรับ Real Time Dynamic Pathfinding? หรือเทคนิคใดบ้างที่ฉันสามารถใช้แทนกันได้


ฉันไม่แน่ใจว่าพวกเขาใช้อัลกอริทึมอย่างไรดังนั้นนี่ไม่ใช่คำตอบ แต่ฉันคิดว่านี่คือสิ่งที่คุณพยายามเลียนแบบ: วิดีโอ youtube
MichaelHouse

แล้วการขยาย A * ล่ะ? การขยายสิ่งที่เก็บไว้ในโหนดของชุดเปิด / ปิดโดยสิ่งที่คุณต้องการและขยาย A * เพื่อพิจารณา
user712092

ฉันกำลังมองหาคำตอบเดียวกับคุณและฉันพบบทความเกี่ยวกับ HPA * และเกี่ยวข้องกับวิดีโอเกม ฉันยังคงมองหาบทความและอาจจะนำไปใช้ จนถึงตอนนี้มันสมเหตุสมผลสำหรับฉันในการปรับปรุงประสิทธิภาพและสามารถใช้ได้ทั้งในสภาพแวดล้อมแบบคงที่และแบบไดนามิก นี่คือบทความ
NelsonPunch

คำตอบ:


19

D * มีส่วนเกี่ยวข้องมาก - ฉันไม่แนะนำให้พยายามใช้มัน แม้ว่าโครงการที่ได้รับการสนับสนุนอย่างดีและได้รับการพัฒนาโดยคนฉลาด / มีประสบการณ์ D * lite ก็ถูกนำมาใช้เพราะ D * เป็นความเจ็บปวดที่จะได้รับสิทธิ

คุณอาจสนใจในงานนำเสนอนี้ซึ่งรวมถึงการสนทนาของ Pathfinding ของ Left 4 Dead:

http://www.valvesoftware.com/publications/2009/ai_systems_of_l4d_mike_booth.pdf

วิธีหนึ่งคือการใช้การค้นหาระดับ A * แบบหยาบเพื่อรับพา ธ ทั่วไปสำหรับเอเจนต์จากนั้นทำการค้นหารายละเอียดในระดับ A * สำหรับสภาพแวดล้อมในท้องถิ่นของเอเจนต์ ด้วยวิธีนี้คุณสามารถคำนวณรายละเอียดหลักสูตร A * ใหม่ได้อย่างรวดเร็วหากการเปลี่ยนแปลงภูมิประเทศและจากนั้นคำนวณรายละเอียดที่ละเอียดอีกครั้งอย่างรวดเร็ว A * เพื่อค้นหาส่วนเล็ก ๆ ของสภาพแวดล้อม มันไม่สมบูรณ์แบบ มันทำงานได้ตราบใดที่อุปสรรคของคุณไม่สามารถบล็อกโหนดกราฟรายละเอียดหลายหลักสูตรซึ่งดีสำหรับเกมส่วนใหญ่ นี่คือวิธีที่ฉันแนะนำถ้าคุณมีตัวแทนน้อยกว่า 100

หากคุณต้องการสนับสนุนตัวแทนหลายร้อยคนหรือหลายพันคนคุณสามารถใช้สิ่งต่างๆเช่นฝูงชนที่ต่อเนื่อง ดูงานวิจัยนี้: http://grail.cs.washington.edu/projects/crowd-flows/ ซึ่งกล่าวถึงวิธีการที่ใช้ CPU อย่างหมดจดที่สามารถรองรับนักแสดงหลายพันคนในสภาพแวดล้อมแบบไดนามิก

หากคุณต้องการสนับสนุนตัวแทนนับหมื่นหรือตัวแทนนับแสนคุณสามารถดำเนินการบางอย่างเช่นฝูงชนที่ต่อเนื่องด้วยความช่วยเหลือของ GPU ดูที่นี่สำหรับการวิจัยที่เกี่ยวข้อง: https://a248.e.akamai.net/f/674/9206/0/www2.ati.com/misc/siggraph_asia_08/GPUCrowdSimulation_SLIDES.pdf

นี่คือวิดีโอสาธิตการใช้งานฝูงชนอย่างต่อเนื่อง: http://www.youtube.com/watch?v=lGOvYyJ6r1c (ข้ามไปยัง 4:10 เพื่อดูสิ่งกีดขวางแบบไดนามิกขนาดใหญ่เช่นรถยนต์และสต็อปไลท์ที่ส่งผลกระทบต่อผู้คนหลายร้อยคนที่เดินไปรอบเมือง)


ขอบคุณสำหรับลิงค์ D * Lite ดูเหมือนจะไม่ถูกต้องจากสิ่งที่ฉันได้อ่าน
อังเดร

9

คุณเคยดูพฤติกรรมการขับขี่ที่เรียบง่ายหรือไม่?

http://www.red3d.com/cwr/steer/

คุณสามารถใช้พวกมันในการเปลี่ยนทิศทางจากเส้นทาง A * ของคุณเพื่อหลีกเลี่ยงสิ่งกีดขวางในท้องถิ่นแล้วจึงค่อยกลับไปสู่เส้นทางของคุณเมื่อคุณทำเสร็จแล้ว

มันค่อนข้างง่ายที่จะรวมพฤติกรรมหลายอย่าง


+1 ฉันไม่แน่ใจว่าทำไมมันถึงลงคะแนน แม้ว่านี่จะง่ายและอาจไม่ใช่คำตอบที่ผู้ถามกำลังมองหา แต่ฉันคิดว่ามันเป็นหัวข้อและฉันคิดว่ามันมีประโยชน์ :)
Olhovsky

1
ฉันได้อ่านและนำพฤติกรรมการขับขี่นี้ไปใช้ในเกมล่าสุดของเราแล้ว ตอนนี้เรากำลังจะแทนที่มันด้วยวิธีอื่น ฉันคิดว่ามันใช้งานไม่ได้ดีกับเส้นทางที่ดีที่สุดที่ได้รับคำสั่งล่วงหน้า "การรวมกัน" ของพฤติกรรมหลายอย่างมักจะให้ผลลัพธ์ที่ไม่ดี หากคุณยังคงวางแผนที่จะใช้อย่าพยายามบังคับทิศทางและติดตามเส้นทางของคุณในเวลาเดียวกัน ให้เปลี่ยนไปใช้การบังคับเลี้ยว 100% และสลับกลับ 100% เมื่อคุณผ่านสิ่งกีดขวาง
Imi

4

เนื่องจากโพสต์ของคุณอยู่ในส่วน "การพัฒนาเกม" ของการแลกเปลี่ยนสแต็คนี่คือสิ่งที่โปรแกรมเมอร์เกมส่วนใหญ่จะตอบคุณ: มันไม่เกี่ยวกับ Real Time Dynamic Pathfinding มันเกี่ยวกับ Real Time Dynamic Path * ดังต่อไปนี้ *!

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

ดังนั้นคำแนะนำของฉันคือการเริ่มต้นด้วยการใช้พฤติกรรมการหมุนพวงมาลัย (http://red3d.com/cwr/steer/) จัดการกรณีที่เส้นทางเป็นไปไม่ได้แล้วเพิ่มเลเยอร์ที่อยู่ด้านบนเพื่อจัดการกรณีขอบที่ไม่ได้ ' ไม่ได้รับการจัดการโดยโซลูชันสองตัวก่อนหน้านี้

หวังว่านี่จะช่วยได้


เอ่อไม่ "การติดตามเส้นทาง" นั้นเหมือนกับการค้นหาเส้นทาง มีหลายวิธีที่อนุญาตให้เรียลไทม์ต่อไปนี้มีหลายพันของตัวแทนเมื่ออุปสรรคมีการเปลี่ยนแปลงในเครื่องคอมพิวเตอร์เดสก์ทอป แน่นอนว่ามันไม่แพงเกินไปที่จะค้นหาเส้นทางสำหรับเอเจนต์เดียวเมื่อมีสิ่งกีดขวางเคลื่อนที่ นี่คือหนึ่งในวิธีการดังกล่าวของหลาย ๆ คน: grail.cs.washington.edu/projects/crowd-flows GPU ที่ได้รับการรับรองฝูงชนต่อเนื่อง
Olhovsky

ฉันจะต้องไม่เห็นด้วยกับสิ่งนี้ เอ็นจิ้นใด ๆ จะจัดการกับการค้นหาเส้นทางและเส้นทางต่อไปนี้เป็นสองปัญหาที่แตกต่างกันโดยที่ปัญหาแรกคือการค้นหากราฟของพื้นที่นำทางและอีกอันหนึ่งตั้งใจที่จะค้นหาเวกเตอร์การเคลื่อนไหวที่เหมาะสมที่สุด ฉันทำงานเกี่ยวกับการจำลองฝูงชนที่ผลิตมิดเดิลแวร์ที่ใช้โดยเกม AAA โดยไม่จำเป็นต้องพึ่งพา GPU การใช้งานส่วนใหญ่จะใช้สนามไหล (ผู้เบิกทาง) และหมุนพวงมาลัยเพื่อติดตามการไหลและหลีกเลี่ยงตัวแทนอื่น ๆ (ผู้ติดตาม) ตามที่คำตอบของฉันระบุไว้นี่คือคำตอบ "โปรแกรมเมอร์เกม" ไม่ใช่คำตอบด้านวิชาการ
emartel

ฉันรู้ว่าคุณไม่ต้องการ GPU สำหรับฝูงชนที่ต้องเผชิญเหตุซึ่งเป็นสาเหตุที่ฉันเชื่อมโยงรุ่นที่ใช้ CPU คำอธิบายเส้นทางของคุณต่อไปนี้ยังคงเป็นการค้นหาการค้นหาเส้นทาง แต่เป็นการค้นหาการค้นหาเส้นทางที่ระดับรายละเอียดที่แตกต่างกันในชุดข้อมูลอื่น ดังนั้นสิ่งที่คุณมีจริงๆคือรายละเอียดเส้นทางการผ่านเส้นทางและรายละเอียดการผ่านเส้นทางแบบละเอียด ในที่สุดคุณกำลังพยายามค้นหาเส้นทางที่นักแสดงควรทำตาม การประดิษฐ์คำศัพท์ใหม่สำหรับสิ่งนี้ทำให้เกิดความสับสน
Olhovsky

1
ฉันขอโทษ แต่ "การติดตามเส้นทาง" ไม่ใช่คำที่คิดค้น อ่านเอกสารที่ผลิตโดยอุตสาหกรรมและคุณจะเห็นว่าเอกสารดังกล่าวใช้ซ้ำแล้วซ้ำอีก: ลิงก์หรือลิงก์เพื่อเชื่อมโยงบางส่วน น่าเสียดายที่ฉันไม่สามารถเชื่อมโยงคุณไปยังเอกสารที่มีการป้องกันของ NDA ของเครื่องยนต์ / มิดเดิลแวร์ที่ใช้กันอย่างแพร่หลายในอุตสาหกรรม
emartel

1
ลิงค์แรกของคุณคือลิงค์ที่ฉันให้ไว้ในคำตอบ btw โอเคพอใช้พอสมควรมันอาจยุติธรรมที่จะอธิบายประเภทของการค้นหาเส้นทางที่เป็นเส้นทางต่อไปนี้ ท้ายที่สุดพวกเขาทั้งคู่พยายามหาเส้นทางที่จะติดตาม แต่ฉันคิดว่าในกรณีนี้ฉันผิดและเราควรเรียกสิ่งที่เราเห็นในลิงค์ที่สองของคุณว่าเป็นเส้นทางต่อไปนี้ เช่นการกระทำของการเชื่อมโยงเส้นทางที่หยาบกับลูกบาศก์ splies / biezer curves / insert-your-method-here ที่กล่าวว่าฉันยังคงไม่เห็นด้วยอย่างยิ่งที่จะไม่สามารถใช้การค้นหาเส้นทางรอบสิ่งกีดขวางแบบไดนามิกตามที่คำตอบของคุณดูเหมือนจะแนะนำ
Olhovsky
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.