ฉันควรเปลี่ยน A * อย่างไร


10

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

อะไรคือวิธีการแก้ปัญหาปกตินี้? มีวิธีการ "replan" A * โดยไม่ต้องทำการค้นหาซ้ำทั้งหมดหรือไม่ ฉันควรค้นหาบ่อยครั้งกว่า (ทุกครึ่งวินาทีหรือสองวินาที) และยอมรับว่าเส้นทางนั้นมีความคลาดเคลื่อนเล็กน้อยหรือไม่?

คำตอบ:


13

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


+1 นี่คือสิ่งที่ Mat Buckland อธิบายไว้ในหนังสือ AI ของเขา เขาเรียกมันว่า "การวางแผนเส้นทางแบบแบ่งเวลา" ( books.google.ch/… ) สิ่งที่ดี.
bummzack

8

คุณสามารถใช้การตรวจจับระยะใกล้เคียงเพื่อเรียกใช้อัลกอริธึมทุก ๆ สองสามเฟรมหากระยะทางนั้นดีมาก (เพราะในกรณีส่วนใหญ่หากระยะทางมีขนาดใหญ่ ตัวอย่างเช่น:

      Distance > 100, run A* every 2 seconds
100 > Distance >  50, run A* every 1 second
50  > Distance >  25, run A* every 10 frames
25  > Distance <  25, run A* every frame

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


8

ไม่ตอบคำถามที่แน่นอนของคุณ แต่ ... หากคุณยินดีที่จะ "โกง" คุณสามารถทำให้ผู้เล่นออกจาก "breadcrumb" และให้หัวหน้าติดตามพวกเขา หากเส้นทาง breadcrumb ข้ามตัวเองให้ปฏิบัติตามเส้นทางล่าสุด (ซึ่งจะทำให้เจ้านายหลีกเลี่ยงการวนซ้ำและเส้นทางอื่น ๆ ที่อาจยาวเกินไปไม่พูดถึงการไม่ทำตามเส้นทางที่แน่นอนของผู้เล่น)

มันจะใช้ได้ดีถ้าเจ้านายเป็นสัตว์บางชนิดที่มีกลิ่นหอม มันจะทำงานได้ดีเหมือนตามกลิ่นของผู้เล่น :)


5

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


4

หากเป็นสภาพแวดล้อมแบบคงที่คุณสามารถคำนวณเส้นทางที่สั้นที่สุดของทุกคู่


2
ถ้ามันเป็นสภาพแวดล้อมแบบคงที่ขนาดเล็ก

ขึ้นอยู่กับแพลตฟอร์มและหน่วยความจำที่มีอยู่
เนท

@Joe, @Nate, จริง
Peter Taylor

2

ฉันสร้างเกมสำหรับการแข่งขันเกม 48 เกมโดยที่ตัวละคร A * ติดตามผู้เล่นในระดับหนึ่ง เนื่องจากการใช้งาน A * ของฉันช้า (มันไม่สามารถทำงานได้ทุกเฟรม) ฉันตั้งช่วงเวลาในการหน่วงเวลาสามวินาที นี่เป็นผลที่ไม่ได้ตั้งใจจากการอนุญาตให้ผู้เล่น "หลอก" AI สักครู่ มันทำให้เกมสนุกยิ่งขึ้น

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

นั่นเป็นสิ่งที่คาดไม่ถึงและเป็นประสบการณ์การเรียนรู้ที่ดี


1
นั่นเป็นจุดที่ดี ฉันจำได้ว่าการอ่านเกี่ยวกับการค้นหาเส้นทางใน pac-man ซึ่งพวกเขาใช้อัลกอริทึมที่ไม่สมบูรณ์ซึ่งจงใจทำให้ผู้เล่นฉลาดกว่าผี ผีแต่ละตัวมีความไม่สมบูรณ์แตกต่างกันเล็กน้อยทำให้พวกเขามีตัวละครมากขึ้น สิ่งที่จะนำติดตัวไปได้คือในเกมความสนุก> ทั้งหมด
Nick Van Brunt

0

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


ฉันใช้พฤติกรรมการหมุนพวงมาลัย (โดยเฉพาะการค้นหา) ในกรณีที่ไม่มีสิ่งกีดขวางระหว่างตัวแทนและเป้าหมาย น่าเสียดายที่สภาพแวดล้อมของฉันมีสิ่งต่าง ๆ เช่นทางเดินบิดที่จำเป็นต้องใช้โซลูชันที่ชาญฉลาด
Gregory Avery-Weir
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.