Требования к нейросети и окружению
Структура сети
Формат решения — rover-gru-v1. Он использует GRU с памятью размером 128 значений.
Последовательность слоёв:
Linear(obs_dim + action_dim + 3, 128) → Tanh → GRUCell(128, 128)
├── Linear(128, action_dim)
└── Linear(128, 1)
Первая выходная ветвь выбирает действие, вторая оценивает ожидаемую награду.
Сохраняйте обе ветви. Размер наблюдения obs_dim задаётся средой,
action_dim = len(ACTION_MACROS). В набор действий входят четыре команды
управления обогревателем.
Входные данные и память
Метод Agent.step получает:
- нормализованные показания датчиков;
- предыдущее действие в виде вектора, где выбранному действию соответствует единица;
- предыдущую награду, преобразованную как
tanh(previous_reward / 10); - признак завершения предыдущей попытки
previous_done; - долю прошедшего времени испытания.
Нормализация наблюдений: (obs - mean) / sqrt(var + 1e-8), с ограничением значений
диапазоном от −10 до 10. Параметры mean и var сохраняются вместе с весами.
Признак trial_start очищает память сети перед новым испытанием. Между попытками
в пределах одного испытания память сохраняется: робот может учитывать предыдущий опыт.
Выбор действий при проверке
Для вычислений используется тип float32. Выбирается действие с максимальным выходным
значением сети (argmax). Оно выполняется в течение восьми шагов моделирования
(frame_skip=8); разовые команды действуют только на первом шаге.
Предыдущая награда рассчитывается с параметрами gamma=0.9995 и
frontier_bonus_scale=2.0. Сохраняйте эти преобразования при собственной проверке,
чтобы результаты можно было сравнивать с таблицей на сайте.
Файл весов
Сохраните /output/policy.safetensors, содержащий все значения Agent.state_dict(),
а также rms.mean и rms.var. Используйте функцию arena.protocol.export из
начального решения.
Требования к файлу:
- размер не более 4 МиБ;
- тип всех массивов —
float32; - имена и размеры массивов точно соответствуют структуре сети;
- значения конечные, без NaN и Inf, по модулю не больше 1 000 000;
- значения дисперсии
rms.varне меньше1e-8.
Файлы .pt, TorchScript, ONNX и программный код вместо весов не принимаются.
Как считается балл
Каждое испытание длится 120 секунд модельного времени. На каждом шаге учитывается координата X робота, в том числе непосредственно перед началом следующей попытки. Результат испытания — максимальная достигнутая координата в диапазоне от 0 до 800 метров. Начальная координата равна одному метру; она не вычитается из результата.
В таблице показаны средний результат, стандартное отклонение и число испытаний. Стандартное отклонение отражает разброс результатов между мирами. Награда, накопленная во время обучения, не является итоговым баллом.
Окружение программы
Программа запускается командой python /submission/train.py. Для временных файлов
доступен каталог /tmp, для сохранения весов — /output.
Dockerfile должен начинаться с FROM arena-base и содержать один этап сборки.
Разрешены команды RUN, COPY, WORKDIR, ENV, USER, CMD, ENTRYPOINT, LABEL.
Команды CMD и ENTRYPOINT не меняют указанный выше способ запуска обучения.
Не используйте COPY --from, RUN --mount, RUN --security, директиву # syntax
и многострочные блоки с <<. Для переноса команды на следующую строку используйте \.
Устанавливайте библиотеки через HTTPS и указывайте точные версии.
Дополнительные файлы Python и исходники расширений можно включить в ZIP. Символические ссылки и специальные файлы не допускаются.