Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
05/01/11 22:02:28 (13 years ago)
Author:
cneumuel
Message:

#1215

  • added weight parameters for quality, stddev and evaluated solutions
  • lots of fixes
File:
1 edited

Legend:

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

    r6038 r6090  
    1515using HeuristicLab.Data;
    1616using HeuristicLab.Encodings.RealVectorEncoding;
     17using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding;
    1718//using HeuristicLab.Hive.ExperimentManager;
    1819using HeuristicLab.Optimization;
     
    2122using HeuristicLab.PluginInfrastructure.Manager;
    2223using HeuristicLab.Problems.DataAnalysis.Symbolic;
    23 using HeuristicLab.Problems.DataAnalysis.Symbolic.Regression;
    2424using HeuristicLab.Problems.MetaOptimization;
    2525using HeuristicLab.Problems.TestFunctions;
     
    4242  [Application("TestApp")]
    4343  public class TestApp : ApplicationBase {
    44     //private static int metaAlgorithmPopulationSize = 50;
     44    //private static int metaAlgorithmPopulationSize = 30;
    4545    //private static int metaAlgorithmMaxGenerations = 30;
    46     //private static int metaProblemRepetitions = 5;
    47     //private static int baseAlgorithmMaxGenerations = 1000;
     46    //private static int metaProblemRepetitions = 3;
     47    //private static int baseAlgorithmMaxGenerations = 500;
     48    //private static double mutationProbability = 0.10;
    4849
    4950    private static int metaAlgorithmPopulationSize = 10;
    5051    private static int metaAlgorithmMaxGenerations = 20;
     52    private static double metaAlgorithmMutationProbability = 0.10;
    5153    private static int metaProblemRepetitions = 2;
    52     private static int baseAlgorithmMaxGenerations = 50;
    53     private static double mutationProbability = 0.10;
    54 
     54    private static int baseAlgorithmMaxGenerations = 10;
     55    private static int baseAlgorithmPopulationSize = 10;
     56   
    5557    public override void Run() {
    5658      ContentManager.Initialize(new PersistenceContentManager());
     
    6365      //TestDoubleSampling(); return;
    6466      //TestTypeDiscovery();
    65       TestOperators(); return;
     67      //TestOperators(); return;
    6668      //TestCombinations();
    6769      //TestCombinations2();
     
    7880      //TestSymbolicDataAnalysisGrammar(); return;
    7981
    80       MetaOptimizationProblem metaOptimizationProblem = new MetaOptimizationProblem();
     82      //MetaOptimizationProblem metaOptimizationProblem = LoadOptimizationProblem("Meta Optimization Problem (Genetic Programming - Symbolic Regression 3.4 scaled).hl");
     83      //var algorithmVc = metaOptimizationProblem.ParameterConfigurationTree;
     84
     85      var metaOptimizationProblem = new MetaOptimizationProblem();
     86      var algorithmVc = SetupGAAlgorithm(typeof(GeneticAlgorithm), metaOptimizationProblem);
     87
    8188      metaOptimizationProblem.Repetitions = new IntValue(metaProblemRepetitions);
    82       //GeneticAlgorithm metaLevelAlgorithm = GetMetaGA(metaOptimizationProblem);
     89      //GeneticAlgorithm metaLevelAlgorithm = GetSequentialMetaGA(metaOptimizationProblem);
    8390      GeneticAlgorithm metaLevelAlgorithm = GetParallelMetaGA(metaOptimizationProblem);
    8491      //GeneticAlgorithm metaLevelAlgorithm = GetHiveParallelMetaGA(metaOptimizationProblem);
    85 
    8692      //EvolutionStrategy metaLevelAlgorithm = GetMetaES(metaOptimizationProblem);
    87 
    88       var algorithmVc = SetupGAAlgorithm(typeof(GeneticAlgorithm), metaOptimizationProblem);
    89 
    90       string info = algorithmVc.ParameterInfoString;
    9193
    9294      //Console.WriteLine("Press enter to start");
     
    103105    }
    104106
     107    private MetaOptimizationProblem LoadOptimizationProblem(string filename) {
     108      return (MetaOptimizationProblem)ContentManager.Load(filename);
     109    }
     110
    105111    private void TestSymbolicDataAnalysisGrammar() {
    106112      var random = new MersenneTwister();
     
    108114      var grammar1 = new TypeCoherentExpressionGrammar();
    109115      var grammar2 = new TypeCoherentExpressionGrammar();
    110      
     116
    111117      Console.WriteLine("========== Grammar1: ==========");
    112118      PrintGrammar(grammar1);
     
    280286      MetaOptimizationProblem metaOptimizationProblem = new MetaOptimizationProblem();
    281287      metaOptimizationProblem.Repetitions = new IntValue(metaProblemRepetitions);
    282       GeneticAlgorithm metaLevelAlgorithm = GetMetaGA(metaOptimizationProblem);
     288      GeneticAlgorithm metaLevelAlgorithm = GetSequentialMetaGA(metaOptimizationProblem);
    283289      ParameterConfigurationTree algorithmVc = SetupGAAlgorithm(typeof(GeneticAlgorithm), metaOptimizationProblem);
    284290      Stopwatch sw = new Stopwatch();
     
    459465
    460466
    461       for (int i = 0; i < 1000; i++) {
     467      for (int i = 0; i < 10000; i++) {
    462468        GeneticAlgorithm clonedGa = (GeneticAlgorithm)ga.Clone();
    463469        clonedGa.Name = "CLONED GA";
     
    479485        }
    480486        sw.Reset();
     487        //Console.ReadLine();
    481488      }
    482489    }
     
    670677    }
    671678
    672     private static GeneticAlgorithm GetMetaGA(MetaOptimizationProblem metaOptimizationProblem) {
     679    private static GeneticAlgorithm GetSequentialMetaGA(MetaOptimizationProblem metaOptimizationProblem) {
    673680      GeneticAlgorithm metaLevelAlgorithm = new GeneticAlgorithm();
    674681      metaLevelAlgorithm.PopulationSize.Value = metaAlgorithmPopulationSize;
     
    681688      //metaLevelAlgorithm.Mutator = ((OptionalConstrainedValueParameter<IManipulator>)((IAlgorithm)metaLevelAlgorithm).Parameters["Mutator"]).ValidValues.Where(x => x.GetType() == typeof(ParameterConfigurationAllPositionsManipulator)).Single();
    682689
    683       metaLevelAlgorithm.MutationProbability.Value = mutationProbability;
     690      metaLevelAlgorithm.MutationProbability.Value = metaAlgorithmMutationProbability;
    684691      //metaLevelAlgorithm.Selector = ((OptionalConstrainedValueParameter<ISelector>)((IAlgorithm)metaLevelAlgorithm).Parameters["Selector"]).ValidValues.Where(x => x.GetType() == typeof(LinearRankSelector)).Single();
    685692      //metaLevelAlgorithm.Selector = ((OptionalConstrainedValueParameter<ISelector>)((IAlgorithm)metaLevelAlgorithm).Parameters["Selector"]).ValidValues.Where(x => x.GetType() == typeof(TournamentSelector)).Single();
    686693      //metaLevelAlgorithm.Selector = ((OptionalConstrainedValueParameter<ISelector>)((IAlgorithm)metaLevelAlgorithm).Parameters["Selector"]).ValidValues.Where(x => x.GetType() == typeof(GenderSpecificSelector)).Single();
    687694      //metaLevelAlgorithm.Selector = ((OptionalConstrainedValueParameter<ISelector>)((IAlgorithm)metaLevelAlgorithm).Parameters["Selector"]).ValidValues.Where(x => x.GetType() == typeof(BestSelector)).Single();
    688       metaLevelAlgorithm.Selector = ((OptionalConstrainedValueParameter<ISelector>)((IAlgorithm)metaLevelAlgorithm).Parameters["Selector"]).ValidValues.Where(x => x.GetType() == typeof(ProportionalSelector)).Single();
     695      metaLevelAlgorithm.Selector = ((OptionalConstrainedValueParameter<ISelector>)((IAlgorithm)metaLevelAlgorithm).Parameters["Selector"]).ValidValues.Where(x => x.GetType() == typeof(TournamentSelector)).Single();
     696
     697      metaLevelAlgorithm.SetSeedRandomly.Value = false;
     698      //metaLevelAlgorithm.Seed.Value = new MersenneTwister().Next(0, 1000000);
     699      metaLevelAlgorithm.Seed.Value = 527875;
    689700
    690701      return metaLevelAlgorithm;
     
    692703
    693704    private static GeneticAlgorithm GetParallelMetaGA(MetaOptimizationProblem metaOptimizationProblem) {
    694       GeneticAlgorithm metaLevelAlgorithm = GetMetaGA(metaOptimizationProblem);
     705      GeneticAlgorithm metaLevelAlgorithm = GetSequentialMetaGA(metaOptimizationProblem);
    695706      metaLevelAlgorithm.Engine = new ParallelEngine.ParallelEngine();
    696707      return metaLevelAlgorithm;
     
    722733    private static ParameterConfigurationTree SetupGAAlgorithm(Type baseLevelAlgorithmType, MetaOptimizationProblem metaOptimizationProblem) {
    723734      metaOptimizationProblem.AlgorithmType.Value = baseLevelAlgorithmType;
     735     
     736      //metaOptimizationProblem.ProblemType.Value = typeof(SingleObjectiveTestFunctionProblem);
    724737      //metaOptimizationProblem.Problems.Clear();
    725 
    726       //metaOptimizationProblem.ProblemType.Value = typeof(SingleObjectiveTestFunctionProblem);
    727738      //metaOptimizationProblem.Problems.Add(new HeuristicLab.Problems.TestFunctions.SingleObjectiveTestFunctionProblem() {
    728739      //  Evaluator = new GriewankEvaluator(),
     
    731742      //metaOptimizationProblem.Problems.Add(new HeuristicLab.Problems.TestFunctions.SingleObjectiveTestFunctionProblem() {
    732743      //  Evaluator = new GriewankEvaluator(),
    733       //  ProblemSize = new IntValue(20)
     744      //  ProblemSize = new IntValue(50)
    734745      //});
    735746      //metaOptimizationProblem.Problems.Add(new HeuristicLab.Problems.TestFunctions.SingleObjectiveTestFunctionProblem() {
     
    738749      //});
    739750
    740       metaOptimizationProblem.ProblemType.Value = typeof(SymbolicRegressionSingleObjectiveProblem);
    741      
     751      //metaOptimizationProblem.ProblemType.Value = typeof(SymbolicRegressionSingleObjectiveProblem);
     752      //metaOptimizationProblem.Maximization.Value = true;
     753
     754      // tower problem
     755      metaOptimizationProblem.ImportAlgorithm((IAlgorithm)ContentManager.Load("Genetic Programming - Symbolic Regression 3.4_scaled.hl"));
     756      metaOptimizationProblem.Maximization.Value = true;
     757
    742758      ParameterConfigurationTree algorithmVc = metaOptimizationProblem.ParameterConfigurationTree;
    743759      ((IntValue)algorithmVc.AlgorithmConfiguration.ParameterConfigurations.Single(x => x.Name == "MaximumGenerations").ActualValue.Value).Value = baseAlgorithmMaxGenerations;
    744 
    745       //ConfigurePopulationSize(algorithmVc, 15, 20, 1);
     760      ((IntValue)algorithmVc.AlgorithmConfiguration.ParameterConfigurations.Single(x => x.Name == "PopulationSize").ActualValue.Value).Value = baseAlgorithmPopulationSize;
     761     
     762      //ConfigurePopulationSize(algorithmVc, 10, 100, 1);
    746763      //ConfigureMutationRate(algorithmVc, 0.0, 1.0, 0.01);
    747764      //ConfigureMutationOperator(algorithmVc);
    748       //ConfigureElites(algorithmVc, 0, 8, 1);
     765      //ConfigureElites(algorithmVc, 0, 10, 1);
    749766      //ConfigureSelectionOperator(algorithmVc, true);
    750767
     
    772789    private static void ConfigureSymbolicExpressionGrammarVc(SymbolicExpressionGrammarValueConfiguration symbolicExpressionGrammarVc) {
    773790      symbolicExpressionGrammarVc.Optimize = true;
    774       foreach (var pc in symbolicExpressionGrammarVc.ParameterConfigurations) {
    775         if (pc.Name != "Constant"
    776           && pc.Name != "Variable"
    777           && pc.Name != "ProgramRootSymbol"
    778           && pc.Name != "StartSymbol") {
    779           pc.Optimize = true;
    780         }
    781       }
    782       //var additionPc = symbolicExpressionGrammarVc.ParameterConfigurations.Single(x => x.Name == "Addition");
    783       //additionPc.Optimize = true;
     791
     792      SetInitialFrequencyValue(symbolicExpressionGrammarVc, "Addition", 1.0);
     793      SetInitialFrequencyValue(symbolicExpressionGrammarVc, "Subtraction", 1.0);
     794      SetInitialFrequencyValue(symbolicExpressionGrammarVc, "Multiplication", 1.0);
     795      SetInitialFrequencyValue(symbolicExpressionGrammarVc, "Division", 1.0);
     796      SetInitialFrequencyValue(symbolicExpressionGrammarVc, "Average", 1.0);
     797
     798      SetInitialFrequencyValue(symbolicExpressionGrammarVc, "IfThenElse", 0.0);
     799      SetInitialFrequencyValue(symbolicExpressionGrammarVc, "GreaterThan", 0.0);
     800      SetInitialFrequencyValue(symbolicExpressionGrammarVc, "LessThan", 0.0);
     801      SetInitialFrequencyValue(symbolicExpressionGrammarVc, "And", 0.0);
     802      SetInitialFrequencyValue(symbolicExpressionGrammarVc, "Or", 0.0);
     803      SetInitialFrequencyValue(symbolicExpressionGrammarVc, "Not", 0.0);
     804
     805      SetInitialFrequencyValue(symbolicExpressionGrammarVc, "Sine", 0.0);
     806      SetInitialFrequencyValue(symbolicExpressionGrammarVc, "Cosine", 0.0);
     807      SetInitialFrequencyValue(symbolicExpressionGrammarVc, "Tangent", 0.0);
     808
     809      OptimizeInitialFrequency(symbolicExpressionGrammarVc, "Logarithm", "InitialFrequency", 0.0, 5.0, 0.01);
     810      OptimizeInitialFrequency(symbolicExpressionGrammarVc, "Power", "InitialFrequency", 0.0, 5.0, 0.01);
     811      OptimizeInitialFrequency(symbolicExpressionGrammarVc, "Root", "InitialFrequency", 0.0, 5.0, 0.01);
     812
     813      OptimizeInitialFrequency(symbolicExpressionGrammarVc, "Variable", "WeightSigma", 0.01, 10.0, 0.01);
     814      OptimizeInitialFrequency(symbolicExpressionGrammarVc, "Variable", "WeightManipulatorSigma", 0.01, 10.0, 0.01);
     815      OptimizeInitialFrequency(symbolicExpressionGrammarVc, "Variable", "MultiplicativeWeightManipulatorSigma", 0.01, 10.0, 0.01);
     816
     817      OptimizeInitialFrequency(symbolicExpressionGrammarVc, "Constant", "ManipulatorSigma", 0.01, 10.0, 0.01);
     818      OptimizeInitialFrequency(symbolicExpressionGrammarVc, "Constant", "MultiplicativeManipulatorSigma", 0.01, 10.0, 0.01);
     819    }
     820
     821    private static void SetInitialFrequencyValue(SymbolicExpressionGrammarValueConfiguration symbolicExpressionGrammarVc, string symbolName, double value) {
     822      ((Symbol)symbolicExpressionGrammarVc.ParameterConfigurations.Single(x => x.Name == symbolName).ActualValue.Value).InitialFrequency = value;
     823    }
     824
     825    private static void OptimizeInitialFrequency(SymbolicExpressionGrammarValueConfiguration symbolicExpressionGrammarVc, string symbolName, string parameterName, double lower, double upper, double step) {
     826      var pc = symbolicExpressionGrammarVc.ParameterConfigurations.Single(x => x.Name == symbolName);
     827      pc.Optimize = true;
     828      var vc = (SymbolValueConfiguration)pc.ValueConfigurations.Single();
     829      var parameterPc = vc.ParameterConfigurations.Single(x => x.Name == parameterName);
     830      parameterPc.Optimize = true;
     831      parameterPc.ValueConfigurations.Clear();
     832      var rvc = new RangeValueConfiguration(new DoubleValue(5.0), typeof(DoubleValue));
     833      rvc.Optimize = true;
     834      ((DoubleValueRange)rvc.RangeConstraint).LowerBound.Value = lower;
     835      ((DoubleValueRange)rvc.RangeConstraint).UpperBound.Value = upper;
     836      ((DoubleValueRange)rvc.RangeConstraint).StepSize.Value = step;
     837      parameterPc.ValueConfigurations.Add(rvc);
    784838    }
    785839
     
    937991      string outputPath = Path.Combine(path, string.Format("{0} - Console.txt", id));
    938992
    939       ContentManager.Save((IStorableContent)metaLevelAlgorithm, resultPath+"-before.hl", true);
    940 
     993      ContentManager.Save((IStorableContent)metaLevelAlgorithm, resultPath + "-before.hl", true);
     994     
    941995      using (var sw = new StreamWriter(outputPath)) {
    942996        sw.AutoFlush = true;
     
    9471001        sb1.AppendFormat("Meta.Repetitions   : {0}\n", metaProblemRepetitions);
    9481002        sb1.AppendFormat("Meta.MutProb       : {0}\n", ((GeneticAlgorithm)metaLevelAlgorithm).MutationProbability.Value);
     1003        sb1.AppendFormat("Meta.Seed          : {0}\n", ((GeneticAlgorithm)metaLevelAlgorithm).Seed.Value);
    9491004        sb1.AppendFormat("Base.MaxGenerations: {0}\n", baseAlgorithmMaxGenerations);
     1005
    9501006        sb1.AppendLine("Problems:");
    9511007        foreach (var prob in ((MetaOptimizationProblem)metaLevelAlgorithm.Problem).Problems) {
     
    9881044                var orderedRuns = rc.OrderBy(x => x.Results["AverageQualityNormalized"]);
    9891045
    990                 TableBuilder tb = new TableBuilder("QNorm", "Qualities"/*, "PoSi"*/ /*,"MutRa"*/ /*,"Eli", "SelOp",*/ /*"MutOp"*//*, "NrSelSubScopes"*/);
     1046                //TableBuilder tb = new TableBuilder("QNorm", "Qualities"/*, "PoSi"*/ /*,"MutRa"*/ /*,"Eli", "SelOp",*/ /*"MutOp"*//*, "NrSelSubScopes"*/);
     1047                //foreach (IRun run in orderedRuns) {
     1048                //  //string selector;
     1049                //  //if (run.Parameters["Selector"] is TournamentSelector) {
     1050                //  //  selector = string.Format("{0} ({1})", run.Parameters["Selector"].ToString(), ((TournamentSelector)run.Parameters["Selector"]).GroupSizeParameter.Value.ToString());
     1051                //  //} else {
     1052                //  //  selector = string.Format("{0}", run.Parameters["Selector"].ToString());
     1053                //  //}
     1054
     1055                //  tb.AppendRow(
     1056                //    ((DoubleValue)run.Results["AverageQualityNormalized"]).Value.ToString("#0.0000")
     1057                //    ,((DoubleArray)run.Results["RunsAverageQualities"]).ToString()
     1058                //    //,((IntValue)run.Parameters["PopulationSize"]).Value.ToString()
     1059                //    //,((DoubleValue)run.Parameters["MutationProbability"]).Value.ToString("0.0000")
     1060                //    //,((IntValue)run.Parameters["Elites"]).Value.ToString()
     1061                //    //,Shorten(selector, 20)
     1062                //    //,Shorten(run.Parameters.ContainsKey("Mutator") ? run.Parameters["Mutator"].ToString() : "null", 40)
     1063                //    //,((ISelector)run.Parameters["Selector"]).NumberOfSelectedSubScopesParameter.Value.ToString()
     1064                //    );
     1065                //}
     1066                //sb.AppendLine(tb.ToString());
     1067
     1068                var tb = new TableBuilder("QNorm", "Qualities", "StdDevs", "Evaluations", "Parameters");
    9911069                foreach (IRun run in orderedRuns) {
    992                   //string selector;
    993                   //if (run.Parameters["Selector"] is TournamentSelector) {
    994                   //  selector = string.Format("{0} ({1})", run.Parameters["Selector"].ToString(), ((TournamentSelector)run.Parameters["Selector"]).GroupSizeParameter.Value.ToString());
    995                   //} else {
    996                   //  selector = string.Format("{0}", run.Parameters["Selector"].ToString());
    997                   //}
    998 
    9991070                  tb.AppendRow(
    10001071                    ((DoubleValue)run.Results["AverageQualityNormalized"]).Value.ToString("#0.0000")
    1001                     ,((DoubleArray)run.Results["RunsAverageQualities"]).ToString()
    1002                     //,((IntValue)run.Parameters["PopulationSize"]).Value.ToString()
    1003                     //,((DoubleValue)run.Parameters["MutationProbability"]).Value.ToString("0.0000")
    1004                     //,((IntValue)run.Parameters["Elites"]).Value.ToString()
    1005                     //,Shorten(selector, 20)
    1006                     //,Shorten(run.Parameters.ContainsKey("Mutator") ? run.Parameters["Mutator"].ToString() : "null", 40)
    1007                     //,((ISelector)run.Parameters["Selector"]).NumberOfSelectedSubScopesParameter.Value.ToString()
     1072                    , ((DoubleArray)run.Results["RunsAverageQualities"]).ToString()
     1073                    , ((DoubleArray)run.Results["RunsQualityStandardDeviations"]).ToString()
     1074                    , ((DoubleArray)run.Results["RunsAverageEvaluatedSolutions"]).ToString()
     1075                    , run.Name
    10081076                    );
    10091077                }
Note: See TracChangeset for help on using the changeset viewer.