private static void runGA() {
		// *** CHANGE THE PARAMETERS OF THE GA *********************************************************************************************************
				
				final int NUMBEROFINDIVIDUALS = 2000;  // Number of individuals in a generation; must be >=1
				final int NUMBEROFGENERATIONS = 100; // Maximum number of generations; must be >=1
				
				final double MUTATIONPROBABILITY = 0.5; // Probability of mutation [0.0,1.0] or crossover

				// Verbose level from 0 (no output), 1 (few output), 2 (more output) to 3 (full output)
				verboseLevel = 3;
				
				// *** MAIN PROGRAM *****************************************************************************************************************************
				// Initialize the population object
				PopulationFacilityLayout population = new PopulationFacilityLayout(NUMBEROFINDIVIDUALS, NUMBEROFGENERATIONS, mySite, facilityRelations);
				
				// Create and initialize a new random initial generation
				int countGeneration = 0;
				if (verboseLevel > 0) System.out.println("--> Create and initialize new random generation " + countGeneration);
				population.createGivenNewGeneration(countGeneration);
				population.initializeGivenGeneration(countGeneration);		
				if (verboseLevel > 2) population.printGivenGeneration(countGeneration);
				
				// Sort population of initial generation
				if (verboseLevel > 0) System.out.println("--> Sort and rank generation " + countGeneration);
				population.doSortAscendinglyGeneration(countGeneration);
				population.doRankGeneration(countGeneration);
				if (verboseLevel > 1) population.printGivenGeneration(countGeneration);

				// Print best individual of the population of initial generation
				System.out.print("Generation = "+countGeneration+"  \t");
				population.printBestIndividualInGivenGeneration(countGeneration);
				population.printWorstIndividualInGivenGeneration(countGeneration);

				// Iterate over all generations
				
				while (countGeneration < (NUMBEROFGENERATIONS-1)){
					countGeneration++;
					population.createGivenNewGeneration(countGeneration);
					population.initializeGivenEmptyGeneration(countGeneration);
					population.cloneGeneration(countGeneration-1, countGeneration);
					population.replaceWorstIndividualInGivenGeneration(countGeneration, MUTATIONPROBABILITY);
					if (verboseLevel > 0) System.out.println("--> Number of infeasible solutions generated " + population.getNumberOfInfeasibleSolutions());
					// Finally sort and rank individuals of population of new generation
					if (verboseLevel > 0) System.out.println("--> Sort and rank generation " + countGeneration);
					population.doSortAscendinglyGeneration(countGeneration);
					population.doRankGeneration(countGeneration);
					if (verboseLevel > 1) population.printGivenGeneration(countGeneration);

					// Print best individual of the population of initial generation
					System.out.print("Generation = "+countGeneration+"  \t");
					population.printBestIndividualInGivenGeneration(countGeneration);
								}
				
		
	}