//генерация события повторного обращения за обслуживанием
        public override void GenerateEvent(Call call, double timer, Journal journal)
        {
            double time = timer + exp.NextValue();

            Event FutureEvent = new Event(call, this, time);

            journal.Add(FutureEvent);
        }
Exemple #2
0
        public double NextValue()
        {
            double result = 0, x, p, y, d, c, z, u, v;

            if ((alpha > 0) && (beta > 0))
            {
                if ((alpha > 0) && (alpha < 1))
                {
                    x = (Math.E + alpha) / Math.E;

                    do
                    {
                        p = x * Generator.NextValue();
                        if (p > 1)
                        {
                            y = -Math.Log((x - p) / alpha);
                        }
                        else
                        {
                            y = Math.Pow(p, alpha - 1);
                        }
                    }while (((y < 1) && (Math.Pow(Math.E, -y) < Generator.NextValue())) || ((y >= 1) && (Math.Pow(y, alpha - 1) < Generator.NextValue())));

                    result = y;
                }

                if (alpha > 1)
                {
                    d = alpha - 1 / 3;
                    c = 1 / (Math.Sqrt(9 * d));
                    do
                    {
                        z = norm.NextValue();
                        u = Generator.NextValue();
                        v = Math.Pow(1 + c * z, 3);
                    }while ((z <= (-1 / c)) && (Math.Log(u) >= (0.5 * z * z + d - d * v + d * Math.Log(v))));
                    result = d * v;
                }

                if ((alpha == 1) && (beta == 1))
                {
                    result = exp.NextValue();
                }
            }

            return(result / beta);
        }