Exemplo n.º 1
0
        public ExperimentResult Run(Experiment experiment)
        {
            experimentToRun = experiment;
            var result = new ExperimentResult();

            result.InstanceSize      = experiment.Instance.N;
            result.Executions        = Run();
            result.MeanExecutionTime = MeanExecutionTime;

            return(result);
        }
Exemplo n.º 2
0
        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++;
            }
        }
Exemplo n.º 3
0
        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);
                }
            }
        }