I einen Generator in Scalacheck erstellen möchten, die zufällig in Richtung Nummern näher zu 1.Scalacheck: eine ganze Zahl mit benutzerdefinierten Wahrscheinlichkeitsverteilung wählen
Gen.choose()
verteilt Zahlen Zahlen zwischen etwa 1 und 100, jedoch mit einer glockenartigen Vorspannung erzeugt zwischen der MIN- und der MAX-Wert:
scala> (1 to 10).flatMap(_ => Gen.choose(1,100).sample).toList.sorted
res14: List[Int] = List(7, 21, 30, 46, 52, 64, 66, 68, 86, 86)
und Gen.chooseNum()
hat einen zusätzlichen Bias für die oberen und unteren Grenzen:
scala> (1 to 10).flatMap(_ => Gen.chooseNum(1,100).sample).toList.sorted
res15: List[Int] = List(1, 1, 1, 61, 85, 86, 91, 92, 100, 100)
Ich möchte eine choose()
Funktion, die mir ein Ergebnis geben würde, die etwa wie folgt aussieht:
scala> (1 to 10).flatMap(_ => choose(1,100).sample).toList.sorted
res15: List[Int] = List(1, 1, 1, 2, 5, 11, 18, 35, 49, 100)
Ich sehe, dass choose()
und chooseNum()
nehmen eine implizite Choose Eigenschaft als Argument. Soll ich das benutzen?
Wenn durch Bell-wie Sie Gauß bedeuten, dann ist es unmöglich, weil die Gaußsche (normale) Verteilung symmetrisch ist um den Mittelwert (die Sie 1 sein wollen), so dass Sie viele negative Werte (Sie kann den absoluten Wert bekommen und dann ist es wahrscheinlich das, was du willst), trotzdem gibt es zwei Möglichkeiten, um th zu erreichen Die erste Möglichkeit besteht darin, die Gleichverteilung (die standardmäßig von 'Gen.choose' verwendet wird) in die Normalverteilung zu konvertieren. Die zweite Möglichkeit besteht darin, Zufallsgeneratoren zu verwenden, die die Gaußverteilung unterstützen. Die Antwort sollte jedoch @LaloInDublin enthalten Ihre Anforderung) –
Keine Antwort, aber es lohnt sich zu überlegen, warum Sie das wirklich wollen oder müssen. Die Verzerrung in "chooseNum" usw. ist darauf ausgelegt, Fälle von Ecken zu erfassen. Es ist weniger klar, warum Sie die Art der Verteilung, die Sie beschreiben, möchten. –