Google AI challenge — стратегии ботов

Университет Ватерлоо при поддержке Google организовал состязание по спортивному программированию ботов для игры стратегии реального времени Galcon. С виду игра очень простая — есть планеты и корабли (на планетах или в полёте) надо захватить или преобладать на всей карте. Бот можно написать на большинстве популярных языков — C#, Java, Python, C++, Scala, PHP — для этого надо скачать «starter package», запустить у себя из консоли эмулятор и тренироваться покуда не будет Совершенство которое можно залить на сайт.

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

Итак некоторые общие стратегии

  1. Начинайте максимальным полным захватом планет — это даст максимальный прирост продуктивности особенно необходимой вначале игры. Внутренние состояния игры можно помещать в глобальные переменные вне doTurn()
  2. Атаковать планеты со смешанной сортировкой — пропорционально их продуктивности и обратно пропорционально защите и расстоянию до неё
  3. Высылать подмогу своим планетам которые атакованы или имеют наибольшую пропорцию в продуктивности к защите — это равноценно распределяет силы по своим планетам
  4. Прогнозировать исход битвы учитывая все входящие корабли и продуктивность планеты
  5. Учитывать начальную позицию и общую топологию региона — некоторые карты заранее проигрышные(карты симметричны)
  6. Менять агрессивность в зависимости от прогноза будущего получаемого от сравнивания себя с противником через размер всего флота + X ходов вперёд * продуктивность планет

Тактика

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

  1. «Сдерживание» — атаковать нейтральные планеты которые атакует противник так, что-бы сразу сразу после захвата планета перешла нам. Работает правда только при одиночных ударах — при постоянном потоке потребуется больше затрат
  2. «Фронтовик» — высылать подмогу планетам которые ближе к врагу
  3. «С мира по нитке» — не высылать большие группы кораблей, а атаковать одиночными пачками в зависимости от продуктивности планеты
  4. «Превентивный удар» — отбивать планеты которые ближе всего. Это повысит прогнозируемость, поскольку противник будет дольше лететь
  5. «Отступление» — сдавать планету если заведомо известна её потеря (невозможность подмоги) + плохой прогноз на будущее + есть рядом нейтральная планета, захватив которую можно получить прирост продуктивности