具有给定均值和标准差的正随机数生成
Posted
技术标签:
【中文标题】具有给定均值和标准差的正随机数生成【英文标题】:Positive random number generation with given mean and standard deviation 【发布时间】:2021-10-01 00:42:00 【问题描述】:我正在做一个模拟项目。在随机数生成方面需要帮助。我需要两组随机数。
属性:
-
主集 (var_a) > 正态分布,大于 0,具有给定的平均值和标准。
辅助集 (var_b) -> 与主集相同,但有一个附加值,第二个集不能大于主集。原因是确定性函数的输出将仅以 0-1 之间的百分比表示。例如:
service level calculation
import numpy as np
n = 100000
# Calls Handled
callshandled = np.random.normal(loc=65, scale=97, size=n)
print('Calls handled: ', callshandled)
# Call handled within sl. Has to always be less or equal to Calls Handled
ansinsl = np.random.normal(loc=60, scale=82, size=n)
print('Answered in SL', ansinsl)
# Service Level - Has to be between 0-1. With normal distribution we get values in negative
sl = np.array(ansinsl)/np.array(callshandled)
print('Service level', sl)
Calls handled: [ 43.26825426 129.79198758 31.56460354 ... 37.45059791 1.71420416
-94.87241356]
Answered in SL [-12.72293091 204.28084996 232.25722235 ... 166.03208722 -53.69933624
-36.71949656]
Service level [ -0.29404771 1.57390956 7.35815427 ... 4.43336279 -31.32610312
0.38704082]
【问题讨论】:
抱歉错过了添加一个简单的计算:it service_level = b/a 您使用什么语言?请展示你到目前为止所做的尝试。 这是蟒蛇。添加示例代码 如果您使用的是 Python,Scipy 中的统计和随机库有一个开箱即用的 truncated normal distribution,这将为您节省部分拒绝。对于无限的右边界 b,您可以使用b = numpy.inf
。
【参考方案1】:
有一种众所周知的“自然”方式可以生成对高斯伪随机变量,称为Box-Muller。
你可以这样试试:
-
使用 Box-Muller 生成成对的单位正态变量
将这些对缩放到您的 (µ,σ) 参数是什么
拒绝不符合您标准的配对
【讨论】:
谢谢,试试这个。发布示例代码更清晰。以上是关于具有给定均值和标准差的正随机数生成的主要内容,如果未能解决你的问题,请参考以下文章
如何在Matlab中生成具有对数正态分布和指定几何平均数和几何标准差的随机数