morfizm (morfizm) wrote,
morfizm
morfizm

Турнир по ренздю

Итак, я дозрел до организации турнира по искусственному интеллекту для игры в рендзю (после общения с raindog_2 сегодня! :)).

Предлагаются следующие правила.
1. Размер поля 15x15 (индексируем байтом, woo-hoo!)
2. Обозначения на игровом поле: пустая клетка "0", фишка первого игрока "1", второго "2".
3. На вход (stdin) даётся указание, чей сейчас ход (строка с цифрой 1 или 2), а также текущее содержание игрового поля (15 строк, по 15 символов в каждой). Все строки заканчиваются \n (символ с кодом 0xA). Рекомендуется использовать стандартные платформо-зависимые APIs для чтения строк из входного потока.
4. Начинает игру первый игрок (1), и он всегда ходит в центр. Программировать это не надо, программа, управляющая турниром, сделает этот ход автоматически.
5. Второй ход первого игрока должен быть на расстоянии 3 или больше от центра (другими словами, если нумеровать клетки от 0 до 14, то для координат второго хода первого игрока должно исполняться условие: |x-7|>=3 or |y-7|>=3). Это единственное ограничение, ослабляющее первого игрока, других ограничений нет.
6. На выход (stdout) следует выдать поле, в котором сделан ход: 15 строк по 15 символов, в конце каждой строки \n.
7. Можно сдаться, для этого вместо выдачи поля, следует напечатать одну строку с числом 0 и символом \n.
8. Нельзя пропускать ход.
9. Управляющая программа гарантирует, что ход сделать можно (т.е. состояние исходного игрового поля не является "концом игры", имеется хоть одна свободная клетка, входные данные подаются всегда корректно).
10. Варианты "конца игры":
10.1. Выигрыш - в случае построения 5 фишек в ряд по горизонтали, вертикали или диагонали.
10.2. Заполнение всего поля ("ничья"), без наличия выигрышной ситуации из предыдущего пункта.
10.3. Выигрыш - в случае некорректного хода или time out'а соперника.

Возможно, предложенные правила не на 100% кошерные, но зато очень "дружественные" к программным реализациям.

Я потом отдельно напишу более формальные правила, с примерами и переведу их на английский. Также, создам mailing list и форму для закачивания программ.
Пока - наброски:
*) Ориентировочная дата турнира через 2 месяца (скажем, 26 мая). За прогрессом можно будет наблюдать онлайн. Возможно, будет ещё один турнир, если после первого сделать раунд какого-то обмена идеями и т.п.
*) Для участия необходимо закачать на тестовый сервер исходный код. Вы мне доверяете, что я не буду в него смотреть и не буду "играть" в ваши игры без разрешения (предполагаемое использование - для тестового запуска чтобы проверить корректное чтение ввода, и, собственно, сам турнир), а я, в свою очередь, доверяю, что вы не будете делать всякие гадости и хитрости (кстати, делитесь идеями, как от этого легко защититься на Linux'е).
*) Я подумаю над конкретными ограничениями. Для начала считайте, что есть 2 cores и 400 MB RAM. Потом, возможно, ресурсы будут увеличены. Я думаю, что для турнира буду использовать один или несколько EC2 хостов (http://aws.amazon.com/ec2/#instance) либо "Small Instance", либо "High CPU Medium". До турнира (тестовый запуск и учёт участников) используется Micro Instance.
*) Писать на диск (временные файлы и т.п.) нельзя, запускать процессы нельзя, обращаться по сети нельзя, размер исходника ограничен. Пока - условно 100KB, потом, если надо, можно будет подкрутить, но общая идея ограничений: нельзя precompute очень большую матрицу дебютов.
*) Заранее не известно, target platform будет 32 bit или 64 bit (вероятно, 64 bit).
*) На каждый ход будет ограничение по времени - я пока не решил, какое. Думаю, секунд 10, не больше.
*) Языки программирования: C, C++ (gcc), Python 2.6, вероятно, добавлю Java. Нестандартных библиотек не будет. Опции компилятора будут выложены потом, кроме того, будет возможность заранее проверить, компилируется ли исходный текст, и запустить тесты. Кто хочет поддержку других языков (помимо перечисленных), тот рассказывает мне, как это легко настроить.
*) Кто хочет побыть спонсором - обращайтесь. Призы - это интересно. Кроме того, если участников будет очень много, то будет приятно, если спонсор заплатит за EC2 host time на время турнира (в случае если оно перевалит за какие-то разумные $50). При разумном количестве участников, турнир будет проводиться так: играет каждый с каждым, каждая пара играет по две игры, начиная поочерёдно. Ranking по количеству побед.
Если я чего не учёл - говорите. Всё будет учтено.
Если кто найдёт в интернете Renju/Gomoku в точности с описанными выше правилами - выкладывайте ссылки, думаю, это полезно будет для тренировки :) Ну и вообще, играйте, практикуйтесь! И пишите AI! Good luck & stay tuned.

Потенциальные участники - прошу как-то отметиться (комментом или письмом мне), чтобы я своевременно слал все апдейты.
Tags: polls questions and social games, software development
Subscribe
  • Post a new comment

    Error

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 9 comments