the*_*heo 6 random haskell non-uniform-distribution
的随机包包含一个类型的类Uniform为均匀分布的类型。这适用于以下类型:
data Coin = Heads | Tails
Run Code Online (Sandbox Code Playgroud)
但是假设我想对一组具有非均匀分布的事物进行建模,例如通过添加硬币落在其一侧的可能性:
data Coin = Heads | Tails | Side
Run Code Online (Sandbox Code Playgroud)
现在我仍然可以Uniform在其实现中使用非均匀分布来实现,但这会欺骗Uniform.
我是否必须只使用一个独立的函数,或者是否有一些类型类用于“实际”分布的概念?
这个类型类在 RPG 的上下文中很有用,在那里你可以有一些类型
data Rarity = Common | Rare
data DropType = Club | Sword
Run Code Online (Sandbox Code Playgroud)
获得 aRare和它是 a的机会Sword可能低于其他值。但是从该类型的所有值的集合中提取值的概念仍然相同Rarity,DropType这就是为什么这对我来说看起来像是类型类的工作。
一种选择是使用random-fu,它提供分类分布。一个简单的例子:
import Data.Random
import Data.Random.Distribution.Categorical
import Data.Random.Sample
data Coin = Heads | Tails | Side deriving Show
-- set up distribution, weights don't have to sum to 1
coin :: Categorical Double Coin
coin = fromList [(0.5, Heads), (0.5, Tails), (0.001, Side)]
-- draw a single sample from the distribution
main = sample coin >>= print
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
94 次 |
| 最近记录: |