public int start(int populationSize){
		initPopulation(populationSize);
		int fitness = 0;
		int mutationCounter = 0;
		Random random = new Random();
	
		while(fitness < Individual.targetString.length()){
			
			/* Choose 1st parent */
			Individual parentA = population[random.nextInt(populationSize)];
			Individual parentB = population[random.nextInt(populationSize)];
			Individual firstParent = null;
			if(parentA.calculateFitness() > parentB.calculateFitness()){
				firstParent = parentA;
			}else{
				firstParent = parentB;
			}
			/* Choose 2nd parent */
			parentA = population[random.nextInt(populationSize)];
			parentB = population[random.nextInt(populationSize)];
			Individual secondParent = null;
			if(parentA.calculateFitness() > parentB.calculateFitness()){
				secondParent = parentA;
			}else{
				secondParent = parentB;
			}
			
			/* Create child */
			Individual crossover = crossover(firstParent, secondParent);
			Individual child = crossover.mutate();
			
			/* Choose an individual to be replaced by child */
			int aIndex = random.nextInt(populationSize);
			int bIndex = random.nextInt(populationSize);
			Individual individualA = population[aIndex];
			Individual individualB = population[bIndex];
			if(individualA.calculateFitness() > individualB.calculateFitness()){
				population[bIndex] = child;
			}else{
				population[aIndex] = child;
			}
			
			/* Update maximum fitness value */
			int newFitness = child.calculateFitness();
			if(fitness < newFitness){
				fitness = newFitness;
				if(debug == 1)
					System.out.println(mutationCounter + ": " + child);
			}
			mutationCounter++;

		}
		
		return mutationCounter;
	}