从另一个代理(anylogic)访问“Main”中的变量

Posted

技术标签:

【中文标题】从另一个代理(anylogic)访问“Main”中的变量【英文标题】:access variables in "Main" from another agent (anylogic) 【发布时间】:2021-10-11 02:39:24 【问题描述】:

我有一个如下所示的模型,有两种情况,我正在为两种情况运行它。

在第一次运行中(针对情况1),我在“Main”中的“event-generateDemand”中将traceln函数编写为“traceln(productDemand)”。在模拟结束时,我得到下面第一列中的值。 2)在第二次运行中(对于情况2),有一次我在“生产者”代理中的“事件”中将traceln函数写为“traceln(main.productDemand)”。在第二次模拟结束时,我得到了值在下面的第二列中。

通常,这两个值总是相同的,预计在每个模拟时间它们必须相同,但它们并不相同,如图 1 所示。有什么问题?为什么当我们尝试同时从另一个代理访问时,“productDemand”变量会有所不同?

我希望我能够解释我的问题。

图 1- 获得的结果为表格格式 图 2- 放置在 Main 中的 Event 截图 图 3- 放置在 Producer 代理中的 Event 截图 图 4- 运行中两个 traceln 函数的结果 图 5- 仿真实验截图。

fig.1

fig.2

fig.3

fig.4

fig.5

【问题讨论】:

欢迎来到 SOF @Ali 。您可以共享模型屏幕截图而不是共享模型文件吗?我们大多数人都没有时间打开和研究你的模型:)。让我们的生活尽可能轻松。另请参阅benjamin-schumann.com/blog/2021/4/1/… 您的问题:很可能,您使用随机种子运行,每次都会产生不同的结果,您检查了吗? 感谢您的回复。我很高兴你的回应。现在我正在编辑帖子,我将添加模型的屏幕截图。 【参考方案1】:

模型中没有错误,它只是一个简单的时间案例。并非所有事件都发生在完全相同的“时间”,尽管它们都发生在同一时间步长。一个总是先于另一个执行。

请看下面的简单示例:

我有 eventA 增加变量值,然后跟踪该值(类似于您在 main 上的事件)

然后我还有另一个跟踪变量的事件,类似于您在代理中的事件。

然而,当我同时运行模型时,变量似乎与不同的跟踪位置不同

如果您单击控制台中的“事件”选项卡,您将看到事件 B 计划在事件 A 之前运行

即使两者都将在模型中的同一时间步运行,但它们不会“同时”运行

如果您想完全控制在特定时间步发生的事情,建议让一个事件以您想要的时间间隔运行,例如每天,然后让它坐在 main 上,然后调用所有按照您希望它们执行的顺序执行函数。

如果您不这样做,那么 AnyLogic 将在事件创建时安排事件,大部分时间是您将它们放置在画布上的顺序。

【讨论】:

非常感谢您的回复。我很感激你的回答。我认为问题与您提到的直接事件有关。我只是有一个小问题。如果我将所有“事件”的“操作”字段中的代码集中到一个“事件”中,是否会给我提供真实且相互兼容的结果? 很高兴。从技术上讲,如果您将多个事件的所有代码合并为一个,它应该具有相同的效果。如果您发现我的回答足以解决您的问题,请记住接受它。

以上是关于从另一个代理(anylogic)访问“Main”中的变量的主要内容,如果未能解决你的问题,请参考以下文章

AnyLogic 为 Main 中的代理定义速度

AnyLogic中“代理”类型参数的访问值

Anylogic:从模拟菜单访问变量

如何将 Main 中的参数提供给 Anylogic 中的代理

如何将 AnyLogic 代理从一个空间移动到另一个空间?

在AnyLogic中更改选定代理的主类参数