Changeset 13222 for branches/HeuristicLab.LinqExpressionTreeInterpreter/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Interpreter/SymbolicDataAnalysisExpressionTreeLinearInterpreter.cs
- Timestamp:
- 11/17/15 16:21:29 (8 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/HeuristicLab.LinqExpressionTreeInterpreter/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Interpreter/SymbolicDataAnalysisExpressionTreeLinearInterpreter.cs
r13141 r13222 35 35 public sealed class SymbolicDataAnalysisExpressionTreeLinearInterpreter : ParameterizedNamedItem, ISymbolicDataAnalysisExpressionTreeInterpreter { 36 36 private const string CheckExpressionsWithIntervalArithmeticParameterName = "CheckExpressionsWithIntervalArithmetic"; 37 private const string CheckExpressionsWithIntervalArithmeticParameterDescription = "Switch that determines if the interpreter checks the validity of expressions with interval arithmetic before evaluating the expression."; 37 38 private const string EvaluatedSolutionsParameterName = "EvaluatedSolutions"; 38 39 … … 84 85 public SymbolicDataAnalysisExpressionTreeLinearInterpreter() 85 86 : base("SymbolicDataAnalysisExpressionTreeLinearInterpreter", "Linear (non-recursive) interpreter for symbolic expression trees (does not support ADFs).") { 86 Parameters.Add(new FixedValueParameter<BoolValue>(CheckExpressionsWithIntervalArithmeticParameterName, 87 "Switch that determines if the interpreter checks the validity of expressions with interval arithmetic before evaluating the expression.", new BoolValue(false))); 87 Parameters.Add(new FixedValueParameter<BoolValue>(CheckExpressionsWithIntervalArithmeticParameterName, CheckExpressionsWithIntervalArithmeticParameterDescription, new BoolValue(false))); 88 88 Parameters.Add(new FixedValueParameter<IntValue>(EvaluatedSolutionsParameterName, "A counter for the total number of solutions the interpreter has evaluated", new IntValue(0))); 89 89 interpreter = new SymbolicDataAnalysisExpressionTreeInterpreter(); … … 92 92 public SymbolicDataAnalysisExpressionTreeLinearInterpreter(string name, string description) 93 93 : base(name, description) { 94 Parameters.Add(new FixedValueParameter<BoolValue>(CheckExpressionsWithIntervalArithmeticParameterName, 95 "Switch that determines if the interpreter checks the validity of expressions with interval arithmetic before evaluating the expression.", new BoolValue(false))); 94 Parameters.Add(new FixedValueParameter<BoolValue>(CheckExpressionsWithIntervalArithmeticParameterName, CheckExpressionsWithIntervalArithmeticParameterDescription, new BoolValue(false))); 96 95 Parameters.Add(new FixedValueParameter<IntValue>(EvaluatedSolutionsParameterName, "A counter for the total number of solutions the interpreter has evaluated", new IntValue(0))); 97 96 interpreter = new SymbolicDataAnalysisExpressionTreeInterpreter(); … … 100 99 [StorableHook(HookType.AfterDeserialization)] 101 100 private void AfterDeserialization() { 102 if (interpreter == null) interpreter = new SymbolicDataAnalysisExpressionTreeInterpreter(); 103 Parameters.Remove(EvaluatedSolutionsParameterName); 104 Parameters.Add(new FixedValueParameter<IntValue>(EvaluatedSolutionsParameterName, "A counter for the total number of solutions the interpreter has evaluated", new IntValue(0))); 105 106 Parameters.Remove(CheckExpressionsWithIntervalArithmeticParameterName); 107 Parameters.Add(new FixedValueParameter<BoolValue>(CheckExpressionsWithIntervalArithmeticParameterName, 108 "Switch that determines if the interpreter checks the validity of expressions with interval arithmetic before evaluating the expression.", new BoolValue(false))); 101 var evaluatedSolutions = new IntValue(0); 102 var checkExpressionsWithIntervalArithmetic = new BoolValue(false); 103 if (Parameters.ContainsKey(EvaluatedSolutionsParameterName)) { 104 var evaluatedSolutionsParameter = (IValueParameter<IntValue>)Parameters[EvaluatedSolutionsParameterName]; 105 evaluatedSolutions = evaluatedSolutionsParameter.Value; 106 Parameters.Remove(EvaluatedSolutionsParameterName); 107 } 108 Parameters.Add(new FixedValueParameter<IntValue>(EvaluatedSolutionsParameterName, "A counter for the total number of solutions the interpreter has evaluated", evaluatedSolutions)); 109 if (Parameters.ContainsKey(CheckExpressionsWithIntervalArithmeticParameterName)) { 110 var checkExpressionsWithIntervalArithmeticParameter = (IValueParameter<BoolValue>)Parameters[CheckExpressionsWithIntervalArithmeticParameterName]; 111 Parameters.Remove(CheckExpressionsWithIntervalArithmeticParameterName); 112 checkExpressionsWithIntervalArithmetic = checkExpressionsWithIntervalArithmeticParameter.Value; 113 } 114 Parameters.Add(new FixedValueParameter<BoolValue>(CheckExpressionsWithIntervalArithmeticParameterName, CheckExpressionsWithIntervalArithmeticParameterDescription, checkExpressionsWithIntervalArithmetic)); 109 115 } 110 116 … … 372 378 #region opcode switch 373 379 switch (instr.opCode) { 374 case OpCodes.Constant: 375 { 380 case OpCodes.Constant: { 376 381 var constTreeNode = (ConstantTreeNode)instr.dynamicNode; 377 382 instr.value = constTreeNode.Value; … … 379 384 } 380 385 break; 381 case OpCodes.Variable: 382 { 386 case OpCodes.Variable: { 383 387 var variableTreeNode = (VariableTreeNode)instr.dynamicNode; 384 388 instr.data = dataset.GetReadOnlyDoubleValues(variableTreeNode.VariableName); 385 389 } 386 390 break; 387 case OpCodes.LagVariable: 388 { 391 case OpCodes.LagVariable: { 389 392 var laggedVariableTreeNode = (LaggedVariableTreeNode)instr.dynamicNode; 390 393 instr.data = dataset.GetReadOnlyDoubleValues(laggedVariableTreeNode.VariableName); 391 394 } 392 395 break; 393 case OpCodes.VariableCondition: 394 { 396 case OpCodes.VariableCondition: { 395 397 var variableConditionTreeNode = (VariableConditionTreeNode)instr.dynamicNode; 396 398 instr.data = dataset.GetReadOnlyDoubleValues(variableConditionTreeNode.VariableName); … … 399 401 case OpCodes.TimeLag: 400 402 case OpCodes.Integral: 401 case OpCodes.Derivative: 402 { 403 case OpCodes.Derivative: { 403 404 var seq = GetPrefixSequence(code, i); 404 405 var interpreterState = new InterpreterState(seq, 0);
Note: See TracChangeset
for help on using the changeset viewer.