Replacement strategies to preserve useful diversity in steady-state genetic algorithms