Значение доступа к параметру типа ‘Agent’ в AnyLogic

#anylogic

#anylogic

Вопрос:

Модель, над которой я работаю, настроена следующим образом. Он содержит четыре типа агентов:

  1. Пациент
  2. Малая больница
  3. Medium Hospital
  4. Большая больница

. Все эти агенты расположены в Main. Агенты малых и средних больниц подключаются по сети к крупным больницам, используя ссылку на объекты агента, например: mediumHospitalLink и bigHospitalLink .

При генерации пациенты перемещаются через диаграмму состояния в Patient к ближайшему агенту больницы (независимо от типа, используя эту функцию в Patient). Агент больницы, к которому перешел Пациент, хранится в параметре вызываемого пациента p_myFirstHospital . Этот параметр имеет тип ‘Agent’, поскольку я не знаю заранее, в какой тип больницы будет перемещен агент. Это не приводит к ошибке и функционирует должным образом.введите описание изображения здесь

Однако через некоторое время я хочу переместить пациента-агента во вторую больницу. Если пациент в настоящее время находится в небольшой больнице, он должен переместиться в среднюю больницу, с которой связана небольшая больница, и аналогично, если Пациент находится в средней больнице, он должен переместиться в крупную больницу, с которой связана средняя больница.

Я ожидал, что смогу вызвать изнутри пациента следующий код для доступа к этим агентам: 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? Ваша помощь и предложения приветствуются.

Ответ №1:

Это потому, что p_myFirstHospital имеет тип Agent

Итак, вам нужно сделать java magic следующим образом:

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

Комментарии:

1. Спасибо за быстрый ответ, даже в субботу! Это действительно решило проблему 🙂 Я пробовал (SmallHospital)p_myFirstHospital.mediumHospitalLink.getConnectedAgent(); , в котором отсутствует дополнительная пара закрывающих скобок.