Anylogic 嵌套代理 RandomNumberGenerator
Anylogic Nested Agent RandomNumberGenerator
我有一个嵌套在另一个代理中的代理。这个嵌套代理有一个函数调用 annylogic 概率分布函数 (pdf),例如 gamma()、lognormal() 等。但是,如果我在嵌套代理中调用这些 pdf,我会不断收到 nullPointerException。我意识到这是因为嵌套代理无法访问默认的 randomNumberGenerator。有没有办法我也可以访问嵌套代理中的 defaultRandomNumberGenerator 或者是为每个嵌套代理创建新生成器的唯一解决方案?
只有以某种方式连接到引擎的代理才能访问随机数生成器。如果您的实验设置为 运行 main - 如下例 - 那么所有想要使用随机数生成器的代理都必须以某种方式连接到 main
所以如果你这样做,例如它不会工作,你会得到一个 NPE(空指针异常)
如果你这样做,它会
最好的选择是创建自己的随机数生成器
lognormal(0.1, 0.1, 5, new Random(0));
(只需将随机数生成器放在某个地方,以便您可以一次又一次地使用它,否则您每次都会得到相同的数字,因为它是用于获取数字的相同(新)随机对象)
这种设计更好 - 请参阅此处的示例
错误是因为您的代理在代理的模型层次结构之外。
这不是好的做法;应该很少 需要 在模型层次结构之外拥有 'floating' 代理;他们总是可以在某个地方的特工人群中。
在极少数情况下有很强的设计理由这样做(或者如果您使用普通 Java classes 并且因此有 Java 对象,根据定义它们不是代理因此在代理层次结构之外),只需给它们一个参数(在 Java class 的情况下的字段)指向某个代理 is in模型层次结构(通常是它们的 'generator'),然后您可以通过该参数调用所有 'required-to-be-in-model-hierarchy' 函数。 (也就是说,您正在 委托 将所有此类调用委托给 可以 调用它们的代理实例。)
例如,嵌套代理类型(假设 Thing
)的参数 agentRef
类型 Agent
由创建它的人设置;例如
Thing t = new Thing(this);
然后,在 Thing 中,您使用 agentRef.normal(1,10)
.
等代码
我有一个嵌套在另一个代理中的代理。这个嵌套代理有一个函数调用 annylogic 概率分布函数 (pdf),例如 gamma()、lognormal() 等。但是,如果我在嵌套代理中调用这些 pdf,我会不断收到 nullPointerException。我意识到这是因为嵌套代理无法访问默认的 randomNumberGenerator。有没有办法我也可以访问嵌套代理中的 defaultRandomNumberGenerator 或者是为每个嵌套代理创建新生成器的唯一解决方案?
只有以某种方式连接到引擎的代理才能访问随机数生成器。如果您的实验设置为 运行 main - 如下例 - 那么所有想要使用随机数生成器的代理都必须以某种方式连接到 main
所以如果你这样做,例如它不会工作,你会得到一个 NPE(空指针异常)
如果你这样做,它会
最好的选择是创建自己的随机数生成器
lognormal(0.1, 0.1, 5, new Random(0));
(只需将随机数生成器放在某个地方,以便您可以一次又一次地使用它,否则您每次都会得到相同的数字,因为它是用于获取数字的相同(新)随机对象)
这种设计更好 - 请参阅此处的示例
错误是因为您的代理在代理的模型层次结构之外。
这不是好的做法;应该很少 需要 在模型层次结构之外拥有 'floating' 代理;他们总是可以在某个地方的特工人群中。
在极少数情况下有很强的设计理由这样做(或者如果您使用普通 Java classes 并且因此有 Java 对象,根据定义它们不是代理因此在代理层次结构之外),只需给它们一个参数(在 Java class 的情况下的字段)指向某个代理 is in模型层次结构(通常是它们的 'generator'),然后您可以通过该参数调用所有 'required-to-be-in-model-hierarchy' 函数。 (也就是说,您正在 委托 将所有此类调用委托给 可以 调用它们的代理实例。)
例如,嵌套代理类型(假设 Thing
)的参数 agentRef
类型 Agent
由创建它的人设置;例如
Thing t = new Thing(this);
然后,在 Thing 中,您使用 agentRef.normal(1,10)
.