首页 > 解决方案 > 代理继承和人口分组

问题描述

我正在更深入地研究代理继承,并且仍处于探索级别,因此我的问题不会特定于示例,而是概念性的。

我的目标是创建一个名为Machine的代理类型模型。但是,会有不同类型的机器,有些可能有不同的状态图或不同的参数。所以,最初我认为创建一个名为Machine的代理类型是个好主意,然后使用代理继承,创建从它扩展的代理类型(例如Machine 1Machine 2等)。

结果是,如果我每种类型都有一台机器,则机器代理类型人口将为空,而机器 1机器 2的人口均为 1。我了解 AnyLogic 是这样设计的,但理想情况下,我希望查看人口为 2 的Machine Agent Type 的人口,其中一个是Machine 1类型,另一个是Machine 2类型。

代理继承可能不是答案,但我希望我能找到解决这个问题的方法,让我可以拥有一个具有不同子类型的主要群体。

您可能会问为什么需要这样做。答案是所有机器都应该有类似的行为。将此与 DES 进行比较,就像拥有不同的资源一样。所有都将具有相似的行为(例如,可以被抓住、释放、附加等),但每个都可以是唯一的。

您的想法/建议将不胜感激。

谢谢!

标签: anylogic

解决方案


如果你想使用代理继承,那么你需要有 2 个不同的种群。Machine 类型的群体将具有 Machine 类型的代理,而不是它们的子代理类型。我通常通过拥有子代理的人口来处理这个问题,然后将所有代理存储在一个列表中(即,数组列表 - allMachines)。

您提到了不同的状态图,这是使用继承的一个很好的理由。许多人会尝试继承,因为一个延迟块需要 X 分钟,而另一个是 Y。在这些情况下,只需参数化您的一种代理类型。如果这些机器之间的逻辑差异很小,我会只考虑 1 个类,还有一些额外的决定/分支来获得你想要的行为。在 AL 中,将父进程中的进程块/可视元素连接到子进程中的区域有时会很棘手 - 并非不可能,但不像纯 Java 代码那样简单,您可以在其中覆盖和调用 super.function()。


推荐阅读