Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
03/07/19 17:00:39 (5 years ago)
Author:
gkronber
Message:

#2925: re-introduced partial support for latent variables

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/2925_AutoDiffForDynamicalModels/HeuristicLab.Problems.DynamicalSystemsModelling/3.3/Solution.cs

    r16653 r16660  
    8686    }
    8787
    88     public IEnumerable<double[]> Predict(IntRange episode, int forecastHorizon, out double snmse) {
     88    public IEnumerable<double[]> Predict(IntRange episode, int forecastHorizon) {
    8989      var forecastEpisode = new IntRange(episode.Start, episode.End + forecastHorizon);
    9090      //
     
    9292      // snmse = Problem.OptimizeForEpisodes(trees, problemData, targetVars, latentVariables, random, new[] { forecastEpisode }, 100, numericIntegrationSteps, odeSolver);
    9393
    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();
    9598
    9699      var optimizationData = new Problem.OptimizationData(trees, targetVars, inputVariables.ToArray(), problemData, null, new[] { forecastEpisode }, numericIntegrationSteps, latentVariables, odeSolver);
     
    99102      // var theta = Problem.ExtractParametersFromTrees(trees);
    100103
    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      }
    103119    }
    104120  }
Note: See TracChangeset for help on using the changeset viewer.