Changeset 16722 for branches/2988_ModelsOfModels2/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Interpreter/SymbolicDataAnalysisExpressionTreeBatchInterpreter.cs
- Timestamp:
- 03/28/19 11:22:24 (5 years ago)
- Location:
- branches/2988_ModelsOfModels2
- Files:
-
- 1 added
- 1 edited
- 1 copied
Legend:
- Unmodified
- Added
- Removed
-
branches/2988_ModelsOfModels2/HeuristicLab.Problems.DataAnalysis.Symbolic
- Property svn:mergeinfo changed
-
branches/2988_ModelsOfModels2/HeuristicLab.Problems.DataAnalysis.Symbolic/3.4/Interpreter/SymbolicDataAnalysisExpressionTreeBatchInterpreter.cs
r16565 r16722 51 51 } 52 52 } 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 } 54 59 private void Evaluate(BatchInstruction[] code, int[] rows, int rowIndex, int batchSize) { 55 60 for (int i = code.Length - 1; i >= 0; --i) { … … 61 66 case OpCodes.Variable: { 62 67 LoadData(instr, rows, rowIndex, batchSize); 68 break; 69 } 70 case OpCodes.TreeModel: { 71 SubTreeEvoluate(instr, rows, rowIndex, batchSize); 63 72 break; 64 73 } … … 159 168 break; 160 169 } 161 170 case OpCodes.Tanh: { 171 Tanh(instr.buf, code[c].buf); 172 break; 173 } 162 174 case OpCodes.Absolute: { 163 175 Absolute(instr.buf, code[c].buf); … … 201 213 } 202 214 203 var code = Compile(tree, dataset, OpCodes.MapSymbolToOpCode );215 var code = Compile(tree, dataset, OpCodes.MapSymbolToOpCode, rows); 204 216 var remainingRows = rows.Length % BATCHSIZE; 205 217 var roundedTotal = rows.Length - remainingRows; … … 233 245 } 234 246 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) { 236 248 var root = tree.Root.GetSubtree(0).GetSubtree(0); 237 249 var code = new BatchInstruction[root.GetLength()]; 238 250 if (root.SubtreeCount > ushort.MaxValue) throw new ArgumentException("Number of subtrees is too big (>65.535)"); 239 251 int c = 1, i = 0; 252 var allRows = Enumerable.Range(0, dataset.Rows).ToArray(); 240 253 foreach (var node in root.IterateNodesBreadth()) { 241 254 if (node.SubtreeCount > ushort.MaxValue) throw new ArgumentException("Number of subtrees is too big (>65.535)"); … … 258 271 for (int j = 0; j < BATCHSIZE; ++j) 259 272 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--; 260 276 } 261 277 c += node.SubtreeCount;
Note: See TracChangeset
for help on using the changeset viewer.