AI เพื่อย้ายยานอวกาศที่กำหนดรูปทรงเอง (รูปร่างที่มีผลต่อพฤติกรรมการเคลื่อนไหว)


15

ฉันกำลังออกแบบเกมวางแผนกลยุทธ์การต่อสู้กับกองยานอวกาศ 3D-6DOF ซึ่งเป็นเครือข่ายซึ่งอาศัยการปรับแต่งเรือเป็นอย่างมาก ให้ฉันอธิบายเกมนิดหน่อยเนื่องจากคุณจำเป็นต้องรู้เรื่องนี้บ้างเพื่อตั้งคำถาม

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

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

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

ฉันคิดว่าวิธีนี้น่าเบื่อนิดหน่อย ผู้เล่นไม่ต้องการเล่นซอกับมอเตอร์หรืออะไรก็ตามคุณแค่ต้องการ MOVE และ KILL วิธีที่ฉันตั้งใจให้ผู้เล่นสั่งให้เรือเหล่านี้เป็นไปตามจุดหมายปลายทางและการหมุนแล้ว AI จะคำนวณพลังของใบพัดที่ถูกต้องเพื่อให้ได้การเคลื่อนไหวและการหมุน แรงขับไม่จำเป็นต้องเหมือนกันตลอดการคำนวณเทิร์นทั้งหมด (หลังจากได้รับคำสั่งซื้อ) ดังนั้นมันจะเจ๋งถ้าเรือรบตอบโต้ขณะที่พวกมันเคลื่อนที่ปรับกำลังของใบพัดตามความต้องการแบบไดนามิก แต่อาจเป็น ยากเกินไปที่จะติดตั้งและไม่จำเป็นสำหรับเกมที่จะทำงาน

ในทั้งสองกรณีAI จะตัดสินใจได้อย่างไรว่าใบพัดแบบใดที่จะเปิดใช้งานเพื่อให้ได้เส้นทางที่ดีที่สุด (หรืออย่างน้อยก็ไม่เลวร้ายที่สุด)?

ฉันคิดเกี่ยวกับวิธีการบางอย่าง:

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

ฉันติดอยู่ที่นี่จริงๆ ความคิดใด ๆ


คุณเคยดูพฤติกรรมการขับขี่หรือไม่?
หิน

1
@ แน่ใจว่า ปัญหาที่นี่คือพฤติกรรมการบังคับเลี้ยวมักจะถูกสมมติว่าควบคุมตำแหน่งและการหมุนของวัตถุและข้อ จำกัด บางอย่าง (หรืออย่างน้อยนั่นก็คือสิ่งที่ฉันพบบนเว็บ) AI ที่นี่ไม่มีการควบคุมเต็มรูปแบบของเอนทิตี แต่เหนือสิ่งอื่นใด (ใบพัด) ที่ทำให้เอนทิตีเคลื่อนย้าย ฉันมีปัญหาในการเชื่อมต่อพฤติกรรมการขับขี่เหล่านี้กับการเคลื่อนที่ที่แท้จริงของยานอวกาศ
kaoD

นั่นเป็นเหตุผลเดียวกันที่พฤติกรรมการบังคับเลี้ยวไม่ทำงานบนรถแข่ง พฤติกรรมการบังคับเลี้ยวนั้นยอดเยี่ยม แต่มันไม่ใช่ทางออกที่เป็นสากลสำหรับทุกสิ่ง
tenpn

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

1
ฉันรู้ว่ามันเก่ามาก แต่สิ่งที่คุณกำลังมองหาเรียกว่าการวางแผนการเคลื่อนไหว kinodynamic
mklingen

คำตอบ:


4

ขออภัยยังไม่มีโซลูชันที่ผ่านการทดสอบและทดสอบแล้ว แต่สิ่งนี้ไม่สามารถแก้ไขได้ทางคณิตศาสตร์หรือไม่?

ด้วยใบพัดใด ๆ และออฟเซ็ตจากจุดศูนย์กลางมวลคุณสามารถคำนวณระนาบที่คุณสามารถหมุนได้

สำหรับการเคลื่อนไหวใด ๆ คุณสามารถใช้ใบพัดอย่างน้อย 1 ตัว แต่ละใบพัดสามารถสอบถามเพื่อดูว่าระนาบสามารถมีส่วนร่วมในการกำหนดเป้าหมายได้หรือไม่ความพยายามที่จะใช้จากใบพัดในการสนับสนุน (ใบพัดที่ห่างไกลจาก CoM สามารถใช้พลังงานน้อยกว่าเพื่อสร้างการหมุนได้มากขึ้น) และใกล้เท่าใด คุณไปสู่การมุ่งเป้าไปที่เป้าหมาย จากนั้นคุณ A * จะข้ามพื้นที่การค้นหานั้นจนกว่าคุณจะพบโซลูชันที่มีต้นทุนต่ำซึ่งอาจเป็นพลังงานที่ใช้ทั้งหมดน้อยที่สุดหรือเคลื่อนที่เร็วที่สุด

ประเมินใหม่อย่างต่อเนื่องว่าเมื่อคุณเลี้ยวครบและใช้พลังงานปานกลางเมื่อคุณเข้าใกล้เป้าหมายอาจใช้คอนโทรลเลอร์ PID

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

นี่คือส่วนหลังของซองจดหมาย แต่ฉันไม่เห็นข้อบกพร่องที่สำคัญ เพียงแค่ทำงานหนักและปรับแต่งตัวเลข :)


นี่คือสิ่งที่ฉันกำลังมองหาทางออกทางคณิตศาสตร์ ... ขอบคุณ! ฉันหวังว่ามันจะง่ายอย่างที่คิด
kaoD

7

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

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

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

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


ไม่ว่าสิ่งที่ฉันกำลังมองหา แต่อาจทำเคล็ดลับถ้าฉันต้องการจริงๆ
โหวตขึ้น

0

ในอวกาศรูปร่างไม่มีผลต่อการเคลื่อนไหว ไม่มีอากาศให้ลาก

เป็นเรือรวมกับส่วนเสริมทั้งหมดที่มีความสำคัญ มันเป็นปัญหาแรงโน้มถ่วงที่ง่ายกว่า ดังนั้นคุณสามารถทำการคำนวณเหล่านี้หรือเนื่องจากมันเป็นเกมเทิร์นเบสพัฒนาระบบการเคลื่อนไหวเช่น RPG อย่างที่ Traveler มี


ยินดีต้อนรับสู่ GD.SE! คำถามนี้มีคำตอบที่ยอมรับแล้วและถูกถามเมื่อ 2 ปีที่แล้วบางทีคุณอาจตอบคำถามใหม่บนเว็บไซต์
ขั้วโลก

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

@Polar คำถามโปสเตอร์ที่นี่ ฉันพบว่าคำตอบของเขาน่าสนใจมาก! ฉันดีใจที่เขากลับมาตอบและฉันคิดว่าการเพิ่มมูลค่าหลายปีต่อมาเป็นส่วนที่มีค่าที่สุดของ SO
kaoD

@ gnoll110 ฉันอาจจะผิดที่นี่ ไม่มีการลากไม่เป็นไร แต่มุมที่เวกเตอร์แรงขับเกิดเป็นจุดศูนย์กลางมวลมีผลต่อการที่เรือแปลหรือหมุน ... ใช่ไหม เช่นเครื่องยนต์ที่อยู่ตรงกับกึ่งกลางของมวลแปลในขณะที่เคลื่อนย้ายออกจากจุดศูนย์กลางมวลจะเพิ่มส่วนประกอบที่หมุนได้ในเรือ
kaoD

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