Changeset 16660 for branches/2925_AutoDiffForDynamicalModels/HeuristicLab.Problems.DynamicalSystemsModelling/3.3/Solution.cs
- Timestamp:
- 03/07/19 17:00:39 (5 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2925_AutoDiffForDynamicalModels/HeuristicLab.Problems.DynamicalSystemsModelling/3.3/Solution.cs
r16653 r16660 86 86 } 87 87 88 public IEnumerable<double[]> Predict(IntRange episode, int forecastHorizon , out double snmse) {88 public IEnumerable<double[]> Predict(IntRange episode, int forecastHorizon) { 89 89 var forecastEpisode = new IntRange(episode.Start, episode.End + forecastHorizon); 90 90 // … … 92 92 // snmse = Problem.OptimizeForEpisodes(trees, problemData, targetVars, latentVariables, random, new[] { forecastEpisode }, 100, numericIntegrationSteps, odeSolver); 93 93 94 var inputVariables = trees.SelectMany(t => t.IterateNodesPrefix().OfType<VariableTreeNode>().Select(n => n.VariableName)).Except(targetVars); 94 var inputVariables = trees.SelectMany(t => t.IterateNodesPrefix().OfType<VariableTreeNode>().Select(n => n.VariableName)) 95 .Except(targetVars) 96 .Except(latentVariables) 97 .Distinct(); 95 98 96 99 var optimizationData = new Problem.OptimizationData(trees, targetVars, inputVariables.ToArray(), problemData, null, new[] { forecastEpisode }, numericIntegrationSteps, latentVariables, odeSolver); … … 99 102 // var theta = Problem.ExtractParametersFromTrees(trees); 100 103 101 snmse = 0.0; // TODO 102 return Problem.Integrate(optimizationData).Select(p => p.Select(pi => pi.Item1).ToArray()).ToArray(); 104 105 var fi = new double[forecastEpisode.Size * targetVars.Length]; 106 var jac = new double[forecastEpisode.Size * targetVars.Length, optimizationData.nodeValueLookup.ParameterCount]; 107 var latentValues = new double[forecastEpisode.Size, LatentVariables.Length]; 108 Problem.Integrate(optimizationData, fi, jac, latentValues); 109 for (int i = 0; i < forecastEpisode.Size; i++) { 110 var res = new double[targetVars.Length + latentVariables.Length]; 111 for (int j = 0; j < targetVars.Length; j++) { 112 res[j] = fi[i * targetVars.Length + j]; 113 } 114 for (int j = 0; j < latentVariables.Length; j++) { 115 res[targetVars.Length + j] = latentValues[i, j]; 116 } 117 yield return res; 118 } 103 119 } 104 120 }
Note: See TracChangeset
for help on using the changeset viewer.