Некоторое время следил за
состязаниями муравьев от Гугла. Было интересно, но не было времени попробовать самому. Сейчас вот решил соеднить приятное с полезным: написать своего муравья и вспомнить Форт.
Для начала хочу создать стартовый пакет под Форт, и если все получится, то можно было бы предложить Форт в качестве языка программирования для следующего этапа Ai Challenge. Получилась бы неплохая реклама Форту, а если еще и какой-нибудь форт-бот попадет в верхушку рейтинга, то будет вообще супер. Но это пока только мечты
.
На даный момент есть
заготовка. Разработку провожу под Linux'ом используя
SP-Forth для Linux.
Про то, как должен работать бот можно почитать
тут, но если коротко, то бот получает по стандартному входу команды, обрабатывает их (время обработки ограничено) и по стандартному выходу передает свои действия по управлению муравьями.
Инструкция по локальному запуску системы симуляции находится
здесь (в частности, для запуска под Linux необходимо скачать и распаковать
этот архив).
Чтобы запустить бот можно использовать следующую команду:
Код:
./test_bot.sh "spf4 path/to/bot/MyBot.f"
(путь к spf4 должен быть в $PATH)
В текущей реализации стартового пакета я интерпретирую входящий поток команд как форт код. В ходе отладки столкнулся с проблемой чтения из входного потока. Проблема нашлась в слове READ-FILE. Я скопировал всю цепочку от TranslateFlow до READ-FILE в файл MyBot.f и добавил в READ-FILE вывод в лог. По логу (aigame.log) видно, что после успешного чтения первой строки из стандартного входа, попытка чтения следующей строки приводит к вылету из програмы.
В ходе тестирования подавал данные на стандартный вход бота перенаправлением из файла:
Код:
spf4 MyBot.f < aiTest.txt
(файл aiTest.txt можно найти в архиве)
В этом случае бот работает нормально.
Смотрел каким способом система симуляции передает данные в бот. Все происходит в файле sandbox.py в методе House._child_writer путем записи команд в стандартный вход процесса бота.
Пока не нашел причины проблемы, так что, если кому будет интересно и будет желание помочь, прошу предлагать идеи.
P.S. Даже если не получится добавить Форт к официальным состязаниям, всегда можно проводить их локально для форт сообщества.
Некоторое время следил за [url=http://aichallenge.org/]состязаниями муравьев[/url] от Гугла. Было интересно, но не было времени попробовать самому. Сейчас вот решил соеднить приятное с полезным: написать своего муравья и вспомнить Форт.
Для начала хочу создать стартовый пакет под Форт, и если все получится, то можно было бы предложить Форт в качестве языка программирования для следующего этапа Ai Challenge. Получилась бы неплохая реклама Форту, а если еще и какой-нибудь форт-бот попадет в верхушку рейтинга, то будет вообще супер. Но это пока только мечты :).
На даный момент есть [url=http://dl.dropbox.com/u/20676082/forth_starter_package.zip]заготовка[/url]. Разработку провожу под Linux'ом используя [url=http://www.forth.org.ru/news/%D0%A1%D0%B1%D0%BE%D1%80%D0%BA%D0%B0%20SPF%204.21%20linux]SP-Forth для Linux[/url].
Про то, как должен работать бот можно почитать [url=http://aichallenge.org/specification.php]тут[/url], но если коротко, то бот получает по стандартному входу команды, обрабатывает их (время обработки ограничено) и по стандартному выходу передает свои действия по управлению муравьями.
Инструкция по локальному запуску системы симуляции находится [url=http://aichallenge.org/using_the_tools.php]здесь[/url] (в частности, для запуска под Linux необходимо скачать и распаковать [url=http://aichallenge.org/tools.tar.bz2]этот[/url] архив).
Чтобы запустить бот можно использовать следующую команду:
[code]./test_bot.sh "spf4 path/to/bot/MyBot.f"[/code]
(путь к spf4 должен быть в $PATH)
В текущей реализации стартового пакета я интерпретирую входящий поток команд как форт код. В ходе отладки столкнулся с проблемой чтения из входного потока. Проблема нашлась в слове READ-FILE. Я скопировал всю цепочку от TranslateFlow до READ-FILE в файл MyBot.f и добавил в READ-FILE вывод в лог. По логу (aigame.log) видно, что после успешного чтения первой строки из стандартного входа, попытка чтения следующей строки приводит к вылету из програмы.
В ходе тестирования подавал данные на стандартный вход бота перенаправлением из файла:
[code]spf4 MyBot.f < aiTest.txt[/code]
(файл aiTest.txt можно найти в архиве)
В этом случае бот работает нормально.
Смотрел каким способом система симуляции передает данные в бот. Все происходит в файле sandbox.py в методе House._child_writer путем записи команд в стандартный вход процесса бота.
Пока не нашел причины проблемы, так что, если кому будет интересно и будет желание помочь, прошу предлагать идеи.
P.S. Даже если не получится добавить Форт к официальным состязаниям, всегда можно проводить их локально для форт сообщества.