np.std(population_energies) / np.abs(np.mean(population_energies)) < tol.
However, if the mean of the population_energies is 0, then this unnecessarily extends the number of iterations that the solver carries out.
I propose to change this behaviour to:
If `tol` is a tuple (rtol, atol) then terminate when np.std(population_energies) <= (atol + rtol * np.abs(np.mean(population_energies))). However, if `tol` is a single float then the existing behaviour will be honoured.