Скажите, а вы не в курсе — кто-нибудь пытался использовать самообучающиеся модели, такие как нейросети и генетический алгоритм? Я думаю, что результат был бы довольно интересным, учитывая количество битв.
Победитель — Mr.Smile — использовал генетический алгоритм для подбора констант. Об этом можно почитать в его посте. Еще в обсуждениях на сайте несколько человек упоминали, что использовали нейросети и/или генетические алгоритмы. Но особого успеха стратегии этих людей вроде не достигали. Вообще, хорошо бы увидеть истории еще нескольких топовых участников; вполне возможно, что они тоже что-то интересное использовали.
У меня в начале конкурса тоже были идеи о чем-то самообучающемся. Но для воплощения этих идей в жизнь нужно уметь локально проводить огромное количество боев. Организаторами инструментов для этого предоставлено не было. Чтобы самостоятельно сделать такое, потребовалось бы декомпилировать и модифицировать Local Runner — программу для запуска боев локально. По умолчанию она не поддавалась практически никакой настройке и позволяла запускать лишь один экземпляр стратегии игрока против пары простых дефолтных стратегий. Я в реверс-инжиниринге обфусцированного Java-кода не силен, поэтому идею забросил. Оказывается, несколько человек все же проделали всю нужную для этого работу, и выложили результаты для всеобщего пользования. Но я об этом узнал слишком поздно и никакого самообучения не вышло — пришлось обучать руками.
Я планировал использовать в паре мест и код уже был почти готов, но даже тестовые версии быстро уперлись в ограничение по размеру кода (в документации его не было) — пришлось все выкинуть.
Ждем.
Взамен (если интересно) могу выложить код своей (http://russianaicup.ru/profile/beat) стратегии (написанной на c#). Правда выше 48го места (в песочнице) она так и не поднималась + она только для боев 6х1 (на 3х2 и 2х3 я забил), но она хорошо комментирована.
Яйца курицу, конечно, не учат, но просто любопытно: почему вы не используете linq?
Например, у вас есть метод, вычисляющий количество живих танков противника:
static protected int AliveEnemyCnt()
{
int r = 0;
foreach (Tank tank in world.Tanks)
if (!tank.IsTeammate && !IsDead(tank))
r++;
return r;
}
А вот однострочный эквивалент с использованием linq:
return world.Tanks.Count(tank => !tank.IsTeammate && !IsDead(tank));
Я попросту очень мало работал с C#, и пишу на нем так же, как всю жизнь писал на C++. Уже в конце разработки я поставил ReSharper и заметил, что он предлагает мне подобным образом переписать многие куски кода. Я попробовал сделать это, но код в такой форме показался мне каким-то неродным, и я забил. В будущем постараюсь использовать LINQ почаще — видимо это модно)
Странно, что организаторы конкурса добавили возможность узнать имя соперника. Вообще, что от этого конкурса, что от последнего на aichallenge.org, остался осадок от того, что у многих ботов в топе AI как такового и не было.
А есть ли актуальные на данный момент конкурсы аналогичной направлености? Потому что сабжевый я фееречески проспал, особенно обидно что весь ноябрь провел в отпуске.
А чем этот не устраивает? Песочница будет открыта (по заверениям организаторов) еще несколько месяцев, то есть можно участвовать, но уже не за призы, а просто ради спортивного интереса.
Про пушку — я делал несколько иначе — если пушке не хватало времени развернуться к врагу до конца перезарядки — помогал колесами. При этом при выполнении маневра уклонения «помогал колесами» отключалось :)
К сожалению, со свободным временем была засада, так что во второй раунд не вышел (и бросил после этого). Бот так и болтается в районе ~ 350 места
как-то прочитал и запомнил иначе )
отвлекли в процессе чтения — вспомнил сейчас, обрадовался что хоть кто-то из топов упомянул о таком поведении в рассказе о.
Алзо, понравилось что высокий результат был получен без страшных генетических алгоритмов и разбиения поля на безумные сетки %)
Ну и повеселил чит «если это мегабайт, то ОПАСНОСТЬ!» %)
Путь к серебряной медали на Russian AI Cup 2012