Как я должен начать разрабатывать алгоритм AI для игры войны артиллерии?

Чтобы быть полным, this также можно использовать для ссылки на внешний объект

class Outer {
    class Inner {
        void foo() {
            Outer o = Outer.this;
    }
  }
}
19
задан gnovice 25 January 2009 в 00:08
поделиться

7 ответов

В реальной ситуации с артиллерией все эти факторы были бы обработаны или с формулами или только с моделированием "в лоб": Запустите электронную оболочку, примените все соответствующие силы и посмотрите, где она приземляется. Корректируйтесь и попробуйте еще раз, пока электронная оболочка не достигает намеченной цели. Теперь у Вас есть свои числа для отправки к оружию.

, Учитывая сложность ситуации я сомневаюсь, что существует любой ответ лучше, чем "в лоб". В то время как Вы могли предварительно вычислить таблицу ожидаемых эффектов перетаскивания по сравнению со скоростью, я не вижу, что он стоит.

, Конечно, игра, где AI отбросил первую оболочку на Вашей голове каждый раз, не будет интересна. После того как Вы знаете правильные значения, необходимо будет сделать AI паршивым выстрелом. Примените случайный фактор к выстрелу и затем идите к к цели - перемещение, которое это говорит 30+random (140) % к истинной цели каждый раз, когда это стреляет.

Редактирование:

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

4
ответ дан 30 November 2019 в 04:59
поделиться

Решение для грубой силы Loren обращается как, потому что оно позволило бы легкие "Корректировки аналитики" путем добавления большего количества повторений. Также поправочными коэффициентами для повторения могла быть часть аналитики, поскольку некоторое значение заставит его сходиться быстрее.

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

3
ответ дан 30 November 2019 в 04:59
поделиться

Различие между играми артиллерии и реальными ситуациями с артиллерией - то, что все стороны имеют 100%-ю информацию, и что обычно существует больше чем 2 противника.

В результате Ваша функция оценки должна рассмотреть, какого противника было бы более срочно попытаться устранить. Например, если у меня есть легкое уничтожение в 90%, но 50% случайно натыкаются на кого-то, кто пытается уничтожить меня и просто пропустил два выстрела около меня, более важно иметь дело с тем шансом.

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

3
ответ дан 30 November 2019 в 04:59
поделиться

Спасибо Loren и BCS, я думаю, что Вы пришли к мысли, которую я рассматривал (который запросил вопрос № 2 выше). Псевдокод для поворота AIS выглядел бы примерно так:

nSims;        % A variable storing the numbers of projectile simulations
              %    done per turn for the AI (i.e. difficulty)
prevParams;   % A variable storing the previous shot parameters
prevResults;  % A variable storing some measure of accuracy of the last shot
newParams = get_new_guess(prevParams,prevResults);
loop for nSims times,
  newResults = simulate_projectile_flight(newParams);
  newParams = get_new_guess(newParams,newResults);
end
fire_projectile(newParams);

В этом случае, переменная nSims является по существу мерой "аналитики" для AI. "Немой" AI имел бы nSims=0 и просто выскажет новое предположение каждый поворот (на основе результатов предыдущего поворота). "Умный" AI совершенствовал бы свое предположение nSims времена на поворот путем моделирования полета снаряда.

еще Два вопроса возникают из этого:

1), Что входит в функцию get_new_guess? Как я должен скорректировать три параметра выстрела для уменьшения расстояния до цели? Например, если выстрел противоречит цели, можно попытаться получить его ближе путем корректировки угла возвышения только, корректировки скорости снаряда только или корректировки их обоих вместе.

2) get_new_guess должен быть тем же для всего AIS, при этом значение nSims является единственным детерминативом "аналитики"? Или get_new_guess должен зависеть от другого параметра "аналитики" (как guessAccuracy)?

3
ответ дан 30 November 2019 в 04:59
поделиться

Я теперь обращаюсь к ответу, который Вы отправили:

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

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

Первый, get_initial_guess:

Для начинаний у меня была бы таблица, которая делит мир на зоны - чем выше трудность, тем больше зон. Границы между этими зонами предварительно вычислили бы питание для 45, 60 & 75 градусов. Сделайте тестовый график, если оболочка имеет привкус, ландшафт попробовали еще раз под более высоким углом - если 75 ландшафтов хитов используют его так или иначе.

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

Теперь, для get_new_guess:

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

Принятие это не пороло гору, отмечает, коротко ли это или длинно. Это дает Вам связанное. Новое предположение где-нибудь между двумя границами (при пропавших без вести связанного используйте значение от таблицы в get_initial_guess в, он - место.)

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

Это, вероятно, слишком точно и вероятно потребует некоторой рандомизации. Я передумал о добавлении простого случайного %. Скорее несколько случайных чисел должны использоваться для получения кривой нормального распределения.

3
ответ дан 30 November 2019 в 04:59
поделиться

Другая мысль: мы имеем дело с системой, где только одна оболочка активна сразу? Давно я реализовал игру артиллерии, где у Вас было 5 баррелей, каждый с установленным временем перезагрузки, которое было выше максимального возможного времени полета.

, С которым я использовал стратегию увольнения распространения оболочек через диапазон между моей текущей нижней границей и верхней границей. Возможно, что, будучи простым человеком я не использовал оптимальную стратегию, хотя - это было в реальном времени, получив раунд от, как только баррель был готов, было более важным, чем обеспечение, это было нацелено, а также возможно, поскольку это будет сходиться довольно быстро, так или иначе. Я обычно помещал бы оболочку на цель на втором поводе, и третьими обычно все будут хиты. (Уничтожение, требуемое, уничтожая ВЕСЬ пиксели в цели.)

В ситуации AI я смоделировал бы и это и стратегию сдерживания некоторых баррелей для пущения более точных очередей позже. Я все еще запустил бы распространение через целевой диапазон, единственный вопрос состоит в том, использовал ли я все баррели или нет.

1
ответ дан 30 November 2019 в 04:59
поделиться

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

1
ответ дан 30 November 2019 в 04:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: