Free cookie consent management tool by TermsFeed Policy Generator

source: branches/3136_Structural_GP/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/StructureTemplate/SubFunction.cs @ 18182

Last change on this file since 18182 was 18182, checked in by dpiringe, 2 years ago

#3136

  • fixed missing/wrong event registration for SubFunction and StructuredSymbolicRegressionSingleObjectiveProblem
File size: 3.8 KB
Line 
1using System;
2using System.Collections.Generic;
3using System.Linq;
4using System.Text;
5using System.Threading.Tasks;
6using HeuristicLab.Core;
7using HEAL.Attic;
8using HeuristicLab.Common;
9using HeuristicLab.Encodings.SymbolicExpressionTreeEncoding;
10using HeuristicLab.Parameters;
11using HeuristicLab.Data;
12
13namespace HeuristicLab.Problems.DataAnalysis.Symbolic {
14  [StorableType("598B5DCB-95AC-465A-920B-E1E6DACFFA4B")]
15  public class SubFunction : ParameterizedNamedItem {
16    #region Constants
17    private const string GrammarParameterName = "Grammar";
18    private const string MaximumSymbolicExpressionTreeDepthParameterName = "MaximumSymbolicExpressionTreeDepth";
19    private const string MaximumSymbolicExpressionTreeLengthParameterName = "MaximumSymbolicExpressionTreeLength";
20    #endregion
21
22    #region Parameters
23    public IValueParameter<ISymbolicDataAnalysisGrammar> GrammarParameter => (IValueParameter<ISymbolicDataAnalysisGrammar>)Parameters[GrammarParameterName];
24    public IFixedValueParameter<IntValue> MaximumSymbolicExpressionTreeDepthParameter => (IFixedValueParameter<IntValue>)Parameters[MaximumSymbolicExpressionTreeDepthParameterName];
25    public IFixedValueParameter<IntValue> MaximumSymbolicExpressionTreeLengthParameter => (IFixedValueParameter<IntValue>)Parameters[MaximumSymbolicExpressionTreeLengthParameterName];
26    #endregion
27
28    #region Properties
29    public ISymbolicDataAnalysisGrammar Grammar {
30      get => GrammarParameter.Value;
31      set => GrammarParameter.Value = value;
32    }
33
34    public int MaximumSymbolicExpressionTreeDepth {
35      get => MaximumSymbolicExpressionTreeDepthParameter.Value.Value;
36      set => MaximumSymbolicExpressionTreeDepthParameter.Value.Value = value;
37    }
38
39    public int MaximumSymbolicExpressionTreeLength {
40      get => MaximumSymbolicExpressionTreeLengthParameter.Value.Value;
41      set => MaximumSymbolicExpressionTreeLengthParameter.Value.Value = value;
42    }
43
44    [Storable]
45    public IEnumerable<string> Arguments { get; set; }
46    #endregion
47
48    #region Events
49    public event EventHandler Changed;
50    #endregion
51
52    #region Constructors
53    public SubFunction() {
54      Parameters.Add(new ValueParameter<ISymbolicDataAnalysisGrammar>(GrammarParameterName, new ArithmeticExpressionGrammar()));
55      Parameters.Add(new FixedValueParameter<IntValue>(MaximumSymbolicExpressionTreeDepthParameterName, new IntValue(8)));
56      Parameters.Add(new FixedValueParameter<IntValue>(MaximumSymbolicExpressionTreeLengthParameterName, new IntValue(20)));
57      RegisterEventHandlers();
58    }
59
60    protected SubFunction(SubFunction original, Cloner cloner) : base(original, cloner) {
61      Arguments = original.Arguments;
62      RegisterEventHandlers();
63    }
64
65    [StorableConstructor]
66    protected SubFunction(StorableConstructorFlag _) : base(_) { }
67
68
69    [StorableHook(HookType.AfterDeserialization)]
70    private void AfterDeserialization() {
71      RegisterEventHandlers();
72    }
73    #endregion
74
75    #region Cloning
76    public override IDeepCloneable Clone(Cloner cloner) =>
77      new SubFunction(this, cloner);
78    #endregion
79
80    #region Event Handling
81    private void RegisterEventHandlers() {
82      GrammarParameter.ValueChanged += OnParameterValueChanged;
83      MaximumSymbolicExpressionTreeDepthParameter.Value.ValueChanged += OnParameterValueChanged;
84      MaximumSymbolicExpressionTreeLengthParameter.Value.ValueChanged += OnParameterValueChanged;
85    }
86
87    private void OnParameterValueChanged(object sender, EventArgs e) =>
88      Changed?.Invoke(this, EventArgs.Empty);
89    #endregion
90
91
92    public override string ToString() => $"{Name}({string.Join(",", Arguments)})";
93
94    public override int GetHashCode() => ToString().GetHashCode();
95
96    public override bool Equals(object obj) => (obj is SubFunction other) && other.ToString() == ToString();
97  }
98}
Note: See TracBrowser for help on using the repository browser.