AnyLogic中“代理”类型参数的访问值

Posted

技术标签:

【中文标题】AnyLogic中“代理”类型参数的访问值【英文标题】:Access value of parameter of type 'Agent' in AnyLogic 【发布时间】:2021-02-13 16:51:48 【问题描述】:

我正在研究的模型设置如下。它包含四种代理类型:

    病人 小医院 中医院 大医院

。所有这些代理都位于 Main。 SmallHospital 和 MediumHospital 代理在网络中使用 link to agent objects 连接到 BigHospitals,例如:mediumHospitalLinkbigHospitalLink

生成后,患者通过 Patient 中的状态图移动到最近的医院代理(无论类型如何,使用 Patient 中的 this 函数)。 Patient 移动到的医院代理存储在 Patient 中名为 p_myFirstHospital 的参数中。 This parameter 具有“代理”类型,因为我事先不知道代理将转移到哪个医院类型。这不会导致任何错误并且可以按预期运行。

但是,我想在一段时间后将 Patient-agent 转移到第二家医院。如果患者目前在小型医院,则应移动到小型医院所链接的中型医院,同样,如果患者在中型医院,则应移动到中型医院所链接的大型医院。

我希望我能够从 Patient 中调用以下代码来访问这些代理: p_myFirstHospital.mediumHospitalLink.getConnectedAgent();

或通过我创建的a simple function。它应该从存储在p_myFirstHospital 中的医院代理中的Link to agents 中检索代理。

很遗憾,这不起作用。编译器返回以下错误消息: Description: smallHospitalLink cannot be resolved or is not a field. Location: model/Patient/f_DetermineSecondHospital - Function

我是否遗漏了一些 Java 或 AnyLogic 的细微之处?非常欢迎您的帮助和建议。

【问题讨论】:

【参考方案1】:

那是因为 p_myFirstHospital 是 Agent 类型

所以你需要让java变魔术如下:

case1:
p_mySecondHospital=((SmallHospital)p_myFirstHospital).mediumHospitalLink.getConnectedAgent();
case2:
p_mySecondHospital=((MediumHospital)p_myFirstHospital).mediumHospitalLink.getConnectedAgent();

【讨论】:

感谢您的及时回复,即使是在星期六!这确实解决了它:-) 我试过(SmallHospital)p_myFirstHospital.mediumHospitalLink.getConnectedAgent();,它缺少一对额外的括号。

以上是关于AnyLogic中“代理”类型参数的访问值的主要内容,如果未能解决你的问题,请参考以下文章

AnyLogic 在一个过程中更改参数值

Anylogic自定义代理未加载?

基于代理的 Anylogic,滑块和事件错误

日期参数随时间更新 Anylogic

Anylogic - 从其他代理访问变量

Anylogic如何创建新代理并分配属性?