private static RunInfo RunOnce(BulldozerAlgorithm<double> algorithm, Properties properties, string evolutionLogName)
        {
            var success = false;
            Chromosome chromosome = null;
            var simplificationRules = AlgebraicRules.Get()
                                                    .Where(z => z.Tags.Contains(StdTags.SafeResection))
                                                    .ToList();
            var stopwatch = new Stopwatch();
            stopwatch.Start();
            for (var i = 0; i < properties.IterationCount; ++i)
            {
                algorithm.MakeIteration();

                if (OnlineSimplification(algorithm, properties))
                {
                    if (Balancer.TraceEvolution) WriteEvolutionLog(algorithm, evolutionLogName);
                    algorithm.SimplifyPool(simplificationRules);
                }

                if (Balancer.ShowTrace) Trace(algorithm);
                if (Balancer.TraceEvolution) WriteEvolutionLog(algorithm, evolutionLogName);

                success = IsSuccess(algorithm, properties.Threshold, out chromosome);
                if(success)
                {
                    break;
                }
            }
            stopwatch.Stop();

            var treeChromosome = (TreeChromosome)chromosome;
            return new RunInfo
                       {
                           Success = success,
                           ElapsedSeconds = stopwatch.Elapsed.TotalSeconds,
                           ElapsedIterations = algorithm.CurrentIteration,
                           ID = chromosome != null ? treeChromosome.ID : -1,
                           ResultRepresentation = chromosome != null
                                                      ? treeChromosome.Tree.ToPrefixForm()
                                                      : null
                       };
        }
 private static bool OnlineSimplification(BulldozerAlgorithm<double> algorithm, Properties properties)
 {
     return properties.OnlineSimplification
         && algorithm.CurrentIteration % properties.OnlineSimplificationRate == 0;
 }