/// <summary>
        /// Generate a random training set.
        /// </summary>
        /// <param name="seed">The seed value to use, the same seed value will always produce
        /// the same results.</param>
        /// <param name="count">How many training items to generate.</param>
        /// <param name="inputCount">How many input numbers.</param>
        /// <param name="idealCount">How many ideal numbers.</param>
        /// <param name="min">The minimum random number.</param>
        /// <param name="max">The maximum random number.</param>
        /// <returns>The random training set.</returns>
        public static BasicMLDataSet Generate(long seed,
                                              int count, int inputCount,
                                              int idealCount, double min, double max)
        {
            var rand =
                new LinearCongruentialGenerator(seed);

            var result = new BasicMLDataSet();

            for (int i = 0; i < count; i++)
            {
                var inputData = new BasicMLData(inputCount);

                for (int j = 0; j < inputCount; j++)
                {
                    inputData[j] = rand.Range(min, max);
                }

                var idealData = new BasicMLData(idealCount);

                for (int j = 0; j < idealCount; j++)
                {
                    idealData[j] = rand.Range(min, max);
                }

                var pair = new BasicMLDataPair(inputData,
                                               idealData);
                result.Add(pair);
            }
            return(result);
        }
        /// <summary>
        /// Generate random training into a training set.
        /// </summary>
        /// <param name="training">The training set to generate into.</param>
        /// <param name="seed">The seed to use.</param>
        /// <param name="count">How much data to generate.</param>
        /// <param name="min">The low random value.</param>
        /// <param name="max">The high random value.</param>
        public static void Generate(IMLDataSetAddable training,
                                    long seed,
                                    int count,
                                    double min, double max)
        {
            var rand
                = new LinearCongruentialGenerator(seed);

            int inputCount = training.InputSize;
            int idealCount = training.IdealSize;

            for (int i = 0; i < count; i++)
            {
                var inputData = new BasicMLData(inputCount);

                for (int j = 0; j < inputCount; j++)
                {
                    inputData[j] = rand.Range(min, max);
                }

                var idealData = new BasicMLData(idealCount);

                for (int j = 0; j < idealCount; j++)
                {
                    idealData[j] = rand.Range(min, max);
                }

                var pair = new BasicMLDataPair(inputData,
                                               idealData);
                training.Add(pair);
            }
        }
Example #3
0
 /// <summary>
 /// Construct a range randomizer.
 /// </summary>
 /// <param name="seed">The seed for the random number generator.</param>
 /// <param name="min">The minimum random value.</param>
 /// <param name="max">The maximum random value.</param>
 public ConsistentRandomizer(int seed, double min,
                             double max)
 {
     this.rand = new LinearCongruentialGenerator(seed);
     this.Max  = max;
     this.Min  = min;
 }
 /// <summary>
 /// Construct a range randomizer.
 /// </summary>
 ///
 /// <param name="min">The minimum random value.</param>
 /// <param name="max">The maximum random value.</param>
 /// <param name="seed">The seed value.</param>
 public ConsistentRandomizer(double min, double max,
                             int seed)
 {
     _max = max;
     _min = min;
     _seed = seed;
     _rand = new LinearCongruentialGenerator(seed);
 }
Example #5
0
 /// <summary>
 /// Construct a range randomizer.
 /// </summary>
 ///
 /// <param name="min">The minimum random value.</param>
 /// <param name="max">The maximum random value.</param>
 /// <param name="seed">The seed value.</param>
 public ConsistentRandomizer(double min, double max,
                             int seed)
 {
     _max  = max;
     _min  = min;
     _seed = seed;
     _rand = new LinearCongruentialGenerator(seed);
 }
        public void TestCustomParams()
        {
            var lcg = new LinearCongruentialGenerator(seed: 73258, multiplier: 312988, increment: 92122);

            lcg.MoveNext();
            Assert.Equal(0x56AC, lcg.Current);
            lcg.MoveNext();
            Assert.Equal(0x2479, lcg.Current);
        }
Example #7
0
        private static async Task MainAsync()
        {
            LinearCongruentialGenerator lcg = null;

            var modes = new[] { Mode.One, Mode.Two, Mode.Three };

            foreach (var mode in modes)
            {
                switch (mode)
                {
                case Mode.One:
                    lcg = new LinearCongruentialGenerator();
                    break;

                case Mode.Two:
                    lcg = new LinearCongruentialGenerator(16807);
                    break;

                case Mode.Three:
                    lcg = new LinearCongruentialGenerator(16807, 65793);
                    break;
                }

                Console.WriteLine($"Mode: {mode.ToString()}\n");
                await Task.Run(() =>
                {
                    for (int i = 0; i < 25; i++)
                    {
                        Console.Write(lcg.Next(30, mode) + " ");
                    }
                });

                Console.WriteLine("\n_____________________________________________________________________\n");
            }

            Console.ReadKey();
        }
Example #8
0
        public static void Main(string[] args)
        {
            //parametri za minimalnu i maksimalnu vrednsost
            int DEFAULT_MIN = 0;
            int DEFAULT_MAX = 10;

            //parametri za middle square weyl sequence
            ulong x = 0;
            ulong w = 0;

            ulong[]       s       = new ulong[25000];
            List <string> numbers = File.ReadAllLines("Seed.txt").ToList();
            int           i       = 0;

            foreach (var item in numbers)
            {
                s[i] = Convert.ToUInt64(item.Split(',')[0], 16);
                i++;
            }

            LinearCongruentialGenerator lcg  = new LinearCongruentialGenerator();
            MersenneTwister             mt   = new MersenneTwister((uint)Guid.NewGuid().GetHashCode());
            MiddleSquareWeylSequence    msws = new MiddleSquareWeylSequence();
            Random rng = new Random();

            int  randomNumberLCG  = Guid.NewGuid().GetHashCode();
            int  randomNumberMT   = 0;
            uint randomNumberMSWS = 0;

            ConsoleKeyInfo keyInfo;

            do
            {
                Console.WriteLine("\nOdaberite jedan od algiritama za generisanje nasumicnog broja:");
                Console.WriteLine("1.Linear Congruental Generator");
                Console.WriteLine("2.Mersenne-Twister");
                Console.WriteLine("3.Middle Square Weyl Sequence\n");

                keyInfo = Console.ReadKey();

                //ukoliko pritisnemo 1 generisemo brojeve pomocu lcg-a
                if (keyInfo.Key == ConsoleKey.D1)
                {
                    do
                    {
                        keyInfo         = Console.ReadKey();
                        randomNumberLCG = lcg.Next(randomNumberLCG, DEFAULT_MIN, DEFAULT_MAX);
                        string textLCG = $"LCG: {randomNumberLCG}";

                        File.AppendAllText("LCG_Storage.txt", textLCG + '\n');

                        Console.WriteLine(textLCG);
                    }
                    //na glavni meni se izlazi pritiskom f1
                    while (keyInfo.Key != ConsoleKey.F1);
                }
                //ukoliko pritisnemo 2 generisemo brojeve pomocu mersenne-twistera
                else if (keyInfo.Key == ConsoleKey.D2)
                {
                    do
                    {
                        keyInfo        = Console.ReadKey();
                        randomNumberMT = mt.Next(DEFAULT_MIN, DEFAULT_MAX);
                        string textMT = $"Mersenne-Twister: {randomNumberMT}";

                        File.AppendAllText("MT_Storage.txt", textMT + '\n');

                        Console.WriteLine(textMT);
                    }
                    //na glavni meni se izlazi pritiskom f2
                    while (keyInfo.Key != ConsoleKey.F2);
                }
                //ukoliko pritisnemo 3 generisemo brojeve pomocu middle square weyl sequence
                else if (keyInfo.Key == ConsoleKey.D3)
                {
                    do
                    {
                        keyInfo          = Console.ReadKey();
                        randomNumberMSWS = (uint)(msws.Next(x, w, s[rng.Next(0, 25000)]) % (DEFAULT_MAX - DEFAULT_MIN) + DEFAULT_MIN);
                        string textMSWS = $"Middle Square Weyl Sequence: {randomNumberMSWS}";

                        File.AppendAllText("MSWS_Storage.txt", textMSWS + '\n');

                        Console.WriteLine(textMSWS);
                    }
                    //na glavni meni se izlazi pritiskom f3
                    while (keyInfo.Key != ConsoleKey.F3);
                }
                else
                {
                    Console.WriteLine("\nNepostojeca opcija!");
                }
            }
            //iz programa se izlazi pritiskom esc tastera
            while (keyInfo.Key != ConsoleKey.Escape);
        }
 public LinearCongruentialGeneratorTests()
 {
     this.lcg = new LinearCongruentialGenerator(seed: 0x71C71C71);
 }