การค้นหาเส้นทางที่มีประสิทธิภาพในพื้นที่ว่าง


12

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

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

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

เขตข้อมูลที่เป็นไปได้นั้นจะได้รับการประมาณค่าอย่างสมเหตุสมผลเมื่อได้รับพารามิเตอร์ของฉันหรือฉันต้องการโซลูชันอื่นหรือไม่?

คำตอบ:


7

ในขณะที่เขตข้อมูลที่อาจเกิดขึ้นอาจทำงานได้ฉันคิดว่าคุณจะมีปัญหากับเส้นทางที่ไม่เหมาะสมและ "ต่ำสุดในท้องถิ่น" ซึ่งหน่วยของคุณจะถูกดักจับโดยสิ่งกีดขวางโดยรอบ A * เหมาะสำหรับสภาพแวดล้อมในพื้นที่เปิดโล่ง 3 มิติ มันกลายเป็นปัญหาของการสร้างเครือข่ายนำทางที่เหมาะกับความต้องการของคุณ คุณสามารถใช้โครงสร้างเช่น Octrees สำหรับโหนดการนำทาง ยิ่งขนาดเล็กที่สุดของ octant แต่ละอันจะทำให้ทางเดินเรียบขึ้น ลองอ่านบทความนี้จากเกม Face to Face (ตอนนี้เลิกใช้แล้วเพิ่มลิงค์ wayback) A * รวมกับการปรับเส้นทางให้เหมาะสม (เช่นปุ่มลัดสายตา) และพฤติกรรมการบังคับเลี้ยว ดูภาพด้านล่างเป็นตัวอย่างของการใช้ octree สำหรับโหนดพา ธ :


สิ่งนี้จะขยายไปสู่แผนที่ขนาดใหญ่ขึ้นได้อย่างไร หากฉันมีแผนที่ที่มีขนาดใหญ่เป็นสองเท่าในแต่ละมิติฉันต้องมีจำนวนโหนดแปดเท่าซึ่งจะเป็นปัญหา
DeadMG

ไม่จำเป็น. คุณสามารถทำให้ขนาดโหนดใหญ่ขึ้นจนกว่าการค้นหาของคุณจะอยู่ใกล้กับมัน วิธีนี้ช่วยให้คุณสามารถเก็บโหนดที่คุณไม่สนใจค่อนข้างใหญ่และจำนวนน้อย
MichaelHouse

คุณสมบัติที่ดีของตาข่ายนำทางพื้นที่ว่างเปล่าคือความเท่าเทียมกันในการเดินทาง คุณอาจใช้ A * JPS
จะ

@ Will: ฉันทำ Googling นิดหน่อย แต่ฉันไม่เข้าใจอัลกอริธึมการค้นพบที่แท้จริงที่เกิดขึ้น สนใจโพสต์คำตอบหรือไม่
DeadMG

@DeadMG นี่เป็นคำอธิบายที่ชัดเจน: harablog.wordpress.com/2011/09/07/jump-point-search <br/> หากคุณสามารถใช้ A * คุณสามารถติดตั้ง JPS ใหม่ได้อย่างตรงไปตรงมา ทำ A * ก่อนและเพิ่ม JPS เป็นการเพิ่มประสิทธิภาพ
จะ
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.