示例#1
0
        public void Visualize(IGeneratorEvaluation <TGeneratorStats> generatorEvaluation, TextWriter writer)
        {
            this.writer = writer;
            splits      = new List <NamedData>()
            {
                new NamedData("Best 50%", generatorEvaluation.GetAverageStatistics(new DataSplit(0, 0.5))),
                new NamedData("Best 70-80%", generatorEvaluation.GetAverageStatistics(new DataSplit(0.7, 0.8))),
                new NamedData("Worst 50%", generatorEvaluation.GetAverageStatistics(new DataSplit(0.5, 1))),
                new NamedData("Worst 20%", generatorEvaluation.GetAverageStatistics(new DataSplit(0.8, 1))),
                new NamedData("Worst 10%", generatorEvaluation.GetAverageStatistics(new DataSplit(0.9, 1))),
                new NamedData("All", generatorEvaluation.GetAverageStatistics(new DataSplit(0, 1))),
            };

            PrintHeader();
            PrintRow("iterations average", x => x.Iterations);

            var chainsCount = splits.First().Data.ChainsStats.Count;

            for (int i = 0; i < chainsCount; i++)
            {
                var chainNumber = i;

                PrintRow();
                PrintRow($"chain {chainNumber}");
                PrintRow("attempts on success", x => x.ChainsStats[chainNumber].AttemptsOnSuccess);
                PrintRow("failed runs", x => x.ChainsStats[chainNumber].FailedRuns);
                PrintRow("random restarts", x => x.ChainsStats[chainNumber].RandomRestarts);
                PrintRow("avg s2 failures on success", x => x.ChainsStats[chainNumber].AverageStageTwoFailuresOnSuccess);
                PrintRow("max s2 failures on success", x => x.ChainsStats[chainNumber].MaxStageTwoFailuresOnSuccess);
                PrintRow("out of iterations", x => x.ChainsStats[chainNumber].OutOfIterations);
                PrintRow("max iterations on success", x => x.ChainsStats[chainNumber].MaxIterationsOnSuccess);
                PrintRow("avg iterations on success", x => x.ChainsStats[chainNumber].AverageIterationsOnSuccess);
                PrintRow("iterations", x => x.ChainsStats[chainNumber].Iterations);
            }
        }
        protected IMutation <TConfiguration> GetAggressiveStrategy(TConfiguration configuration, IGeneratorEvaluation <TGeneratorStats> data, double minValue, double multiplier, int priority)
        {
            var worst10Percent    = data.GetAverageStatistics(new DataSplit(0.9, 1));
            var newConfigurations = new List <SimulatedAnnealingConfiguration>();

            for (int i = 0; i < worst10Percent.ChainsStats.Count; i++)
            {
                var oldConfiguration           = configuration.SimulatedAnnealingConfiguration.GetConfiguration(i);
                var averageIterationsOnSuccess = Math.Max(minValue, multiplier * worst10Percent.ChainsStats[i].AverageIterationsOnSuccess);

                var newConfiguration = new SimulatedAnnealingConfiguration(oldConfiguration.Cycles,
                                                                           oldConfiguration.TrialsPerCycle, (int)averageIterationsOnSuccess, oldConfiguration.MaxStageTwoFailures);
                newConfigurations.Add(newConfiguration);
            }

            return(new MaxIterationsMutation <TConfiguration>(
                       priority,
                       new SimulatedAnnealingConfigurationProvider(newConfigurations),
                       MaxIterationsStrategy.Aggressive,
                       minValue,
                       multiplier
                       ));
        }
        protected IMutation <TConfiguration> GetFixedStrategy(TConfiguration configuration, IGeneratorEvaluation <TGeneratorStats> data, int numberOfIterations)
        {
            var oldConfiguration = configuration.SimulatedAnnealingConfiguration.GetConfiguration(0);
            var newConfiguration = new SimulatedAnnealingConfiguration(oldConfiguration.Cycles, oldConfiguration.TrialsPerCycle, numberOfIterations, oldConfiguration.MaxStageTwoFailures);

            return(new MaxIterationsMutation <TConfiguration>(
                       5,
                       new SimulatedAnnealingConfigurationProvider(newConfiguration),
                       MaxIterationsStrategy.Fixed,
                       numberOfIterations,
                       numberOfIterations
                       ));
        }
示例#4
0
        private IMutation <TConfiguration> GetConservativeStrategy(TConfiguration configuration, IGeneratorEvaluation <TGeneratorStats> data, double minValue, double multiplier)
        {
            var averageAll        = data.GetAverageStatistics(new DataSplit(0, 1));
            var newConfigurations = new List <SimulatedAnnealingConfiguration>();

            for (int i = 0; i < averageAll.ChainsStats.Count; i++)
            {
                var oldConfiguration             = configuration.SimulatedAnnealingConfiguration.GetConfiguration(i);
                var maxStageTwoFailuresOnSuccess = Math.Max(minValue, multiplier * averageAll.ChainsStats[i].MaxStageTwoFailuresOnSuccess);

                var newConfiguration = new SimulatedAnnealingConfiguration(oldConfiguration.Cycles,
                                                                           oldConfiguration.TrialsPerCycle, oldConfiguration.MaxIterationsWithoutSuccess, (int)maxStageTwoFailuresOnSuccess);
                newConfigurations.Add(newConfiguration);
            }

            return(new MaxStageTwoFailuresMutation <TConfiguration>(
                       5,
                       new SimulatedAnnealingConfigurationProvider(newConfigurations),
                       MaxStageTwoFailuresStrategy.Conservative,
                       minValue,
                       multiplier
                       ));
        }