นำไปใช้หลีกเลี่ยงการชนกัน 100%


21

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

ยานพาหนะ

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

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

เป้าหมาย

เป้าหมายของฉันคือการใช้ AI บางประเภทซึ่งจะหลีกเลี่ยงการชนที่แม่นยำ 100% (เช่นฉันจะแน่ใจว่ายานพาหนะจะไม่ชนกัน)

ออกแบบ

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

สิ่งที่ฉันพบจนถึงตอนที่ฉันติดอยู่

ภายในลิงค์ต่าง ๆ มากมายที่ฉันพบในคำถามอื่น ๆ ในเว็บไซต์นี้ฉันพบการใช้งานเฉพาะเหล่านี้:

  1. การปะทะกันระหว่างลูกบอลสระว่ายน้ำ
  2. หลีกเลี่ยงการชนที่ไม่ได้ลงทะเบียน
  3. การจัดคิว

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

สิ่งที่ฉันสังเกตเห็นก็คืออัลกอริธึมที่หลีกเลี่ยงการชนกันของข้อมูลที่เชื่อมโยงด้านบนใช้"การฉายภาพแบบทันที" ของความเร็วเชิงเส้นเพื่อตรวจสอบว่ามีบางอย่างกำลังแล่นอยู่หรือไม่ ฉันสงสัยว่านี่จะเพียงพอในกรณีของฉันหรือถ้าฉันต้องฉายตำแหน่งของฉันในแบบที่เป็นจริงมากขึ้น (เช่น: ถ้าฉัน 60 องศาหมุนพวงมาลัย 90 °ไปทางขวาฉันควรคำนวณตำแหน่งของฉันตลอดเวลา 30 °ของเส้นโค้งจากนั้นสมมติการเคลื่อนที่เชิงเส้น)

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

คำถาม

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

ขอบคุณล่วงหน้าสำหรับความช่วยเหลือของคุณ!


20
หยุดรถทุกคัน ประสบความสำเร็จในการหลีกเลี่ยง 100%
Martin Sojka

2
ก็เพียงพอแล้วหากพวกเขาหยุดสัมพันธ์กัน นั่นคือทั้งหมดของพวกเขาย้ายไปในทิศทางเดียวกันที่ความเร็วเดียวกัน ปัญหาที่ใหญ่กว่าคือมันเป็นไปไม่ได้ (พิสูจน์ได้) เป็นไปไม่ได้ที่จะบรรลุอัลกอริทึมใด ๆ ที่ทำอัตรา 100% สำหรับการกำหนดค่าที่เป็นไปได้ ตัวอย่างเช่นให้พิจารณายานพาหนะสองคันที่มีรัศมีวงเลี้ยวขนาดใหญ่มากที่ระยะทางต่ำสุดไม่เท่ากับศูนย์จากกันและบินด้วยความเร็วสูงสุด
Martin Sojka

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

3
@mac ฉันอาจจะใช้คอนโทรลเลอร์ระดับโลกกับ A * ฉันรู้ว่าคุณต้องการที่จะอยู่ห่างจากโซลูชันนี้ แต่มันก็สมเหตุสมผลดีกว่าเพราะมันมีมุมมองระดับโลกของยานพาหนะและสามารถคำนวณเส้นทางล่วงหน้าได้ คุณอาจต้องการจัดลำดับความสำคัญกับยานพาหนะ (สิ่งที่ใกล้เคียงกับเป้าหมายมากที่สุดจะได้รับลำดับความสำคัญสูงกว่าดังนั้นเส้นทางของมันจึงยังคงไม่เปลี่ยนแปลง
Jonathan Connell

6
@Flip โปรแกรมจำลองการบินยังถือว่าเป็นเกม แต่ถ้าคุณ 'โกง' มันจะทำลายเกมสำหรับผู้เล่นที่ตระหนักถึงสิ่งนี้
Jonathan Connell

คำตอบ:


5

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

โชคดี!


2
คำค้นหาที่เกี่ยวข้องที่นี่คือBoids boidsอย่างไรก็ตามฉันไม่คิดว่านี่คือสิ่งที่ OP กำลังมองหา - ดูเหมือนว่าเขาต้องการให้รถวิ่งไปทุกทาง
BlueRaja - Danny Pflughoeft

ท่านเตือนยังเกี่ยวกับ AI เพื่อหลีกเลี่ยงการชนกับคนอื่น
Matt Jensen

OP ขอการหลีกเลี่ยงการชนที่เชื่อถือได้ Flocking ไม่มีการรับประกันใด ๆ เนื่องจากโมเดลที่ใช้แรงนั้นไม่ได้มีข้อ จำกัด อย่างหนัก แม้ว่า flocking จะเป็นจุดเริ่มต้นที่ดีในการเข้าสู่หัวข้อ แต่คำตอบก็คือพลาดไป ฉันขอแนะนำให้ OP ค้นหา "อุปสรรคความเร็ว" แทน
Tobias Gurdan

@TobiasGurdan หากคุณมีคำตอบที่เหมาะสมกว่า (และฉันยอมรับว่าคุณทำ) คุณควรสร้างคำตอบ
MichaelHouse

3

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

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


0

มีวิธีการในยานพาหนะแต่ละคันที่ทำการค้นหารัศมีรอบตัวเองหากมียานพาหนะอื่น ๆ ภายในรัศมีนี้ย้ายไปในแบบที่เหมาะกับความชอบของคุณ: 1) ย้ายในเวกเตอร์ตรงกันข้าม 2) ช้าลง 3) เร่งความเร็ว ฯลฯ

คุณสามารถรวมกันได้: หากเวกเตอร์ของยานเกราะคันอื่นไม่ตรงไปข้างหน้าหรือข้างหลัง: ให้ถอยไป; อื่นถ้าตรงไปข้างหน้า: ช้าลง; อื่น ๆ : เร่งความเร็ว


0

เป้าหมายของฉันคือการใช้ AI บางประเภทซึ่งจะหลีกเลี่ยงการชนที่แม่นยำ 100% (เช่นฉันจะแน่ใจว่ายานพาหนะจะไม่ชนกัน)

ถ้าสิ่งนี้เป็นไปได้มันจะถูกนำไปใส่ในเครื่องบินทั่วโลกในตอนนี้

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

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


เนื่องจากเขาออกแบบกฎของจักรวาลจึงเป็นไปได้อย่างแน่นอน เห็นได้ชัดว่าโลกแห่งความจริงมีความซับซ้อนมากขึ้น แต่ฉันแน่ใจว่าเครื่องบินในโลกแห่งความจริงใช้เทคนิคการหลบหลีกการชนมากมาย ...
BlueRaja - Danny Pflughoeft

0

ฟังดูแล้วว่าการจำลองฝูงชนอาจเป็นหัวข้อที่เกี่ยวข้องกับสิ่งที่คุณพยายามจะทำ กลุ่ม GAMMA ที่ UNC มีงานจำนวนมากในเรื่องที่ควรค่าแก่การดู คำอธิบายของพวกเขา:

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

http://gamma.cs.unc.edu/research/crowds/


-1

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

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

วิธีการบางอย่างที่อธิบายไว้ที่นี่อาจเป็นประโยชน์โดยเฉพาะอย่างยิ่งวิธีนี้: พฤติกรรมการหมุนพวงมาลัยแบบหลีกเลี่ยงไม่ชนกัน

ความนับถือ


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