任何逻辑端口交替使用(?)

Anylogic ports alternate use (?)

在使用预定义的库创建了几个模型之后,我正在从头开始构建模型。在这个模型中,我需要几个不同的代理在它们之间交换信息,我使使用动态变量成为可能,并使它们从上层代理可见。连接器将连接块。在图片中我所做的和我的意思的一个例子。

因为我有很多信息要交换,所以我使用“数组”选项并使用适当的维度,为输入创建了一个变量,为输出创建了一个变量。 我想知道是否可以使用端口使它们看起来更干净并具有更好的功能。我看到它们连接到现有的库组件,但从未在从头开始制作的代理中看到过。在我读到的文档中,我可以使用命令“port.send(obj)”和“port.receive(obj)”,但我无法做任何工作。 所以我的问题是:是否可以使用端口在代理之间通过代码(可能是代理,或动态变量或其他)发送对象?如果是,如何在目标代理中触发接收动作? 非常感谢! P

通常,您可以向对象添加端口,甚至可以创建自定义端口类型,如 here 所述。然而,为了向端口发送消息/从端口发送消息,消息必须扩展 A​​gent 并且端口必须通过连接器连接。实现模式为:

  1. 内部发件人代理:有一个 Enter 块连接到端口
  2. Inside Receiver 代理:有一个端口连接到 Exit
  3. 在主代理中:将发送方端口连接到接收方端口
  4. 内部发件人:创建一个 msg 代理并使用 enter.take(msg)
  5. 上面会执行:Enter -> Sender port -> Receiver port -> Exit
  6. 在 Receiver
  7. 中的 Exit 块的 on Exit 属性 中执行某些操作

我终于明白如何按照我的想法去做了。 端口能够仅通过一个连接器发送和接收数据。正如@Artem 所建议的,不再需要后续块,但他的回答给了我正确的建议来找到我自己的解决方案。

当端口在它们之间交换消息时,当他们收到消息时,他们称之为“msg”;所以“msg”可以被提供给函数,或者它可以用于解决内部字段(即:msg.custom_field)。

要充分利用端口,应通过启用开发人员模式来实现低级使用细节。为此,请遵循以下指示: 工具 -> 首选项 -> 开发 -> 库开发者模式。 选择这个声音,现在端口在点击时有那些新的声音:

端口现在可以配置为“in”和“out”消息类型(如果需要它们也可以不同),并且可以在端口接收或发送消息时关联回调函数。 例如,在图 1 中,我设置了一个“doSomething”函数,它接受收到的消息 class 并对其执行一些操作。

要发送消息,应使用“port.send(something)”代码,发送前将考虑 OnSend 函数。

也可以创建继承端口 class 类型的自定义端口,但我没有把自己逼到白兔洞那么深,抱歉。

在图 2 中,有一个我用(工作)端口创建的小型测试平台。我希望这个小指南可以帮助到大家,即使这种用途只是为了非常特殊的需要。