The problem can be solved - as CodingWithMagga has suggested - by using the rate_func option in the animate command. Here is how you can modify the command:
animations = [circle.animate(rate_func=linear, run_time=0.01).move_to(new_pos) for circle, new_pos in zip(circles, new_positions)]