Random Number Generators in Visual Basic QuickStart Sample
Illustrates how to use specialized random number generator classes in the Numerics.NET.Statistics.Random namespace in Visual Basic.
View this sample in: C# F# IronPython
Imports Numerics.NET
Imports Numerics.NET.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 30 day trial key here. For more information, see
' https://numerics.net/trial-key
Numerics.NET.License.Verify("64542-18980-57619-62268")
' 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
extended.Fill(intValues)
Console.WriteLine($"integer(99) = {intValues(99)}")
' Or, it can generate uniform real values:
extended.Fill(doubleValues)
Console.WriteLine($"double(99) = {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:
ranLux1.Fill(intValues)
ranLux2.Fill(doubleValues)
Console.WriteLine($"Integer from RanLux(Best): {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: {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.")
Console.ReadLine()
End Sub
End Module