การวางแผนตระเวนดินแดน


14

ฉันกำลังพัฒนาเกม / จำลองสถานการณ์ที่ตัวแทนกำลังต่อสู้เพื่อดินแดน ฉันมีสถานการณ์ที่แสดงในภาพด้านล่าง:

พื้นที่สีเขียวและสีแดงที่มี "สัตว์" สีเดียวกัน

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

ในด้านเทคนิคแต่ละสแควร์จะแสดงเป็นx,yตำแหน่งเช่นเดียวกับมิติที่แสดงความยาวด้าน นอกจากนี้ยังมีข้อมูลเกี่ยวกับผู้ที่ครอบครองตาราง ArrayListสี่เหลี่ยมทั้งหมดจะถูกเก็บไว้ใน

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

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

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

ฉันจะแก้ไขปัญหานี้ได้อย่างไร


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

@ Quetzalcoatl: ความคิดที่ดีใช้งานง่าย แต่จะนำไปสู่ภูมิภาคลาดตระเวนที่ไม่เท่ากัน พิจารณาตัวแทนสีเขียวในภาพด้านบน ตัวแทนด้านขวาจะมี ~ 15 สี่เหลี่ยมเพื่อครอบคลุมหนึ่งในศูนย์เพียง 2
Junuxx

อืมเป็นแบบนี้มากขึ้นหรือน้อยลงเช่นเลือกบล็อกที่ใกล้เคียงที่สุดถัดไปที่เป็นของทีมของพวกเขาจากบล็อกปัจจุบัน
Tohmas

1
แน่นอนมันไม่สมบูรณ์ บางทีแทนที่จะใช้เอเจนต์เป็นเมล็ดสำหรับการเติบโตของภูมิภาคเมล็ดสามารถปลูกแบบสุ่มในขั้นต้น (หนึ่งต่อตัวแทน) เมื่อภูมิภาคเติบโตขึ้นจนจบอาจจะมีขั้นตอนการปรับสมดุลให้ปฏิบัติเหมือนแต่ละคลาสคลัสเตอร์ที่มีไทล์เป็นโหนด KNearestNeighbour หรือ KMean หรือสิ่งที่คล้ายกันสามารถย้ำจนกว่ารูปแบบของการลู่เข้ามาบางส่วนดังนั้นเมื่อพิจารณาถึงภูมิภาคที่มีความสมดุลประมาณคร่าวๆจากนั้นตัวแทนแต่ละอันจะถูกมอบหมายให้เมล็ดที่ใกล้ที่สุด (ระยะทางยูคลิด) (ฉันคิดว่าฉันอาจ overcomplicating นี้จะต้องมีวิธีที่ง่ายมี ... )
Quetzalcoatl

1
บางทีตัวแทนแต่ละคนอาจเริ่มต้นด้วยการต่อต้านตัวแทนอื่น ๆ เช่นแม่เหล็ก ที่จะบังคับให้ตัวแทนไปยังมุมต่าง ๆ ของภูมิภาค เมื่อตัวแทนมาพักผ่อนให้แบ่งที่ดินตามที่แนะนำ Quetzalcoatl ภูมิภาคควรอยู่ในระดับคร่าว ๆ
tyjkenn

คำตอบ:


9

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

Optimum : เอเจนต์เคลื่อนที่ในลักษณะที่กระจายพื้นที่ครอบคลุมของระบบโดยรวมได้อย่างสมบูรณ์แบบ

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

ฉันจะมุ่งเน้นไปที่แนวทางที่สองซึ่งผมคิดว่าคุณสามารถแก้โดยใช้การผสมรูปแบบถ่วงน้ำหนักของพวงมาลัยต่างๆจาก Craig Reynolds' พฤติกรรมพวงมาลัยสำหรับตัวละครอิสระ แนวคิดพื้นฐานของพฤติกรรมการบังคับเลี้ยวคือการใช้แรงอย่างง่ายที่รวมเข้าด้วยกันเพื่อสร้างการนำทางที่น่าสนใจรอบ ๆ สภาพแวดล้อม ในกรณีของคุณฉันคิดว่าคุณต้องการรวมพฤติกรรมการขับขี่ต่อไปนี้:

  • การหลีกเลี่ยง (นอกอาณาเขต) - ตัวแทนพยายามอยู่ภายในอาณาเขตของตนและหลีกเลี่ยงการเคลื่อนที่ออกนอกเขต สำหรับความจริงบางประการอิทธิพลของ "การก้าวออกนอก" ดินแดนไม่จำเป็นต้องเป็น 100% ที่นี่ "มุมตัด" เล็กน้อยที่จะออกไปนอกพื้นที่อาจทำให้การเคลื่อนไหวสมจริงยิ่งขึ้น

  • พเนจร - ตัวแทนพยายามที่จะย้ายไปรอบ ๆ และสำรวจ อันนี้คุณจะต้องชั่งน้ำหนักอย่างหนักไม่งั้นเอเจนต์จะพยายามหาจุดแยกที่ดีที่สุดจากแต่ละคนจากนั้นจึง "อยู่กับที่"

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

  • แสวงหา (ผู้บุกรุก) - ตัวแทนพยายามปิดผู้บุกรุกใด ๆ ที่ตรวจพบ

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

มีแหล่งข้อมูลออนไลน์ไม่มากนักเกี่ยวกับวิธีใช้ "boids" ที่เป็นไปตามรูปแบบพฤติกรรมที่อธิบายไว้ ผมขอแนะนำให้เปิดแหล่งที่มาการดำเนินงานopensteer


2

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

แน่นอนว่านี่เชื่อมโยงอาณาเขต

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

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