Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
03/07/11 14:23:26 (14 years ago)
Author:
mkommend
Message:

#1418: Added symbolic data analysis problems.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/DataAnalysis Refactoring/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/SymbolicDataAnalysisProblem.cs

    r5580 r5618  
    2222using System;
    2323using System.Drawing;
     24using System.Linq;
    2425using HeuristicLab.Common;
    2526using HeuristicLab.Common.Resources;
    2627using HeuristicLab.Core;
    2728using HeuristicLab.Data;
     29using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding;
    2830using HeuristicLab.Optimization;
    2931using HeuristicLab.Parameters;
    3032using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
     33using HeuristicLab.PluginInfrastructure;
     34
     35//TODO configure training start / end
     36//TODO configure analyzer validation
     37//TODO configure grammar with ADF usage
    3138
    3239namespace HeuristicLab.Problems.DataAnalysis.Symbolic {
     
    7178      get { return (IValueParameter<ISymbolicDataAnalysisTreeInterpreter>)Parameters[SymbolicExpressionTreeInterpreterParameterName]; }
    7279    }
    73     public IValueParameter<DoubleValue> LowerEstimationLimitParameter {
    74       get { return (IValueParameter<DoubleValue>)Parameters[LowerEstimationLimitParameterName]; }
    75     }
    76     public IValueParameter<DoubleValue> UpperEstimationLimitParameter {
    77       get { return (IValueParameter<DoubleValue>)Parameters[UpperEstimationLimitParameterName]; }
    78     }
    79     public IValueParameter<IntValue> MaximumSymbolicExpressionTreeDepthParameter {
    80       get { return (IValueParameter<IntValue>)Parameters[MaximumSymbolicExpressionTreeDepthParameterName]; }
    81     }
    82     public IValueParameter<IntValue> MaximumSymbolicExpressionTreeLengthParameter {
    83       get { return (IValueParameter<IntValue>)Parameters[MaximumSymbolicExpressionTreeLengthParameterName]; }
    84     }
    85     public IValueParameter<IntValue> MaximumFunctionDefinitionsParameter {
    86       get { return (IValueParameter<IntValue>)Parameters[MaximumFunctionDefinitionsParameterName]; }
    87     }
    88     public IValueParameter<IntValue> MaximumFunctionArgumentsParameter {
    89       get { return (IValueParameter<IntValue>)Parameters[MaximumFunctionArgumentsParameterName]; }
     80    public IFixedValueParameter<DoubleValue> LowerEstimationLimitParameter {
     81      get { return (IFixedValueParameter<DoubleValue>)Parameters[LowerEstimationLimitParameterName]; }
     82    }
     83    public IFixedValueParameter<DoubleValue> UpperEstimationLimitParameter {
     84      get { return (IFixedValueParameter<DoubleValue>)Parameters[UpperEstimationLimitParameterName]; }
     85    }
     86    public IFixedValueParameter<IntValue> MaximumSymbolicExpressionTreeDepthParameter {
     87      get { return (IFixedValueParameter<IntValue>)Parameters[MaximumSymbolicExpressionTreeDepthParameterName]; }
     88    }
     89    public IFixedValueParameter<IntValue> MaximumSymbolicExpressionTreeLengthParameter {
     90      get { return (IFixedValueParameter<IntValue>)Parameters[MaximumSymbolicExpressionTreeLengthParameterName]; }
     91    }
     92    public IFixedValueParameter<IntValue> MaximumFunctionDefinitionsParameter {
     93      get { return (IFixedValueParameter<IntValue>)Parameters[MaximumFunctionDefinitionsParameterName]; }
     94    }
     95    public IFixedValueParameter<IntValue> MaximumFunctionArgumentsParameter {
     96      get { return (IFixedValueParameter<IntValue>)Parameters[MaximumFunctionArgumentsParameterName]; }
    9097    }
    9198    #endregion
     
    100107    public T ProblemData {
    101108      get { return ProblemDataParameter.Value; }
     109      set { ProblemDataParameter.Value = value; }
    102110    }
    103111
    104112    public ISymbolicDataAnalysisGrammar SymbolicExpressionTreeGrammar {
    105113      get { return SymbolicExpressionTreeGrammarParameter.Value; }
    106       protected set { SymbolicExpressionTreeGrammarParameter.Value = value; }
     114      set { SymbolicExpressionTreeGrammarParameter.Value = value; }
    107115    }
    108116    public ISymbolicDataAnalysisTreeInterpreter SymbolicExpressionTreeInterpreter {
    109117      get { return SymbolicExpressionTreeInterpreterParameter.Value; }
    110       protected set { SymbolicExpressionTreeInterpreterParameter.Value = value; }
     118      set { SymbolicExpressionTreeInterpreterParameter.Value = value; }
    111119    }
    112120
     
    128136    }
    129137    public IntValue MaximumFunctionArguments {
    130       get { return MaximumFunctionArguments; }
     138      get { return MaximumFunctionArgumentsParameter.Value; }
    131139    }
    132140    #endregion
     
    134142    [StorableConstructor]
    135143    protected SymbolicDataAnalysisProblem(bool deserializing) : base(deserializing) { }
    136     protected SymbolicDataAnalysisProblem(SymbolicDataAnalysisProblem<T, U, V> original, Cloner cloner) : base(original, cloner) { }
    137 
    138     protected SymbolicDataAnalysisProblem()
    139       : base() {
    140       Parameters.Add(new ValueParameter<T>(ProblemDataParameterName, ProblemDataParameterDescription));
     144    [StorableHook(HookType.AfterDeserialization)]
     145    private void AfterDeserialization() {
     146      RegisterEventHandlers();
     147    }
     148    protected SymbolicDataAnalysisProblem(SymbolicDataAnalysisProblem<T, U, V> original, Cloner cloner)
     149      : base(original, cloner) {
     150      RegisterEventHandlers();
     151    }
     152
     153    protected SymbolicDataAnalysisProblem(T problemData, U evaluator, V solutionCreator)
     154      : base(evaluator, solutionCreator) {
     155      Parameters.Add(new ValueParameter<T>(ProblemDataParameterName, ProblemDataParameterDescription, problemData));
    141156      Parameters.Add(new ValueParameter<ISymbolicDataAnalysisGrammar>(SymbolicExpressionTreeGrammarParameterName, SymbolicExpressionTreeGrammarParameterDescription));
    142157      Parameters.Add(new ValueParameter<ISymbolicDataAnalysisTreeInterpreter>(SymbolicExpressionTreeInterpreterParameterName, SymoblicExpressionTreeInterpreterParameterDescription));
    143       Parameters.Add(new ValueParameter<DoubleValue>(LowerEstimationLimitParameterName, LowerEstimationLimitParameterDescription));
    144       Parameters.Add(new ValueParameter<DoubleValue>(UpperEstimationLimitParameterName, UpperEstimationLimitParameterDescription));
    145       Parameters.Add(new ValueParameter<IntValue>(MaximumSymbolicExpressionTreeDepthParameterName, MaximumSymbolicExpressionTreeDepthParameterDescription));
    146       Parameters.Add(new ValueParameter<IntValue>(MaximumSymbolicExpressionTreeLengthParameterName, MaximumSymbolicExpressionTreeLengthParameterDescription));
    147       Parameters.Add(new ValueParameter<IntValue>(MaximumFunctionDefinitionsParameterName, MaximumFunctionDefinitionsParameterDescription));
    148       Parameters.Add(new ValueParameter<IntValue>(MaximumFunctionArgumentsParameterName, MaximumFunctionArgumentsParameterDescription));
     158      Parameters.Add(new FixedValueParameter<DoubleValue>(LowerEstimationLimitParameterName, LowerEstimationLimitParameterDescription, new DoubleValue()));
     159      Parameters.Add(new FixedValueParameter<DoubleValue>(UpperEstimationLimitParameterName, UpperEstimationLimitParameterDescription, new DoubleValue()));
     160      Parameters.Add(new FixedValueParameter<IntValue>(MaximumSymbolicExpressionTreeDepthParameterName, MaximumSymbolicExpressionTreeDepthParameterDescription, new IntValue()));
     161      Parameters.Add(new FixedValueParameter<IntValue>(MaximumSymbolicExpressionTreeLengthParameterName, MaximumSymbolicExpressionTreeLengthParameterDescription, new IntValue()));
     162      Parameters.Add(new FixedValueParameter<IntValue>(MaximumFunctionDefinitionsParameterName, MaximumFunctionDefinitionsParameterDescription, new IntValue()));
     163      Parameters.Add(new FixedValueParameter<IntValue>(MaximumFunctionArgumentsParameterName, MaximumFunctionArgumentsParameterDescription, new IntValue()));
     164
     165      SymbolicExpressionTreeGrammar = new TypeCoherentExpressionGrammar();
     166      SymbolicExpressionTreeInterpreter = new SymbolicDataAnalysisExpressionTreeInterpreter();
     167
     168      UpdateGrammar();
     169      UpdateEstimationLimits();
     170      RegisterEventHandlers();
     171      InitializeOperators();
     172    }
     173
     174    protected abstract void UpdateEstimationLimits();
     175
     176    private void InitializeOperators() {
     177      Operators.AddRange(ApplicationManager.Manager.GetInstances<ISymbolicExpressionTreeOperator>());
     178      Operators.Add(new SymbolicExpressionSymbolFrequencyAnalyzer());
     179      Operators.Add(new MinAverageMaxSymbolicExpressionTreeLengthAnalyzer());
     180      ParameterizeOperators();
     181    }
     182
     183    private void ProblemDataParameter_ValueChanged(object sender, EventArgs e) {
     184      ProblemDataParameter.Value.Changed += (object s, EventArgs args) => OnProblemDataChanged();
     185
     186      OnProblemDataChanged();
     187    }
     188    private void RegisterEventHandlers() {
     189      ProblemDataParameter.ValueChanged += new EventHandler(ProblemDataParameter_ValueChanged);
     190      ProblemDataParameter.Value.Changed += (object sender, EventArgs e) => OnProblemDataChanged();
     191
     192      MaximumFunctionArguments.ValueChanged += new EventHandler(ArchitectureParameterValue_ValueChanged);
     193      MaximumFunctionDefinitions.ValueChanged += new EventHandler(ArchitectureParameterValue_ValueChanged);
     194      MaximumSymbolicExpressionTreeDepth.ValueChanged += new EventHandler(MaximumSymbolicExpressionTreeDepth_ValueChanged);
     195    }
     196
     197    private void ArchitectureParameterValue_ValueChanged(object sender, EventArgs e) {
     198      UpdateGrammar();
     199    }
     200    protected virtual void UpdateGrammar() {
     201      foreach (var varSymbol in SymbolicExpressionTreeGrammar.Symbols.OfType<HeuristicLab.Problems.DataAnalysis.Symbolic.Variable>()) {
     202        varSymbol.VariableNames = ProblemData.AllowedInputVariables;
     203      }
     204      foreach (var varSymbol in SymbolicExpressionTreeGrammar.Symbols.OfType<HeuristicLab.Problems.DataAnalysis.Symbolic.VariableCondition>()) {
     205        varSymbol.VariableNames = ProblemData.AllowedInputVariables;
     206      }
     207    }
     208
     209    private void MaximumSymbolicExpressionTreeDepth_ValueChanged(object sender, EventArgs e) {
     210      if (MaximumSymbolicExpressionTreeDepth != null && MaximumSymbolicExpressionTreeDepth.Value < 3)
     211        MaximumSymbolicExpressionTreeDepth.Value = 3;
     212    }
     213
     214    protected override void OnSolutionCreatorChanged() {
     215      base.OnSolutionCreatorChanged();
     216      SolutionCreator.SymbolicExpressionTreeParameter.ActualNameChanged += new EventHandler(SolutionCreator_SymbolicExpressionTreeParameter_ActualNameChanged);
     217      ParameterizeOperators();
     218    }
     219    private void SolutionCreator_SymbolicExpressionTreeParameter_ActualNameChanged(object sender, EventArgs e) {
     220      ParameterizeOperators();
     221    }
     222
     223    protected override void OnEvaluatorChanged() {
     224      base.OnEvaluatorChanged();
    149225    }
    150226
    151227    public event EventHandler ProblemDataChanged;
    152228    protected virtual void OnProblemDataChanged() {
     229      UpdateGrammar();
     230      UpdateEstimationLimits();
    153231      var handler = ProblemDataChanged;
    154232      if (handler != null) handler(this, EventArgs.Empty);
     233
     234      OnReset();
     235    }
     236
     237    private void ParameterizeOperators() {
     238      var operators = Parameters.OfType<IValueParameter>().Select(p => p.Value).OfType<IOperator>().Union(Operators);
     239
     240      foreach (var op in operators.OfType<ISymbolicExpressionTreeGrammarBasedOperator>()) {
     241        op.SymbolicExpressionTreeGrammarParameter.ActualName = SymbolicExpressionTreeGrammarParameter.Name;
     242      }
     243      foreach (var op in operators.OfType<ISymbolicExpressionTreeSizeConstraintOperator>()) {
     244        op.MaximumSymbolicExpressionTreeDepthParameter.ActualName = MaximumSymbolicExpressionTreeDepthParameter.Name;
     245        op.MaximumSymbolicExpressionTreeLengthParameter.ActualName = MaximumSymbolicExpressionTreeLengthParameter.Name;
     246      }
     247      foreach (var op in operators.OfType<ISymbolicExpressionTreeArchitectureAlteringOperator>()) {
     248        op.MaximumFunctionArgumentsParameter.ActualName = MaximumFunctionArgumentsParameter.Name;
     249        op.MaximumFunctionDefinitionsParameter.ActualName = MaximumFunctionDefinitionsParameter.Name;
     250      }
     251      foreach (var op in operators.OfType<ISymbolicDataAnalysisEvaluator<T>>()) {
     252        op.ProblemDataParameter.ActualName = ProblemDataParameter.Name;
     253        op.SymbolicExpressionTreeParameter.ActualName = SolutionCreator.SymbolicExpressionTreeParameter.ActualName;
     254        op.SamplesStartParameter.Value.Value = ProblemData.TrainingPartitionStart.Value;
     255        op.SamplesEndParameter.Value.Value = ProblemData.TrainingPartitionEnd.Value;
     256      }
     257      foreach (var op in operators.OfType<ISymbolicDataAnalysisBoundedEvaluator<T>>()) {
     258        op.LowerEstimationLimitParameter.ActualName = LowerEstimationLimitParameter.Name;
     259        op.UpperEstimationLimitParameter.ActualName = UpperEstimationLimitParameter.Name;
     260      }
     261      foreach (var op in operators.OfType<ISymbolicExpressionTreeCrossover>()) {
     262        op.ParentsParameter.ActualName = SolutionCreator.SymbolicExpressionTreeParameter.ActualName;
     263        op.ChildParameter.ActualName = SolutionCreator.SymbolicExpressionTreeParameter.ActualName;
     264      }
     265      foreach (var op in operators.OfType<ISymbolicExpressionTreeManipulator>()) {
     266        op.SymbolicExpressionTreeParameter.ActualName = SolutionCreator.SymbolicExpressionTreeParameter.ActualName;
     267      }
     268      foreach (var op in operators.OfType<ISymbolicExpressionTreeAnalyzer>()) {
     269        op.SymbolicExpressionTreeParameter.ActualName = SolutionCreator.SymbolicExpressionTreeParameter.ActualName;
     270      }
    155271    }
    156272  }
Note: See TracChangeset for help on using the changeset viewer.