private static void BenchmarkFitnessCall(
            TextWriter file,
            Func <IBitMutation <IBitIndividual> > mutationGenerator,
            long budget)
        {
            for (var n = 100; n <= 1000; n += 100)
            {
                for (var rounds = 0; rounds < 100; rounds++)
                {
                    var mutation   = CreateAlgo(mutationGenerator, n);
                    var individual = BitIndividual.Generate(2).Invoke(n);

                    var start = DateTime.Now;

                    for (var i = 0; i < budget; i++)
                    {
                        mutation.Mutate(0, individual);
                    }

                    var end = DateTime.Now;

                    file.WriteLine($"{n} {budget} {end - start}");
                }
            }
        }
        private static void BenchmarkTime(
            TextWriter file,
            Func <IBitMutation <IBitIndividual> > mutationGenerator,
            TimeSpan timeBudget)
        {
            for (var n = 100; n <= 1000; n += 100)
            {
                for (var rounds = 0; rounds < 100; rounds++)
                {
                    var mutation   = CreateAlgo(mutationGenerator, n);
                    var individual = BitIndividual.Generate(2).Invoke(n);

                    var      start = DateTime.Now;
                    TimeSpan runtime;

                    long mutations = 0;
                    do
                    {
                        mutation.Mutate(0, individual);
                        mutations++;
                        runtime = DateTime.Now - start;
                    } while (runtime < timeBudget);

                    file.WriteLine($"{n} {mutations} {runtime}");
                }
            }
        }