gpt4 book ai didi

ScalaCheck:选择一个具有自定义概率分布的整数

转载 作者:行者123 更新时间:2023-12-04 14:25:33 25 4
gpt4 key购买 nike

我想在 ScalaCheck 中创建一个生成器,它可以生成介于 1 和 100 之间的数字,但对接近 1 的数字有钟形偏差。
Gen.choose()在最小值和最大值之间随机分配数字:

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)

Gen.chooseNum()对上限和下限有一个额外的偏差:
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)

我想要一个 choose()函数会给我一个看起来像这样的结果:
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)

我看到了 choose()chooseNum()取一个隐式 Choose特质作为论据。我应该用那个吗?

最佳答案

您可以使用 Gen.frequency() (1) :

 val frequencies = List(
(50000, Gen.choose(0, 9)),
(38209, Gen.choose(10, 19)),
(27425, Gen.choose(20, 29)),
(18406, Gen.choose(30, 39)),
(11507, Gen.choose(40, 49)),
( 6681, Gen.choose(50, 59)),
( 3593, Gen.choose(60, 69)),
( 1786, Gen.choose(70, 79)),
( 820, Gen.choose(80, 89)),
( 347, Gen.choose(90, 100))
)

(1 to 10).flatMap(_ => Gen.frequency(frequencies:_*).sample).toList
res209: List[Int] = List(27, 21, 31, 1, 21, 18, 9, 29, 69, 29)

我从 https://en.wikipedia.org/wiki/Standard_normal_table#Complementary_cumulative 得到频率.代码只是表格的一个示例(% 3 或 mod 3),但我认为您可以理解。

关于ScalaCheck:选择一个具有自定义概率分布的整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35420016/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com