Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
04/01/11 17:15:41 (13 years ago)
Author:
cneumuel
Message:

#1215

  • worked on configurability of SymbolicExpressionGrammar
File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/HeuristicLab.MetaOptimization/HeuristicLab.MetaOptimization.Test/Program.cs

    r5665 r5927  
    1414using HeuristicLab.Core;
    1515using HeuristicLab.Data;
     16using HeuristicLab.Encodings.RealVectorEncoding;
    1617using HeuristicLab.Hive.ExperimentManager;
    1718using HeuristicLab.Optimization;
     
    1920using HeuristicLab.PluginInfrastructure;
    2021using HeuristicLab.PluginInfrastructure.Manager;
     22using HeuristicLab.Problems.DataAnalysis.Symbolic;
     23using HeuristicLab.Problems.DataAnalysis.Symbolic.Regression;
    2124using HeuristicLab.Problems.MetaOptimization;
    2225using HeuristicLab.Problems.TestFunctions;
     
    4649    //private static int baseAlgorithmMaxGenerations = 1000;
    4750
    48     private static int metaAlgorithmPopulationSize = 5;
     51    private static int metaAlgorithmPopulationSize = 10;
    4952    private static int metaAlgorithmMaxGenerations = 15;
    50     private static int metaProblemRepetitions = 2;
    51     private static int baseAlgorithmMaxGenerations = 5;
     53    private static int metaProblemRepetitions = 3;
     54    private static int baseAlgorithmMaxGenerations = 10;
    5255    private static double mutationProbability = 0.10;
    5356
     
    7477      //TestNormalCrossover();
    7578      //TestItemDictionary();
    76      
     79
     80      //TestSymbolicDataAnalysisGrammar(); return;
     81
    7782      MetaOptimizationProblem metaOptimizationProblem = new MetaOptimizationProblem();
    7883      metaOptimizationProblem.Repetitions = new IntValue(metaProblemRepetitions);
     
    9095      //Console.WriteLine("Press enter to start");
    9196      //Console.ReadLine();
    92       TestConfiguration(algorithmVc, new GeneticAlgorithm() { Problem = new SingleObjectiveTestFunctionProblem() });
     97      TestConfiguration(algorithmVc, typeof(GeneticAlgorithm), metaOptimizationProblem.Problems.First());
    9398
    9499      Console.WriteLine("Press enter to start");
     
    99104
    100105      Console.ReadLine();
     106    }
     107
     108    private void TestSymbolicDataAnalysisGrammar() {
     109      var random = new MersenneTwister();
     110
     111      var grammar1 = new TypeCoherentExpressionGrammar();
     112      var grammar2 = new TypeCoherentExpressionGrammar();
     113
     114      grammar2.Symbols.Single(x => x.Name == "Addition").InitialFrequency = 0.5;
     115
     116      Console.WriteLine("========== Grammar1: ==========");
     117      PrintGrammar(grammar1);
     118      Console.WriteLine("========== Grammar2: ==========");
     119      PrintGrammar(grammar2);
     120
     121
     122      RealVector v1 = GetInitialFrequenciesAsRealVector(grammar1);
     123      RealVector v2 = GetInitialFrequenciesAsRealVector(grammar2);
     124
     125      for (int i = 0; i < 10; i++) {
     126        RealVector v3 = DiscreteCrossover.Apply(random, new ItemArray<RealVector>(new List<RealVector> { v1, v2 }));
     127
     128        var grammar3 = new TypeCoherentExpressionGrammar();
     129        SetInitialFrequenciesFromRealVector(grammar3, v3);
     130
     131        Console.WriteLine("\n========== Crossed: ==========");
     132        PrintGrammar(grammar3);
     133      }
     134
     135    }
     136
     137    private static void PrintGrammar(TypeCoherentExpressionGrammar grammar) {
     138      foreach (var symbol in grammar.Symbols) {
     139        Console.WriteLine("{0} ({1})", symbol.ToString(), symbol.InitialFrequency);
     140      }
     141    }
     142
     143    private static RealVector GetInitialFrequenciesAsRealVector(TypeCoherentExpressionGrammar grammar) {
     144      var vector = new RealVector(grammar.Symbols.Count());
     145      for (int i = 0; i < grammar.Symbols.Count(); i++) {
     146        vector[i] = grammar.Symbols.ElementAt(i).InitialFrequency;
     147      }
     148      return vector;
     149    }
     150
     151    private static void SetInitialFrequenciesFromRealVector(TypeCoherentExpressionGrammar grammar, RealVector vector) {
     152      for (int i = 0; i < grammar.Symbols.Count(); i++) {
     153        grammar.Symbols.ElementAt(i).InitialFrequency = vector[i];
     154      }
    101155    }
    102156
     
    384438      // because creating ThreadLocal<T> takes all the runtime.
    385439      // when the algs are not stored in a list however this effect does not occur.
    386      
     440
    387441
    388442      for (int i = 0; i < 1000; i++) {
     
    557611    private static void TestTypeDiscovery() {
    558612      PluginLoader.pluginAssemblies.Any();
    559      
     613
    560614      var items = ApplicationManager.Manager.GetInstances(typeof(DoubleArray)).ToArray();
    561615
     
    638692    private static ParameterConfigurationTree SetupGAAlgorithm(Type baseLevelAlgorithmType, MetaOptimizationProblem metaOptimizationProblem) {
    639693      metaOptimizationProblem.AlgorithmType.Value = baseLevelAlgorithmType;
    640       metaOptimizationProblem.ProblemType.Value = typeof(SingleObjectiveTestFunctionProblem);
    641       ParameterConfigurationTree algorithmVc = metaOptimizationProblem.ParameterConfigurationTree;
    642       ((IntValue)algorithmVc.AlgorithmConfiguration.ParameterConfigurations.Single(x => x.Name == "MaximumGenerations").ActualValue.Value).Value = baseAlgorithmMaxGenerations;
    643 
    644       metaOptimizationProblem.Problems.Clear();
    645       metaOptimizationProblem.Problems.Add(new HeuristicLab.Problems.TestFunctions.SingleObjectiveTestFunctionProblem() {
    646         Evaluator = new GriewankEvaluator(),
    647         ProblemSize = new IntValue(2)
    648       });
     694      //metaOptimizationProblem.Problems.Clear();
     695
     696      //metaOptimizationProblem.ProblemType.Value = typeof(SingleObjectiveTestFunctionProblem);
     697      //metaOptimizationProblem.Problems.Add(new HeuristicLab.Problems.TestFunctions.SingleObjectiveTestFunctionProblem() {
     698      //  Evaluator = new GriewankEvaluator(),
     699      //  ProblemSize = new IntValue(2)
     700      //});
    649701      //metaOptimizationProblem.Problems.Add(new HeuristicLab.Problems.TestFunctions.SingleObjectiveTestFunctionProblem() {
    650702      //  Evaluator = new GriewankEvaluator(),
     
    656708      //});
    657709
    658       ConfigurePopulationSize(algorithmVc, 15, 20, 1);
     710      metaOptimizationProblem.ProblemType.Value = typeof(SymbolicRegressionSingleObjectiveProblem);
     711     
     712      ParameterConfigurationTree algorithmVc = metaOptimizationProblem.ParameterConfigurationTree;
     713      ((IntValue)algorithmVc.AlgorithmConfiguration.ParameterConfigurations.Single(x => x.Name == "MaximumGenerations").ActualValue.Value).Value = baseAlgorithmMaxGenerations;
     714
     715      //ConfigurePopulationSize(algorithmVc, 15, 20, 1);
    659716      ConfigureMutationRate(algorithmVc, 0.0, 1.0, 0.01);
    660       //ConfigureMutationOperator(algorithmVc);
     717      ConfigureMutationOperator(algorithmVc);
    661718      //ConfigureElites(algorithmVc, 0, 8, 1);
    662719      //ConfigureSelectionOperator(algorithmVc, true);
     720
     721      ConfigureSymbolicExpressionGrammar(algorithmVc);
     722
    663723      return algorithmVc;
    664724    }
    665725
    666     private static void TestConfiguration(ParameterConfigurationTree algorithmVc, GeneticAlgorithm baseLevelAlgorithm) {
     726    private static void ConfigureSymbolicExpressionGrammar(ParameterConfigurationTree vc) {
     727      var pc = vc.ProblemConfiguration.ParameterConfigurations.Single(x => x.Name == "SymbolicExpressionTreeGrammar");
     728      pc.Optimize = true;
     729
     730      SymbolicExpressionGrammarValueConfiguration symbolicExpressionGrammarVc = null;
     731      foreach (var valconf in pc.ValueConfigurations) {
     732        if (valconf.ActualValue.Value.ItemName != "TypeCoherentExpressionGrammar") {
     733          pc.ValueConfigurations.SetItemCheckedState(valconf, false);
     734        } else {
     735          symbolicExpressionGrammarVc = valconf as SymbolicExpressionGrammarValueConfiguration;
     736        }
     737      }
     738      symbolicExpressionGrammarVc.Optimize = true;
     739
     740      var additionPc = symbolicExpressionGrammarVc.ParameterConfigurations.Single(x => x.Name == "Addition");
     741      additionPc.Optimize = true;
     742      var initialFrequencyVc = ((ParameterizedValueConfiguration)additionPc.ValueConfigurations.First()).ParameterConfigurations.Single(x => x.Name == "InitialFrequency");
     743      initialFrequencyVc.Optimize = true;
     744    }
     745
     746    private static void TestConfiguration(ParameterConfigurationTree algorithmVc, Type baseLevelAlgorithmType, IProblem problem) {
    667747      IRandom rand = new FastRandom(0);
     748      var baseLevelAlgorithm = (GeneticAlgorithm)MetaOptimizationUtil.CreateParameterizedAlgorithmInstance(algorithmVc, baseLevelAlgorithmType, problem);
     749
    668750      // set random values
    669751      for (int i = 0; i < 10; i++) {
     
    739821
    740822      // uncheck multiMutator to avoid Michalewicz issue
    741       var multiMutator = mutationOperator.ValueConfigurations.Where(x => x.ActualValue.Value != null && x.ActualValue.Value.ItemName.StartsWith("Multi")).SingleOrDefault();
    742       if (multiMutator != null) {
    743         mutationOperator.ValueConfigurations.SetItemCheckedState(multiMutator, false);
    744       }
     823      //var multiMutator = mutationOperator.ValueConfigurations.Where(x => x.ActualValue.Value != null && x.ActualValue.Value.ItemName.StartsWith("Multi")).SingleOrDefault();
     824      //if (multiMutator != null) {
     825      //  mutationOperator.ValueConfigurations.SetItemCheckedState(multiMutator, false);
     826      //}
    745827
    746828      // add another normal - don't do this with 'new', because ActualNames will not be set correctly. It should be copied from an existing one
     
    864946                var orderedRuns = rc.OrderBy(x => x.Results["AverageQualityNormalized"]);
    865947
    866                 TableBuilder tb = new TableBuilder("QNorm", "Qualities"/*, "PoSi"/* "MutRa", "Eli", "SelOp", "MutOp", "NrSelSubScopes"*/);
     948                TableBuilder tb = new TableBuilder("QNorm", "Qualities"/*, "PoSi"*/ ,"MutRa" /*,"Eli", "SelOp"*/, "MutOp"/*, "NrSelSubScopes"*/);
    867949                foreach (IRun run in orderedRuns) {
    868950                  //string selector;
     
    874956
    875957                  tb.AppendRow(
    876                     ((DoubleValue)run.Results["AverageQualityNormalized"]).Value.ToString("#0.0000"),
    877                     ((DoubleArray)run.Results["RunsAverageQualities"]).ToString()
    878                     //((IntValue)run.Parameters["PopulationSize"]).Value.ToString(),
    879                     //((DoubleValue)run.Parameters["MutationProbability"]).Value.ToString("0.0000"),
    880                     //((IntValue)run.Parameters["Elites"]).Value.ToString(),
    881                     //Shorten(selector, 20),
    882                     //Shorten(run.Parameters.ContainsKey("Mutator") ? run.Parameters["Mutator"].ToString() : "null", 40),
    883                     //((ISelector)run.Parameters["Selector"]).NumberOfSelectedSubScopesParameter.Value.ToString()
     958                    ((DoubleValue)run.Results["AverageQualityNormalized"]).Value.ToString("#0.0000")
     959                    ,((DoubleArray)run.Results["RunsAverageQualities"]).ToString()
     960                    //,((IntValue)run.Parameters["PopulationSize"]).Value.ToString()
     961                    ,((DoubleValue)run.Parameters["MutationProbability"]).Value.ToString("0.0000")
     962                    //,((IntValue)run.Parameters["Elites"]).Value.ToString()
     963                    //,Shorten(selector, 20)
     964                    ,Shorten(run.Parameters.ContainsKey("Mutator") ? run.Parameters["Mutator"].ToString() : "null", 40)
     965                    //,((ISelector)run.Parameters["Selector"]).NumberOfSelectedSubScopesParameter.Value.ToString()
    884966                    );
    885967                }
Note: See TracChangeset for help on using the changeset viewer.