Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
02/23/12 16:05:57 (12 years ago)
Author:
mkommend
Message:

#1682: Integrated new gp crossovers into the trunk and corrected the parameter wiring.

Location:
trunk/sources/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Crossovers
Files:
2 copied

Legend:

Unmodified
Added
Removed
  • trunk/sources/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Crossovers/MultiSymbolicDataAnalysisExpressionCrossover.cs

    r7503 r7506  
    3333using HeuristicLab.PluginInfrastructure;
    3434
    35 namespace HeuristicLab.Problems.DataAnalysis.Symbolic.Crossovers {
     35namespace HeuristicLab.Problems.DataAnalysis.Symbolic {
    3636  [Item("MultiSymbolicDataAnalysisExpressionCrossover", "Randomly selects and applies one of its crossovers every time it is called.")]
    3737  public class MultiSymbolicDataAnalysisExpressionCrossover<T> : StochasticMultiBranch<ISymbolicExpressionTreeCrossover>,
    38     ISymbolicDataAnalysisExpressionCrossover<T>,
    39     ISymbolicExpressionTreeSizeConstraintOperator,
    40     ISymbolicExpressionTreeGrammarBasedOperator where T : class, IDataAnalysisProblemData {
     38    ISymbolicDataAnalysisExpressionCrossover<T> where T : class, IDataAnalysisProblemData {
     39    private const string ParentsParameterName = "Parents";
     40    private const string ChildParameterName = "Child";
    4141    private const string MaximumSymbolicExpressionTreeLengthParameterName = "MaximumSymbolicExpressionTreeLength";
    4242    private const string MaximumSymbolicExpressionTreeDepthParameterName = "MaximumSymbolicExpressionTreeDepth";
    43     private const string SymbolicExpressionTreeGrammarParameterName = "SymbolicExpressionTreeGrammar";
    44     private const string ClonedSymbolicExpressionTreeGrammarParameterName = "ClonedSymbolicExpressionTreeGrammar";
     43    private const string SymbolicDataAnalysisTreeInterpreterParameterName = "SymbolicExpressionTreeInterpreter";
    4544    private const string EvaluatorParameterName = "Evaluator";
    4645    private const string SymbolicDataAnalysisEvaluationPartitionParameterName = "EvaluationPartition";
    47     private const string ParentsParameterName = "Parents";
    48     private const string ChildParameterName = "Child";
     46    private const string RelativeNumberOfEvaluatedSamplesParameterName = "RelativeNumberOfEvaluatedSamples";
     47    private const string ProblemDataParameterName = "ProblemData";
     48
    4949
    5050    public override bool CanChangeName {
     
    5656
    5757    #region parameter properties
     58    public ILookupParameter<ISymbolicDataAnalysisExpressionTreeInterpreter> SymbolicDataAnalysisTreeInterpreterParameter {
     59      get { return (ILookupParameter<ISymbolicDataAnalysisExpressionTreeInterpreter>)Parameters[SymbolicDataAnalysisTreeInterpreterParameterName]; }
     60    }
    5861    public ILookupParameter<ItemArray<ISymbolicExpressionTree>> ParentsParameter {
    5962      get { return (ScopeTreeLookupParameter<ISymbolicExpressionTree>)Parameters[ParentsParameterName]; }
     
    6871      get { return (IValueLookupParameter<IntValue>)Parameters[MaximumSymbolicExpressionTreeDepthParameterName]; }
    6972    }
    70     public IValueLookupParameter<ISymbolicExpressionGrammar> SymbolicExpressionTreeGrammarParameter {
    71       get { return (IValueLookupParameter<ISymbolicExpressionGrammar>)Parameters[SymbolicExpressionTreeGrammarParameterName]; }
    72     }
    73     public ILookupParameter<ISymbolicExpressionGrammar> ClonedSymbolicExpressionTreeGrammarParameter {
    74       get { return (ILookupParameter<ISymbolicExpressionGrammar>)Parameters[ClonedSymbolicExpressionTreeGrammarParameterName]; }
    75     }
    7673    public ILookupParameter<ISymbolicDataAnalysisSingleObjectiveEvaluator<T>> EvaluatorParameter {
    7774      get { return (ILookupParameter<ISymbolicDataAnalysisSingleObjectiveEvaluator<T>>)Parameters[EvaluatorParameterName]; }
    7875    }
    79     public IValueLookupParameter<IntRange> SymbolicDataAnalysisEvaluationPartitionParameter {
     76    public IValueLookupParameter<IntRange> EvaluationPartitionParameter {
    8077      get { return (IValueLookupParameter<IntRange>)Parameters[SymbolicDataAnalysisEvaluationPartitionParameterName]; }
     78    }
     79    public IValueLookupParameter<PercentValue> RelativeNumberOfEvaluatedSamplesParameter {
     80      get { return (IValueLookupParameter<PercentValue>)Parameters[RelativeNumberOfEvaluatedSamplesParameterName]; }
     81    }
     82    public IValueLookupParameter<T> ProblemDataParameter {
     83      get { return (IValueLookupParameter<T>)Parameters[ProblemDataParameterName]; }
    8184    }
    8285    #endregion
     
    8891    public MultiSymbolicDataAnalysisExpressionCrossover()
    8992      : base() {
     93      Parameters.Add(new ValueLookupParameter<PercentValue>(RelativeNumberOfEvaluatedSamplesParameterName, "The relative number of samples of the dataset partition, which should be randomly chosen for evaluation between the start and end index."));
     94      Parameters.Add(new ValueLookupParameter<T>(ProblemDataParameterName, "The problem data on which the symbolic data analysis solution should be evaluated."));
     95      Parameters.Add(new LookupParameter<ISymbolicDataAnalysisExpressionTreeInterpreter>(SymbolicDataAnalysisTreeInterpreterParameterName, "The interpreter that should be used to calculate the output values of the symbolic data analysis tree."));
    9096      Parameters.Add(new ValueLookupParameter<IntValue>(MaximumSymbolicExpressionTreeLengthParameterName, "The maximal length (number of nodes) of the symbolic expression tree."));
    9197      Parameters.Add(new ValueLookupParameter<IntValue>(MaximumSymbolicExpressionTreeDepthParameterName, "The maximal depth of the symbolic expression tree (a tree with one node has depth = 0)."));
    92       Parameters.Add(new ValueLookupParameter<ISymbolicExpressionGrammar>(SymbolicExpressionTreeGrammarParameterName, "The tree grammar that defines the correct syntax of symbolic expression trees that should be created."));
    93       Parameters.Add(new LookupParameter<ISymbolicExpressionGrammar>(ClonedSymbolicExpressionTreeGrammarParameterName, "An immutable clone of the concrete grammar that is actually used to create and manipulate trees."));
    9498      Parameters.Add(new LookupParameter<ISymbolicDataAnalysisSingleObjectiveEvaluator<T>>(EvaluatorParameterName, "The single objective solution evaluator"));
    9599      Parameters.Add(new ValueLookupParameter<IntRange>(SymbolicDataAnalysisEvaluationPartitionParameterName, "The start index of the dataset partition on which the symbolic data analysis solution should be evaluated."));
     
    97101      Parameters.Add(new LookupParameter<ISymbolicExpressionTree>(ChildParameterName, "The child symbolic expression tree resulting from the crossover."));
    98102
     103      EvaluatorParameter.Hidden = true;
     104      EvaluationPartitionParameter.Hidden = true;
     105      SymbolicDataAnalysisTreeInterpreterParameter.Hidden = true;
     106      ProblemDataParameter.Hidden = true;
     107      RelativeNumberOfEvaluatedSamplesParameter.Hidden = true;
     108
     109      InitializeOperators();
     110      Name = "MultiSymbolicDataAnalysisExpressionCrossover";
     111    }
     112
     113    private void InitializeOperators() {
    99114      var list = ApplicationManager.Manager.GetInstances<ISymbolicExpressionTreeCrossover>().ToList();
    100115      var dataAnalysisCrossovers = from type in ApplicationManager.Manager.GetTypes(typeof(ISymbolicDataAnalysisExpressionCrossover<T>))
     
    108123      Operators = checkedItemList;
    109124      Operators_ItemsAdded(this, new CollectionItemsChangedEventArgs<IndexedItem<ISymbolicExpressionTreeCrossover>>(Operators.CheckedItems));
    110       Name = "MultiSymbolicDataAnalysisExpressionCrossover";
    111     }
    112 
    113     public override IOperation Apply() {
    114       if (ClonedSymbolicExpressionTreeGrammarParameter.ActualValue == null) {
    115         SymbolicExpressionTreeGrammarParameter.ActualValue.ReadOnly = true;
    116         IScope globalScope = ExecutionContext.Scope;
    117         while (globalScope.Parent != null)
    118           globalScope = globalScope.Parent;
    119 
    120         globalScope.Variables.Add(new Core.Variable(ClonedSymbolicExpressionTreeGrammarParameterName, (ISymbolicExpressionGrammar)SymbolicExpressionTreeGrammarParameter.ActualValue.Clone()));
    121       }
    122       return base.Apply();
    123125    }
    124126
     
    150152
    151153    private void ParameterizeCrossovers() {
     154      foreach (ISymbolicExpressionTreeCrossover op in Operators) {
     155        op.ChildParameter.ActualName = ChildParameter.Name;
     156        op.ParentsParameter.ActualName = ParentsParameter.Name;
     157      }
    152158      foreach (IStochasticOperator op in Operators.OfType<IStochasticOperator>()) {
    153159        op.RandomParameter.ActualName = RandomParameter.Name;
     
    157163        op.MaximumSymbolicExpressionTreeLengthParameter.ActualName = MaximumSymbolicExpressionTreeLengthParameter.Name;
    158164      }
    159       foreach (ISymbolicExpressionTreeGrammarBasedOperator op in Operators.OfType<ISymbolicExpressionTreeGrammarBasedOperator>()) {
    160         op.SymbolicExpressionTreeGrammarParameter.ActualName = SymbolicExpressionTreeGrammarParameter.Name;
     165
     166      foreach (ISymbolicDataAnalysisInterpreterOperator op in Operators.OfType<ISymbolicDataAnalysisInterpreterOperator>()) {
     167        op.SymbolicDataAnalysisTreeInterpreterParameter.ActualName = SymbolicDataAnalysisTreeInterpreterParameter.Name;
     168      }
     169      foreach (var op in Operators.OfType<ISymbolicDataAnalysisExpressionCrossover<T>>()) {
     170        op.ProblemDataParameter.ActualName = ProblemDataParameter.Name;
     171        op.EvaluationPartitionParameter.ActualName = EvaluationPartitionParameter.Name;
     172        op.RelativeNumberOfEvaluatedSamplesParameter.ActualName = RelativeNumberOfEvaluatedSamplesParameter.Name;
     173        op.EvaluatorParameter.ActualName = EvaluatorParameter.Name;
    161174      }
    162175    }
Note: See TracChangeset for help on using the changeset viewer.