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"); }
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)"); }
/// <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); }
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); }
/// <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++; }
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); }
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();
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); }
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(); }
/// <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); }
/// <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); }
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)); }
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)); }