100% реалізація уникнення зіткнення


21

Я абсолютно новачок у розробці ігор, і все, що я знаю про уникнення / дозвіл зіткнень, я дізнався про це на цьому веб-сайті або через нього на минулому тижні ... тому не соромтеся виправити мене, якщо я тут прошу засновані на неправильних припущеннях / нерозумінні. Я намагався зробити все можливе, щоб бути зрозумілим, але це сказане, тема все ще для мене новаторська.

Транспортні засоби

У своїй грі я маю транспортні засоби, які рухаються автономно. Вони розміщуються в тривимірному просторі, і їх рух регулюється низкою змінних, які відрізняються для кожного транспортного засобу. Тут цікавлять насамперед:

  • Тільки рух вперед .
  • швидкість , яка може змінюватися від хв і макс, але чий хв це НЕ (навіть близько до) нулю.
  • А Радіус рульового управління , який залежить від швидкості (чим вище швидкість, тим більше радіус)
  • Два максимальних прискорення (для зменшення та збільшення швидкості)

Мета

Моя мета - здійснити якийсь ІС, який дозволить на 100% точно уникнути зіткнення (тобто я буду впевнений, що транспортні засоби ніколи не будуть зіткнуться).

Дизайн

  • Хоча я б більше віддав перевагу ідеї мати AI "на борту" (тобто кожен транспортний засіб має власний "AI уникнення зіткнення", врешті-решт, запит та / або відправлення повідомлень іншим транспортним засобам), мені також можливо реалізувати CA AI на центральний рівень (відправлення команд до транспортних засобів).
  • У більшості випадків транспортний засіб просто доведеться керувати один від одного в будь-якому напрямку, але за певних обставин їм доведеться уникати зіткнення і рухатися до тієї ж цілі

Що я знайшов поки що і де застряг

У багатьох безлічі посилань, які я знайшов в інших питаннях на цьому веб-сайті, я знайшов особливе використання цих:

  1. Зіткнення між кульками басейну
  2. Неузгоджене уникнення зіткнень
  3. Черга

Хоча ці три посилання багато в чому «відкрили мені очі», мені не відразу зрозуміло, як використовувати цю інформацію в моєму випадку. Зокрема, стаття №2 "намагається" запобігти зіткненню (але зіткнення трапляються час від часу). Хоча стаття №3 іноді потребує зупинки транспортних засобів, щоб запобігти зіткненням.

Я також помітив, що алгоритми уникнення зіткнення, пов'язані вище, використовують "миттєву проекцію" лінійної швидкості щоб перевірити, чи є щось на шляху транспортного засобу. Мені було цікаво, чи цього в моєму випадку достатньо, чи мені довелося проектувати свою позицію більш реалістичним способом (наприклад: Якщо я на 60 ° направляю на 90 ° праворуч, я повинен обчислити своє положення для решти 30 ° кривої, а потім припускаючи лінійний рух).

Нарешті, я особливо боюся тупиків . Іншими словами: хоча щільність транспортних засобів у світі буде досить низькою, я переживаю, що з огляду на певну кількість транспортних засобів, що сходяться до тієї самої точки, як тільки вони зрозуміють, що вони перебувають на колії, будь-які маневри ухилення будуть неможливі як це привело б транспортний засіб на зіткнення з деякими іншими.

Питання

Як я можу досягти своєї "мети"? Поглиблене пояснення, звичайно, дуже вдячне, але посилання на зовнішні ресурси також допоможуть (я впевнений, що я не перший з цією проблемою, але, напевно, я використовував неправильні ключові слова для пошуку в Інтернеті? )

Заздалегідь дякую за допомогу!


20
Зупиніться кожен транспортний засіб. Досягнуто 100% уникнення.
Мартін Сойка

2
Досить, якщо вони зупиняться відносно один одного. Тобто всі вони рухаються в точно однаковому напрямку, з точно однаковою швидкістю. Більша проблема полягає в тому, що (імовірно) НЕМОЖЛИВО досягати будь-якого алгоритму, який робить це зі 100% швидкістю для кожної можливої ​​конфігурації. Наприклад, розглянемо два транспортні засоби з дуже великими радіусами повороту на мінімальній відстані, не рівній нулю один від одного, що летять один на одного з максимальною швидкістю.
Мартін Сойка

12
@mac - При розробці цього алгоритму слід пам’ятати, що це гра. Якщо ви витрачаєте занадто багато часу, намагаючись вирішити цю проблему, можливо, ви намагаєтеся вирішити неправильну проблему. Ви можете обманювати - переміщувати транспортні засоби або порушувати правила їх поводження, якщо виявите складну ситуацію, особливо якщо гравець не бачить цього. Переконайтесь, що будь-які правила поводження з автомобілем, які ви придумали, не виглядають нудними, важливіше бути розважальним, ніж бути правильним.
Фліп

3
@mac Ну, мабуть, я б використовував глобальний контролер з A *. Я знаю, що ви хотіли триматися подалі від цього рішення, але це має більше сенсу, оскільки він має глобальний погляд на транспортні засоби, і він може попередньо обчислити шляхи. Ви також можете встановити пріоритет на транспортних засобах (той, який знаходиться найближче до цілі, отримує більш високий пріоритет, тому шлях залишається незмінним, а інші рухаються навколо нього).
Джонатан Коннелл

6
@Flip Симулятор польоту все ще вважається грою, але якщо ви «обдурили», це зламає гру для будь-якого гравця, який це зрозумів.
Джонатан Коннелл

Відповіді:


5

Ви вивчали алгоритми зграйку ? Коли я дивлюсь на ваш опис, це мені спадає на думку. Для цього є багато статей, ось одна мені подобається . Ймовірно, ви не будете використовувати всі аспекти стекання, як згуртованість. Більшість аспектів були б корисні для того, що ви намагаєтесь зробити, як вирівнювання та розмежування, обидва вони допоможуть уникнути зіткнень. Ви б закінчилися чимось дещо іншим, ніж зграя, але це повинно допомогти вам почати.

Удачі!


2
Тут потрібний термін пошуку - Boids . Але я не думаю, що це те, що шукав ОП - це звучить більше, як він хоче, щоб автомобілі їхали кожен куди.
BlueRaja - Danny Pflughoeft

Флокінг все ще стосується ШІ, уникаючи зіткнення з іншими.
Метт Дженсен

OP вимагає надійного уникнення зіткнень. Флокування не дає гарантій, оскільки модель, заснована на силі, не містить жорстких обмежень. Хоча зграя, безумовно, є хорошим вхідним пунктом для вступу в тему, відповідь, таким чином, не відповідає. Я пропоную ОП шукати натомість "перешкоди швидкості".
Тобіас Гурдан

@TobiasGurdan Якщо у вас є відповідь, яка є більш прийнятною (і я згоден, що ви це зробите), вам слід створити відповідь.
MichaelHouse

3

Ось підхід: Кожен транспортний засіб має короткий проектований шлях, коли транспортний засіб врешті-решт сповільнюється і потрапляє в цикл, ці шляхи можуть не перетинатися. Кожного разу, коли транспортний засіб доходить до того, коли він встановлений для уповільнення, ви намагаєтеся створити новий шлях, який не перекриває жоден із існуючих. Якщо це не виявилося можливим, транспортний засіб продовжується на його заданому шляху і періодично повторює новий шлях.

Метод можна вдосконалити, щоб дозволити більш щільний трафік, дозволяючи шляхи, що ведуть до циклів, накладаються один на одного і петлі, де можна визначити, що це не спричинить зіткнення.


0

Запропонуйте метод у кожному транспортному засобі, де він здійснює радіальний пошук навколо себе, якщо в цьому радіусі є якісь інші транспортні засоби, відсуньтесь так, як вам подобається: 1) Рухайтесь у протилежному векторі, 2) уповільнюйте, 3) пришвидшити тощо.

Ви навіть можете робити комбінації: Якщо вектор іншого транспортного засобу не знаходиться прямо вперед або прямо позаду: відсуньтесь; інше, якщо прямо попереду: сповільнювати; інше: пришвидшити.


0

Моя мета - здійснити якийсь ШІ, який дозволить на 100% точно уникнути зіткнення (тобто я буду впевнений, що транспортні засоби ніколи не зіткнуться).

Якби це було можливо, до цього часу вона була б введена у всі світові літаки.

Я пропоную розслабити «автономний» аспект і мати функцію, яка вирішує передбачувані зіткнення між 2 (або більше) автомобілями. Це може бути таким же наївним, як вибір випадкових нових напрямків для подорожі та побачити, чи це вирішує проблему, але важливим є те, що функція повертається лише тоді, коли буде досягнута угода, яка підходить обом транспортним засобам.

Я також пропоную, що будь-який транспортний засіб, який, як передбачається, зіткнеться найближчим часом, знизить свою швидкість, зберігаючи ту саму відстань, яка дивиться вперед - це дасть вашим транспортним засобам більше можливостей уникнути зіткнень, як і в реальному житті.


Оскільки він розробляє правила Всесвіту, це абсолютно можливо. Реальний світ, очевидно, складніший, але я впевнений, що реальні літаки використовують тони техніки уникнення зіткнень ...
BlueRaja - Danny Pflughoeft

0

Мені здається, що моделювання натовпу може бути темою, найбільш актуальною для того, що ви намагаєтесь досягти. Група GAMMA в UNC має велику роботу над цим питанням, яку, можливо, варто переглянути. Їх опис:

Моделювання натовпу та багатоагентства - це процес моделювання великої кількості людей, істот чи інших персонажів, кожен з яких взаємодіє в одному середовищі. Очікується, що ці суб'єкти рухаються до своїх цілей, взаємодіють із оточенням та реагують один на одного. Моделювання натовпу має багато застосувань, включаючи вдосконалення архітектурного планування, поліпшення навчальних середовищ та віртуальних реалій, а також стимулювання штучно інтелектуальних персонажів (AI) в іграх та фільмах. Наша група працювала над багатьма проблемами моделювання натовпу, включаючи швидке, гарантоване, запобігання зіткненням, планування шляху та руху в режимі реального часу, потоки натовпу та спрямовану поведінку.

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


-1

Я не думаю, що існує метод 100% уникнення, але якщо у вас транспортні засоби мають повну світову інформацію, ви можете занести кожен транспортний засіб у ящик, довжина якого залежить від його швидкості, та здійснити перевірку зіткнення на цих ящиках. Якщо дійсно виникає зіткнення, рухайтеся подалі, силою, залежною від швидкості удару (або області зіткнення між двома ящиками), і повільно утримуйте (але тримайте коробку однаковою довжиною під час операції уникнення).

Очевидно, це не спрацює, якщо транспортні засоби не володіють повною інформацією, але в цьому випадку нічого не гарантує 100% уникнення (крім, як уже було сказано, паралельного руху)

деякі методи, описані тут , ймовірно, будуть корисні, зокрема, цей: Поведінка рульового управління уникнення зіткнення

з повагою


1
Ви читали оригінальне запитання? Та посилання, яку ви рекомендували, вже йдеться в питанні ...
bummzack
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.