initialization.go 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. package gago
  2. import "math/rand"
  3. // InitUnifFloat64 generates random float64s x such that lower < x < upper.
  4. func InitUnifFloat64(n int, lower, upper float64, rng *rand.Rand) (floats []float64) {
  5. floats = make([]float64, n)
  6. for i := range floats {
  7. floats[i] = lower + rng.Float64()*(upper-lower)
  8. }
  9. return
  10. }
  11. // InitJaggFloat64 generates random float64s x such that lower < x < upper with jagged bounds
  12. func InitJaggFloat64(n int, lower, upper []float64, rng *rand.Rand) (floats []float64) {
  13. floats = make([]float64, n)
  14. for i := range floats {
  15. floats[i] = lower[i] + rng.Float64()*(upper[i]-lower[i])
  16. }
  17. return
  18. }
  19. // InitNormFloat64 generates random float64s sampled from a normal distribution.
  20. func InitNormFloat64(n int, mean, std float64, rng *rand.Rand) (floats []float64) {
  21. floats = make([]float64, n)
  22. for i := range floats {
  23. floats[i] = rng.NormFloat64()*std + mean
  24. }
  25. return
  26. }
  27. // InitUnifString generates random strings based on a given corpus. The strings
  28. // are not necessarily distinct.
  29. func InitUnifString(n int, corpus []string, rng *rand.Rand) (strings []string) {
  30. strings = make([]string, n)
  31. for i := range strings {
  32. strings[i] = corpus[rng.Intn(len(corpus))]
  33. }
  34. return
  35. }
  36. // InitUniqueString generates random string slices based on a given corpus, each
  37. // element from the corpus is only represented once in each slice. The method
  38. // starts by shuffling, it then assigns the elements of the corpus in increasing
  39. // index order to an individual.
  40. func InitUniqueString(n int, corpus []string, rng *rand.Rand) (strings []string) {
  41. strings = make([]string, n)
  42. for i, v := range randomInts(n, 0, len(corpus), rng) {
  43. strings[i] = corpus[v]
  44. }
  45. return
  46. }