生成加权随机数

生成加权随机数

我试图设计一种(很好的)方法,从一个可能的数字范围中选择一个随机数,在这个范围内的每一个数都被赋予一个权重。简单地说:给定数字(0,1,2)的范围,选择一个0有80%的概率被选中的数字,1有10%的概率,2有10%的机会。

我的大学统计课程已经过去8年了,所以你可以想象一下,目前我还没有找到合适的公式。

这是我想出的“廉价和肮脏”的方法。此解决方案使用ColdFusion。你的语言可以用任何你喜欢的语言。我是个程序员,我想我能处理移植它。最终,我的解决方案需要使用Groovy-我是在ColdFusion中编写的,因为在CF中快速编写/测试很容易。

public function weightedRandom( Struct options ) {

    var tempArr = [];

    for( var o in arguments.options )
    {
        var weight = arguments.options[ o ] * 10;
        for ( var i = 1; i<= weight; i++ )
        {
            arrayAppend( tempArr, o );
        }
    }
    return tempArr[ randRange( 1, arrayLen( tempArr ) ) ];}// test itopts = { 0=.8, 1=.1, 2=.1  };for( x = 1; x<=10; x++ ){
    writeDump( weightedRandom( opts ) );    }

我正在寻找更好的解决方案,请提出改进或替代方案。


繁星coding
浏览 421回答 3
3回答

德玛西亚99

生成0到1之间的随机数R。若R in[0,0.1)->1若R in[0.1,0.2)->2若R in[0.2,1]->3如果你不能直接得到一个介于0到1之间的数字,那么在一个范围内生成一个能产生任意精度的数字。例如,如果你有重量(1,83.7%)及(2,16.3%),登记人数由1人增至1 000人。1-837是1.838-1000是2。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript