Пример #1
0
        static void Main(string[] args)
        {
            // Use directly of Sampling Functions
            // We don't need Distribution extra facilities;
            var b     = Distributions.Bernoulli(0.3);
            var count = 0;

            for (var i = 0; i < 100000; i++)
            {
                if (b.NextSample())
                {
                    count++;
                }
            }
            Console.WriteLine(count);

            var a = Army.ArmyElements().Take(20000).ToList();

            var sa = a.OfType <SoldierTypeA>().Count();
            var sb = a.OfType <SoldierTypeB>().Count();
            var ta = a.OfType <TankA>().Count();
            var tb = a.OfType <TankB>().Count();

            Console.WriteLine($"Soldiers/Tanks {a.OfType<Soldier>().Count()/ (double)(a.OfType<Tank>().Count())}");
            Console.WriteLine($"Soldiers A({sa}) B({sb}), Tanks A({ta}) B({tb})");
        }
Пример #2
0
        public static IEnumerator <IArmyElement> ArmySamplingFunction()
        {
            var b  = Distributions.Bernoulli(0.2);
            var tg = new Distribution <Tank>(TankSamplingFunction());
            var sg = new Distribution <Soldier>(SoldierSamplingFunction());

            while (true)
            {
                if (b.NextSample())
                {
                    yield return(tg.NextSample());
                }
                else
                {
                    yield return(sg.NextSample());
                }
            }
        }
Пример #3
0
        public static Army Generate(int size)
        {
            var ret = new Army();
            var b   = Distributions.Bernoulli(0.2);
            var tg  = new Distribution <Tank>(TankSamplingFunction());
            var sg  = new Distribution <Soldier>(SoldierSamplingFunction());

            for (var i = 0; i < size; i++)
            {
                if (b.NextSample())
                {
                    ret.Tanks.Add(tg.NextSample());
                }
                else
                {
                    ret.Soldiers.Add(sg.NextSample());
                }
            }
            return(ret);
        }
Пример #4
0
 static IEnumerator <Soldier> SoldierSamplingFunction()
 {
     return(Distributions.Bernoulli(0.6).Select(b => b ? new SoldierTypeA() : new SoldierTypeB() as Soldier).GetEnumerator());
 }
Пример #5
0
 static IEnumerator <Tank> TankSamplingFunction()
 {
     return(Distributions.Bernoulli(0.4).Select(b => b ? new TankA() : new TankB() as Tank).GetEnumerator());
 }