มีขั้นตอนวิธีการหาเส้นทางที่จะจัดการประเภทการเคลื่อนไหวที่แตกต่างกันหรือไม่?


12

ฉันกำลังพัฒนาบอทสำหรับเกมกระดานจำลอง BattleTech http://en.wikipedia.org/wiki/BattleTechมันเปิดใช้แล้ว

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

ฉันรู้เพียงอัลกอริธึม Dijkstra และ A * แต่ปัญหาคือมีการเคลื่อนไหว 3 ประเภท: เดินวิ่งและกระโดดหกเหลี่ยมหลาย ๆ รูป (แต่ละอันมีกฎของตัวเอง) เดินและวิ่งเกือบจะเหมือนกัน

เส้นทางที่ดีที่สุดอาจเป็นการผสมผสานหรือการเคลื่อนไหวแต่ละประเภท นี่คือตัวอย่างของแผนที่http://megamek.info/sites/default/files/isometric_view.png

คุณรู้อัลกอริทึมที่ดีสำหรับการค้นหาเส้นทางที่ซับซ้อนหรือวิธีรวมผลลัพธ์ A * สำหรับการเคลื่อนไหวแต่ละประเภทหรือไม่


ฉันคิดว่าสิ่งนี้มักได้รับการจัดการโดยการจัดการเส้นทางที่ถ่วงน้ำหนักด้วย A * (น้ำหนักเป็นต้นทุนของเส้นทาง / ตารางนั้น) ตัวอย่างเช่นหากการกระโดดดีกว่าจะได้รับน้ำหนักที่ต่ำกว่า (เช่น 5) กว่าการเดิน (เช่น 10)
ashes999

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

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

@Philipp ไม่คุณสามารถใช้การเคลื่อนที่ได้เพียงหนึ่งแบบในแต่ละเทิร์น
alexvisio

เดิน: เลื่อนผ่านรูปหกเหลี่ยมที่มีระดับความสูงต่างกันเล็กน้อย Run: เหมือนกัน แต่คุณสามารถไปได้ไกลถึงแม้ว่าคุณจะสร้างความร้อนและสูญเสียความแม่นยำในการถ่ายภาพ (ดังนั้นมันจึงไม่ใช่สิ่งที่ดีที่สุดเสมอไป) กระโดด: คุณสามารถกระโดดข้ามสิ่งกีดขวาง (กำแพงหรือแม่น้ำ) แทนที่จะเดินไปรอบ ๆ
alexvisio

คำตอบ:


10

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

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

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

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

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

นอกจากนี้ยังมีอีกปัจจัยหนึ่งในการค้นหาเส้นทางที่คุณควรคำนึงถึง: ภายใต้เงื่อนไขบางประการมันอาจสมเหตุสมผลสำหรับ mech เพื่อหลีกเลี่ยงการสิ้นสุดเทิร์นของมันในบางตำแหน่ง เมื่ออยู่ในพื้นที่อันตรายการใช้สามเทิร์นเพื่อรับจาก A ถึง B แต่การปิดแต่ละหน้าปกอาจจะดีกว่าการใช้เพียงสอง แต่จะถูกเปิดเผยในตอนท้ายของแต่ละ หรืออาจจะไม่ มันขึ้นอยู่กับสถานการณ์และกลไกของเกม นี่คือการตัดสินใจเชิงกลยุทธ์ที่คุณต้องทำตามการวิเคราะห์พฤติกรรม คุณสามารถนำเสนอสิ่งนี้ได้โดยการเพิ่มค่าใช้จ่ายเพิ่มเติมให้กับขอบซึ่งทำให้การเปิดกระเบื้องที่เป็นอันตรายนั้นทำให้ AI ไม่สามารถเคลื่อนไหวได้

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.