Броненосец!
В 2003 году (когда мне было 17 лет) я соревновался в конкурсе Battleship AI. Несмотря на то, что я проиграл этот турнир, мне было очень весело и многому научилось.
Теперь я хотел бы воскресить это соревнование, в поисках лучшего линкора AI.
Вот фреймворк, теперь размещенный на Bitbucket.
Победитель получит награду +450! Конкурс пройдет с 17 ноября 2009 года. Никакие записи или изменения позже нулевого часа 17-го числа не будут приняты. (Центральное стандартное время) Отправьте свои заявки на ранней стадии, поэтому вы не упустите свою возможность!
Чтобы сохранить этот ОБЪЕКТИВ, следуйте духу конкурса.
Правила игры:
- Игра воспроизводится на сетке 10x10.
- Каждый участник будет размещать каждое из 5 кораблей (длиной 2, 3, 3, 4, 5) на своей сетке.
- Никакие корабли не могут перекрываться, но они могут быть смежными.
- Затем соперники поочередно стреляют в одиночных выстрелов у своего оппонента.
- Вариант игры позволяет стрелять несколькими выстрелами на залп, по одному на каждое выжившее судно.
- Оппонент уведомит участника, если выстрел опускается, попадает или промахивается.
- Игра заканчивается, когда все корабли любого игрока опущены.
Правила конкурса:
- Дух соревнования - найти лучший алгоритм Battleship.
- Все, что считается против духа конкуренции, будет основанием для дисквалификации.
- Взаимодействие с противником противоречит духу соревнования.
- Многопоточность может использоваться при следующих ограничениях:
- Не более одного потока может выполняться, пока это не ваша очередь. (Хотя любое количество потоков может находиться в состоянии "приостановлено" ).
- Ни один поток не может работать с приоритетом, отличным от "Нормального".
- Учитывая указанные выше ограничения, вам гарантируется как минимум 3 выделенных ядра процессора в течение вашего хода.
- Предел в 1 секунду времени CPU для каждой игры распределяется каждому конкуренту в основном потоке.
- Запуск времени приводит к потере текущей игры.
- Любое необработанное исключение приведет к потере текущей игры.
- Доступ к сети и доступ к диску разрешены, но ограничения времени могут быть довольно запретительными. Однако для облегчения временной деформации были добавлены несколько методов настройки и снятия.
- Код должен быть отправлен на переполнение стека в качестве ответа или, если слишком большой, связан.
- Максимальный общий размер (без сжатия) записи - 1 МБ.
- Официально .Net 2.0/3.5 - единственное требование к инфраструктуре.
- В вашей записи должен быть реализован интерфейс IBattleshipOpponent.
Озвучивание:
- Лучшими 51 играми из 101 игр является победитель матча.
- Все участники соревнований будут соответствовать друг другу, круговым.
- Лучшая половина участников будет играть в турнире с двумя исключениями, чтобы определить победителя. (Наименьшая мощность двух, которая больше или равна половине, фактически.)
- Я буду использовать рамки TournamentApi для турнира.
- Результаты будут опубликованы здесь.
- Если вы отправляете более одной записи, для двойного исключения может использоваться только ваша запись с наилучшим счетом.
Удачи! Получайте удовольствие!
РЕДАКТИРОВАТЬ 1:
Благодаря Freed, который обнаружил ошибку в функции Ship.IsValid
. Он исправлен. Загрузите обновленную версию фреймворка.
РЕДАКТИРОВАТЬ 2:
Так как существует значительный интерес к сохраняющейся статистике на диске и тому подобное, я добавил несколько нестандартных событий настройки и разрыва, которые должны обеспечить требуемую функциональность. Это полуразрушающее изменение. То есть: интерфейс был изменен для добавления функций, но для них не требуется тело. Загрузите обновленную версию фреймворка.
РЕДАКТИРОВАТЬ 3:
Исправление ошибки 1: GameWon
и GameLost
вызывались только в случае тайм-аута.
Bug Fix 2: Если двигатель отбирает каждую игру, соревнование никогда не закончится.
Загрузите обновленную версию фреймворка.
РЕДАКТИРОВАТЬ 4:
Результаты турнира: