Legend:
- Unmodified
- Added
- Removed
-
stable
- Property svn:mergeinfo changed
/trunk/sources merged: 12921,12936-12938,12940,12947,13055-13058,13163,13267,13269
- Property svn:mergeinfo changed
-
stable/HeuristicLab.Problems.GeneticProgramming/3.3/BasicSymbolicRegression/Problem.cs
r12937 r13280 39 39 40 40 #region parameter names 41 42 41 private const string ProblemDataParameterName = "ProblemData"; 43 44 42 #endregion 45 46 public event EventHandler ProblemDataChanged;47 43 48 44 #region Parameter Properties … … 52 48 get { return (IValueParameter<IRegressionProblemData>)Parameters[ProblemDataParameterName]; } 53 49 } 54 55 50 #endregion 56 51 57 52 #region Properties 58 59 53 public IRegressionProblemData ProblemData { 60 54 get { return ProblemDataParameter.Value; } … … 62 56 } 63 57 IDataAnalysisProblemData IDataAnalysisProblem.ProblemData { get { return ProblemData; } } 58 #endregion 64 59 65 66 #endregion 60 public event EventHandler ProblemDataChanged; 67 61 68 62 public override bool Maximization { 69 63 get { return true; } 70 64 } 65 66 #region item cloning and persistence 67 // persistence 68 [StorableConstructor] 69 private Problem(bool deserializing) : base(deserializing) { } 70 [StorableHook(HookType.AfterDeserialization)] 71 private void AfterDeserialization() { 72 RegisterEventHandlers(); 73 } 74 75 // cloning 76 private Problem(Problem original, Cloner cloner) 77 : base(original, cloner) { 78 RegisterEventHandlers(); 79 } 80 public override IDeepCloneable Clone(Cloner cloner) { return new Problem(this, cloner); } 81 #endregion 71 82 72 83 public Problem() … … 103 114 } 104 115 105 106 116 private IEnumerable<double> InterpretRec(ISymbolicExpressionTreeNode node, IDataset dataset, IEnumerable<int> rows) { 107 var eval = CreateEvalClosure(dataset, rows); 117 Func<ISymbolicExpressionTreeNode, ISymbolicExpressionTreeNode, Func<double, double, double>, IEnumerable<double>> binaryEval = 118 (left, right, f) => InterpretRec(left, dataset, rows).Zip(InterpretRec(right, dataset, rows), f); 108 119 109 120 switch (node.Symbol.Name) { 110 case "+": return eval(node.GetSubtree(0), node.GetSubtree(1), (x, y) => x + y);111 case "*": return eval(node.GetSubtree(0), node.GetSubtree(1), (x, y) => x * y);112 case "-": return eval(node.GetSubtree(0), node.GetSubtree(1), (x, y) => x - y);113 case "%": return eval(node.GetSubtree(0), node.GetSubtree(1), (x, y) => y.IsAlmost(0.0) ? 0.0 : x / y); // protected division121 case "+": return binaryEval(node.GetSubtree(0), node.GetSubtree(1), (x, y) => x + y); 122 case "*": return binaryEval(node.GetSubtree(0), node.GetSubtree(1), (x, y) => x * y); 123 case "-": return binaryEval(node.GetSubtree(0), node.GetSubtree(1), (x, y) => x - y); 124 case "%": return binaryEval(node.GetSubtree(0), node.GetSubtree(1), (x, y) => y.IsAlmost(0.0) ? 0.0 : x / y); // protected division 114 125 default: { 115 126 double erc; … … 124 135 } 125 136 126 private Func<ISymbolicExpressionTreeNode, ISymbolicExpressionTreeNode, Func<double, double, double>, IEnumerable<double>> CreateEvalClosure(IDataset dataset, IEnumerable<int> rows) {127 // capture dataset and rows in scope128 return (a, b, f) => {129 var leftResult = InterpretRec(a, dataset, rows);130 var rightResult = InterpretRec(b, dataset, rows);131 return leftResult.Zip(rightResult, f);132 };133 }134 135 #region item cloning and persistence136 // persistence137 [StorableConstructor]138 private Problem(bool deserializing) : base(deserializing) { }139 140 [StorableHook(HookType.AfterDeserialization)]141 private void AfterDeserialization() {142 RegisterEventHandlers();143 }144 145 // cloning146 private Problem(Problem original, Cloner cloner)147 : base(original, cloner) {148 RegisterEventHandlers();149 }150 public override IDeepCloneable Clone(Cloner cloner) {151 return new Problem(this, cloner);152 }153 #endregion154 137 155 138 #region events 156 157 139 private void RegisterEventHandlers() { 158 140 ProblemDataParameter.ValueChanged += new EventHandler(ProblemDataParameter_ValueChanged); … … 197 179 Encoding.Grammar = g; 198 180 } 199 200 181 #endregion 201 182
Note: See TracChangeset
for help on using the changeset viewer.