Random Number Generators in Visual Basic QuickStart Sample

Illustrates how to use specialized random number generator classes in the Extreme.Statistics.Random namespace in Visual Basic.

View this sample in: C# F# IronPython

Imports Extreme.Mathematics
Imports Extreme.Mathematics.Random

    ' Illustrates the use of the classes that implement
    ' pseudo-random number generators.
    Module RandomNumberGenerators

        Sub Main()
        ' The license is verified at runtime. We're using
        ' a demo license here. For more information, see
        ' https://numerics.net/trial-key
        Extreme.License.Verify("Demo license")

        ' This QuickStart Sample gives an overview of the pseudo-random
        ' number generators that provide an alternative for the
        ' System.Random class..

        ' ExtendedRandom class

        ' The ExtendedRandom class simply extends the functionality
        ' of the System.Random class:
        Dim extended As ExtendedRandom = New ExtendedRandom
        Dim intValues As Integer() = New Integer(100) {}
        Dim doubleValues As Double() = New Double(100) {}

        ' The fill method fills an array of integers with random numbers
        Console.WriteLine("integer(99) = {0}", intValues(99))

        ' Or, it can generate uniform real values:
        Console.WriteLine("double(99) = {0}", doubleValues(99))

        ' All random number generators can also produce variates 
        ' from any user-specified probability distribution.
        ' The NonUniformRandomNumbers sample illustrates 
        ' how to do this.

        ' RANLUX Generators

        ' The RANLUX generators are available with three different 
        ' 'luxury levels.' Each level produces random numbers of 
        ' increasing quality at a performance cost.
        ' There are four constructors. The first constructor uses the
        ' default seed and the default (lowest) luxury level:
        Dim ranLux1 As RanLux = New RanLux

        ' We can specify a seed value as well:
        Dim ranLux2 As RanLux = New RanLux(99)

        ' We can specify the luxury level in the constructor:
        Dim ranLux3 As RanLux = New RanLux(RanLuxLuxuryLevel.Better)

        ' Finally, we can specify both a seed and the luxury level:
        Dim ranLux4 As RanLux = New RanLux(99, RanLuxLuxuryLevel.Best)

        ' All methods of System.Random and ExtendedRandom are available:
        Console.WriteLine("Integer from RanLux(Best): {0}", ranLux3.Next(100))

        ' Generalized Feedback Shift Register Generator

        ' This generator is implemented by the GfsrGenerator class.
        ' It has three constructors. A default constructor that uses
        ' a default seed value:
        Dim gfsr1 As GfsrGenerator = New GfsrGenerator

        ' A constructor that takes a single integer seed:
        Dim gfsr2 As GfsrGenerator = New GfsrGenerator(99)

        ' And a constructor that takes an array of integers
        ' as its seed. The maximum size of this seed array
        ' is 2^14-1 = 16383.
        Dim gfsr3 As GfsrGenerator = New GfsrGenerator(New Integer() {99, 17, Integer.MaxValue})

        ' Once again, all standard methods are available.
        Console.WriteLine("Double from GFSR: {0}", gfsr2.NextDouble())

        ' Mersenne Twister

        ' The Mersenne Twister is a variation on the GFSR generator and,
        ' not surprisingly, also has three constructors:
        Dim mersenne1 As MersenneTwister = New MersenneTwister
        Dim mersenne2 As MersenneTwister = New MersenneTwister(99)
        Dim mersenne3 As MersenneTwister = New MersenneTwister(New Integer() {99, 17, Integer.MaxValue})

        Console.Write("Press any key to exit.")

    End Sub

End Module