【发布时间】:2018-01-10 04:22:19
【问题描述】:
我正在使用 AnyLogic 构建离散事件模型。我想为进入流程的每个代理分配唯一的 ID。我包括了一个变量 ID 和另一个变量 clientID。当实体获得“this.clientID = ID++;”在出口处。我注意到有多个代理获得完全相同的 ID。是否有任何方法可以在每个代理进入系统时为其分配唯一 ID?
【问题讨论】:
我正在使用 AnyLogic 构建离散事件模型。我想为进入流程的每个代理分配唯一的 ID。我包括了一个变量 ID 和另一个变量 clientID。当实体获得“this.clientID = ID++;”在出口处。我注意到有多个代理获得完全相同的 ID。是否有任何方法可以在每个代理进入系统时为其分配唯一 ID?
【问题讨论】:
每个代理都有唯一的id,它是内部生成的,可以用getId()函数返回。
也可以按照您的描述生成唯一 ID。然后,您应该在画布上使用带有 clientID 变量的自定义代理类型。 Source 块应该创建这种类型的新代理。 Main 应该在画布上有一个名为 ID 的变量。 Source 块的 On At Exit 操作代码应为:agent.clientID = ID++;
顺便说一句,getIndex() 调用不安全,因为它返回人口中的代理索引。如果人口规模发生变化,人口中的代理人指数也可能发生变化。 getIndex() 可能会为不同的代理返回相同的索引,以防它们位于不同的群体中。最后,getIndex() 总是为独立代理返回 -1。
【讨论】:
您需要了解基于代理的工作原理:
如果代理持有变量“ID”,那么每个代理都有自己的“ID”值。因此,当它们中的每一个单独执行“ID++”代码时,它们都会得到相同的值。
AnyLogic 在创建时为每个代理分配了一个唯一 ID。您可以使用“myAgent.getIndex()”检索它。
希望对你有帮助
【讨论】: