Added uniform crossover and some small refactoring