【发布时间】:2017-11-17 09:18:45
【问题描述】:
当您在 AnyLogic 中双击某个代理时,它会导航到该代理的内部结构,以便您查看其状态、变量等。有没有办法通过函数调用以编程方式执行此操作而无需添加 ViewArea?我目前的解决方案是添加一个ViewArea,然后在我需要导航到代理时使用viewArea.navigateTo(),但是在多种代理类型中多次执行似乎太过分了。
【问题讨论】:
标签: anylogic
当您在 AnyLogic 中双击某个代理时,它会导航到该代理的内部结构,以便您查看其状态、变量等。有没有办法通过函数调用以编程方式执行此操作而无需添加 ViewArea?我目前的解决方案是添加一个ViewArea,然后在我需要导航到代理时使用viewArea.navigateTo(),但是在多种代理类型中多次执行似乎太过分了。
【问题讨论】:
标签: anylogic
每个代理都有默认的视图区域对象,它的名字是_origin_VA。所以,你可以调用agent._origin_VA.navigateTo();这样的东西,这个区域在图形编辑器中是不可见的,但你可以通过代码完成找到它。
【讨论】:
过去,当您在 AnyLogic 中双击一个代理时,它会导航到该代理的内部,以便您可以看到它的状态、变量等。
你在这里是什么意思?您仍然可以双击嵌入式代理直接导航到它们。
我当前的解决方案是添加一个 ViewArea,然后在我需要导航到代理时使用 viewArea.navigateTo(),但是在多种代理类型中多次执行似乎太过分了。
这就是以编程方式执行此操作的方法。不要在您需要的每个代理中复制它,而是使用具有 ViewArea 和导航的超类代理,以便您可以跨代理重用它(例如,代理 ViewAreaAgent 与您的代理 AgentA 和 AgentB 扩展 @987654325 @)。
我希望避免子类化:在构建包含连续 2D 和 GIS 环境的分层模型时,它曾经给我们带来各种问题。也许在 8.1(最近从 7.3.7 升级)中不再是这种情况。
什么样的问题(出于更普遍的兴趣)?我认为没有任何简单的方法可以在没有子类化的情况下共享视图区域功能。 (更一般地,在 Java 中,您可以使用接口和对象组合之类的东西,而不是 继承做同样的事情---见Bloch's Effective Java(特别是第2版中的第16条)---但我认为这在这里不起作用,因为视图区域需要在您正在导航的代理中到。)
【讨论】: