static void Main(string[] args)
        {
            options.Parse(args);

            //check that the file exists before attempting to parse
            if (!Directory.Exists(directory))
            {
                Console.WriteLine($"Directory \"{directory}\" does not exist");
                return;
            }

            CIlibParser parser;

            if (iteration < 0)             //parse only final output
            {
                parser = new FinalOutputParser();
            }
            else             //parse entire file
            {
                parser = new SingleIterationParser(iteration);
            }

            List <Algorithm> algorithms = parser.ParseDirectory(directory);
            string           outputPath = Path.Combine(directory, "summaries");

            if (!Directory.Exists(outputPath))
            {
                Directory.CreateDirectory(outputPath);
            }

            foreach (string measure in algorithms[0].Measurements.Select(x => x.Name))
            {
                string fileName = Path.Combine(outputPath, $"{measure}.csv");
                using (TextWriter writer = new StreamWriter(fileName))
                {
                    //writer.WriteLine("Algorithm,Mean,Stdandard Deviation,Min,Max");
                    if (verbose)
                    {
                        Console.WriteLine(measure);
                        Console.WriteLine("    Alg    |    Min    |   Median  |   Mean    |  Std.Dev  | Max");
                    }
                    foreach (Algorithm alg in algorithms)
                    {
                        IterationStats stats = alg.Measurements.Find(m => m.Name == measure).FinalIteration;                         //get the stats for the associated measure																																														//writer.WriteLine("{0},{1},{2},{3},{4}", alg.Name, stats.Average, stats.StandardDeviation, stats.Min, stats.Max);
                        writer.WriteLine("{0} & {1:e2} & {2:e2} & {3:e2} & {4:e2} & {5:e2} \\\\ \\hline", alg.Name, checkMin(stats.Min), checkMin(stats.Median), checkMin(stats.Average), checkMin(stats.StandardDeviation), checkMin(stats.Max));
                        if (verbose)
                        {
                            Console.WriteLine("{0,10} | {1:0.000} | {2:0.000} | {3:0.000} | {4:0.000} | {5:0.000}", alg.Name, checkMin(stats.Min), checkMin(stats.Median), checkMin(stats.Average), checkMin(stats.StandardDeviation), checkMin(stats.Max));
                        }
                    }
                    if (verbose)
                    {
                        Console.WriteLine();
                    }
                }
            }
        }
    /// <summary>
    /// This method is called by MapperOptimalEfficiency_AdditionalStats for each iteration
    /// </summary>
    /// <param name="images"></param>
    /// <param name="maxWidth"></param>
    /// <param name="maxHeight"></param>
    /// <returns></returns>
    protected override S MappingRestrictedBox(
        IOrderedEnumerable <IImageInfo> images, int maxWidth, int maxHeight, ICanvasStats canvasStats,
        out int lowestFreeHeightDeficitTallestRightFlushedImage)
    {
        S intermediateSpriteInfo =
            base.MappingRestrictedBox(images, maxWidth, maxHeight, canvasStats, out lowestFreeHeightDeficitTallestRightFlushedImage);

        IterationStats          stats          = null;
        CanvasWritingStepImages canvasBLFStats = _canvas as CanvasWritingStepImages;

        List <ImagePlacementDetails> imageDetails = null;

        if (canvasBLFStats != null)
        {
            imageDetails = new List <ImagePlacementDetails>(canvasBLFStats.ImageDetails);
        }

        if (intermediateSpriteInfo != null)
        {
            stats =
                new IterationStats
            {
                Result                   = IterationResult.Success,
                MaxCanvasWidth           = maxWidth,
                MaxCanvasHeight          = maxHeight,
                IntermediateSpriteWidth  = intermediateSpriteInfo.Width,
                IntermediateSpriteHeight = intermediateSpriteInfo.Height,
                ImageDetails             = imageDetails
            };
        }
        else
        {
            stats =
                new IterationStats
            {
                Result          = IterationResult.Failure,
                MaxCanvasWidth  = maxWidth,
                MaxCanvasHeight = maxHeight,
                ImageDetails    = imageDetails
            };
        }

        _currentMappingIterationStats.Add(stats);

        // Clear out the current image details as kept by the canvas, otherwise we get the same details again next time.
        if (canvasBLFStats != null)
        {
            canvasBLFStats.ImageDetails.Clear();
        }

        return(intermediateSpriteInfo);
    }
        /// <summary>
        /// Read an individual line from a CIlib output file
        /// </summary>
        /// <param name="line">The line to be read.</param>
        protected virtual void ReadLine(string line)
        {
            string[] tokens = line.Split(SplitChars, StringSplitOptions.RemoveEmptyEntries);
            if (!int.TryParse(tokens[0], out var iter))
            {
                Console.WriteLine("Iteration is not the first column.");
            }

            string columnName;

            int index = 0;             //the index of the column being parsed

            //loop through each column
            while (index < ColumnArray.Length)
            {
                columnName = ColumnArray[index];

                List <double> values = new List <double>();

                //loop through the various columns (i.e., runs) for this measure
                while (index < ColumnArray.Length && ColumnArray[index] == columnName)
                {
                    values.Add(double.Parse(tokens[index + 1]));                     //add 1 to offset iteration as first column
                    index++;
                }

                IterationStats stats = new IterationStats(iter, values);

                Measurements.AddOrUpdate(columnName,
                                         x => //add function
                {
                    Measurement meas = new Measurement(columnName);
                    meas.AddIterationStatistics(iter, stats);
                    return(meas);
                },
                                         (name, meas) => //update function
                {
                    meas.AddIterationStatistics(iter, stats);
                    return(meas);
                }
                                         );
            }
        }
    /// <summary>
    /// </summary>
    /// <param name="images"></param>
    /// <param name="maxWidth"></param>
    /// <param name="maxHeight"></param>
    /// <returns></returns>
    protected override bool CandidateCanvasFeasable(
        int canvasMaxWidth, int canvasMaxHeight, int bestSpriteArea, int totalAreaAllImages,
        out bool candidateBiggerThanBestSprite, out bool candidateSmallerThanCombinedImages)
    {
        bool isFeasable =
            base.CandidateCanvasFeasable(
                canvasMaxWidth, canvasMaxHeight, bestSpriteArea, totalAreaAllImages,
                out candidateBiggerThanBestSprite, out candidateSmallerThanCombinedImages);

        IterationStats stats = null;

        if (candidateBiggerThanBestSprite)
        {
            stats = new IterationStats
            {
                Result          = IterationResult.BiggerThanBestSprite,
                MaxCanvasWidth  = canvasMaxWidth,
                MaxCanvasHeight = canvasMaxHeight
            };
        }
        else if (candidateSmallerThanCombinedImages)
        {
            stats = new IterationStats
            {
                Result          = IterationResult.SmallerThanCombinedImages,
                MaxCanvasWidth  = canvasMaxWidth,
                MaxCanvasHeight = canvasMaxHeight
            };
        }

        if (stats != null)
        {
            _currentMappingIterationStats.Add(stats);
        }

        return(isFeasable);
    }
Exemple #5
0
        public void Calculate(List <Algorithm> algorithms)
        {
            char[] nameSplit = { '_' };

            using (TextWriter writer = new StreamWriter("test.csv"))
            {
                foreach (var algorithm in algorithms)
                {
                    var nameTokens = algorithm.Name.Split(nameSplit, StringSplitOptions.RemoveEmptyEntries);

                    if (!double.TryParse(nameTokens[1], out var inertia))
                    {
                        Console.WriteLine("Error parsing inertia from: {0}", nameTokens[1]);
                    }

                    if (!double.TryParse(nameTokens[2], out var cognitive))
                    {
                        Console.WriteLine("Error parsing cognitive from: {0}", nameTokens[2]);
                    }

                    if (!double.TryParse(nameTokens[3], out var social))
                    {
                        Console.WriteLine("Error parsing social from: {0}", nameTokens[3]);
                    }


                    IterationStats stats = algorithm.Measurements.Find(x => x.Name == "Fitness").FinalIteration;
                    int            count = stats.Values.Count(x => x < accuracy);

                    double successRate = (double)count / stats.Values.Count;

                    string successString = "";
                    if (successRate < double.Epsilon) //s = 0.0
                    {
                        successString = "F";
                    }
                    else if (successRate < 0.2) //0 < s < 0.2
                    {
                        successString = "VP";
                    }
                    else if (successRate < 0.4) //0.2 < s < 0.4
                    {
                        successString = "P";
                    }
                    else if (successRate < 0.6) //0.4 < s < 0.6
                    {
                        successString = "A";
                    }
                    else if (successRate < 0.8) //0.6 < s < 0.8
                    {
                        successString = "G";
                    }
                    else if (successRate < 1.0) //s = 1.0
                    {
                        successString = "VG";
                    }
                    else
                    {
                        successString = "S";
                    }


                    writer.WriteLine($"{inertia},{cognitive},{social},{successRate},{successString}");
                }
            }
        }
        private static void ProcessMovement()
        {
            if (!Directory.Exists(_directory))
            {
                Console.WriteLine("Invalid directory, exiting.");
                Environment.Exit(1);
            }

            if (_value < 0)
            {
                Console.WriteLine("Value must be positive, exiting.");
                Environment.Exit(1);
            }

            string outputDir = Path.Combine(_directory, OutputDirName);

            if (!Directory.Exists(outputDir))
            {
                Directory.CreateDirectory(outputDir);
            }

            string output = Path.Combine(outputDir, _value + ".csv");

            char[] nameSplit = { '_' };

            using (TextWriter writer = new StreamWriter(output))
            {
                foreach (string movementfile in Directory.EnumerateFiles(_directory, "*.txt"))
                {
                    //Algorithm alg = CIlibParserOld.Parse(movementfile);
                    CIlibParser parser  = new FullParser();
                    Algorithm   alg     = parser.Parse(movementfile);
                    Measurement measure = alg.Measurements.Find(x => x.Name == MeasureName);
                    int         iterations;

                    if (_divergence)
                    {
                        if (measure.FinalIteration.Average < _value)
                        {
                            iterations = measure.MaximumIterations;
                        }
                        else
                        {
                            IterationStats stats = measure.Stats.Skip(1).First(x => x.Average >= _value);
                            iterations = stats.Iteration;
                        }
                    }
                    else
                    {  //check if the final value is less than the threshold, if not set it to max iters immediately
                        if (measure.FinalIteration.Average > _value)
                        {
                            iterations = measure.MaximumIterations;
                        }
                        else
                        {
                            IterationStats stats = measure.Stats.Skip(1).First(x => x.Average <= _value);
                            iterations = stats.Iteration;
                        }
                    }
                    var nameTokens = alg.Name.Split(nameSplit, StringSplitOptions.RemoveEmptyEntries);

                    if (!double.TryParse(nameTokens[1], out var inertia))
                    {
                        Console.WriteLine("Error parsing inertia from: {0}", nameTokens[1]);
                    }

                    if (!double.TryParse(nameTokens[2], out var cognitive))
                    {
                        Console.WriteLine("Error parsing cognitive from: {0}", nameTokens[2]);
                    }

                    if (!double.TryParse(nameTokens[3], out var social))
                    {
                        Console.WriteLine("Error parsing social from: {0}", nameTokens[3]);
                    }

                    writer.WriteLine("{0},{1},{2}", cognitive + social, inertia, iterations);
                }

                writer.Close();
            }
        }