从另一个代理(任意逻辑)访问 "Main" 中的变量

access variables in "Main" from another agent (anylogic)

我有一个模型,如下所示,有两种情况,我运行针对两种情况使用它。

在第一个运行(针对情况1)中,我在“Main”中的“event-generateDemand”中将traceln 函数写为“traceln(productDemand)”。在模拟结束时,我得到下面第一列中的值。 2)在第二个运行(针对情况2)中,有一次我将traceln函数写成“traceln(main.productDemand)”在“Producer”agent.At结尾的“事件”中第二次模拟,我得到下面第二列中的值。

通常情况下,这两个值总是相同的,预计在每次仿真时它们都必须相同,但它们与图1中所示的不相同。有什么问题?为什么当我们尝试同时从另一个代理访问时,“productDemand”变量不同?

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

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

fig.1

fig.2

fig.3

fig.4

fig.5

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

参见下面的简单示例:

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

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

然而当我运行模型同时出现变量从不同的tracing位置不同

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

即使在模型中两者将 运行 同时 运行 “同时”运行

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

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