public Transact Generate()
 {
     Time += _rand.Next();
     return(new Transact {
         Time = Time, Status = TransactStatus.Prepared
     });
 }
示例#2
0
        public bool ProcessTransact(Transact transact)
        {
            if (transact.Status == TransactStatus.Prepared)
            {
                transact.Status = TransactStatus.Processed;
                EnQueueTransact(transact);
                return(true);
            }

            if (transact.Status == TransactStatus.ReProc)
            {
                transact.Time  += _rand.Next();
                transact.Status = TransactStatus.Processed;
                transact.Device = CompSystem.Processor;
                transact.Device.EnQueueTransact(transact);
                return(true);
            }

            if (transact.Status == TransactStatus.Finished)
            {
                transact.Status = TransactStatus.Released;
                ReleaseBlock();
                Time = transact.Time;
                return(true);
            }

            if (TakeBlock())
            {
                DeQueueTransact(transact);
                transact.Device = CompSystem.Processor;
                transact.Device.EnQueueTransact(transact);
                return(true);
            }
            else
            {
                if (transact.Time < Time)
                {
                    transact.Time = Time;
                }
                transact.Status = TransactStatus.Waiting;
                return(false);
            }
        }
示例#3
0
        public void CheckOrderStatistics03()
        {
            double lower = -10;
            double upper = 0;

            UniformRandom rand = new UniformRandom(lower, upper, new Random());

            double[] values = new double[maxNumbers];
            for (int i = 0; i < maxNumbers; i++)
            {
                values[i] = rand.Next();
                Assert.LessOrEqual(lower, values[i], "The value should be higher than lower");
                Assert.GreaterOrEqual(upper, values[i], "The value should be lower than higher");
            }

            double average = values.Average();

            Assert.AreEqual((lower + upper) / 2, average, tolerance * 10);
            double sumOfSquaresOfDifferences = values.Select(val => (val - average) * (val - average)).Sum();
            double variance = sumOfSquaresOfDifferences / values.Length;

            Assert.AreEqual((upper - lower) * (upper - lower) / 12, variance, tolerance);
        }
示例#4
0
        static void Main(string[] args)
        {
            Console.WriteLine("Exponential Random:\n");

            Console.Write("Enter lambda: ");
            string  lambdaLine = Console.ReadLine();
            IRandom random     = new ExponentialRandom();

            if (double.TryParse(lambdaLine, out double lambda))
            {
                random = new ExponentialRandom(lambda);
            }

            List <double> list = new List <double>(10000);

            for (int i = 0; i < 10000; i++)
            {
                list.Add(random.Next());
            }

            Show(list);
            random.DistributionStatistics();
            DistributionStatistics(list);
            Console.WriteLine(" chi-square: " + random.IndificateDistributionLaw(list).ToString("F3"));

            Console.WriteLine("\nUniform Random:\n");

            random = new UniformRandom();
            list   = new List <double>(10000);

            for (int i = 0; i < 10000; i++)
            {
                list.Add(random.Next());
            }

            Show(list);
            random.DistributionStatistics();
            DistributionStatistics(list);
            Console.WriteLine(" chi-square: " + random.IndificateDistributionLaw(list).ToString("F3"));

            Console.WriteLine("\nGauss Random:\n");

            Console.Write("Enter sigma: ");
            string sigmaLine = Console.ReadLine();

            Console.Write("Enter alpha: ");
            string alphaLine = Console.ReadLine();

            random = new GaussRandom();
            if (double.TryParse(sigmaLine, out double sigma) && double.TryParse(alphaLine, out double alpha))
            {
                random = new GaussRandom(sigma, alpha);
            }

            list = new List <double>(10000);

            for (int i = 0; i < 10000; i++)
            {
                list.Add(random.Next());
            }

            Show(list);
            random.DistributionStatistics();
            DistributionStatistics(list);
            Console.WriteLine(" chi-square: " + random.IndificateDistributionLaw(list).ToString("F3"));

            Console.WriteLine("\nPress any key to continue...");
            Console.ReadKey();
        }