예제 #1
0
        /// <summary>
        /// Evaluates given solution program using given samplesGenerator. Prints a comparison of desiredOutputs to realOutputs and computes success rate.
        /// </summary>
        /// <param name="generator"></param>
        /// <param name="p"></param>
        /// <param name="samplesCount"></param>
        public static void runEvaluation(TrainingSamplesGenerator generator, SolutionProgram p, int samplesCount, bool quiet = false)
        {
            Interpret i            = new Interpret();
            int       currectCount = 0;

            foreach (var sample in generator.generateSamples(samplesCount))
            {
                p.evaluate(sample, i);
                Printing.PrintMsg(sample.ToString() + "\treal output: " + sample.realOutputs2String + " " + (sample.isCorrectlyAnswered ? "OK" : "WRONG"), quiet);
                if (sample.isCorrectlyAnswered)
                {
                    currectCount++;
                }
            }
            Console.WriteLine($"Success rate: {currectCount} out of {samplesCount} ({((double)(currectCount*100) / samplesCount).ToString("0.##")}%)");
        }
예제 #2
0
        /// <summary>
        /// Returns the percentage of correctly answered tests
        /// </summary>
        /// <param name="batchSize"></param>
        /// <param name="p"></param>
        /// <returns></returns>
        protected virtual double evaluate(int batchSize, SolutionProgram p)
        {
            int currectCount = 0;

            //var samples = generator.generateSamples(batchSize).ToList();
            foreach (var sample in generator.generateSamples(batchSize))
            {
                p.evaluate(sample, i);
                bool isCorrect = sample.isCorrectlyAnswered;
                printMSG(sample.ToString() + "\treal output: " + sample.realOutputs2String + " " + (isCorrect ? "OK" : "WRONG"), true);
                if (isCorrect)
                {
                    currectCount++;
                }
            }
            return((double)(currectCount * 100) / batchSize);
        }