Example #1
0
        private void gammaMagicButton_Click(object sender, EventArgs e)
        {
            var N         = (int)gammaNNumericUpDown.Value;
            var L         = (double)gammaLNumericUpDown.Value;
            var generator = new GammaGenerator(randomGenerator, L, N);
            var sequence  = new Sequence(generator, SequenceLength);

            ShowValues(sequence, null, null);
        }
Example #2
0
        private void button1_Click(object sender, EventArgs e)
        {
            UniformGenerator UnifGen           = new UniformGenerator(Convert.ToDouble(tbLeft.Text), Convert.ToDouble(tbRight.Text));
            GammaGenerator   GammaGen          = new GammaGenerator(Convert.ToDouble(tbKParam.Text), Convert.ToDouble(tbθParam.Text));
            int             RequestCount       = (int)udRequestCount.Value;
            double          Time               = Convert.ToDouble(tbTime.Text);
            double          TotalTime          = 0;
            double          dT                 = Convert.ToDouble(tbTimeStep.Text);
            int             i                  = 0;
            Queue <Request> Queue              = new Queue <Request>();
            double          GenTime            = UnifGen.Next();
            double          ServiceMachineTime = GammaGen.Next();
            List <double>   RequesTimes        = new List <double>();
            int             MaxQueueLength     = 0;
            int             MiddleQueueLength  = 0;
            int             QueueCount         = 0;

            do
            {
                if (GenTime <= 0)
                {
                    GenTime = UnifGen.Next();
                    Queue.Enqueue(new Request(i, TotalTime));

                    if (Queue.Count > MaxQueueLength)
                    {
                        MaxQueueLength = Queue.Count;
                    }

                    MiddleQueueLength += Queue.Count;
                    QueueCount++;
                }

                if ((ServiceMachineTime <= 0) && (Queue.Count > 0))
                {
                    ServiceMachineTime = GammaGen.Next();

                    Request Req = Queue.Dequeue();

                    i++;

                    if (cbInverseLink.Checked)
                    {
                        Queue.Enqueue(new Request(i, TotalTime));

                        if (Queue.Count > MaxQueueLength)
                        {
                            MaxQueueLength = Queue.Count;
                        }

                        MiddleQueueLength += Queue.Count;
                        QueueCount++;
                    }

                    RequesTimes.Add(TotalTime - Req.EntranceTime);
                }

                TotalTime          += dT;
                GenTime            -= dT;
                ServiceMachineTime -= dT;
            }while (rbCount.Checked ? i < RequestCount : TotalTime < Time);



            double TimeSum = 0;

            foreach (double T in RequesTimes)
            {
                TimeSum += T;
            }
            double AverageTime = TimeSum / RequesTimes.Count;

            tbMaxQueueLength.Text  = MaxQueueLength.ToString();
            tbAverageStayTime.Text = AverageTime.ToString("00.0000");
            //tbAverageQueueLength.Text = (MiddleQueueLength / QueueCount).ToString("00.0000");

            if (rbCount.Checked)
            {
                textBox1.Text = TotalTime.ToString("0.0000");
            }
            else
            {
                textBox1.Text = i.ToString();
            }
        }
Example #3
0
        private async void GenerateButton_Click(object sender, EventArgs e)
        {
            string distribution = DistributionComboBox.SelectedItem.ToString();

            int  count          = (int)CountInput.Value;
            int  seed           = (int)SeedInput.Value;
            int  multiplier     = (int)MultiplierInput.Value;
            int  range          = (int)RangeInput.Value;
            bool showAllNumbers = !DisplayedNumbersLimiter.Checked;

            IGenerator generator;
            MLCG       generatorMLCG = new MLCG(seed, multiplier, range);

            ClearComponents();
            GeneratingProgress.Maximum = count;

            switch (distribution)
            {
            case "Uniform":
                generator = new UniformGenerator(Input1.Value, Input2.Value, generatorMLCG);
                break;

            case "Gauss":
                generator = new GaussGenerator(Input1.Value, Input2.Value, Input3.Value, count, generatorMLCG);
                break;

            case "Exponential":
                generator = new ExponentialGenerator(Input1.Value, generatorMLCG);
                break;

            case "Gamma":
                generator = new GammaGenerator(Input1.Value, Input2.Value, count, generatorMLCG);
                break;

            case "Triangular":
                generator = new TriangularGenerator(Input1.Value, Input2.Value, TriangularMinCheckBox.Checked, count, generatorMLCG);
                break;

            case "Simpson":
                generator = new SimpsonGenerator(Input1.Value, Input2.Value, count, generatorMLCG);
                break;

            default:
                generator = generatorMLCG;
                break;
            }

            await Task.Factory.StartNew(() =>
            {
                ProgressStage("Generating numbers...");

                for (int i = 0; i < count; i++)
                {
                    if (showAllNumbers || i < 100)
                    {
                        string row = $"{i + 1}. {generator.NextNumber()}";
                        ExecuteInUIThread(() => NumbersList.Items.Add(row));
                    }
                    else
                    {
                        generator.NextNumber();
                    }

                    ExecuteInUIThread(() => GeneratingProgress.Value++);
                }

                ProgressStage("Calculating statistics...");

                Calculations calculations = new Calculations(generator);
                AddToOutputBox($"M = {calculations.ExpectedValue:F5}");
                AddToOutputBox($"D = {calculations.Variance:F5}");
                AddToOutputBox($"σ = {calculations.StandardDeviation:F5}");

                ProgressStage("Building plot...");
                calculations.BuildHistogram(Plot.plt);
                Plot.Render();

                ProgressStage("Complete.");
            });
        }