Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
03/28/19 11:22:24 (5 years ago)
Author:
msemenki
Message:

#2988: Add first version of GP for Evolvment models of models.

Location:
branches/2988_ModelsOfModels2
Files:
1 added
1 edited
1 copied

Legend:

Unmodified
Added
Removed
  • branches/2988_ModelsOfModels2/HeuristicLab.Problems.DataAnalysis.Symbolic

  • branches/2988_ModelsOfModels2/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Interpreter/SymbolicDataAnalysisExpressionTreeBatchInterpreter.cs

    r16565 r16722  
    5151      }
    5252    }
    53 
     53    private void SubTreeEvoluate(BatchInstruction instr, int[] rows, int rowIndex, int batchSize) {
     54      for (int i = 0; i < batchSize; ++i) {
     55        var row = rows[rowIndex] + i;
     56        instr.buf[i] = instr.data[row];  // не забыть заполнить
     57      }
     58    }
    5459    private void Evaluate(BatchInstruction[] code, int[] rows, int rowIndex, int batchSize) {
    5560      for (int i = code.Length - 1; i >= 0; --i) {
     
    6166          case OpCodes.Variable: {
    6267              LoadData(instr, rows, rowIndex, batchSize);
     68              break;
     69            }
     70          case OpCodes.TreeModel: {
     71              SubTreeEvoluate(instr, rows, rowIndex, batchSize);
    6372              break;
    6473            }
     
    159168              break;
    160169            }
    161 
     170          case OpCodes.Tanh: {
     171              Tanh(instr.buf, code[c].buf);
     172              break;
     173            }
    162174          case OpCodes.Absolute: {
    163175              Absolute(instr.buf, code[c].buf);
     
    201213      }
    202214
    203       var code = Compile(tree, dataset, OpCodes.MapSymbolToOpCode);
     215      var code = Compile(tree, dataset, OpCodes.MapSymbolToOpCode, rows);
    204216      var remainingRows = rows.Length % BATCHSIZE;
    205217      var roundedTotal = rows.Length - remainingRows;
     
    233245    }
    234246
    235     private BatchInstruction[] Compile(ISymbolicExpressionTree tree, IDataset dataset, Func<ISymbolicExpressionTreeNode, byte> opCodeMapper) {
     247    private BatchInstruction[] Compile(ISymbolicExpressionTree tree, IDataset dataset, Func<ISymbolicExpressionTreeNode, byte> opCodeMapper, int[] rows) {
    236248      var root = tree.Root.GetSubtree(0).GetSubtree(0);
    237249      var code = new BatchInstruction[root.GetLength()];
    238250      if (root.SubtreeCount > ushort.MaxValue) throw new ArgumentException("Number of subtrees is too big (>65.535)");
    239251      int c = 1, i = 0;
     252      var allRows = Enumerable.Range(0, dataset.Rows).ToArray();
    240253      foreach (var node in root.IterateNodesBreadth()) {
    241254        if (node.SubtreeCount > ushort.MaxValue) throw new ArgumentException("Number of subtrees is too big (>65.535)");
     
    258271          for (int j = 0; j < BATCHSIZE; ++j)
    259272            code[i].buf[j] = code[i].value;
     273        } else if (node is TreeModelTreeNode subtree) {
     274          code[i].data = GetValues(subtree.Tree, dataset, allRows);
     275          EvaluatedSolutions--;
    260276        }
    261277        c += node.SubtreeCount;
Note: See TracChangeset for help on using the changeset viewer.