예제 #1
0
        public override SolutionProgram search(TimeSpan timeLimit)
        {
            watch.Start();

            SolutionProgram current = new SolutionProgram((DirectiveNode)SearchMethodsSupport.createRandomTree(NodeClass.directive, profile, 3));
            int             steps   = 0;

            while (watch.Elapsed < timeLimit)
            {
                steps++;
                mutatedPrograms.Clear();
                for (int i = 0; i < mutationsInStep; i++)
                {
                    SolutionProgram mutated = (SolutionProgram)current.Clone();
                    mutator.modify(mutated);
                    mutatedPrograms.Add(new EvaluatedEntity <SolutionProgram>(mutated, 0));
                }
                mutatedPrograms.Add(new EvaluatedEntity <SolutionProgram>(new SolutionProgram((DirectiveNode)SearchMethodsSupport.createRandomTree(NodeClass.directive, profile, 3)), 0));
                addEvaluation(batchSize, mutatedPrograms);
                var selected = selector.select(mutatedPrograms);
                if (selected.value >= 99)                       //more than 99% accuracy reached -> ending the search.
                {
                    printMSG(selected.value.ToString());
                    return(selected.item);
                }

                printMSG("Steps: " + steps);
                printMSG("Best evaluation: " + mutatedPrograms.Max(p => p.value));
                printMSG("Best program: " + mutatedPrograms.Where(p => p.value >= mutatedPrograms.Max(q => q.value)).First().item.ToString());
            }
            watch.Stop();
            return(mutatedPrograms.Where(p => p.value >= mutatedPrograms.Max(q => q.value)).First().item);
        }
예제 #2
0
        /// <summary>
        /// To test the Clone() method
        /// </summary>
        /// <param name="args"></param>
        static void Main3(string[] args)
        {
            NodeTypeFrequencyProfile p = NodeTypeFrequencyProfile.createProfile(new List <SolutionProgram> {
                getProgram0(), getProgram1(), getProgram2()
            }, true);

            for (int i = 0; i < 50; i++)
            {
                Console.WriteLine("New random program:");
                SolutionProgram pr = new SolutionProgram((DirectiveNode)SearchMethodsSupport.createRandomTree(NodeClass.directive, p, 10));
                Console.WriteLine(pr.ToString());
                new GraphVisualizer().visualizeDialog(ProgramTreeDrawer.createGraph(pr));
                Console.WriteLine();
                Console.WriteLine("CLONE:");
                SolutionProgram clon = (SolutionProgram)pr.Clone();
                Console.WriteLine(clon.ToString());
                new GraphVisualizer().visualizeDialog(ProgramTreeDrawer.createGraph(clon));
                Console.WriteLine();
            }
        }