对于路径,“getNumberOfTransporters”函数会抛出异常

问题描述 投票:0回答:1

我创建了一个非常简单的网络,其中包含一些节点和一些路径。现在,有限数量的代理人(人)应该从A到B再回到循环中。到目前为止工作。

接下来,我想使用路径的常规部分中的“限制传输器数量”选项限制可以在特定路径上同时处理的代理程序数。这没用。当我想知道路径上有多少传输器时,我尝试调用(并显示输出)各种函数,如“getNumberOfTransporters()”,“getTransporters()”等(由“pathname.functionname()调用”) “,每个都导致异常,通常看起来像这样:

Exception during discrete event execution:
NullPointerException
java.lang.NullPointerException
    at com.anylogic.engine.markup.Path.getNumberOfTransporters(Unknown Source)
    at movetest.Main.executeActionOf(Main.java:141)
    at com.anylogic.engine.EventTimeout.execute(Unknown Source)
    at com.anylogic.engine.Engine.c(Unknown Source)
    at com.anylogic.engine.Engine.gc(Unknown Source)
    at com.anylogic.engine.Engine.a(Unknown Source)
    at com.anylogic.engine.Engine$i.run(Unknown Source)

函数“getMaxNumberOfTransporters()”确实有效,它只输出“限制传输数”选项字段中指定的数字。

所以问题是:为什么抛出这个异常?我做错了什么,或者Anylogic是否存在与这些与运输商相关的功能/功能的错误?

顺便说一下,我在64位Windows 10计算机上使用AnyLogic 8个人学习版8.3.2。

anylogic
1个回答
2
投票

由于AnyLogic Paths提供这些方法(getNumberOfTransporters等),这绝对是一个bug;在任何情况下,这些方法都不应该抛出内部异常。

快速测试确认如果模型中没有运输车队,这些方法会抛出此异常(因此抛出异常会更加可原谅)。如果您拥有设置了归属位置的车队,则不会抛出异常,即使该位置与您正在检查的路径位于不同的网络中;即使任何运输商都不可能在那条路上。 (如果您没有为车队设置起始位置,则会得到与此相关的其他异常。)

因此,您似乎正在尝试使用正常的移动资源代理(即,来自流程建模库)作为“传输器”而不是物料处理库传输器机群。

如果您想限制网络中的“传输”移动,您有两个概念上不同的选项:

  1. 使用流程建模资源池(正如您所做)并通过使用诸如RestrictedAreaStartRestrictedAreaEnd块之类的东西控制流程建模块内的移动(即,您将运动分解为相关的段并控制通过控制流的块的流量相关部分)。请参阅Job Shop示例模型,以获得一个好的(和复杂的)示例。请注意,从概念上讲,空间标记仅为您提供模型中使用的距离(不是任何模型行为)。这是常态:空间标记仅用于显示模型并提供距离。 (它还控制哪些移动是有效的,因为需要通过网络的路线,但如果不允许所需的移动通常是设计错误,所以这不是真正的模型行为。)
  2. 请改用TransporterFleet。它们可以与普通的过程建模模块进行互操作(参见下面的屏幕截图),它们的设计正是为了支持这种“通过限制路径上传输器数量来控制流量”的风格(还有内置的加载/卸载时间功能,行为下车后等)。请注意,在概念上使用材料处理库,空间标记定义了模型行为(而不仅仅是为您提供距离和可视化)。这是材料处理库的主要概念偏离。 (类似地,您使用材料处理空间标记定义的传送网络也定义模型行为;例如,其中的Station元素类似于过程建模库中的Service块。)

simple transporter usage in a DES

附:我想补充一点,除非您使用运输车队,否则没有直接的方法可以让哪些代理商在哪条路径上。最接近的是网络支持getNearestPath函数(请参阅帮助中的Network的API参考),其中一种风格将为您提供最接近代理的Path。 (因此,通过循环遍历所有资源代理并为每个资源代理检查它们,你可以倾斜地确定每条路径上有多少',但你必须要小心,因为这只会给出最接近的Path。)但这与你想要实现的目标。

© www.soinside.com 2019 - 2024. All rights reserved.