Ejemplo n.º 1
0
        public void MeanOfManyObservations()
        {
            IUniform  valGen          = UniformStreams.DefaultStreams.GetUniform();
            IUniform  timeGen         = UniformStreams.DefaultStreams.GetUniform();
            double    weightedSum     = 0.0;
            double    sumOfWeights    = 0.0;
            TimeValue lastObservation = new TimeValue(0L, valGen.NextDouble() * 100.0);

            TimeWeightedMean twm = new TimeWeightedMean(new Simulation());

            twm.Observe(lastObservation.Value, lastObservation.Time);

            for (int i = 0; i < 1000; i++)
            {
                long      newTime        = lastObservation.Time + (long)(timeGen.NextDouble() * 10.0);
                TimeValue newObservation = new TimeValue(newTime, valGen.NextDouble() * 100.0);
                double    weight         = newObservation.Time - lastObservation.Time;
                weightedSum  += weight * lastObservation.Value;
                sumOfWeights += weight;

                twm.Observe(newObservation.Value, newObservation.Time);
                lastObservation = newObservation;
            }

            double mean = weightedSum / sumOfWeights;

            Assert.AreEqual(mean, twm.Value);
        }
Ejemplo n.º 2
0
        public void DefaultConstructor()
        {
            TimeWeightedMean twm = new TimeWeightedMean(new Simulation());

            Assert.AreEqual(0, twm.Observations);
            Assert.IsTrue(Double.IsNaN(twm.Value));

            TimeValue lastObservation = twm.LastObservation;

            Assert.IsFalse(lastObservation.IsValid);
        }
Ejemplo n.º 3
0
        public void MeanOfFewObservations()
        {
            TimeWeightedMean twm = new TimeWeightedMean(new Simulation());

            twm.Observe(3.0, 0L);
            twm.Observe(2.0, 4L);
            twm.Observe(6.0, 7L);
            twm.Observe(4.0, 8L);
            twm.Observe(2.0, 10L);
            Assert.AreEqual(3.2, twm.Value);
        }
Ejemplo n.º 4
0
        public void MeanOfZeroWeights()
        {
            double           d   = 123.0;
            TimeWeightedMean twm = new TimeWeightedMean(new Simulation());

            for (int i = 0; i < 1000; i++)
            {
                twm.Observe(d, 0L);
            }

            Assert.AreEqual(Double.NaN, twm.Value);
        }
Ejemplo n.º 5
0
        public void MeanOfSameObservations()
        {
            double           d   = 123.0;
            TimeWeightedMean twm = new TimeWeightedMean(new Simulation());

            for (int i = 0; i < 1000; i++)
            {
                twm.Observe(d, i);
            }

            Assert.AreEqual(1000, twm.Observations);
            Assert.AreEqual(d, twm.Value);

            TimeValue lastObservation = twm.LastObservation;

            Assert.IsTrue(lastObservation.IsValid);
            Assert.AreEqual(d, lastObservation.Value);
            Assert.AreEqual(999, lastObservation.Time);
        }
Ejemplo n.º 6
0
        public void VarianceOfManyObservations()
        {
            IUniform  valGen          = UniformStreams.DefaultStreams.GetUniform();
            IUniform  timeGen         = UniformStreams.DefaultStreams.GetUniform();
            TimeValue lastObservation = new TimeValue(0L, valGen.NextDouble() * 100.0);

            double[] weights = new double[1000];
            double[] values  = new double[1000];

            TimeWeightedVariance twv = new TimeWeightedVariance(new Simulation());
            TimeWeightedMean     twm = new TimeWeightedMean(new Simulation());

            twm.Observe(lastObservation.Value, lastObservation.Time);
            twv.Observe(lastObservation.Value, lastObservation.Time);

            for (int i = 0; i < 1000; i++)
            {
                long      newTime        = lastObservation.Time + (long)(timeGen.NextDouble() * 10.0);
                TimeValue newObservation = new TimeValue(newTime, valGen.NextDouble() * 100.0);
                double    weight         = newObservation.Time - lastObservation.Time;

                twm.Observe(newObservation.Value, newObservation.Time);
                twv.Observe(newObservation.Value, newObservation.Time);

                weights[i] = weight;
                values[i]  = lastObservation.Value;

                lastObservation = newObservation;
            }

            double sumW     = 0.0;
            double sumWVals = 0.0;

            for (int i = 0; i < 1000; i++)
            {
                sumW     += weights[i];
                sumWVals += weights[i] * Math.Pow(values[i] - twm.Value, 2.0);
            }

            double variance = sumWVals / sumW;

            Assert.AreEqual(variance, twv.Value, 0.00001);
        }
Ejemplo n.º 7
0
        public void AttachAndDetach()
        {
            TimeWeightedMean twm = new TimeWeightedMean(new Simulation());

            twm.ObserveOnAttach = true;
            twm.ObserveOnDetach = true;

            _valueForTesting = 5.5;
            twm.Attach(this, "ValueForTesting");
            TimeValue lastObservation = twm.LastObservation;

            Assert.AreEqual(1, twm.Observations);
            Assert.AreEqual(5.5, lastObservation.Value);

            _valueForTesting = 10.0;
            twm.Detach(this, "ValueForTesting");
            lastObservation = twm.LastObservation;
            Assert.AreEqual(2, twm.Observations);
            Assert.AreEqual(10.0, lastObservation.Value);
        }
Ejemplo n.º 8
0
 public void RequiresNonNullSimulation()
 {
     TimeWeightedMean twm = new TimeWeightedMean(null);
 }