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 )); }
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 )); }