- Timestamp:
- 10/11/12 17:48:27 (12 years ago)
- Location:
- trunk/sources/HeuristicLab.Problems.DataAnalysis.Symbolic
- Files:
-
- 2 deleted
- 12 edited
- 2 copied
Legend:
- Unmodified
- Added
- Removed
-
trunk/sources/HeuristicLab.Problems.DataAnalysis.Symbolic
- Property svn:mergeinfo changed
-
trunk/sources/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Analyzers/SymbolicDataAnalysisSingleObjectiveTrainingBestSolutionAnalyzer.cs
r7259 r8798 85 85 86 86 var results = ResultCollection; 87 if ( TrainingBestSolutionQuality == null ||88 IsBetter(bestQuality, TrainingBestSolutionQuality.Value, Maximization.Value)) {87 if (bestTree != null && (TrainingBestSolutionQuality == null || 88 IsBetter(bestQuality, TrainingBestSolutionQuality.Value, Maximization.Value))) { 89 89 TrainingBestSolution = CreateSolution(bestTree, bestQuality); 90 90 TrainingBestSolutionQuality = new DoubleValue(bestQuality); -
trunk/sources/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Evaluators/SymbolicDataAnalysisEvaluator.cs
r8664 r8798 45 45 private const string RelativeNumberOfEvaluatedSamplesParameterName = "RelativeNumberOfEvaluatedSamples"; 46 46 private const string ApplyLinearScalingParameterName = "ApplyLinearScaling"; 47 private const string ValidRowIndicatorParameterName = "ValidRowIndicator"; 47 48 48 49 public override bool CanChangeName { get { return false; } } … … 74 75 get { return (ILookupParameter<BoolValue>)Parameters[ApplyLinearScalingParameterName]; } 75 76 } 77 public IValueLookupParameter<StringValue> ValidRowIndicatorParameter { 78 get { return (IValueLookupParameter<StringValue>)Parameters[ValidRowIndicatorParameterName]; } 79 } 76 80 #endregion 77 81 … … 92 96 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.")); 93 97 Parameters.Add(new LookupParameter<BoolValue>(ApplyLinearScalingParameterName, "Flag that indicates if the individual should be linearly scaled before evaluating.")); 98 Parameters.Add(new ValueLookupParameter<StringValue>(ValidRowIndicatorParameterName, "An indicator variable in the data set that specifies which rows should be evaluated (those for which the indicator <> 0) (optional).")); 94 99 } 95 100 … … 100 105 if (!Parameters.ContainsKey(ApplyLinearScalingParameterName)) 101 106 Parameters.Add(new LookupParameter<BoolValue>(ApplyLinearScalingParameterName, "Flag that indicates if the individual should be linearly scaled before evaluating.")); 107 if (!Parameters.ContainsKey(ValidRowIndicatorParameterName)) 108 Parameters.Add(new ValueLookupParameter<StringValue>(ValidRowIndicatorParameterName, "An indicator variable in the data set that specifies which rows should be evaluated (those for which the indicator <> 0) (optional).")); 102 109 } 103 110 … … 112 119 int testPartitionStart = ProblemDataParameter.ActualValue.TestPartition.Start; 113 120 int testPartitionEnd = ProblemDataParameter.ActualValue.TestPartition.End; 114 115 121 if (samplesEnd < samplesStart) throw new ArgumentException("Start value is larger than end value."); 116 122 … … 124 130 } 125 131 126 return rows.Where(i => i < testPartitionStart || testPartitionEnd <= i); 132 rows = rows.Where(i => i < testPartitionStart || testPartitionEnd <= i); 133 if (ValidRowIndicatorParameter.ActualValue != null) { 134 string indicatorVar = ValidRowIndicatorParameter.ActualValue.Value; 135 var problemData = ProblemDataParameter.ActualValue; 136 var indicatorRow = problemData.Dataset.GetReadOnlyDoubleValues(indicatorVar); 137 rows = rows.Where(r => !indicatorRow[r].IsAlmost(0.0)); 138 } 139 return rows; 127 140 } 128 141 -
trunk/sources/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Formatters/SymbolicDataAnalysisExpressionLatexFormatter.cs
r7708 r8798 33 33 [StorableClass] 34 34 public sealed class SymbolicDataAnalysisExpressionLatexFormatter : NamedItem, ISymbolicExpressionTreeStringFormatter { 35 private List<double> constants; 35 private readonly List<double> constants; 36 private int targetCount; 36 37 private int currentLag; 37 38 … … 98 99 } else if (node.Symbol is Division) { 99 100 if (node.SubtreeCount == 1) { 100 strBuilder.Append(@" \cfrac{1 }{");101 strBuilder.Append(@" \cfrac{1"); 101 102 } else { 102 103 strBuilder.Append(@" \cfrac{ "); … … 196 197 strBuilder.Append(invokeNode.Symbol.FunctionName + @" \left( "); 197 198 } else if (node.Symbol is StartSymbol) { 198 strBuilder.Append(" Result& = ");199 strBuilder.Append("target_" + (targetCount++) + "(t) & = "); 199 200 } else if (node.Symbol is Argument) { 200 201 var argSym = node.Symbol as Argument; … … 301 302 strBuilder.Append(" , "); 302 303 } else if (node.Symbol is StartSymbol) { 303 strBuilder.Append(@"\\" + Environment.NewLine + " & "); 304 strBuilder.Append(@"\\" + Environment.NewLine); 305 strBuilder.Append("target_" + (targetCount++) + "(t) & = "); 304 306 } else if (node.Symbol is Power) { 305 307 strBuilder.Append(@"\right) ^ { \operatorname{round} \left("); -
trunk/sources/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Grammars/FullFunctionalExpressionGrammar.cs
r7707 r8798 116 116 var laggedVariable = new LaggedVariable(); 117 117 laggedVariable.InitialFrequency = 0.0; 118 var autoregressiveVariable = new AutoregressiveTargetVariable(); 119 autoregressiveVariable.InitialFrequency = 0.0; 120 autoregressiveVariable.Enabled = false; 118 121 119 122 var allSymbols = new List<Symbol>() { add, sub, mul, div, mean, sin, cos, tan, log, square, pow, sqrt, root, exp, 120 123 airyA, airyB, bessel, cosineIntegral, dawson, erf, expIntegralEi, fresnelCosineIntegral, fresnelSineIntegral, gamma, hypCosineIntegral, hypSineIntegral, norm, psi, sineIntegral, 121 @if, gt, lt, and, or, not, timeLag, integral, derivative, constant, variableSymbol, laggedVariable, variableCondition };124 @if, gt, lt, and, or, not, timeLag, integral, derivative, constant, variableSymbol, laggedVariable,autoregressiveVariable, variableCondition }; 122 125 var unaryFunctionSymbols = new List<Symbol>() { square, sqrt, sin, cos, tan, log, exp, not, timeLag, integral, derivative, 123 126 airyA, airyB, bessel, cosineIntegral, dawson, erf, expIntegralEi, fresnelCosineIntegral, fresnelSineIntegral, gamma, hypCosineIntegral, hypSineIntegral, norm, psi, sineIntegral … … 126 129 var binaryFunctionSymbols = new List<Symbol>() { pow, root, gt, lt, variableCondition }; 127 130 var ternarySymbols = new List<Symbol>() { add, sub, mul, div, mean, and, or }; 128 var terminalSymbols = new List<Symbol>() { variableSymbol, constant, laggedVariable };131 var terminalSymbols = new List<Symbol>() { variableSymbol, constant, laggedVariable, autoregressiveVariable }; 129 132 130 133 foreach (var symb in allSymbols) -
trunk/sources/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Grammars/TypeCoherentExpressionGrammar.cs
r7696 r8798 104 104 var variableSymbol = new Variable(); 105 105 var laggedVariable = new LaggedVariable(); 106 var autoregressiveVariable = new AutoregressiveTargetVariable(); 106 107 #endregion 107 108 … … 122 123 var conditionalSymbols = new GroupSymbol(ConditionalSymbolsName, new List<ISymbol> { conditionSymbols, comparisonSymbols, booleanOperationSymbols }); 123 124 124 var timeSeriesSymbols = new GroupSymbol(TimeSeriesSymbolsName, new List<ISymbol> { timeLag, integral, derivative, laggedVariable });125 var timeSeriesSymbols = new GroupSymbol(TimeSeriesSymbolsName, new List<ISymbol> { timeLag, integral, derivative, laggedVariable, autoregressiveVariable }); 125 126 #endregion 126 127 … … 152 153 SetSubtreeCount(derivative, 1, 1); 153 154 SetSubtreeCount(laggedVariable, 0, 0); 155 SetSubtreeCount(autoregressiveVariable, 0, 0); 154 156 #endregion 155 157 … … 225 227 Symbols.First(s => s.Name == TimeSeriesSymbolsName).Enabled = false; 226 228 } 229 230 public void ConfigureAsDefaultTimeSeriesPrognosisGrammar() { 231 Symbols.First(s => s is Average).Enabled = false; 232 Symbols.First(s => s.Name == TrigonometricFunctionsName).Enabled = false; 233 Symbols.First(s => s.Name == PowerFunctionsName).Enabled = false; 234 Symbols.First(s => s.Name == ConditionalSymbolsName).Enabled = false; 235 Symbols.First(s => s.Name == SpecialFunctionsName).Enabled = false; 236 237 Symbols.First(s => s.Name == TimeSeriesSymbolsName).Enabled = true; 238 Symbols.First(s => s is Derivative).Enabled = false; 239 Symbols.First(s => s is Integral).Enabled = false; 240 Symbols.First(s => s is TimeLag).Enabled = false; 241 } 227 242 } 228 243 } -
trunk/sources/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/HeuristicLab.Problems.DataAnalysis.Symbolic-3.4.csproj
r8793 r8798 141 141 <Compile Include="Crossovers\SymbolicDataAnalysisExpressionSemanticSimilarityCrossover.cs" /> 142 142 <Compile Include="Interfaces\ISymbolicDataAnalysisExpressionCrossover.cs" /> 143 <Compile Include="Interpreter\InterpreterState.cs" /> 144 <Compile Include="Interpreter\OpCodes.cs" /> 145 <Compile Include="Interpreter\SymbolicDataAnalysisExpressionTreeILEmittingInterpreter.cs" /> 146 <Compile Include="Interpreter\SymbolicDataAnalysisExpressionTreeInterpreter.cs" /> 143 147 <Compile Include="Plugin.cs" /> 144 <Compile Include="SymbolicDataAnalysisExpressionTreeILEmittingInterpreter.cs" />145 148 <Compile Include="Formatters\SymbolicDataAnalysisExpressionLatexFormatter.cs" /> 146 149 <Compile Include="Formatters\SymbolicDataAnalysisExpressionMATLABFormatter.cs" /> … … 160 163 <Compile Include="Interfaces\ISymbolicDataAnalysisAnalyzer.cs" /> 161 164 <Compile Include="SymbolicDataAnalysisSingleObjectiveProblem.cs" /> 162 <Compile Include="SymbolicDataAnalysisExpressionTreeInterpreter.cs" />163 165 <Compile Include="SymbolicDataAnalysisExpressionTreeSimplifier.cs" /> 164 166 <Compile Include="SymbolicDataAnalysisProblem.cs" /> 165 167 <Compile Include="Symbols\Addition.cs" /> 166 168 <Compile Include="Symbols\And.cs" /> 169 <Compile Include="Symbols\AutoregressiveVariable.cs" /> 167 170 <Compile Include="Symbols\Average.cs" /> 168 171 <Compile Include="Symbols\Constant.cs" /> -
trunk/sources/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Interpreter/SymbolicDataAnalysisExpressionTreeILEmittingInterpreter.cs
r8436 r8798 565 565 case OpCodes.Variable: { 566 566 VariableTreeNode varNode = (VariableTreeNode)currentInstr.dynamicNode; 567 il.Emit(System.Reflection.Emit.OpCodes.Ldarg_1); // load columns array 568 il.Emit(System.Reflection.Emit.OpCodes.Ldc_I4, (int)currentInstr.iArg0); 569 // load correct column of the current variable 570 il.Emit(System.Reflection.Emit.OpCodes.Ldelem_Ref); 571 il.Emit(System.Reflection.Emit.OpCodes.Ldarg_0); // rowIndex 567 572 if (!state.InLaggedContext) { 568 il.Emit(System.Reflection.Emit.OpCodes.Ldarg_1); // load columns array569 il.Emit(System.Reflection.Emit.OpCodes.Ldc_I4, (int)currentInstr.iArg0);570 // load correct column of the current variable571 il.Emit(System.Reflection.Emit.OpCodes.Ldelem_Ref);572 il.Emit(System.Reflection.Emit.OpCodes.Ldarg_0); // rowIndex573 573 il.Emit(System.Reflection.Emit.OpCodes.Call, listGetValue); 574 574 il.Emit(System.Reflection.Emit.OpCodes.Ldc_R8, varNode.Weight); // load weight … … 577 577 var nanResult = il.DefineLabel(); 578 578 var normalResult = il.DefineLabel(); 579 var cachedValue = il.DefineLabel();580 var multiplyValue = il.DefineLabel();581 il.Emit(System.Reflection.Emit.OpCodes.Ldarg_0); // rowIndex582 579 il.Emit(System.Reflection.Emit.OpCodes.Dup); 583 580 il.Emit(System.Reflection.Emit.OpCodes.Ldc_I4_0); … … 586 583 il.Emit(System.Reflection.Emit.OpCodes.Ldc_I4, ds.Rows); 587 584 il.Emit(System.Reflection.Emit.OpCodes.Bge, nanResult); 588 il.Emit(System.Reflection.Emit.OpCodes.Ldarg_3);589 il.Emit(System.Reflection.Emit.OpCodes.Bge, cachedValue);590 il.Emit(System.Reflection.Emit.OpCodes.Ldarg_1); // load columns array591 il.Emit(System.Reflection.Emit.OpCodes.Ldc_I4, (int)currentInstr.iArg0);592 il.Emit(System.Reflection.Emit.OpCodes.Ldelem_Ref);593 il.Emit(System.Reflection.Emit.OpCodes.Ldarg_0); // rowIndex594 585 il.Emit(System.Reflection.Emit.OpCodes.Call, listGetValue); 595 il.Emit(System.Reflection.Emit.OpCodes.Br, multiplyValue);596 il.MarkLabel(cachedValue);597 il.Emit(System.Reflection.Emit.OpCodes.Ldarg_2); // load cached values array598 il.Emit(System.Reflection.Emit.OpCodes.Ldc_I4, (int)currentInstr.iArg0);599 il.Emit(System.Reflection.Emit.OpCodes.Ldelem_Ref);600 il.Emit(System.Reflection.Emit.OpCodes.Ldarg_0); // rowIndex601 il.Emit(System.Reflection.Emit.OpCodes.Ldarg_3); // startRow602 il.Emit(System.Reflection.Emit.OpCodes.Sub); // startRow603 il.Emit(System.Reflection.Emit.OpCodes.Call, listGetValue);604 il.MarkLabel(multiplyValue);605 586 il.Emit(System.Reflection.Emit.OpCodes.Ldc_R8, varNode.Weight); // load weight 606 587 il.Emit(System.Reflection.Emit.OpCodes.Mul); … … 608 589 il.MarkLabel(nanResult); 609 590 il.Emit(System.Reflection.Emit.OpCodes.Pop); // rowIndex 591 il.Emit(System.Reflection.Emit.OpCodes.Pop); // column reference 610 592 il.Emit(System.Reflection.Emit.OpCodes.Ldc_R8, double.NaN); 611 593 il.MarkLabel(normalResult); … … 616 598 var nanResult = il.DefineLabel(); 617 599 var normalResult = il.DefineLabel(); 618 var cachedValue = il.DefineLabel();619 var multiplyValue = il.DefineLabel();620 600 LaggedVariableTreeNode varNode = (LaggedVariableTreeNode)currentInstr.dynamicNode; 601 il.Emit(System.Reflection.Emit.OpCodes.Ldarg_1); // load columns array 602 il.Emit(System.Reflection.Emit.OpCodes.Ldc_I4, (int)currentInstr.iArg0); 603 // load correct column of the current variable 604 il.Emit(System.Reflection.Emit.OpCodes.Ldelem_Ref); 621 605 il.Emit(System.Reflection.Emit.OpCodes.Ldc_I4, varNode.Lag); // lag 622 606 il.Emit(System.Reflection.Emit.OpCodes.Ldarg_0); // rowIndex … … 628 612 il.Emit(System.Reflection.Emit.OpCodes.Ldc_I4, ds.Rows); 629 613 il.Emit(System.Reflection.Emit.OpCodes.Bge, nanResult); 630 il.Emit(System.Reflection.Emit.OpCodes.Ldarg_3); // startindex631 il.Emit(System.Reflection.Emit.OpCodes.Bge, cachedValue);632 // normal value633 il.Emit(System.Reflection.Emit.OpCodes.Ldarg_1); // load columns array634 il.Emit(System.Reflection.Emit.OpCodes.Ldc_I4, (int)currentInstr.iArg0); // load correct column of the current variable635 il.Emit(System.Reflection.Emit.OpCodes.Ldelem_Ref);636 il.Emit(System.Reflection.Emit.OpCodes.Ldc_I4, varNode.Lag); // lag637 il.Emit(System.Reflection.Emit.OpCodes.Ldarg_0); // rowIndex638 il.Emit(System.Reflection.Emit.OpCodes.Add); // actualRowIndex = rowIndex + sampleOffset639 614 il.Emit(System.Reflection.Emit.OpCodes.Call, listGetValue); 640 il.Emit(System.Reflection.Emit.OpCodes.Br, multiplyValue);641 il.MarkLabel(cachedValue);642 // cached value643 il.Emit(System.Reflection.Emit.OpCodes.Ldarg_2); // load cached values644 il.Emit(System.Reflection.Emit.OpCodes.Ldc_I4, (int)currentInstr.iArg0); // load correct column of the current variable645 il.Emit(System.Reflection.Emit.OpCodes.Ldelem_Ref);646 il.Emit(System.Reflection.Emit.OpCodes.Ldc_I4, varNode.Lag); // lag647 il.Emit(System.Reflection.Emit.OpCodes.Ldarg_0); // rowIndex648 il.Emit(System.Reflection.Emit.OpCodes.Add); // actualRowIndex = rowIndex + sampleOffset649 il.Emit(System.Reflection.Emit.OpCodes.Ldarg_3); // startRow650 il.Emit(System.Reflection.Emit.OpCodes.Sub); // startRow651 il.Emit(System.Reflection.Emit.OpCodes.Call, listGetValue);652 653 il.MarkLabel(multiplyValue);654 615 il.Emit(System.Reflection.Emit.OpCodes.Ldc_R8, varNode.Weight); // load weight 655 616 il.Emit(System.Reflection.Emit.OpCodes.Mul); 656 617 il.Emit(System.Reflection.Emit.OpCodes.Br, normalResult); 657 618 il.MarkLabel(nanResult); 658 il.Emit(System.Reflection.Emit.OpCodes.Pop); // pop the row index 619 il.Emit(System.Reflection.Emit.OpCodes.Pop); // sample index 620 il.Emit(System.Reflection.Emit.OpCodes.Pop); // column reference 659 621 il.Emit(System.Reflection.Emit.OpCodes.Ldc_R8, double.NaN); 660 622 il.MarkLabel(normalResult); … … 769 731 return alglib.besseli0(x); 770 732 } 771 772 733 } 773 734 } -
trunk/sources/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/SymbolicDataAnalysisExpressionTreeSimplifier.cs
r7696 r8798 52 52 private GreaterThan gtSymbol = new GreaterThan(); 53 53 private LessThan ltSymbol = new LessThan(); 54 private Integral integralSymbol = new Integral(); 55 private LaggedVariable laggedVariableSymbol = new LaggedVariable(); 56 private TimeLag timeLagSymbol = new TimeLag(); 54 57 55 58 public ISymbolicExpressionTree Simplify(ISymbolicExpressionTree originalTree) { … … 182 185 private bool IsConstant(ISymbolicExpressionTreeNode node) { 183 186 return node.Symbol is Constant; 187 } 188 189 // dynamic 190 private bool IsTimeLag(ISymbolicExpressionTreeNode node) { 191 return node.Symbol is TimeLag; 192 } 193 private bool IsIntegral(ISymbolicExpressionTreeNode node) { 194 return node.Symbol is Integral; 184 195 } 185 196 … … 234 245 } else if (IsNot(original)) { 235 246 return SimplifyNot(original); 247 } else if (IsTimeLag(original)) { 248 return SimplifyTimeLag(original); 249 } else if (IsIntegral(original)) { 250 return SimplifyIntegral(original); 236 251 } else { 237 252 return SimplifyAny(original); … … 376 391 return MakePower(GetSimplifiedTree(original.GetSubtree(0)), GetSimplifiedTree(original.GetSubtree(1))); 377 392 } 393 private ISymbolicExpressionTreeNode SimplifyTimeLag(ISymbolicExpressionTreeNode original) { 394 var laggedTreeNode = original as ILaggedTreeNode; 395 var simplifiedSubtree = GetSimplifiedTree(original.GetSubtree(0)); 396 if (!ContainsVariableCondition(simplifiedSubtree)) { 397 return AddLagToDynamicNodes(simplifiedSubtree, laggedTreeNode.Lag); 398 } else { 399 return MakeTimeLag(simplifiedSubtree, laggedTreeNode.Lag); 400 } 401 } 402 private ISymbolicExpressionTreeNode SimplifyIntegral(ISymbolicExpressionTreeNode original) { 403 var laggedTreeNode = original as ILaggedTreeNode; 404 var simplifiedSubtree = GetSimplifiedTree(original.GetSubtree(0)); 405 if (IsConstant(simplifiedSubtree)) { 406 return GetSimplifiedTree(MakeProduct(simplifiedSubtree, MakeConstant(-laggedTreeNode.Lag))); 407 } else { 408 return MakeIntegral(simplifiedSubtree, laggedTreeNode.Lag); 409 } 410 } 411 378 412 #endregion 379 413 380 414 #region low level tree restructuring 415 private ISymbolicExpressionTreeNode MakeTimeLag(ISymbolicExpressionTreeNode subtree, int lag) { 416 if (lag == 0) return subtree; 417 if (IsConstant(subtree)) return subtree; 418 var lagNode = (LaggedTreeNode)timeLagSymbol.CreateTreeNode(); 419 lagNode.Lag = lag; 420 lagNode.AddSubtree(subtree); 421 return lagNode; 422 } 423 424 private ISymbolicExpressionTreeNode MakeIntegral(ISymbolicExpressionTreeNode subtree, int lag) { 425 if (lag == 0) return subtree; 426 else if (lag == -1 || lag == 1) { 427 return MakeSum(subtree, AddLagToDynamicNodes((ISymbolicExpressionTreeNode)subtree.Clone(), lag)); 428 } else { 429 var node = (LaggedTreeNode)integralSymbol.CreateTreeNode(); 430 node.Lag = lag; 431 node.AddSubtree(subtree); 432 return node; 433 } 434 } 435 381 436 private ISymbolicExpressionTreeNode MakeNot(ISymbolicExpressionTreeNode t) { 382 437 if (IsConstant(t)) { … … 847 902 848 903 #region helper functions 904 private bool ContainsVariableCondition(ISymbolicExpressionTreeNode node) { 905 if (node.Symbol is VariableCondition) return true; 906 foreach (var subtree in node.Subtrees) 907 if (ContainsVariableCondition(subtree)) return true; 908 return false; 909 } 910 911 private ISymbolicExpressionTreeNode AddLagToDynamicNodes(ISymbolicExpressionTreeNode node, int lag) { 912 var laggedTreeNode = node as ILaggedTreeNode; 913 var variableNode = node as VariableTreeNode; 914 var variableConditionNode = node as VariableConditionTreeNode; 915 if (laggedTreeNode != null) 916 laggedTreeNode.Lag += lag; 917 else if (variableNode != null) { 918 var laggedVariableNode = (LaggedVariableTreeNode)laggedVariableSymbol.CreateTreeNode(); 919 laggedVariableNode.Lag = lag; 920 laggedVariableNode.VariableName = variableNode.VariableName; 921 return laggedVariableNode; 922 } else if (variableConditionNode != null) { 923 throw new NotSupportedException("Removal of time lags around variable condition symbols is not allowed."); 924 } 925 var subtrees = new List<ISymbolicExpressionTreeNode>(node.Subtrees); 926 while (node.SubtreeCount > 0) node.RemoveSubtree(0); 927 foreach (var subtree in subtrees) { 928 node.AddSubtree(AddLagToDynamicNodes(subtree, lag)); 929 } 930 return node; 931 } 849 932 850 933 private bool AreSameVariable(ISymbolicExpressionTreeNode a, ISymbolicExpressionTreeNode b) { -
trunk/sources/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Symbols/AutoregressiveVariable.cs
r8789 r8798 25 25 namespace HeuristicLab.Problems.DataAnalysis.Symbolic { 26 26 [StorableClass] 27 [Item(" LaggedVariable", "Represents a variable value with a time offset.")]27 [Item("AutoregressiveTargetVariable", "Represents a variable value with a time offset.")] 28 28 public sealed class AutoregressiveTargetVariable : LaggedVariable { 29 29 [StorableConstructor] -
trunk/sources/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Symbols/LaggedVariable.cs
r7259 r8798 27 27 [StorableClass] 28 28 [Item("LaggedVariable", "Represents a variable value with a time offset.")] 29 public sealedclass LaggedVariable : Variable {29 public class LaggedVariable : Variable { 30 30 [Storable] 31 31 private int minLag; … … 41 41 } 42 42 [StorableConstructor] 43 pr ivateLaggedVariable(bool deserializing) : base(deserializing) { }44 pr ivateLaggedVariable(LaggedVariable original, Cloner cloner)43 protected LaggedVariable(bool deserializing) : base(deserializing) { } 44 protected LaggedVariable(LaggedVariable original, Cloner cloner) 45 45 : base(original, cloner) { 46 46 minLag = original.minLag; 47 47 maxLag = original.maxLag; 48 48 } 49 public LaggedVariable() 50 : base("LaggedVariable", "Represents a variable value with a time offset.") { 51 minLag = -1; maxLag = -1; 49 public LaggedVariable() : this("LaggedVariable", "Represents a variable value with a time offset.") { } 50 protected LaggedVariable(string name, string description) 51 : base(name, description) { 52 MinLag = -1; 53 MaxLag = -1; 52 54 } 53 55 -
trunk/sources/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Symbols/LaggedVariableTreeNode.cs
r7259 r8798 37 37 } 38 38 39 public override bool HasLocalParameters { 40 get { return true; } 41 } 42 39 43 [StorableConstructor] 40 44 private LaggedVariableTreeNode(bool deserializing) : base(deserializing) { } … … 43 47 lag = original.lag; 44 48 } 45 private LaggedVariableTreeNode() { }46 49 47 50 public LaggedVariableTreeNode(LaggedVariable variableSymbol) : base(variableSymbol) { } 48 51 49 public override bool HasLocalParameters {50 get {51 return true;52 }53 }54 52 55 53 public override void ResetLocalParameters(IRandom random) { -
trunk/sources/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Symbols/Variable.cs
r7259 r8798 101 101 } 102 102 103 public override bool Enabled { 104 get { 105 if (variableNames.Count == 0) return false; 106 return base.Enabled; 107 } 108 set { 109 if (variableNames.Count == 0) base.Enabled = false; 110 else base.Enabled = value; 111 } 112 } 113 103 114 private const int minimumArity = 0; 104 115 private const int maximumArity = 0;
Note: See TracChangeset
for help on using the changeset viewer.