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. "Отступление" — сдавать планету если заведомо известна её потеря (невозможность подмоги) + плохой прогноз на будущее + есть рядом нейтральная планета, захватив которую можно получить прирост продуктивности

См также redmassacre, форум, galcon форум, tcp server.


RSS

Комментарии

  • Evgenius
    avatar
    "С мира по нитке" - очень спорная тактика! Гораздо эффективнее посылать большие пачки, и нападать с ближней планеты. Тогда противник, как правило, не успевает среагировать. Если он не предусмотрел, что рядом с ним находится планета с большим количеством кораблей, которая может атаковать, то ему каюк)
  • Спорная, да. Но имеет два преимущества - если X планет в сумме имеют преимущество над одной у противника то выгодней её захватить общими усилиями, чем ждать очевидного преимущества 1 на 1.. дальше конечно вопрос можно ли их удержать в принципе. А во-вторых если атаковать напрямую то расстояние меньше, чем если через посредника.
  • JohnnySuperb
    avatar
    А сдругой стороны, хорошо бы не сразу в лоб нападать, а подтянуть силы к планете, которая ближе всего к вражеской, которую мы хотим захватить. Тогда враг не видит реального нападения и не знает как реагировать.
  • Тормоз
    avatar
    Вот бы кто-нибудь сделал список всех подобных состязаний :)