示例#1
0
        /// <summary>
        /// simulate one ant farm, return true (continue) unless max cube count has been reached
        /// </summary>
        private bool Run1()
        {
            var s = new Descriptives(); // departure time statistics for this cube
            var cube = new Cube(m_nAnts, this);
            for (int t = 0; t < m_nMaxTime; ++t)
            {
                int escaped = cube.Step();
                s.AddSample(t + 1, escaped); // if escaped on step 0, it's at time 1.
                if (cube.Empty)
                    break;
            }

            double completed;
            lock (m_summarystats)
            {
                completed = m_summarystats.Mass();
                if (completed < m_nCubes)
                    m_summarystats.AddSample(s.Mean());
            }

            if (completed+1 == m_nCubes && m_OnCompletion != null)
                m_OnCompletion(m_summarystats);

            return completed+1 < m_nCubes;
        }
示例#2
0
 public void StdDevTest()
 {
     var s = new Descriptives();
     s.AddSample(0);
     s.AddSample(2);
     Assert.IsTrue(Math.Abs(s.StdDev()-Math.Sqrt(2)) < 1e-12);
 }
示例#3
0
 private void ReportStats(Descriptives s)
 {
     lock (s)
     {
         AverageField.Text = s.Mean().ToString();
         StdDevField.Text = s.StdDev().ToString();
     }
 }
示例#4
0
 public void WeightedMeanTest()
 {
     var s = new Descriptives();
     s.AddSample(1,2);
     Assert.AreEqual(s.Mean(), 1);
     s.AddSample(2);
     Assert.IsTrue(System.Math.Abs(s.Mean() - (4.0/3)) < 1e-12);
     s.AddSample(3, 2);
     Assert.IsTrue(System.Math.Abs(s.Mean() - 2) < 1e-12);
 }
示例#5
0
        StatsCallback m_OnCompletion; // will be called on the worker thread, is that OK?

        #endregion Fields

        #region Constructors

        public Job(int nAnts, int nCubes, int nMaxTime, StatsCallback dOnCompletion = null)
        {
            // I don't really like Hungarian notation but it's become a habit from sheer repetition.
            m_nAnts = nAnts;
            m_nCubes = nCubes;
            m_nMaxTime = nMaxTime;
            m_OnCompletion = dOnCompletion;

            m_summarystats = new Descriptives();
            m_RNG = new MathNet.Numerics.Random.MersenneTwister(); // clock-based default seed.
        }
示例#6
0
 public void MeanTest()
 {
     var s = new Descriptives();
     Assert.IsTrue(Double.IsNaN(s.Mean()));
     s.AddSample(1);
     Assert.AreEqual(s.Mean(), 1);
     s.AddSample(2);
     Assert.IsTrue(System.Math.Abs(s.Mean() - 1.5) < 1e-12);
     s.AddSample(3);
     Assert.IsTrue(System.Math.Abs(s.Mean() - 2) < 1e-12);
 }
示例#7
0
 public void MassTest()
 {
     var s = new Descriptives();
     Assert.AreEqual(s.Mass(),0);
     s.AddSample(1,0);
     Assert.AreEqual(s.Mass(),0);
     s.AddSample(1);
     Assert.AreEqual(s.Mass(),1);
     s.AddSample(1,9);
     Assert.AreEqual(s.Mass(),10);
 }
示例#8
0
 public void MinMaxTest()
 {
     var s = new Descriptives();
     s.AddSample(1);
     Assert.AreEqual(s.Min(), 1);
     Assert.AreEqual(s.Max(), 1);
     s.AddSample(0);
     Assert.AreEqual(s.Min(), 0);
     Assert.AreEqual(s.Max(), 1);
     s.AddSample(2);
     Assert.AreEqual(s.Min(), 0);
     Assert.AreEqual(s.Max(), 2);
 }