genetic algorithms for optimization problems