Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Random 我怎样才能获得某个;“随机范围”;以更高的频率?_Random_Lua_Frequency - Fatal编程技术网

Random 我怎样才能获得某个;“随机范围”;以更高的频率?

Random 我怎样才能获得某个;“随机范围”;以更高的频率?,random,lua,frequency,Random,Lua,Frequency,我的问题基本上是,“我如何获得特定范围内的某些随机值,而不是范围外的随机值?” 请允许我说明我的意思: 如果我要,在大量的试验中,开始挑选各种 1-10之间的随机数,我应该在7-10中看到更多的数字 范围大于1-6范围 我尝试了几种方法,但没有得到理想的结果 第一个功能: 我经常只能得到7.5左右的数字,比如7.48和7.52。虽然这确实让我得到了一个在我的范围内的数字,但我不希望如此严格的一致性 第二个功能: 这个函数也没有按我希望的那样工作。我主要得到6.8和7.2这样的数字,但没有接近8的

我的问题基本上是,“我如何获得特定范围内的某些随机值,而不是范围外的随机值?”

请允许我说明我的意思:

如果我要,在大量的试验中,开始挑选各种 1-10之间的随机数,我应该在7-10中看到更多的数字 范围大于1-6范围

我尝试了几种方法,但没有得到理想的结果

第一个功能: 我经常只能得到7.5左右的数字,比如7.48和7.52。虽然这确实让我得到了一个在我的范围内的数字,但我不希望如此严格的一致性

第二个功能: 这个函数也没有按我希望的那样工作。我主要得到6.8和7.2这样的数字,但没有接近8的数字

第三项职能: 这个函数给了我稍微好一点的结果,函数始终返回8,但这就是问题所在-
一致性

我可以使用哪种类型的范例或实际解决方案在特定范围内生成比另一范围更多的随机数?

我已将其标记为Lua,但任何语言的解决方案都是可以理解的

我不想要如此严格的一致性。

这是什么意思

如果从任何RNG中取给定范围内的大量值的平均值,则应该期望得到相同的值。这意味着该范围内的每个数字出现的可能性相同

这个函数也没有按我希望的那样工作。我主要得到6.8和7.2这样的数字,但没有接近8的数字

你必须澄清“不起作用”是什么意思。为什么你希望它能给你8分?你可以看到这不仅仅是通过你使用的公式

例如,如果你使用了<代码>数学>随机(1,10)< /代码>,假设范围内的所有数字都有相等的出现机会,你应该期望平均值为5.5,在1和10的中间死亡(因为(1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10)/α=1)。


您使用了
math.random()>.3和math.random(7,10)或math.random(1,6)
,即70%的时间给出7、8、9或10(平均值=8.5),30%的时间给出1、2、3、4、5或6(平均值=3.5)。这样你的总体平均值应该是7(因为3.5*.3+8.5*.7=7)。如果你增加你的样本量,那正是你将看到的。因为样本量太小(尝试将其增加到100000),所以您可以看到任意大小的值。

我以前只需在该范围内生成两个随机数,然后选择最大(或最小)的值,就可以生成扭曲的随机值。这会使概率向高(或低)端点倾斜

从两个中选取最小的一个会得到线性概率分布。 选择三个中最小的一个会得到抛物线分布(更多的选择性,“另一端”的概率更小)。对于我的需要,线性分布是好的

不完全是你想要的,但也许已经足够好了


玩得开心

为解释干杯。我明白我所做的并不完全正确,但这就是我需要帮助的原因。在得到平均值后,我如何得到7-10之间的不同数字?不要再求平均值了。如果您想要的是“1-10之间的随机数,7-10范围内的数字比1-6范围内的数字多70%”,那么您只需要
math.random()>.3和math.random(7,10)或math.random(1,6)
。就这样。不要把它加在数百个其他值的总和上,然后取一个平均值(应该总是产生大致相同的值),只需要取这个数字并使用它。我刚刚从这个三元表达式的结果中快速打印了10个数字,我意识到你是对的:取平均值没有意义,因为无论如何都会得出几乎相同的值。谢谢只需选择一个你们喜欢的概率密度函数,计算累积分布函数的倒数,并根据它生成随机值。
function getAverage(i)
    math.randomseed(os.time())  
    local sum = 0;
    for j = 1,i do
        sum = sum + (1-math.random()^3)*10
    end
    print(sum/i)
end

getAverage(500)
function getAverage(i)
    math.randomseed(os.time())  
    local sum = 0;
    for j = 1,i do
        sum = sum + (math.random() > .3 and math.random(7,10) or math.random(1,6))
    end
    print(sum/i)
end

getAverage(500)
function getAverage(i)
    math.randomseed(os.time())  
    local sum = 0;
    for j = 1,i do
        sum = sum + (((math.random(10) * 2)/1.2)^1.05) - math.random(1,3)
    end
    print(sum/i)
end

getAverage(500)