示例#1
0
        public void TestAccumulatorAddRemove()
        {
            Accumulator accumulator = new Accumulator();

            for (int i = 0; i <= 10; i++)
            {
                accumulator.Add(i);
            }

            Assert.That(accumulator.Mean, NumericIs.AlmostEqualTo((double)5), "A Mean");
            Assert.That(accumulator.Variance, NumericIs.AlmostEqualTo((double)11), "A Variance");
            Assert.That(accumulator.Sum, NumericIs.AlmostEqualTo((double)55), "A Sum");

            accumulator.Remove(9);
            accumulator.Remove(4);

            Assert.That(accumulator.Mean, NumericIs.AlmostEqualTo(14d / 3), "B Mean");
            Assert.That(accumulator.Variance, NumericIs.AlmostEqualTo(23d / 2), "B Variance");
            Assert.That(accumulator.Sum, NumericIs.AlmostEqualTo((double)42), "B Sum");

            accumulator.Add(9);
            accumulator.Add(4);

            Assert.That(accumulator.Mean, NumericIs.AlmostEqualTo((double)5), "C Mean");
            Assert.That(accumulator.Variance, NumericIs.AlmostEqualTo((double)11), "C Variance");
            Assert.That(accumulator.Sum, NumericIs.AlmostEqualTo((double)55), "C Sum");
        }
示例#2
0
        public void TestAccumulatorNumericStability()
        {
            /* NOTE: Statistically it is possible that this test fails even
             * if everything works as expected. However, it's very unlikely to happen,
             * and even more unlikely to happen in a series. */

            Accumulator        accumulator = new Accumulator();
            NormalDistribution gaussian    = new NormalDistribution();

            // Test around 0, no stability issues expected
            gaussian.SetDistributionParameters(0, 1);
            for (int i = 0; i < 10000; i++)
            {
                accumulator.Add(gaussian.NextDouble());
            }

            Assert.That(accumulator.Mean, NumericIs.AlmostEqualTo((double)0, 0.2), "Mean of (0,1)");
            Assert.That(accumulator.Variance, NumericIs.AlmostEqualTo((double)1, 0.5), "Variance of (0,1)");

            // Test around 10^9, potential stability issues
            accumulator.Clear();
            gaussian.SetDistributionParameters(1e+9, 1);
            for (int i = 0; i < 10000; i++)
            {
                accumulator.Add(gaussian.NextDouble());
            }

            Assert.That(accumulator.Mean, NumericIs.AlmostEqualTo(1e+9, 0.2), "Mean of (1e+9,1)");
            Assert.That(accumulator.Variance, NumericIs.AlmostEqualTo((double)1, 0.5), "Variance of (1e+9,1)");
        }
示例#3
0
        /// <summary>
        /// Return the result of adding a number to <i>sum</i> (but don't change <i>sum</i>).
        /// </summary>
        /// <param name="y">the number to be added to the sum.</param>
        /// <returns><i>sum</i> + <i>y</i>.</returns>
        public double Sum(double y)
        {
            Accumulator a = new Accumulator(this);

            a.Add(y);
            return(a._s);
        }
示例#4
0
        private void GammaEstimator(double shape, double rate)
        {
            Rand.Restart(12347);
            Gamma                g   = Gamma.FromShapeAndRate(shape, rate);
            Estimator <Gamma>    ge  = EstimatorFactory.Instance.CreateEstimator <Gamma, double>(Gamma.Uniform());
            Accumulator <double> gea = ge as Accumulator <double>;

            for (int i = 0; i < 10000; i++)
            {
                double d = g.Sample();
                gea.Add(d);
            }

            Gamma gest = Gamma.Uniform();

            gest = ge.GetDistribution(gest);

            double expectedMean  = g.GetMean();
            double expectedSDev  = System.Math.Sqrt(g.GetVariance());
            double estimatedMean = gest.GetMean();
            double estimatedSDev = System.Math.Sqrt(gest.GetVariance());

            Assert.True(System.Math.Abs(expectedMean - estimatedMean) < 0.02);
            Assert.True(System.Math.Abs(expectedSDev - estimatedSDev) < 0.02);
        }
示例#5
0
        /// <summary>
        /// Adds a sample to the burn-in accumulator
        /// </summary>
        /// <param name="item"></param>
        public void Add(T item)
        {
            int diff = Count - BurnIn;

            if ((diff >= 0) && ((diff % Thin) == 0))
            {
                Accumulator.Add(item);
            }
            Count++;
        }
示例#6
0
        public double EstimateMeanSquaredError()
        {
            Accumulator accu = new Accumulator();

            foreach (Sample s in _provider)
            {
                double v = EvaluateFunction(s.Coordinate);
                accu.Add(v - s.Value);
            }
            return(accu.MeanSquared);
        }
示例#7
0
            public void Solve()
            {
                // Part 1
                var values = GetLines().Select(long.Parse).ToArray();
                var acc    = new Accumulator(values.Take(25));
                var val    = 0L;

                for (int i = 25; i < values.Length; i++)
                {
                    val = values[i];
                    if (!acc.Test(val))
                    {
                        WriteLine(val);
                        break;
                    }
                    acc.Add(val);
                }

                // Part 2
                var(low, high) = FindContiguous(values, val);
                var small = values[low..(high + 1)].Min();
示例#8
0
        private void GaussianEstimator(double mean, double precision)
        {
            Rand.Restart(12347);
            Gaussian             g   = Gaussian.FromMeanAndPrecision(mean, precision);
            Estimator <Gaussian> ge  = EstimatorFactory.Instance.CreateEstimator <Gaussian, double>(Gaussian.Uniform());
            Accumulator <double> gea = ge as Accumulator <double>;

            for (int i = 0; i < 10000; i++)
            {
                gea.Add(g.Sample());
            }

            Gaussian gest = Gaussian.Uniform();

            gest = ge.GetDistribution(gest);

            double expectedMean  = g.GetMean();
            double expectedSDev  = System.Math.Sqrt(g.GetVariance());
            double estimatedMean = gest.GetMean();
            double estimatedSDev = System.Math.Sqrt(gest.GetVariance());

            Assert.True(System.Math.Abs(expectedMean - estimatedMean) < 0.02);
            Assert.True(System.Math.Abs(expectedSDev - estimatedSDev) < 0.02);
        }
示例#9
0
        static void Main(string[] args)
        {
            var r = new Random();
            var m = r.Next(5, 10);

            for (int i = 0; i < m; i++)
            {
                var datum = r.Next(100, 10000);
                Console.WriteLine($"COLLECT {datum}");
                Accumulator.Add(datum);
            }
            Console.WriteLine("RETRIEVE");
            Accumulator.Retrieve("0.0.0.0").ForEach(i => Console.WriteLine($"\t{i}"));
            m = r.Next(5, 10);
            for (int i = 0; i < m; i++)
            {
                var datum = r.Next(100, 10000);
                Console.WriteLine($"COLLECT {datum}");
                Accumulator.Add(datum);
            }
            Console.WriteLine("RETRIEVE");
            Accumulator.Retrieve("0.0.0.0").ForEach(i => Console.WriteLine($"\t{i}"));
            Console.Read();
        }
示例#10
0
 /// <include file='FactorDocs.xml' path='factor_docs/message_op_class[@name="UsesEqualDefGibbsOp2{T}"]/message_doc[@name="ConditionalAcc{TDist}(TDist, Accumulator{TDist})"]/*'/>
 public static Accumulator <TDist> ConditionalAcc <TDist>(TDist conditional, Accumulator <TDist> conditionalAcc)
     where TDist : ICloneable
 {
     conditionalAcc.Add((TDist)conditional.Clone());
     return(conditionalAcc);
 }
示例#11
0
 /// <include file='FactorDocs.xml' path='factor_docs/message_op_class[@name="UsesEqualDefGibbsOp2{T}"]/message_doc[@name="SampleAcc(T, Accumulator{T})"]/*'/>
 public static Accumulator <T> SampleAcc(T sample, Accumulator <T> sampleAcc)
 {
     sampleAcc.Add(sample);
     return(sampleAcc);
 }
示例#12
0
        private ProgramState handleLocation(ref Pointer myPoint)
        {
            MemoryLocation storageLocation;

            storageLocation = _Program.Locations(myPoint.Word().MemoryLocationID);
            switch (myPoint.Word().Instruction)
            {
            case  Instruction.Read:
                //Read a word from the keyboard (input box) into a specific location in memory.
                return(new ProgramState(ProgramState.State.GetInput));

            case  Instruction.Write:
                //Write a word from a specific memory location to the screen (msgbox).
                _Output = storageLocation.Word().Value;
                return(new ProgramState(ProgramState.State.WriteOutput));

            case  Instruction.Load:
                //Load a word from a specific location in memory into the accumulator in the CPU.
                _Accumulator.Value = storageLocation.Word().Value;
                break;

            case  Instruction.Store:
                //Store a word from the accumulator into a specific location in memory.
                storageLocation.Word().WordString = _Accumulator.Value.ToString();
                break;

            case  Instruction.Add:
                //Add a word from a specific location in memory to the word in the accumulator,
                //leaving the results in the accumulator.
                _Accumulator.Add(storageLocation.Word().Value);
                break;

            case  Instruction.Substract:
                //Subtract a word from a specific location in memory from the word in the accumulator,
                //leaving the results in the accumulator.
                _Accumulator.Subtract(storageLocation.Word().Value);
                break;

            case  Instruction.Divide:
                //Divide a word from a specific location in memory into the word in the accumulator,
                //leaving the results in the accumulator.
                _Accumulator.Divide(storageLocation.Word().Value);
                break;

            case  Instruction.Multiply:
                //Multiple a word from a specific location in memory by the word in the accumulator,
                //leaving the results in the accumulator.
                _Accumulator.Multiply(storageLocation.Word().Value);
                break;

            case  Instruction.Branch:
                //Branch (goto) a specific location in memory.
                goToBranch(storageLocation);
                break;

            case  Instruction.BranchNegative:
                //Branch to a specific location in memory IFF (If and only if) the value in the
                //accumulator is negative
                if (_Accumulator.Value < 0)
                {
                    goToBranch(storageLocation);
                }
                break;

            case  Instruction.BranchZero:
                //Branch to a specific location in memory IFF the value in the accumulator is Zero.
                if (_Accumulator.Value == 0)
                {
                    goToBranch(storageLocation);
                }
                break;

            case Instruction.Halt:
                //Halt - The program has completed its task.
                _ProgramRunning = false;
                return(new ProgramState(ProgramState.State.Finished));

            default:
                // 00  No instruction given
                return(new ProgramState(ProgramState.State.Running));
            }
            return(new ProgramState(ProgramState.State.Running));
        }
示例#13
0
        public void It_should_be_able_to_accumulate()
        {
            var accumulator = new Accumulator();

            accumulator.Add(1.0f);
            accumulator.Add(0.5f);
            accumulator.Add(0.0f);
            accumulator.Add(0.1f);
            accumulator.Add(0.3f);
            accumulator.Add(-0.7f);
            accumulator.Add(0.9f);
            accumulator.Add(0.7f);
            accumulator.Add(0.2f);
            accumulator.Add(0.4f);
            accumulator.Add(0.6f);
            accumulator.Add(-0.6f);
            accumulator.Add(0.8f);
            var expect = ((1 + 10) * 10 / 2 - 13) / 10.0f;
            var actual = accumulator.Get();

            Assert.That(actual, Is.EqualTo(expect).Within(0.000001f));
        }