public String toPrettyString()
	{
		PaddingStringBuilder output = new PaddingStringBuilder();

		// Settings section
		PaddingStringBuilder.PaddingSection settingsSection = new PaddingStringBuilder.PaddingSection(true);
		output
			.append(" | ").append(settingsSection, "Score limit: ").append(scoreLimit)
			.append("\n | ").append(settingsSection, "Population size: ").append(populationSize)
			.append("\n | ").append(settingsSection, "Generation limit: ").append(generationLimit)
			.append("\n | ").append(settingsSection, "Execution timeout: ").append(String.format("%,d", executionTimeout)).append(" (ms)")
			.append("\n | ").append(settingsSection, "Status interval: ").append(String.format("%,d", statusInterval)).append(" (ms)")
			.append("\n | ").append(settingsSection, "Random seed: ").append(randomSeed)
			.append("\n | ").append(settingsSection, "Project main class: ").append(projectMain)
			.append("\n | ").append(settingsSection, "Project problem class: ").append(problemClassName);

		// Breeding operators section
		DecimalFormat oneDotTwoFormat = new DecimalFormat("0.00");
		Double totalWeight = 0D;

		for (BreedingOperatorSetup opSetup : breedingOperators)
		{
			totalWeight += opSetup.weight;
		}

		output.append("\n | Breeding operators:");
		PaddingStringBuilder.PaddingSection breedOpWeights = new PaddingStringBuilder.PaddingSection(false);
		PaddingStringBuilder.PaddingSection breedOpPercent = new PaddingStringBuilder.PaddingSection(false);

		for (BreedingOperatorSetup opSetup : breedingOperators)
		{
			output.append("\n | | ").append(breedOpWeights, oneDotTwoFormat.format(opSetup.weight)).append(" -> ").append(breedOpPercent, Math.round(opSetup.weight / totalWeight * 100)).append("%: ").append(opSetup.breedingOperator);
		}

		// Breeding classes
		output.append("\n | Approved breeding classes:");
		StringBuilder classesWith = new StringBuilder();
		StringBuilder classesWithout  = new StringBuilder();

		for (BreedingClassSetup classSetup : breedingClasses)
		{
			if (classSetup.instantiable)
			{
				classesWith.append("\n | | | ").append(classSetup.className);
			}
			else
			{
				classesWithout.append("\n | | | ").append(classSetup.className);
			}
		}

		if (classesWith.length() > 0)
		{
			output.append("\n | | With instantiation:").append(classesWith);
		}

		if (classesWithout.length() > 0)
		{
			output.append("\n | | Without instantiation:").append(classesWithout);
		}

		return output.toString();
	}