对于路径,“getNumberOfTransporters”函数会引发异常
Posted
技术标签:
【中文标题】对于路径,“getNumberOfTransporters”函数会引发异常【英文标题】:For paths, the "getNumberOfTransporters" function throws an exception 【发布时间】:2018-12-26 01:55:42 【问题描述】:我创建了一个非常简单的网络,其中包含一些节点和一些路径。数量有限的代理人(人民)现在应该只是从 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 Personal Learning Edition 8.3.2。
【问题讨论】:
没有看到完整的代码是不可能的。 【参考方案1】:由于 AnyLogic Paths 提供了这些方法(getNumberOfTransporters
等),这绝对是一个错误;这些方法在任何情况下都不应该引发内部异常。
快速测试确认,如果您的模型中没有运输车队,这些方法会引发此异常(因此引发的异常更容易被原谅)。如果您的车队设置了归属位置,则不会引发异常,即使该位置与您正在检查的路径位于不同的网络中;即,即使任何运输者永远不可能在该路径上。 (如果您没有为车队设置归属位置,则会出现与此相关的不同例外情况。)
所以看起来您正在尝试使用普通的移动资源代理(即,来自 Process Modeling 库)作为您的“运输机”,而不是 Material Handling 库运输机车队。
如果您想限制网络中的“传输”移动,您有两个概念上不同的选项:
使用流程建模资源池(如您所做的那样)并通过使用 RestrictedAreaStart
和 RestrictedAreaEnd
块(即,您将运动分解为相关部分,并通过控制相关部分的块来控制流程)。请参阅 Job Shop 示例模型以获取一个好的(且复杂的)示例。请注意,从概念上讲,空间标记只为您提供在模型中使用的距离(而不是任何模型行为)。这是常态:空间标记仅用于可视化您的模型并提供距离。 (它还控制哪些移动是有效的,因为需要有一条通过网络的路线,但如果不允许所需移动,通常是设计错误,因此这不是真正的模型行为。)
请改用TransporterFleet
。它们可以与正常的流程建模模块互操作(见下面的屏幕截图),并且它们的设计精确地支持这种“通过限制路径上的运输器数量来控制它们的流动”的风格(加上具有加载/卸载时间、行为的内置功能下车后等)。请注意,从概念上讲,材料处理库空间标记定义了模型行为(而不仅仅是给您距离和可视化)。这是与物料搬运库的重大概念偏离。 (类似地,您使用物料搬运空间标记定义的传送网络也定义了模型行为;例如,其中的Station
元素类似于流程建模库中的Service
块。)
附:我的意思是要补充一点,除非您使用运输车队,否则 没有直接的方法可以获取哪些代理在哪些路径上。最接近的是网络支持getNearestPath
函数(请参阅帮助中Network
的API 参考),其中一种方式将为您提供最接近代理的Path
。 (因此,通过遍历所有资源代理并检查每个资源代理,您可以间接确定每条路径有多少“在”上,但您必须小心,因为这只会给出 最近的 @ 987654332@.) 但这与您想要实现的目标无关。
【讨论】:
感谢您的回答。确切地说,我正在使用流程建模库中的常规代理。我几乎是一个初学者,我的想法只是建立一个具有各种连接的简单网络,让代理从一个节点移动到另一个节点并返回,看看他们采取的最佳路径。希望通过添加诸如速度限制和可以同时在特定路径上的最大代理数量等限制来使他们更难。您是否偶然知道是否有一种简单的方法可以检查特定路径上当前有多少代理? 好的,我已经更新了答案以反映您更广泛的问题。您可能应该编辑您的主要问题,以使您的要求更清楚。以上是关于对于路径,“getNumberOfTransporters”函数会引发异常的主要内容,如果未能解决你的问题,请参考以下文章
对于路径,“getNumberOfTransporters”函数会引发异常
如何将剪辑路径的文本相对于视口居中并显示所有剪辑路径的文本?
对于src路径问题,深层理解的实践。且对于输出流write()两个方法的源码阅读。