Tweaking AStar เพื่อค้นหาตำแหน่งที่ใกล้ที่สุดไปยังปลายทางที่ไม่สามารถเข้าถึงได้


12

ฉันได้ติดตั้ง AStar ใน Java และใช้งานได้ในพื้นที่ที่มีสิ่งกีดขวางที่สามารถเข้าถึงปลายทางที่เลือกได้

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

มีวิธีที่เป็นไปได้ในการปรับแต่ง AStar เพื่อค้นหาเส้นทางไปยังตำแหน่งที่ใกล้ที่สุดไปยังปลายทางที่ไม่สามารถเข้าถึงได้หรือไม่?

คำตอบ:


21

ติดตามโหนดด้วยค่าต่ำสุดEstimatedDistanceToEnd(เช่นต่ำสุดh(x)) และหากไม่มีโหนดปลายทางสามารถเข้าถึง backtrack จาก backtrack จากโหนดนั้นแทน


ง่าย ฉันรักมัน!
John McDonald

ฉันเพิ่งตบหัวของฉันและ "โด" เมื่อฉันอ่านคำตอบของคุณ ขอบคุณ!
Shivan Dragon

1

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

ต่อไปนี้เป็นวิธีหนึ่งในการทำเช่นนี้หาก A * ส่งคืนพา ธ ที่ถูกต้อง (โหนดเริ่มต้น / สิ้นสุดในเส้นทางที่ตรงกับโหนดอินพุต) ให้ส่งคืนพา ธ มิฉะนั้น...

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

บางอย่างที่เหมือนเติมน้ำท่วมดูเหมือนว่าเป็นสิ่งที่เหมาะสมen.wikipedia.org/wiki/Flood_fillโปรดทราบว่าคุณยังคงต้อง A * จากโหนดเริ่มต้นไปยังโหนดที่มีระยะทางต่ำสุด นอกจากนี้โปรดทราบว่าการดำเนินการนี้มักเกี่ยวข้องกับการตรวจสอบโหนดที่เชื่อมต่อทั้งหมดและอาจช้ามาก
รอยต.

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

1
@Roy: A *, BFS และทุกขั้นตอนวิธี pathfinding คล้ายจะตรงเป็นช้าเป็นน้ำท่วมเติมเพราะพวกเขาทุกความต้องการในการตรวจสอบทุกโหนดที่เชื่อมต่อเพื่อให้แน่ใจว่าเป็นเส้นทางไปยังจุดสิ้นสุดไม่มี อย่างไรก็ตามมีวิธีการในการบรรเทาปัญหานี้; ดูที่นี่
BlueRaja - Danny Pflughoeft
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.