public ExperimentResult Run(Experiment experiment) { experimentToRun = experiment; var result = new ExperimentResult(); result.InstanceSize = experiment.Instance.N; result.Executions = Run(); result.MeanExecutionTime = MeanExecutionTime; return(result); }
public void SaveResult(ExperimentResult experimentResults) { if (string.IsNullOrEmpty(SaveDirectory)) { throw new ArgumentException("SaveDirectory is not set"); } if (!Directory.Exists(SaveDirectory)) { Directory.CreateDirectory(SaveDirectory); } var experimentsDirectory = Path.Combine(SaveDirectory, experimentResults.InstanceName, experimentResults.Name); if (!Directory.Exists(experimentsDirectory)) { Directory.CreateDirectory(experimentsDirectory); } var executionIter = 0; foreach (var execution in experimentResults.Executions) { var path = Path.Combine(experimentsDirectory, $"{experimentResults.Name}_{experimentResults.InstanceName}_{executionIter}.{Extension}"); using (var file = new StreamWriter(path)) { file.WriteLine($"Instance Name;{experimentResults.InstanceName}"); file.WriteLine($"Mean Execution Time;{experimentResults.MeanExecutionTime}"); file.WriteLine($"Execution time;{execution.Time}"); file.WriteLine($"Execution steps;{execution.Steps}"); file.WriteLine($"Execution final cost;{execution.Cost}"); file.WriteLine($"Best known cost;{execution.BestKnownCost}"); file.WriteLine($"InitialCost;{execution.InitialCost}"); file.WriteLine($"Similarity;{execution.SimilarityWithBest}"); file.WriteLine($"NumberOfImprovements;{execution.NumberOfImprovements}"); file.WriteLine(execution.FinalSolution. Select( x => x.ToString() ). Aggregate( (x, y) => $"{x};{y}") ); foreach (var cost in execution.IntermediateCosts) { file.WriteLine( $"{cost}" ); } } executionIter++; } }
public void SaveResult(ExperimentResult experimentResults) { if (string.IsNullOrEmpty(SaveDirectory)) { throw new ArgumentException("SaveDirectory is not set"); } if (!Directory.Exists(SaveDirectory)) { Directory.CreateDirectory(SaveDirectory); } var experimentsDirectory = Path.Combine(SaveDirectory, experimentResults.InstanceName); if (!Directory.Exists(experimentsDirectory)) { Directory.CreateDirectory(experimentsDirectory); } var path = Path.Combine(experimentsDirectory, $"{experimentResults.Name}_{experimentResults.InstanceName}.{Extension}"); using (var file = new StreamWriter(path)) { var header = "Algorithm;Instance name;Instance size;Number of executions;Execution time;" + "Execution steps;Final cost;Initial quality;Best known cost;Similarity;Number of improvements;" + "Quality;Initial to final execution ratio"; file.WriteLine(header.Replace(' ', '_')); var line = new StringBuilder(); foreach (var execution in experimentResults.Executions) { line.Clear(); line.Append($"{experimentResults.Name};"); line.Append($"{experimentResults.InstanceName};"); line.Append($"{experimentResults.InstanceSize};"); line.Append($"{experimentResults.NumberOfExecutions};"); line.Append($"{execution.Time};"); line.Append($"{execution.Steps};"); line.Append($"{execution.Cost};"); line.Append($"{execution.InitialQuality};"); line.Append($"{execution.BestKnownCost};"); line.Append($"{execution.SimilarityWithBest};"); line.Append($"{execution.NumberOfImprovements};"); line.Append($"{execution.Quality};"); line.Append($"{execution.InitialToFinalExecutionRatio}"); file.WriteLine(line); } } if (!Program.AlgorithmsWithIntermediateCostsSaved.Contains(experimentResults.Name) || !Program.InstancesWithIntermediateCostsSaved.Contains(experimentResults.InstanceName)) { return; } // save intermediate costs for restarts var pathIntermediateData = Path.Combine(experimentsDirectory, $"cost_{experimentResults.Name}_{experimentResults.InstanceName}.{Extension}"); using (var file = new StreamWriter(pathIntermediateData)) { var labels = ATSP.Heuristics.ATSPHeuristic.SaveCostPoints .Select(x => x.ToString()) .Where(x => !string.IsNullOrEmpty(x)) .Aggregate((x, y) => $"{x};{y}"); var header = $"Algorithm;Instance name;Instance size;{labels}"; file.WriteLine(header.Replace(' ', '_')); var line = new StringBuilder(); foreach (var execution in experimentResults.Executions) { if (execution.IntermediateCosts is null || execution.IntermediateCosts.Count < 1) { continue; } line.Clear(); line.Append($"{experimentResults.Name};"); line.Append($"{experimentResults.InstanceName};"); line.Append($"{experimentResults.InstanceSize};"); line.Append( execution.IntermediateCosts .Select(x => x.ToString()) .Aggregate((x, y) => $"{x};{y}") ); file.WriteLine(line); } } }