protected virtual void RunIteration(IStochasticOptimizationTest optimizationTest)
        {
            this.WriteLine(
                $"Running {optimizationTest.ID} iteration {optimizationTest.IterationNumber}...");

            // runs one iteration of the optim algorithm according to the tests results
            optimizationTest.Run();
        }
 protected virtual void StoreOptimTestStatistics(IStochasticOptimizationTest optimizationTest)
 {
     lock (this.locker)
     {
         //stores or averages optimization tests' statistics
         if (this.FitnessMaxProgressAvg == null)
         {
             this.FitnessMaxProgressAvg = optimizationTest.FitnessMaxProgress;
         }
         else
         {
             this.FitnessMaxProgressAvg.AverageWith(optimizationTest.FitnessMaxProgress);
         }
     }
 }
        protected override void StoreOptimTestStatistics(IStochasticOptimizationTest optimizationTest)
        {
            base.StoreOptimTestStatistics(optimizationTest);

            lock (this.locker)
            {
                var ecOptimizationTest = (ECOptimizationTest)optimizationTest;

                //stores or averages populations' statistics
                if (this.RandomProportionProgressAvg == null)
                {
                    this.RandomProportionProgressAvg = ecOptimizationTest.RandomProportionProgress;
                }
                else
                {
                    this.RandomProportionProgressAvg.AverageWith(ecOptimizationTest.RandomProportionProgress);
                }
            }
        }