为什么一个代理在创建并发送给另一个代理后参数为空?
Why are parameters of an agent empty after creation and sending it to another agent?
在我的 Anylogic 模型中,我有接收 orders
的代理 (carriers
),经过一些延迟处理后,应该创建一个新的 truckOrder
并将其发送到 truck
代理人。我已将其编码在出口块中,如下图所示。当 运行 时,我在这个退出块中收到 NullPointerException
错误,因为 order.terminal
和 order.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.terminal
和 agent.customer
而不是 order.terminal
和 order.customer
(它们指的是您在 Carrier 中的变量可能尚未设置为任何东西)。
在我的 Anylogic 模型中,我有接收 orders
的代理 (carriers
),经过一些延迟处理后,应该创建一个新的 truckOrder
并将其发送到 truck
代理人。我已将其编码在出口块中,如下图所示。当 运行 时,我在这个退出块中收到 NullPointerException
错误,因为 order.terminal
和 order.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.terminal
和 agent.customer
而不是 order.terminal
和 order.customer
(它们指的是您在 Carrier 中的变量可能尚未设置为任何东西)。