public void Present()
        {
            var builder = new SimulatedAnnealingMinimumBuilder()
                          .WithStartingTemperature(1);

            var functions = new List <DimensionalFunction>
            {
                new DeJong(),
                new Rastrigin(),
                new Schwefel(),
                new SixHump()
            };

            var numberOfExecutions = 30;
            var dimensions         = new List <int> {
                5, 10, 30
            };

            foreach (var dimension in dimensions)
            {
                foreach (var dimensionalFunction in functions)
                {
                    var minimum = double.MaxValue;
                    var maximum = 0d;

                    var accumulated = 0d;

                    dimensionalFunction.TrySetDimension(dimension);
                    builder = builder.WithFunction(dimensionalFunction);
                    var values = new List <double>();

                    for (var i = 1; i <= numberOfExecutions; i++)
                    {
                        var currentValue = builder.Build();
                        if (currentValue < minimum)
                        {
                            minimum = currentValue;
                        }

                        if (currentValue > maximum)
                        {
                            maximum = currentValue;
                        }

                        accumulated += currentValue;
                        values.Add(currentValue);
                    }

                    var average = accumulated / numberOfExecutions;

                    Console.WriteLine($"Simulated annealing {dimensionalFunction} minimum for {dimension} dimensions: {minimum}");
                    Console.WriteLine($"Simulated annealing {dimensionalFunction} maximum for {dimension} dimensions: {maximum}");
                    Console.WriteLine($"Simulated annealing {dimensionalFunction} average for {dimension} dimensions: {average}");

                    var standardDeviation = Math.Sqrt(values.Sum(x => (x - average) * (x - average)) / (numberOfExecutions - 1));
                    Console.WriteLine($"Simulated annealing {dimensionalFunction} standard deviation for {dimension} dimensions: {standardDeviation}");
                    Console.WriteLine("---------------------");
                }
            }
        }
        private void DisplayMinimum(SimulatedAnnealingMinimumBuilder builder, DimensionalFunction function)
        {
            var minimumValue = builder.Build();

            Console.WriteLine($"{function} simulated annealing minimum: {minimumValue}");

            using (var file = new StreamWriter(@"SimulatedAnnealingHistory.txt", true))
            {
                file.WriteLine($"{function} simulated annealing minimum: {minimumValue}");
            }
        }