Your approach should work in general, but there are a lot of key details that will make the difference between success and failure.
The most major issue is a number of hyperparameters that you have effectively chosen, and that could make a difference to the project:
- Population size
- Architecture of neural network
- Starting values for neural network weights
- Scaling of NN inputs. With supervised learning you want the scale to be constrained to somewhere roughly inside -2 to +2, but with GA weight search, it will depend more on starting values and mutation
- Mutation amounts
- Crossover - by not having crossover in your GA design you are missing out on one of the potential strengths of GAs, and your solution is closer to random search which will take longer because you cannot for example combine one agent's correct behaviour in the top-left quadrant with another's in the bottom right.
If you want to take the GA/NN crossover further, I recommend you look into the NEAT system. It has a nice mechanism for handling combining two neural network "parents" to make a functional child.
Alternative #1 - Reinforcement learning
Reinforcement learning (RL) addresses the same basic problem - you don't know the correct outputs for a neural network to train from input/output pairs, but you can tell when a player has been successful. Instead of managing a population of player policies that you use to search the space of all possible behaviours, RL manages one policy (per player) and calculates how to change it to improve performance, based on observing results.
In practice, RL is very effective at optimising this kind of game. You will want to start with some basics before tackling your tag game, but something based around Deep Q Networks will probably work very well for your environment. The dueling nature of your agents will mean you would need to write some custom agent code though, very few of the off-the-shelf DQN solutions are written for adversarial games and self-play.
Alternative #2 - Tree search
In your case it may be possible to discover the correct outputs, and train the neural network to learn them. If the movement is on a discrete grid (or effectively on that grid if you are using fixed movement increments), then you could use a negamax search to discover the perfect movement strategy from any pair of starting positions, and use that to create a training dataset. As an example, if the grid was 20x20 then you would have roughly 400x400 = 160,000 training examples covering perfect play for the entire game.
* Actually Negamax search will only work if play is turn-based, but there may be equivalent searches for simultaneous moves.