为什么一个代理在创建并发送给另一个代理后参数为空?

Why are parameters of an agent empty after creation and sending it to another agent?

在我的 Anylogic 模型中,我有接收 orders 的代理 (carriers),经过一些延迟处理后,应该创建一个新的 truckOrder 并将其发送到 truck 代理人。我已将其编码在出口块中,如下图所示。当 运行 时,我在这个退出块中收到 NullPointerException 错误,因为 order.terminalorder.customer 是空的。

这是创建 order(在 customer 代理中)并发送到 carrier 的输入块的方式:

Order order = new Order(this, main.terminals(0));
Carrier carrier = randomFrom(main.carriers);
if (carrier != null)
    carrier.receiveOrder.take(order);

另外,当我以不同的方式执行时,如下所示,它不起作用。有人知道为什么吗?

Order order = new Order(this, main.terminals(1));
Carrier carrier = randomFrom(main.carriers);
if (carrier != null)        
    send(order, carrier.receiveOrder);

NullPointerException 错误位于 Carrier.java 选项卡的这些行中:

您在 Carrier 中有一个虚假的 order 变量。

您正在 Customer 中创建类型 Order 代理并将其传递给 Carrier 的 Enter 块。因此(假设您设置了 Enter 块,使其“代理类型”为 Order)您应该在块操作中通过关键字 agent 引用它。 (这个关键字指的是当前正在通过区块的代理,也就是你的订单代理。)

因此您应该使用 agent.terminalagent.customer 而不是 order.terminalorder.customer (它们指的是您在 Carrier 中的变量可能尚未设置为任何东西)。