1

我在 Anylogic 中运行模拟,并尝试校准以下分布:

Jump = normal(coef1, coef2, -1, 1);

但是,一旦开始校准(实验),我就会不断收到以下消息:

随机数生成需要太多迭代(> 10000)

我试图用其他值替换 -1 和 1 并继续得到相同的东西。
我还尝试更改 and 的范围coef1coef2放入类似的内容[0,1],但我仍然遇到相同的错误。

我不明白。有任何想法吗?

4

2 回答 2

2

四参数法线法没有被弃用,也不是“coef1 和 coef2 是要求解的系数的校准”。你从哪里得到这样的理解?或者您是说您正在使用您的 AnyLogic 实验(可能是多次运行或优化实验)来“校准”该分布,在这种情况下,您需要在这里解释“校准”的含义——您的期望的结果?

如果您查看 API 参考(AnyLogic 类和函数 --> API 参考 --> com.xj.anylogic.engine --> 实用程序),您会发现它是一种使用截断正态分布的方法。

public double normal(double min,
                     double max,
                     double shift,
                     double stretch) 

前 2 个参数是最小值和最大值(它将重复采样并忽略 [min,max] 范围之外的值);后两个实际上是平均值和标准差。因此,如果 min 或 max 意味着它将采样太多次以获取范围内的值,您将收到您提到的错误。

API参考详情如下:

生成截断正态分布的样本。分布 normal(1, 0) 被拉伸系数拉伸,然后通过 shift 向右移动,然后被截断以适应 [min, max] 区间。通过丢弃此间隔之外的每个样本并进行后续尝试来执行截断。有关更多详细信息,请参见 normal(double, double)

参数: min - 此函数将返回的最小值。分布被截断以返回高于此值的值。如果样本(拉伸和移动)低于此值,它将被丢弃并抽取另一个样本。使用 -infinity 表示“无限制”。max - 此函数将返回的最大值。分布被截断以返回低于此值的值。如果样本(拉伸和移动)大于此值,则将丢弃该样本并抽取另一个样本。使用 +infinity 表示“无限制”。shift - 指示(拉伸的)分布向右移动多少的位移参数 = 平均值 stretch - 指示分布将被拉伸多少的拉伸参数 = 标准偏差 返回:生成的样本

于 2015-09-18T08:10:09.033 回答
0

根据AnyLogic 的文档,没有normal哪个版本需要 4 个参数。另请注意,如果您指定平均值和标准差,则将标准差放在平均值之前,顺序是不寻常的(对于概率学家/统计学家

于 2015-09-17T18:32:25.013 回答