Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
12/22/13 13:12:22 (10 years ago)
Author:
gkronber
Message:

#2109 implemented a grammar especially for GE (the grammar is not configured correctly when used in a classic symbolic regression/classification problem).
To use this grammar in a classical symbolic expression problem, first set the grammar in a GEProblem and load the problem instance (this creates the necessary variable symbols).
After this the configured grammar can be dragged onto the grammar parameter of the classical problem.

Location:
branches/GrammaticalEvolution
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • branches/GrammaticalEvolution

    • Property svn:ignore set to
      _ReSharper.HeuristicLab.Problems.GrammaticalEvolution
      *.suo
  • branches/GrammaticalEvolution/HeuristicLab.Problems.GrammaticalEvolution/Symbolic/GESymbolicDataAnalysisProblem.cs

    r10226 r10268  
    8484      get { return (IValueParameter<T>)Parameters[ProblemDataParameterName]; }
    8585    }
    86     public IValueParameter<ISymbolicDataAnalysisGrammar> SymbolicExpressionTreeGrammarParameter {
    87       get { return (IValueParameter<ISymbolicDataAnalysisGrammar>)Parameters[SymbolicExpressionTreeGrammarParameterName]; }
     86    public IValueParameter<GESymbolicExpressionGrammar> SymbolicExpressionTreeGrammarParameter {
     87      get { return (IValueParameter<GESymbolicExpressionGrammar>)Parameters[SymbolicExpressionTreeGrammarParameterName]; }
    8888    }
    8989    public IValueParameter<ISymbolicDataAnalysisExpressionTreeInterpreter> SymbolicExpressionTreeInterpreterParameter {
     
    134134    }
    135135
    136     public ISymbolicDataAnalysisGrammar SymbolicExpressionTreeGrammar {
     136    public GESymbolicExpressionGrammar SymbolicExpressionTreeGrammar {
    137137      get { return SymbolicExpressionTreeGrammarParameter.Value; }
    138138      set { SymbolicExpressionTreeGrammarParameter.Value = value; }
     
    174174    [StorableHook(HookType.AfterDeserialization)]
    175175    private void AfterDeserialization() {
    176       if (!Parameters.ContainsKey(ApplyLinearScalingParameterName)) {
    177         Parameters.Add(new FixedValueParameter<BoolValue>(ApplyLinearScalingParameterName, ApplyLinearScalingParameterDescription, new BoolValue(false)));
    178         ApplyLinearScalingParameter.Hidden = true;
    179 
    180         //it is assumed that for all symbolic regression algorithms linear scaling was set to true
    181         //there is no possibility to determine the previous value of the parameter as it was stored in the evaluator
    182         if (GetType().Name.Contains("SymbolicRegression"))
    183           ApplyLinearScaling.Value = true;
    184       }
    185 
    186176      RegisterEventHandlers();
    187177    }
     
    194184      : base(evaluator, solutionCreator) {
    195185      Parameters.Add(new ValueParameter<T>(ProblemDataParameterName, ProblemDataParameterDescription, problemData));
    196       Parameters.Add(new ValueParameter<ISymbolicDataAnalysisGrammar>(SymbolicExpressionTreeGrammarParameterName, SymbolicExpressionTreeGrammarParameterDescription));
     186      Parameters.Add(new ValueParameter<GESymbolicExpressionGrammar>(SymbolicExpressionTreeGrammarParameterName, SymbolicExpressionTreeGrammarParameterDescription));
    197187      Parameters.Add(new ValueParameter<ISymbolicDataAnalysisExpressionTreeInterpreter>(SymbolicExpressionTreeInterpreterParameterName, SymoblicExpressionTreeInterpreterParameterDescription));
    198188      //Parameters.Add(new FixedValueParameter<IntValue>(MaximumSymbolicExpressionTreeDepthParameterName, MaximumSymbolicExpressionTreeDepthParameterDescription));
     
    213203      ApplyLinearScalingParameter.Hidden = true;
    214204
    215       SymbolicExpressionTreeGrammar = new TypeCoherentExpressionGrammar();
     205      SymbolicExpressionTreeGrammar = new GESymbolicExpressionGrammar(problemData.AllowedInputVariables, problemData.AllowedInputVariables.Count() * 3);
    216206      SymbolicExpressionTreeInterpreter = new SymbolicDataAnalysisExpressionTreeLinearInterpreter();
    217207
     
    225215    }
    226216
     217    private void DeregisterGrammarHandler() {
     218      SymbolicExpressionTreeGrammarParameter.ValueChanged -= SymbolicExpressionTreeGrammarParameter_ValueChanged;
     219    }
     220    private void RegisterGrammarHandler() {
     221      SymbolicExpressionTreeGrammarParameter.ValueChanged += SymbolicExpressionTreeGrammarParameter_ValueChanged;
     222    }
     223
    227224    protected virtual void UpdateGrammar() {
    228       //SymbolicExpressionTreeGrammar.MaximumFunctionArguments = MaximumFunctionArguments.Value;
    229       //SymbolicExpressionTreeGrammar.MaximumFunctionDefinitions = MaximumFunctionDefinitions.Value;
    230       foreach (var varSymbol in SymbolicExpressionTreeGrammar.Symbols.OfType<HeuristicLab.Problems.DataAnalysis.Symbolic.Variable>()) {
    231         if (!varSymbol.Fixed) {
    232           varSymbol.AllVariableNames = ProblemData.InputVariables.Select(x => x.Value);
    233           varSymbol.VariableNames = ProblemData.AllowedInputVariables;
    234         }
    235       }
    236       foreach (var varSymbol in SymbolicExpressionTreeGrammar.Symbols.OfType<HeuristicLab.Problems.DataAnalysis.Symbolic.VariableCondition>()) {
    237         if (!varSymbol.Fixed) {
    238           varSymbol.AllVariableNames = ProblemData.InputVariables.Select(x => x.Value);
    239           varSymbol.VariableNames = ProblemData.AllowedInputVariables;
    240         }
    241       }
     225      DeregisterGrammarHandler();
     226      // create a new grammar instance with the correct allowed input variables
     227      SymbolicExpressionTreeGrammarParameter.Value =
     228        new GESymbolicExpressionGrammar(ProblemData.AllowedInputVariables, ProblemData.AllowedInputVariables.Count() * 3);
     229      RegisterGrammarHandler();
    242230    }
    243231
     
    257245      ProblemDataParameter.Value.Changed += (object sender, EventArgs e) => OnProblemDataChanged();
    258246
    259       SymbolicExpressionTreeGrammarParameter.ValueChanged += new EventHandler(SymbolicExpressionTreeGrammarParameter_ValueChanged);
     247      RegisterGrammarHandler();
    260248
    261249      //MaximumFunctionArguments.ValueChanged += new EventHandler(ArchitectureParameterValue_ValueChanged);
     
    272260
    273261    private void SymbolicExpressionTreeGrammarParameter_ValueChanged(object sender, EventArgs e) {
    274       UpdateGrammar();
    275     }
    276 
    277     private void ArchitectureParameterValue_ValueChanged(object sender, EventArgs e) {
    278262      UpdateGrammar();
    279263    }
Note: See TracChangeset for help on using the changeset viewer.