Added crossover and mutation functions