首页 > 解决方案 > AnyLogic中“代理”类型参数的访问值

问题描述

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

  1. 病人
  2. 小型医院
  3. 中医院
  4. 大医院

. 所有这些代理都位于 Main。SmallHospital 和 MediumHospital 代理在网络中连接到 BigHospitals,使用链接到代理对象,例如:mediumHospitalLinkbigHospitalLink

生成后,患者通过 Patient 中的状态图移动到最近的医院代理(无论类型如何,在 Patient 中使用功能)。Patient 移动到的医院代理存储在 Patient 中名为 的参数中p_myFirstHospital此参数的类型为“代理”,因为我事先不知道代理将移动到哪个医院类型。这不会导致任何错误并且按预期运行。在此处输入图像描述

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

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

或通过我创建的一个简单函数。它应该从Link to agents存储在 中的医院代理中检索代理p_myFirstHospital

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

我错过了一些 Java 或 AnyLogic 的细微之处吗?非常欢迎您的帮助和建议。

标签: anylogic

解决方案


那是因为 p_myFirstHospital 是 Agent 类型

所以你需要让java魔法如下:

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

推荐阅读