我正试图设计一种(好的)方法,从一系列可能的数字中选择一个随机数,其中该范围内的每个数字都被赋予一个权重.简单地说:给定数字范围(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 it
opts = { 0=.8, 1=.1, 2=.1 };
for( x = 1; x<=10; x++ )
{
writeDump( weightedRandom( opts ) …Run Code Online (Sandbox Code Playgroud)