Этот вопрос относится к спонсируемому Google AI Challenge, который проходит каждые несколько месяцев и в котором соперники должны представить бот, способный автономно играть в игру против других робототехнических игроков. Конкурс, который только что был закрыт, назывался "муравьями", и вы можете прочитать все его спецификации здесь, если вы заинтересованы.
Мой вопрос специфичен для одного аспекта муравьев: стратегия боя.
Проблема
Учитывая сетку дискретных координат [как шахматную доску] и учитывая, что у каждого игрока есть несколько муравьев, которые на каждом повороте могут либо:
- оставайтесь
- двигаться восток/север/запад/юг,
... a ant будет убит врагом ant, если враг ant в диапазоне окружен меньшим (или тем же) собственным врагом, чем ant [равнозначно: "ant убьет врага ant, если враг в радиусе окружен больше (или теми же) врагами, чем его цель" ]
Визуальный пример:
В этом случае желтые муравьи будут двигаться на запад, а оранжевый ant, неспособный уйти (синие плитки блокируют), будет иметь два желтых муравья "в радиусе" и умрет (если объяснение до сих пор неясно, я приглашаю вас посетить ссылку выше, чтобы увидеть больше примеров и объясненных сценариев).
Вопрос
Мой вопрос по существу о сложности. Я много думал об этой проблеме, но я все еще не смог найти приемлемый способ расчета оптимального набора ходов за разумное время. Мне кажется, что для нахождения наилучшего возможного набора движений для моих муравьев я должен оценить результат для каждого возможного сценария, но поскольку битвы могут быть очень переполнены муравьями, это означает, что время вычисления будет экспоненциально расти (5^n
, причем n - количество вовлеченных муравьев).
Другим ограничением этого подхода является то, что обрабатываемое решение не улучшает его эффективность пропорционально затраченным времени вычислениям, , поэтому произвольное прерывание его выполнения может оставить вас с неприемлемым решением.
Я подозреваю, что хорошее решение может быть найдено через некоторые геометрические соображения в сочетании с линейной алгеброй (возможно, вычисление некоторых "центров тяжести" для групп муравьев?), но я не мог пройти уровень "интуиции" на этом...
Итак, мой вопрос действительно сводится к следующему:
Как к этой проблеме нужно подойти, чтобы найти [почти] оптимальные решения в течение времени вычисления ~ 50-100 мс на современной машине (эта цифра определяется официальными правилами конкурса)?
Если вас заинтересовала эта проблема и вам нужно вдохновение, я настоятельно рекомендую посмотреть, как некоторые из доступных игр воспроизводятся.