public GeneratorData GetAverageStatistics(DataSplit dataSplit) { var data = generatorData .Skip(Math.Min(generatorData.Count - 1, (int)(generatorData.Count * dataSplit.Start))) .Take(Math.Max(1, (int)(generatorData.Count * (dataSplit.End - dataSplit.Start)))) .ToList(); var averageData = new GeneratorData(); for (int i = 0; i < data[0].ChainsStats.Count; i++) { averageData.ChainsStats.Add(new ChainStats() { AttemptsOnSuccess = data.Average(x => x.ChainsStats[i].AttemptsOnSuccess), FailedRuns = data.Average(x => x.ChainsStats[i].FailedRuns), RandomRestarts = data.Average(x => x.ChainsStats[i].RandomRestarts), OutOfIterations = data.Average(x => x.ChainsStats[i].OutOfIterations), Iterations = data.Average(x => x.ChainsStats[i].Iterations), MaxIterationsOnSuccess = data.Max(x => x.ChainsStats[i].MaxIterationsOnSuccess), AverageIterationsOnSuccess = data.Average(x => x.ChainsStats[i].AverageIterationsOnSuccess), AverageStageTwoFailuresOnSuccess = data.Average(x => x.ChainsStats[i].AverageStageTwoFailuresOnSuccess), MaxStageTwoFailuresOnSuccess = data.Max(x => x.ChainsStats[i].MaxStageTwoFailuresOnSuccess), }); } averageData.Iterations = data.Average(x => x.Iterations); averageData.Time = data.Average(x => x.Time); return(averageData); }
private GeneratorData AnalyzeRun(IGeneratorRun <TRunData> run) { var generatorData = new GeneratorData() { Iterations = run.Iterations, Time = run.Time, }; var simulatedAnnealingEvents = run.AdditionalData.SimulatedAnnealingEventArgs; var chainsCount = simulatedAnnealingEvents.Max(x => x.ChainNumber) + 1; for (int i = 0; i < chainsCount; i++) { generatorData.ChainsStats.Add(AnalyzeChain(i, simulatedAnnealingEvents)); } return(generatorData); }