我正在研究一个项目,我需要在10个深度级别上映射可变数量的元素(例如12到18之间)。到目前为止,这里不用担心。
困扰我的是:我们目前正在考虑实施这一分配的集中点,但我不知道如何干净利落地完成。
在上述情况中,总共12-18个元素分布在10个级别上。但是随着浓度的增加,我们需要将大部分元素映射到浓度的深度(比如深度4)。
我意识到这意味着我们正在创造一个钟形曲线,但我无法找到一种干净利落的方式来实现它,尽可能少的剩余风险。我毕竟在游戏加载时运行了几百次。
编辑:以下是所需内容的一个示例。
数量:18
答案 0 :(得分:1)
嗯,明确的一种方法是使用带峰值的离散分布,泊松可能是一个不错的选择
样本泊松最多9,如果它高于9拒绝并重新取样。否则将它移1并返回。
一些基于MathDotNet
的伪代码using MathNet.Numerics.Distributions;
int Sample(Random rng, double lambda) {
for( ;; ) {
int r = Poisson.Sample(rng, lambda);
if (r < 10)
return r+1;
}
return -1;
}
检查Poisson distribution的模式,很明显,对于4的峰值,你必须在3到4之间lambda
。lambda=3
,你&#39;在3和4的采样中得到两个相等的峰值,对于lambda=4
,您将在4和5处获得两个峰值(请记住移位1)。只需使用它并尝试将其设置为适合您要求的内容