Расчет траектории полета ракеты по орбите перед стрельбой

10

Я создаю игру с Unity3D. Это клон Gravity Wars . Обе башни и ИИ стреляют ракетами друг в друга (задают переменные «Угол» и «Мощность»), стараясь не сбивать ракеты на планетах. Но вот мой вопрос: как заставить ИИ рассчитать мощность и угол до стрельбы по его ракете, учитывая силу тяжести планеты?

Onofrio
источник

Ответы:

5

Такая система с несколькими телами будет хаотичной. Я не думаю, что вы сможете решить уравнение для него в режиме реального времени. Лучшее, на что вы можете надеяться, - это найти решение с использованием генетического алгоритма;

1: получить число (например, 100) случайных решений (угол, пары сил).

2: смоделируйте эти решения.

3: если что-то из этого, в конечном итоге попадет в цель (или приблизится достаточно близко), Готово! в противном случае продолжайте.

4: выберите 10 лучших решений (те, которые окажутся ближе всего к цели)

5: из этих 10 решений создайте 10 детей для каждого, случайным образом регулируя их угол и мощность.

6: теперь у вас есть 100 новых решений, вернулись к шагу 2

Вам нужно будет ограничить количество итераций, если решение не найдено или поиск занимает слишком много времени.

Даже такой подход не гарантирует, что найдется хорошее решение, потому что; 1. решение может не существовать 2. в хаотической системе небольшие изменения в решении могут оказать огромное влияние на результат

кругозор
источник
1

Вы должны быть в состоянии смоделировать выстрел, не рисуя его.

Тогда вы можете сказать, имитировать 10 выстрелов, а затем взять ближайший из 10.

jgallant
источник
0

Учитывая, что траектория полета ракеты основана на входах Angleи Power, вы должны быть в состоянии решить (получить точный ответ) из обратного уравнения.

Основные (псевдо) ИИ шаги следующие:

  1. Выберите случайный Powerуровень. Неважно, что является точным значением (в определенной степени), если оно находится в разумных пределах.
  2. Решите уравнение (инвертированное из фактического пути), чтобы получить точное (ну, как можно ближе к двойникам) Angle.
  3. Выберите (изменяемое) случайное смещение от Angle, чтобы приспособиться к « сложности » ИИ.
  4. Запустите ракету, как игрок, в (случайном) Powerи (рассчитанном) Angle.

Конечно, вы могли бы просто запустить ИИ на случайных уровнях для обоих входов, что могло бы дать некоторые интересные результаты ...

Заводной-Muse
источник
Этот метод имеет смысл, когда все, что у вас есть, это гравитация прямо вниз и постоянный ветер, но что вы используете для «уравнения, чтобы дать точное Angle», когда у вас есть несколько гравитационных тел, рассеянных по вашей вселенной? Их тяга зависит от вашей текущей позиции. Некоторые снимки могут быть невозможны.
Джон Макдональд
@John - Если выстрел совершенно невозможен (не учитывая плохой выбор входной мощности), это серьезная проблема с вашим игровым полем. В играх такого типа любой из игроков должен быть заменен на ИИ. Конечно, уравнения становятся более сложными (и с несколькими телами, очень быстро), но это все же должно быть возможно.
Заводная муза
Справедливо. Но знаете ли вы, что бы вы использовали для уравнения? Я думаю, именно поэтому этот вопрос был создан.
Джон Макдональд
Джон прав: я ищу это уравнение.
Онофрио
@Onofrio - Извините, у меня нет соответствующих уравнений ... и похоже, что вам нужно исчисление с несколькими переменными, чтобы сделать это "правильно".
Заводная муза
0

Как насчет того, чтобы сделать это реалистичным, не подсчитав их, а начав с догадок и корректировок?

Когда я играл в Gravity Wars, это то, что я делал; начните с полуслучайной мощности и отрегулируйте соответственно с шагом. В течение нескольких кадров вы очень близко.

ashes999
источник