对于路径,"getNumberOfTransporters" 函数抛出异常
For paths, the "getNumberOfTransporters" function throws an exception
我创建了一个非常简单的网络,其中包含一些节点和几条路径。有限数量的代理人(人)现在应该只是从 A 到 B 并返回一个循环。到目前为止工作。
接下来,我想使用路径的一般部分中的 "limit number of transporters" 选项来限制可以同时在特定路径上的代理数量。这没有用。当我想知道路径上有多少传输器时,我尝试调用(并显示输出)各种函数,如 "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()" 确实有效,它只是输出在 "limit number of transporters" 选项字段中指定的数字。
那么问题来了:为什么会抛出这个异常?我是在做错什么,还是 Anylogic 存在与这些转运相关的错误 functions/functionality?
顺便说一句,我在 64 位 Windows10 计算机上使用 AnyLogic 8 个人学习版 8.3.2。
由于 AnyLogic Paths 提供了这些方法(getNumberOfTransporters
,等等)这绝对是一个错误;这些方法在任何情况下都不应该抛出内部异常。
如果您的模型中没有运输舰队,快速测试确认这些方法会抛出此异常(因此抛出异常是可以原谅的)。如果您的舰队设置了家乡位置,则不会抛出异常 ,即使该位置与您正在检查的路径位于不同的网络中;即,即使任何运输者永远不可能在该路径上。 (如果您没有为舰队设置归属地,则会出现与此相关的不同异常。)
所以看起来您正在尝试使用正常的移动资源代理(即来自流程建模库)作为您的 'transporters' 而不是 Material 处理库运输车队。
如果您想限制 'transported' 在您的网络中移动,您有两个概念不同的选项:
使用流程建模资源池(正如您所做的那样)并通过使用诸如RestrictedAreaStart
之类的东西来控制流程建模块内的移动和 RestrictedAreaEnd
块(即,您将运动分解为相关部分并控制流经控制相关部分的块)。请参阅 Job Shop 示例模型以获得一个很好的(和复杂的)示例。请注意,从概念上讲,space 标记只为您提供模型中使用的距离(不是任何模型行为)。这是常态:space 标记仅用于可视化您的模型并提供距离。 (它还控制哪些移动是有效的,因为需要有一条通过网络的路线,但如果不允许所需的移动通常是设计错误,所以这不是真正的模型行为。)
改用 TransporterFleet
。它们可以与普通的流程建模块进行互操作(见下面的屏幕截图),并且它们被精确地设计为支持这种 'control their flow via restrictions on numbers of transporters on paths' 的风格(另外还具有 load/unload 次的内置功能,下车后的行为等。 ).请注意,从概念上讲,使用 Materials 处理库 ,space 标记定义了模型行为 (而不仅仅是给你距离和可视化)。这是与 Materials Handling 库的主要概念偏离。 (同样,您使用 Materials Handling space 标记定义的传送网络也定义了模型行为;例如,其中的 Station
元素类似于流程建模中的 Service
块库。)
P.S。我的意思是要补充一点,除非您使用运输舰队,否则 是 没有直接的方法来获取哪些特工在哪些路径上。最接近的是网络支持 getNearestPath
功能(请参阅帮助中 Network
的 API 参考),其中一种方式会给您最近的 Path
代理. (因此,通过遍历所有资源代理并针对每个资源代理进行检查,您可以间接确定每条路径有多少 'on',但您必须小心,因为这只会给出 最近的 Path
.)但这与你想要实现的目标无关。
我创建了一个非常简单的网络,其中包含一些节点和几条路径。有限数量的代理人(人)现在应该只是从 A 到 B 并返回一个循环。到目前为止工作。
接下来,我想使用路径的一般部分中的 "limit number of transporters" 选项来限制可以同时在特定路径上的代理数量。这没有用。当我想知道路径上有多少传输器时,我尝试调用(并显示输出)各种函数,如 "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()" 确实有效,它只是输出在 "limit number of transporters" 选项字段中指定的数字。
那么问题来了:为什么会抛出这个异常?我是在做错什么,还是 Anylogic 存在与这些转运相关的错误 functions/functionality?
顺便说一句,我在 64 位 Windows10 计算机上使用 AnyLogic 8 个人学习版 8.3.2。
由于 AnyLogic Paths 提供了这些方法(getNumberOfTransporters
,等等)这绝对是一个错误;这些方法在任何情况下都不应该抛出内部异常。
如果您的模型中没有运输舰队,快速测试确认这些方法会抛出此异常(因此抛出异常是可以原谅的)。如果您的舰队设置了家乡位置,则不会抛出异常 ,即使该位置与您正在检查的路径位于不同的网络中;即,即使任何运输者永远不可能在该路径上。 (如果您没有为舰队设置归属地,则会出现与此相关的不同异常。)
所以看起来您正在尝试使用正常的移动资源代理(即来自流程建模库)作为您的 'transporters' 而不是 Material 处理库运输车队。
如果您想限制 'transported' 在您的网络中移动,您有两个概念不同的选项:
使用流程建模资源池(正如您所做的那样)并通过使用诸如
RestrictedAreaStart
之类的东西来控制流程建模块内的移动和RestrictedAreaEnd
块(即,您将运动分解为相关部分并控制流经控制相关部分的块)。请参阅 Job Shop 示例模型以获得一个很好的(和复杂的)示例。请注意,从概念上讲,space 标记只为您提供模型中使用的距离(不是任何模型行为)。这是常态:space 标记仅用于可视化您的模型并提供距离。 (它还控制哪些移动是有效的,因为需要有一条通过网络的路线,但如果不允许所需的移动通常是设计错误,所以这不是真正的模型行为。)改用
TransporterFleet
。它们可以与普通的流程建模块进行互操作(见下面的屏幕截图),并且它们被精确地设计为支持这种 'control their flow via restrictions on numbers of transporters on paths' 的风格(另外还具有 load/unload 次的内置功能,下车后的行为等。 ).请注意,从概念上讲,使用 Materials 处理库 ,space 标记定义了模型行为 (而不仅仅是给你距离和可视化)。这是与 Materials Handling 库的主要概念偏离。 (同样,您使用 Materials Handling space 标记定义的传送网络也定义了模型行为;例如,其中的Station
元素类似于流程建模中的Service
块库。)
P.S。我的意思是要补充一点,除非您使用运输舰队,否则 是 没有直接的方法来获取哪些特工在哪些路径上。最接近的是网络支持 getNearestPath
功能(请参阅帮助中 Network
的 API 参考),其中一种方式会给您最近的 Path
代理. (因此,通过遍历所有资源代理并针对每个资源代理进行检查,您可以间接确定每条路径有多少 'on',但您必须小心,因为这只会给出 最近的 Path
.)但这与你想要实现的目标无关。