A * มีประสิทธิภาพแม้ในขณะที่อุปสรรคกำลังเคลื่อนที่หรือไม่?


30

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

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

ดังนั้น A * ยังคงมีประสิทธิภาพเพียงพอที่จะใช้เมื่อใดก็ตามที่มีการเคลื่อนย้ายสิ่งกีดขวางด้วยหรือมีวิธีอื่นในการค้นหาเส้นทางที่จัดการกับสิ่งกีดขวางที่เคลื่อนที่ได้มากกว่า

คำตอบ:


27

มีอัลกอริธึมหลายอย่างที่เร็วกว่า A * มากเมื่อคุณต้องการคำนวณเส้นทางใหม่ด้วยสิ่งกีดขวางที่เคลื่อนที่ ดูที่นี่ภายใต้ "การคำนวณใหม่แบบง่าย"

อย่างไรก็ตามคุณไม่น่าจะหาวิธีแก้ปัญหาแบบ off-the-shelf สำหรับพวกเขาดังนั้นใน 99% ของกรณีที่พวกเขา overkill สำหรับเกม เวลาของคุณจะถูกใช้ไปได้ดีขึ้นโดยใช้โซลูชัน A * ที่ได้รับการปรับปรุงแล้วและใช้กลเม็ดที่มีอยู่ทั่วไปเพื่อเร่งการหาเส้นทางในเกม:

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

ฯลฯ คุณสามารถค้นหาข้อมูลเพิ่มเติมเกี่ยวกับลูกเล่นเหล่านี้และอื่น ๆ ได้ทั่วไซต์นี้หรือในหน้า A * ของ Amit


10

ใช่. A * ยังคงเป็นวิธีที่จะไปในเกือบทุกกรณี เป็นการคำนวณต้นทุนโหนดของคุณที่กลายเป็นแบบไดนามิกและมีความซับซ้อนในการคำนวณและติดตาม

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

ตัวอย่างเช่น: โหนดนี้จะไปถึง 4 เห็บถูกครอบครองจากเห็บ # 3 จนกระทั่งเห็บ # 6 ดังนั้นค่าเดินทางในโหนดนี้คือ 6 - 4 = +2 เห็บ นั่นอาจเป็นเส้นทางที่ดีที่สุด

ต้องคำนึงถึงทิศทางการเดินทางของสิ่งกีดขวางด้วย

หากคุณไม่ทราบล่วงหน้าคุณสามารถสมมติว่าไม่มีสิ่งกีดขวางและคำนวณเส้นทางใหม่เมื่อถึงสิ่งกีดขวาง แต่คุณจะต้องทำอะไรบางอย่างเกี่ยวกับการหยุดชะงักและการเคลื่อนไหว (เช่นเดียวกับถ้าคุณสามารถคาดเดาได้ว่าจะมีอุปสรรคใด แต่ในตัวของมันเองคือการหลีกเลี่ยงการหยุดชะงัก / การหมุนวนและที่ดีพอสำหรับวัตถุประสงค์ของคุณ)

การหยุดชะงักคือเมื่อทั้งคู่รอให้อีกฝ่ายเคลื่อนที่และไม่มีใครเคลื่อนที่

Livelock คือเมื่อทั้งสอง ( หรือมากกว่า <- นี่เป็นสิ่งสำคัญที่ต้องพิจารณา) ย้ายเพื่อหลีกเลี่ยงอีกทางในทิศทางเดียวกันและจบลงด้วยการไปข้างหน้าและกลับโดยไม่มีความคืบหน้า

การแก้ไข livelocks อาจซับซ้อนและขึ้นอยู่กับกฎและกลไกการชนของเกม (เช่น: พวกเขาควรต่อสู้และทำลายอุปสรรคหรือไม่)

บ่อยครั้งที่มันกลับมาที่การกำหนดวัตถุที่เคลื่อนที่ของคุณกำหนดเวลาการจองโหนด / เส้นทาง (อย่าลืมยกเลิกเมื่อพวกเขาเปลี่ยนเส้นทางหรือตาย) เพื่อให้วัตถุเคลื่อนที่อื่น ๆ สามารถวางแผนล่วงหน้า

เมื่อคุณมีข้อมูลนี้แล้วคุณยังสามารถวางแผนการสกัดกั้นได้อีกด้วย


19
โอ้พระเจ้า "livelock" - คุณได้อธิบายว่าสิ่งที่หลบไปทางซ้าย - ขวาอันยิ่งใหญ่ที่ฉันต้องทำในโถงทางเดินตลอดเวลา
Ethan The Brave

2
วิธีแก้ปัญหา live / deadlock ง่าย ๆ คือการสุ่มเลือกระหว่างตัวเลือกที่มี (เช่นโอกาส 50% ที่จะไม่ย้ายและโอกาส 50% ที่จะย้ายไปทางซ้าย) ตราบใดที่นักแสดงแต่ละคนเลือกแบบสุ่มมีโอกาสไม่เป็นศูนย์ที่ล็อคจะได้รับการแก้ไข
Draco18s

@ Draco18s และเพิ่มขนาดของ flailing ของคุณไปเรื่อย ๆ จนกว่าจะมีทาง (ฉันอาจจะอธิบายว่าการชนกันของอีเทอร์เน็ตได้รับการแก้ไขแล้ว!)
Cort Ammon - Reinstate Monica

ฉันคิดว่าพวกเขาสามารถเล่นRock Paper Scissorsหรือเกมที่เป็นมิตรของ Dilemma Petri Dish Prisoner'sแทน ; P
Draco18s
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.