public IEnumerable <KeyValuePair <DateTime, Tuple <double, double>[]> > BatchRun1D(IEnumerable <KeyValuePair <DateTime, Point> > meas) { ParticleFilterSharp1D FilterSharp = new ParticleFilterSharp1D(); FilterSharp.Particles = ParticleFactory.BuildSwarm(N, new int[] { min, max }).ToList(); DateTime dt = meas.First().Key; foreach (var m in meas) { TimeSpan ticks = (m.Key - dt); // move based on last measurement FilterSharp.Predict(EffectiveCountMinRatio, ticks); var prd = new KeyValuePair <DateTime, Tuple <double, double>[]>( m.Key, FilterSharp.Particles.Select(__ => Tuple.Create(__.Y, __.Weight)).ToArray()); // incorporate measurement if (m.Value != default(Point)) { FilterSharp.Update(m.Value); } dt = m.Key; yield return(prd); } ; }
public IEnumerable <KeyValuePair <DateTime, Tuple <double, double>[]> > BatchRun(IEnumerable <KeyValuePair <DateTime, double> > meas) { ParticleFilterSharp1D FilterSharp = new ParticleFilterSharp1D(); FilterSharp.Particles = ParticleFactory.BuildSwarm(N, new int[] { min, max }).ToList(); DateTime dt = meas.First().Key; return(meas.Select(_ => { TimeSpan ticks = (_.Key - dt); // move based on last measurement FilterSharp.Predict(EffectiveCountMinRatio, ticks); var prd = new KeyValuePair <DateTime, Tuple <double, double>[]>( dt, FilterSharp.Particles.Select(__ => Tuple.Create(__.Y, __.Weight)).ToArray()); // incorporate measurement FilterSharp.Update(new Point(0, _.Value)); dt = _.Key; return prd; })); }
public IObservable <KeyValuePair <DateTime, Tuple <double, double>[]> > Run(IObservable <KeyValuePair <DateTime, double?> > meas) { ParticleFilterSharp1D FilterSharp = new ParticleFilterSharp1D(); FilterSharp.Particles = ParticleFactory.BuildSwarm(N, new int[] { min, max }).ToList(); return(meas.IncrementalTimeOffsets().Select(_ => { // move based on last measurement FilterSharp.Predict(EffectiveCountMinRatio, _.Key.Item2); var prd = new KeyValuePair <DateTime, Tuple <double, double>[]>( _.Key.Item1, FilterSharp.Particles.Select(__ => Tuple.Create(__.Y, __.Weight)).ToArray()); // incorporate measurement if (_.Value != null) { FilterSharp.Update(new Point(0, (double)_.Value)); } return prd; })); }
public IEnumerable <KeyValuePair <DateTime, Tuple <Normal, Normal> > > BatchRun(List <Tuple <DateTime, Point> > meas, Point initialPoint) { ParticleFilterSharp2D FilterSharp = new ParticleFilterSharp2D(); IContinuousDistribution xDistribution = null; IContinuousDistribution yDistribution = null; IContinuousDistribution oDistribution = null; IContinuousDistribution vDistribution = null; if (initialPoint == null) { xDistribution = new ContinuousUniform(-10, 10); yDistribution = new ContinuousUniform(-10, 10); oDistribution = new ContinuousUniform(0, 2 * Math.PI); vDistribution = new ContinuousUniform(0.000001, 0.000001); } FilterSharp.Particles = ParticleFactory.BuildSwarm(N, xDistribution, yDistribution, vDistribution, oDistribution).ToList(); DateTime dt = meas[0].Item1.AddTicks(-(long)meas.Select(_ => (double)_.Item1.Ticks).ToArray().SelectDifferences().Average()); for (int i = 0; i < meas.Count(); i++) { long ticks = (meas[i].Item1 - dt).Ticks; // move based on last measurement FilterSharp.Predict(EffectiveCountMinRatio); var est = ParticleHelper.Estimate(FilterSharp.Particles); yield return(new KeyValuePair <DateTime, Tuple <Normal, Normal> >(dt, est)); // predictions.Add(new KeyValuePair<DateTime, List<Point>>(dt, particles.Select(_=>(Point)(_)).ToList())); // incorporate measurements FilterSharp.Update(meas[i].Item2); dt = meas[i].Item1; } }