private void createNewOffspring(){
		//indices of parent genes
		int parent1 = pickGene();
		int parent2 = pickGene();
		
		//index of gene to be replaced
		int replacedGene = 0;
		
		//choose gene to be replaced - preserve parents and fittest gene
		do{
			replacedGene = Math.abs(random.nextInt()%genes.length);
		} while (replacedGene == parent1 || replacedGene == parent2 || replacedGene == fittestGeneIndex);
		
		//replace old gene with offspring of i1 and i2
		genes[parent1].createOffspring(genes[parent2], genes[replacedGene]);
		
		//update fitnessSum: remove fitness of old gene, add fitness of new gene
		
		fitnessSum -= fitnesses[replacedGene];
		
		initRouteFromGene(genes[replacedGene]);
		
		double cost = travelingSalesman.calculateCosts(route);
		
		if(minCost < 0 || cost < minCost){
			minCost = cost;
			fittestGeneIndex = replacedGene;
		}
		
		fitnesses[replacedGene] = 1/cost;
		
		fitnessSum += fitnesses[replacedGene];
	}