#anylogic
#anylogic
Вопрос:
Модель, над которой я работаю, настроена следующим образом. Он содержит четыре типа агентов:
- Пациент
- Малая больница
- Medium Hospital
- Большая больница
. Все эти агенты расположены в 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();
, в котором отсутствует дополнительная пара закрывающих скобок.