Комментарии 17
Для полного счастья осталось только выложить те 12 + 5.7 Гб логов, что использовались при обучении, для желающих повторить/поиграться. Сделаете?
Кстати, ещё вопрос: а ведь за 5 секунд, предшествующие голу, могло произойти довольно многое, например мяч могли пасануть пару-тройку раз, то есть по факту только траектория от последнего паса до попадания в ворота имеет адекватную оценку, а предыдущие участки траектории, попавшие в эти 5 секунд, наверно получают совсем не ту оценку, которая была бы не будь этих последующих пасов. Как думаете?
Скорее всего нет, ведь тогда выходит что если мяч летит в мои ворота и я отбиваю — этому дается положительная оценка. Но положения роботов сетка не знает, а значит она просто посчитает что «почему-то» в некоторых случаях полет мяча в мои ворота это хорошо.
за 5 секунд, предшествующие голу, могло произойти довольно многое
да, и если это происходит часто при заданном положении значит такое положение ненадежное и значение будет где-то около нуля.
Как думаете, что могло пойти не так? Старый вариант этой оценки весьма примитивный — 80% это положение по оси Z, 20% — скорость по оси Z, и всё. В песочнице старый вариант стратегии болтается в районе 70-80 места, не очень высоко.
Вы говорите " 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 игр. Тенденцию понять вроде хватило.
Как я обучал нейросеть для реализации функции оценки положения на Russian AI Cup CodeBall 2018