Вознаграждение за "еду" не забыл добавить? Ближайшую еду не надо передавать, достаточно координаты любой еды или "всех едов". На самом деле, нужно всё игровое поле передавать или регион, в котором находится объект. Ведь движение будет не в пустом пространстве, в итоге надо будет обходить препятствия и "врагов".
Штраф за каждое передвижение, большое вознаграждение за кушание еды. И учить, учить, учить... Нейросеть сама научится выбирать ближайшую цель и двигаться к ней.
Например задать "здоровье" объекта равное числу клеток на игровом поле. За каждый шаг здоровье снижается на 1 и объект умирает, когда здоровье равно нулю. Такой подход гарантирует, что объект не сможет топтаться на одном месте и ходить кругами, а выживут только те, кто или будет бегать по всему полю и случайно наткнётся на еду и те, кто будет целенаправленно бежать к еде. В процессе отбора последние, скорее всего, останутся последними выжившими.
Ну и множитель корректировки не дожен быть слишком большим или слишком маленьким, количество слоёв должно быть не слишком маленьким и не слишком большим, топология сети должна быть... какая-то.