Esempio n. 1
0
        public double GetRandom()
        {
            int block = SafeRandom.NextInt(0, numberOfBlocks - 1);

            if (block == 0)
            {
                return(TailFallback());
            }
            double xRand = SafeRandom.NextDouble();
            double yRand = SafeRandom.NextDouble();
            int    flip  = SafeRandom.NextInt(0, 2);

            double xVal = xRand * x[block];

            if (xVal < x[block + 1])
            {
                if (flip == 1)
                {
                    xVal = -xVal;
                }
                return(xVal);
            }

            double yVal = y[block] + (yRand * (y[block + 1] - y[block]));

            if (yVal < pFunc(xVal))
            {
                if (flip == 1)
                {
                    xVal = -xVal;
                }
                return(xVal);
            }
            return(GetRandom());
        }
Esempio n. 2
0
        public double TailFallback()
        {
            double xRand = SafeRandom.NextDouble();
            double yRand = SafeRandom.NextDouble();

            double xVal = -Math.Log(xRand) / x[0];
            double yVal = -Math.Log(yRand);
            int    flip = SafeRandom.NextInt(0, 2);

            if ((2 * yVal) > Math.Pow(xVal, 2))
            {
                if (flip == 1)
                {
                    xVal = -xVal - x[0];
                }
                else
                {
                    xVal += x[0];
                }
                return(xVal);
            }
            return(TailFallback());
        }
Esempio n. 3
0
 public Parameter(string name, int minValue, int maxValue) : this(name, minValue, maxValue, SafeRandom.NextInt(minValue, maxValue + 1)) // Assign random initial value.
 {
 }
Esempio n. 4
0
 public Parameter(string Name, int MinValue, int MaxValue) : this(Name, MinValue, MaxValue, SafeRandom.NextInt(MinValue, MaxValue + 1)) // Assign random initial value.
 {
 }