ทำให้ AI ใช้เส้นทางที่แตกต่างกัน


16

ฉันมีเกม 2d จากบนลงล่างที่ AI วางไข่ที่ขอบแผนที่และวิ่งไปที่กึ่งกลาง

ฉันใช้ A * และ node mesh เพื่อทำ pathfinding

ตอนนี้ AI จะวางไข่ที่จุดหนึ่งบนขอบของแผนที่และใช้เส้นทางเดียวกันซึ่งเป็นเส้นทางที่สั้นที่สุดไปยังศูนย์กลาง

ตอนนี้ฉันต้องการให้พวกเขาประหลาดใจและน่าสนใจยิ่งขึ้นและใช้เส้นทางที่แตกต่างกัน

ฉันสามารถคิดได้ทันทีถึงสองแนวคิดในการทำสิ่งนี้ แต่อยากรู้ว่ามีวิธีอื่นหรือวิธีที่ดีกว่าที่ผู้คนมักจะใช้หรือไม่?

  1. เมื่อศัตรูคนหนึ่งวางไข่และสร้างเส้นทางไปยังศูนย์กลางให้เพิ่มค่าใช้จ่ายของโหนดทั้งหมดบนเส้นทางนั้นชั่วคราวจากนั้นค่อยๆลดพวกมันกลับลงเมื่อเวลาผ่านไป จากนั้น AI ของศัตรูที่วางไข่ในภายหลังจะถูกบังคับให้ใช้เส้นทางที่กว้างขึ้น

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

วิธีใดที่ผู้คนพบว่าทำงานได้ดีที่สุดในการทำให้ AI เปลี่ยนเส้นทางที่พวกเขาใช้ดูน่าเชื่อถือและน่าประหลาดใจ

คำตอบ:


7

ตัวเลือกที่สองของคุณให้คำแนะนำในแนวทางพื้นฐานเพิ่มเติม: สร้างความมั่นใจว่าศัตรูเข้าหาผู้เล่นของคุณจากทิศทางที่ต่างกัน คำถามคือพวกเขาต้องเดินทางไปไกลแค่ไหนเพื่อที่จะได้ "รอบ" ผู้เล่นของคุณ? อุดมคติของสิ่งนี้จะเป็นการผสมผสานของ

  • สร้างจุดแบบไดนามิกที่ล้อมรอบอย่างใกล้ชิด (เช่นติดตาม) ตำแหน่งของผู้เล่น;
  • สิ่งที่ไม่เป็นไรได้เสนอแนะในแง่ของการสุ่มเส้นทางไปยังจุดรอบข้างเหล่านี้ในระดับที่มากหรือน้อยกว่า

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

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


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

ยังคงไม่น่าสนใจที่จะนำมาใช้เนื่องจากเป็นมุมมองที่ไม่ได้มาตรฐานในแง่ของการจัดการหน่วยงาน AI :)
วิศวกร

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

12

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


ศัตรูจะวิ่งออกมาเหมือนไก่และในสภาพแวดล้อมที่ละเอียดเส้นทางจะไม่แตกต่างกันมาก มันเป็นการเพิ่มที่ดีให้กับโซลูชั่นอื่น ๆ แต่ไม่ใช่วิธีแก้ปัญหาในตัวเอง
Coyote

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

แน่นอน :) ฉันมักจะเป็นแฟนของเอนโทรปี แต่ผลสุดท้ายไม่ค่อยดีนัก
โคโยตี้

ฉันเชื่อว่าคำตอบของ Nick Wiggill นั้นดีกว่าของฉัน แต่อย่างใดมันไม่ได้รับ upvotes มันสมควร
ไม่เป็นไร

มันคือ ... แต่คุณเป็นคนแรกและเรียบง่ายกว่า ... เราลองลงคะแนน: P
Coyote

3

ฉันชอบคำตอบของ Nevermindแต่เนื่องจากข้อ จำกัด ที่อธิบายไว้ในความคิดเห็นนี่คือสิ่งที่ฉันจะลอง:

  1. อัลกอริทึมสำหรับหน่วยเดียวไปยังศูนย์บันทึกระยะทางทั้งหมดที่เดินทาง
  2. สำหรับแต่ละหน่วยที่ตามมาจัดสรรระยะทางที่เป็นแบบสุ่มและจำนวนน้อยกว่านี้
  3. ในขณะที่ทำ A * สำหรับแต่ละยูนิตจะมีน้ำหนักเพิ่มขึ้นอยู่กับว่าคุณอยู่ใกล้แค่ไหนและคุณต้องการเดินทางไกลแค่ไหน (distanceToGoal) + Max(0, desiredDistance - distanceTravelled))นี้อาจจะเป็นสิ่งที่ชอบ

นี่จะทำให้หน่วยพยายามที่จะไปเพิ่มเติมซึ่งอาจเป็นเส้นทางที่แตกต่างกันซึ่งจะส่งผลให้พวกเขาอาจใช้เส้นทางที่แตกต่างกัน

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


2

แนวทางที่ง่ายที่สุดก็คือการให้วงกลมล้อมรอบวัตถุประสงค์

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

ส่วนที่สำคัญคือการกำจัดเส้นทางทั้งหมดในวงกลมสำหรับจุดเดิมที่คุณอาจท้ายด้วยศัตรูข้ามวงกลมเพื่อไปยังจุดเริ่มต้นของพวกเขา

จากนั้นคุณจะได้รับตัวแปรใด ๆ โดยการเล่นกับค่าหลายค่าเพิ่มจุดรองในวงกลมใกล้กับค่าเริ่มต้นเป็นต้น


หากแผนที่ของคุณรองรับให้หาสถานที่ 'น่าสนใจ' รอบ ๆ วงกลมนี้ (ทางเข้าประตูต้นไม้ต้นไม้หินสิ่งก่อสร้างใด ๆ ที่มีข้อดีทางยุทธวิธี) และให้ศัตรูมุ่งหน้าไปยังที่ตั้งเหล่านั้นก่อนหากมี เปิดถ้าพวกเขาต้อง สิ่งนี้จะดูฉลาดกว่าการกดจุดสุ่มบนขอบของวงกลม
DampeS8N

ขอบคุณ Coyote, อ๋อฉันอาจจะไปกับโซลูชันของ Nicks และตามที่ DampeS8N แนะนำโดยสถานที่สำคัญบางแห่งที่น่าสนใจเป็นจุดอ้างอิง เพื่อหลีกเลี่ยงปัญหาของ AI "การข้ามวงกลม" ฉันแค่จะเพิ่มค่าใช้จ่ายของโหนดในวงกลมอย่างมากดังนั้น A * ควรเส้นทางรอบมันหวังว่า :)
TerryB

2

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

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

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

ฉันอาจแนะนำวิธีที่ง่ายกว่าในการดูมัน เมื่อคุณค้นพบเส้นทางไม่เพียง แต่รักษาเส้นทางที่ดีที่สุดที่ฉันเคยพบมา ให้รวบรวมชุดเส้นทางที่ดีที่สุด 5 หรือ 10 แทน ใช้เกณฑ์เพื่อละทิ้งค่าผิดปกติอย่างชัดเจน เช่นถ้าเส้นทางที่ดีที่สุดเคลื่อนที่ไปที่ 20u เพื่อไปยังเป้าหมายเส้นทางที่ดีที่สุดถัดไปคือ 21u และอีกเส้นทางถัดไปหลังจากนั้นก็จะข้าม 50u ตั้งค่าขีด จำกัด ที่ใหญ่กว่าเส้นทางที่ดีที่สุด 20% และละทิ้งเส้นทาง 50u เพราะมันยิ่งนานกว่า ตอนนี้คุณมีหลายเส้นทางให้เลือกและโดยการเลือกจากชุดเส้นทางนั้นนักแสดงของคุณจะทำการตัดสินใจที่แตกต่างกัน

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


1

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

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