you have a few problems. The first one is, your calculateFitness runction has an error, which is being hidden because you are using try-except instead of catching a specific exception (i think you misplaced your colon, then forgot what you wanted to do in case of divide by zero)
Next, you have to remember that lists are objects. So
[1, 2, 3, 4]
so, when you copy moves to the new entities, you are copying the object, thus mutations all happen on the same copy. assign moves.copy() instead, or [m for m in moves]
finally, I'd suggest you add a shapenode representing the selected parent, so you can see what is happening. Also you might want to label the fitness of each node. your fitness computation should pribably depend on screen size... as is, on my ipad, half the time the fitness is just under 1 ror all entities, meaning that nobody gets a preference!
finally, as an aside,
abs(entitity.position - target.position) is a convienece method to get distance.