Как стать автором
Обновить

Комментарии 17

Спасибо за статью! Реально интересно наблюдать как в russian AI cup наконец-то начинают появляться нейронки.

Для полного счастья осталось только выложить те 12 + 5.7 Гб логов, что использовались при обучении, для желающих повторить/поиграться. Сделаете?
Спасибо!
Возник ещё такой вопрос. В статье вы пишете, что обучаете сеть, скармливая ей обстановку на поле в моменты, предшествующие забитому голу. То есть обучаете её только на «положительных» примерах. А что насчёт контрпримеров? Не было бы плюсом добавлять к обучающим данным, например, отбитые мячи, когда гол мог бы быть, но не случился? Не улучшило ли бы это качество оценки? Иными словами, сейчас сеть выдаёт степень соответствия текуще ситуации той, которая благоприятна для забития гола, а было бы — именно оценка ситуации с точки зрения плохо/хорошо. Как считаете?
Главный вопрос — как это сделать?
Сейчас вы отбираете случаи, когда мяч попал в ворота, от этого момента отматываете назад 5 секунд, и условно говоря начинаете учить сетку тому, что до гола осталось 5, 4, 3, 2, 1, 0 секунд. Можно поступить аналогично, искать моменты, когда произошла коллизия мяча со штангой либо с вратарём, и так же отмотав назад 5 секунд начать учить тому, что скоро НЕ БУДЕТ гола. Получится?

Кстати, ещё вопрос: а ведь за 5 секунд, предшествующие голу, могло произойти довольно многое, например мяч могли пасануть пару-тройку раз, то есть по факту только траектория от последнего паса до попадания в ворота имеет адекватную оценку, а предыдущие участки траектории, попавшие в эти 5 секунд, наверно получают совсем не ту оценку, которая была бы не будь этих последующих пасов. Как думаете?
«Получится?»
Скорее всего нет, ведь тогда выходит что если мяч летит в мои ворота и я отбиваю — этому дается положительная оценка. Но положения роботов сетка не знает, а значит она просто посчитает что «почему-то» в некоторых случаях полет мяча в мои ворота это хорошо.
Резонно.
за 5 секунд, предшествующие голу, могло произойти довольно многое

да, и если это происходит часто при заданном положении значит такое положение ненадежное и значение будет где-то около нуля.
Пожалуйста, указывайте тег CodeBall или чтото вроде, чтобы потом не возникало проблем с поиском статей.
Спасибо за статью! Но на мой взгляд в ней не хватает самого важного — результатов применения этой сети. На сколько возросла сила игры? Также неплохо было написать о том каковы были результаты на обучающей и тестовой выборке.
Моя страрегия с нейросетью примерно в 75% сучаях выигрывала у точно такой-же, но с if-ами.
Причем не за все 5 минут, а с 75% вероятностью забивала 1 гол против того чтоб ей забили
Я, кстати, с целью потыкать палочкой нейронки (раньше руки не доходили, но всегда было интересно) взял вашу реализацию, и прикрутил к своей стратегии. У меня там изначально была оценочная функция, 90% веса в которой составляла как раз оценка позиции и скорости мяча — ровно того, что оценивает ваша нейронка. Заменил эту часть своей оценки вашей нейронкой, подошло идеально. Но результаты совсем не такие впечатляющие. В играх с изначальной версией не заметно, чтобы сила стратегии как-то увеличилась. В среднем игры заканчиваются с равным счётом, иногда с перевесом в 1-2 мяча в ту или иную сторону, поровну. То есть да, нейронка оценивает таки адекватно, ухудшений точно нет, но и улучшений что-то не видно. В среднем вроде бы играет как и предыдущая версия, ни о каких 75% побед речи нет. Проверить бы на сайте, с другими участниками, поднимется ли такая версия выше в рейтинге или нет, но песочница пока не работает, увы.
Как думаете, что могло пойти не так? Старый вариант этой оценки весьма примитивный — 80% это положение по оси Z, 20% — скорость по оси Z, и всё. В песочнице старый вариант стратегии болтается в районе 70-80 места, не очень высоко.
Странно, может быть моя версия на if-ах была слишком плохой? я оценивал только положение мяча, грубо говоря, чем ближе к воротам тем лучше + к этому смотрел летит ли мяч «в девятку», т.е. в верхнюю часть ворот.
Вы говорите " 90% веса в которой составляла как раз оценка позиции и скорости мяча" — может все дело в оставшихся 10%? Их откинули или оставили в версии с нейронкой?
И еще вопрос сколько игр прокрутили при проверке?

Было примерно так:


. . . . .
        // Estimation of ball position, direction & velocity
        let metric_pos = {
            let max_pos_z = rules.arena.depth / 2.0 + rules.arena.goal_depth - rules.BALL_RADIUS;
            ball_pos.z / max_pos_z
        };
        let metric_vel = {
            ball_vel.z / rules.MAX_ENTITY_SPEED
        };
. . . . .
        return (0.9 * metric_pos) + (0.1 * metric_vel) + (...остальные оценки...)

Где "остальные оценки" имеют веса ниже 0.1 и в процессе прикручивания нейросети не изменялись. Они тут для того, чтобы несколько вариантов развития событий, где роботы не взаимодейтствуют с мячом (а следовательно оценка мяча в этих вариантах будет идентичной), а, скажем, пытаются бежать в разные точки, можно было адекватно оценивать и сравнивать.


Как видно, здесь оценивается на 90% позиция мяча по оси Z (чем ближе к воротам соперника — тем лучше) и на 10% скорость мяча по оси Z (чем быстрее летит в сторону ворот соперника, тем лучше).


Соответственно, когда прикручивал нейронку, то заменил (0.9 * metric_pos) + (0.1 * metric_vel) на то, что возвращает нейронка (оно вроде как тоже приведено к диапазону примерно -1..1 что мне подходит).


При сравнении прогнал штук 10-15 игр. Тенденцию понять вроде хватило.

profile участника.
18 место в финале. Поздравляю!
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации