Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
11/23/18 15:19:39 (5 years ago)
Author:
chaider
Message:

#2966: Added Interval class and Interpreter class.

File:
1 copied

Legend:

Unmodified
Added
Removed
  • branches/2966_interval_calculation/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Interpreter/Intervalnterpreter.cs

    r16313 r16323  
    1414  [StorableClass]
    1515  [Item("SymbolicDataAnalysisIntervalArithmeticInterpreter", "Interpreter for interval arithmetic within symbolic regression.")]
    16   public class SymbolicDataAnalysisIntervalArithmeticInterpreter : ParameterizedNamedItem{
     16  public class IntervalInterpreter : ParameterizedNamedItem{
    1717    private const string EvaluatedSolutionsParameterName = "EvaluatedSolutions";
    1818    public IFixedValueParameter<IntValue> EvaluatedSolutionsParameter {
     
    2727    public void ClearState() { }
    2828
    29     protected SymbolicDataAnalysisIntervalArithmeticInterpreter(bool deserializing) : base(deserializing) { }
    30 
    31     protected SymbolicDataAnalysisIntervalArithmeticInterpreter(SymbolicDataAnalysisIntervalArithmeticInterpreter original,
     29    protected IntervalInterpreter(bool deserializing) : base(deserializing) { }
     30
     31    protected IntervalInterpreter(IntervalInterpreter original,
    3232        Cloner cloner)
    3333        : base(original, cloner) { }
    3434
    35     public SymbolicDataAnalysisIntervalArithmeticInterpreter()
     35    public IntervalInterpreter()
    3636        : base("SymbolicDataAnalysisIntervalArithmeticInterpreter", "Interpreter for interval arithmetic within symbolic regression.") { }
    3737
    3838    public override IDeepCloneable Clone(Cloner cloner) {
    39       return new SymbolicDataAnalysisIntervalArithmeticInterpreter(this, cloner);
     39      return new IntervalInterpreter(this, cloner);
    4040    }
    4141
     
    7979    }
    8080
    81     //private static InterpreterState PrepareInterpreterState(ISymbolicExpressionTree tree, IDataset dataset, IEnumerable<int> rows, Dictionary<string, Interval> customIntervals = null) {
    82     //  Instruction[] code = SymbolicExpressionTreeCompiler.Compile(tree, OpCodes.MapSymbolToOpCode);
    83     //  int necessaryArgStackSize = 0;
    84     //  foreach (Instruction instr in code) {
    85     //    if (instr.opCode == OpCodes.Variable) {
    86     //      var variableTreeNode = (VariableTreeNode)instr.dynamicNode;
    87     //      IList<double> values = new List<double>();
    88 
    89     //      if (customIntervals != null && customIntervals.ContainsKey(variableTreeNode.VariableName)) {
    90     //        instr.data = customIntervals[variableTreeNode.VariableName];
    91     //      } else {
    92     //        foreach (var rowEnum in rows) {
    93     //          values.Add(dataset.GetReadOnlyDoubleValues(variableTreeNode.VariableName)[rowEnum]);
    94     //        }
    95     //        instr.data = new Interval(values.Min(), values.Max());
    96     //      }
    97     //      //instr.data = dataset.GetReadOnlyDoubleValues(variableTreeNode.VariableName);
    98     //    } else if (instr.opCode == OpCodes.FactorVariable) {
    99     //      var factorTreeNode = instr.dynamicNode as FactorVariableTreeNode;
    100     //      instr.data = dataset.GetReadOnlyStringValues(factorTreeNode.VariableName);
    101     //    } else if (instr.opCode == OpCodes.BinaryFactorVariable) {
    102     //      var factorTreeNode = instr.dynamicNode as BinaryFactorVariableTreeNode;
    103     //      instr.data = dataset.GetReadOnlyStringValues(factorTreeNode.VariableName);
    104     //    } else if (instr.opCode == OpCodes.LagVariable) {
    105     //      var laggedVariableTreeNode = (LaggedVariableTreeNode)instr.dynamicNode;
    106     //      instr.data = dataset.GetReadOnlyDoubleValues(laggedVariableTreeNode.VariableName);
    107     //    } else if (instr.opCode == OpCodes.VariableCondition) {
    108     //      var variableConditionTreeNode = (VariableConditionTreeNode)instr.dynamicNode;
    109     //      instr.data = dataset.GetReadOnlyDoubleValues(variableConditionTreeNode.VariableName);
    110     //    } else if (instr.opCode == OpCodes.Call) {
    111     //      necessaryArgStackSize += instr.nArguments + 1;
    112     //    }
    113     //  }
    114     //  return new InterpreterState(code, necessaryArgStackSize);
    115     //}
    116 
    11781    private Interval Evaluate(InterpreterState state, Dictionary<ISymbolicExpressionTreeNode, Interval> intervals) {
    11882      Instruction currentInstr = state.NextInstruction();
     
    186150            return s;
    187151          }
     152        case OpCodes.Square: {
     153            var s = Interval.Square(Evaluate(state, intervals));
     154            intervals.Add(currentInstr.dynamicNode, s);
     155            return s;
     156          }
    188157        case OpCodes.Root: {
    189158            var s = Evaluate(state, intervals);
     
    191160              s = Interval.Root(s, Evaluate(state, intervals));
    192161            }
     162            intervals.Add(currentInstr.dynamicNode, s);
     163            return s;
     164          }
     165        case OpCodes.SquareRoot: {
     166            var s = Interval.SquareRoot(Evaluate(state, intervals));
    193167            intervals.Add(currentInstr.dynamicNode, s);
    194168            return s;
     
    213187      EvaluatedSolutions = 0;
    214188    }
    215 
    216     //public InterpreterState GetInstructions(ISymbolicExpressionTree tree, IDataset dataset, IEnumerable<int> rows, Dictionary<string, Interval> customIntervals = null) {
    217     //  var state = PrepareInterpreterState(tree, dataset, rows, customIntervals);
    218     //  var x = Evaluate(dataset, state);
    219     //  state.Reset();
    220 
    221     //  return state;
    222     //}
    223 
    224     // public Interval GetSymbolicExressionTreeInterval(tree,variableIntervals)
    225     //public Interval GetSymbolicExressionTreeInterval(tree,Dataset,intervals = null)
    226189
    227190    public Interval GetSymbolicExressionTreeIntervals(ISymbolicExpressionTree tree, IEnumerable<int> rows, out Dictionary<ISymbolicExpressionTreeNode, Interval> intervals) {
Note: See TracChangeset for help on using the changeset viewer.