private static int calculateFitness(String gene) {
		
		///  chromosomeSectorSize
		int fitness = 0, numberOfUtilities = 0, utilitieIndex;
		int[] numberOfR = new int[chromosomeSectorSize];		
		char[] arr  = gene.toCharArray();
		
		for(int i = 0; i < numberOfR.length; i++)
			numberOfR[i] = 0;
		
		for (int i = 0; i < arr.length; i+=chromosomeSectorSize) {
			
			utilitieIndex = 0;
			numberOfUtilities = 0;
					
			for(int j = 0; j < chromosomeSectorSize; j++){
				numberOfUtilities += ((int)arr[i+j])-48;
				
				numberOfR[j] += ((int)arr[i+j])-48;
				
				utilitieIndex += (((int)arr[i+j])-48)*j;
			}
			
			if(numberOfUtilities == 1){//verifica restricoes de utilidade
				fitness += getGroundTypeFitness(utilities.get(utilitieIndex), lotes.get( i/chromosomeSectorSize));
				fitness += getGroundInclinationFitness(utilities.get(utilitieIndex), lotes.get( i/chromosomeSectorSize));
				fitness += getLoteCostFitness(utilities.get(utilitieIndex), lotes.get( i/chromosomeSectorSize));
			}
			
			if(numberOfUtilities != 1)// mais de um uso nesse lote
				numberOfUtilities = Math.abs(numberOfUtilities-1)*1000;
			else
				numberOfUtilities = 0;			
			
			fitness += numberOfUtilities;
		}
		
		/*if(restrictionExist(utilities.get((utilitieIndex))){
			
		}*/

		for(int i = 0; i < numberOfR.length; i++)
			if(numberOfR[i] > 1)
				fitness += numberOfR[i]*1000;
		
		if(numberOfUtilities > chromosomeSectorSize)
			numberOfUtilities = Math.abs(numberOfUtilities-chromosomeSectorSize)*1000;
		
		fitness += numberOfUtilities;

		return fitness;
	}