Почему Anylogi c не разрешает операции между функциями? - PullRequest
0 голосов
/ 29 апреля 2020

У меня есть следующая простая модель больницы HospitalModel . Я пытаюсь сгенерировать выходную статистику c для моей модели в конце симуляции, например, процент пациентов, увиденных медсестрой. Сначала я попытался использовать выходную статистику «В конце моделирования» со значением nurseService.count () / PatientArrival.count (), поскольку я пытаюсь вычислить значение без генерации новых переменных, но я понял, что это выражение дает 0 во время окончания моделирования. Затем я попытался сгенерировать переменную porcentageNurse и каждый час обновлять ее событием с помощью выражения nurseService.count () / PatientArrival.count (), но еще раз понял, что вычисление никогда не вычислялось.

  1. Почему Anylogi c не вычисляет эту операцию?

Впоследствии я понял, что способ заставить его работать - это вычислить первый nurseService.count () и сохранить его значение в переменной 'a'. и затем используйте выражение: a / PatientArrival.count (). Это работает, если вы обновляете переменную событием, но в случае выходной статистики локальные переменные не могут быть определены в поле значения, поэтому, опять же, это невозможно сделать напрямую.

Есть ли способ вывести такую ​​статистику c как процент пациентов без создания дополнительных переменных?

Наконец, я понял, что с помощью параметра «Выходная статистика» я не смог найти способ запуска кода в конце симуляции (или генерации статистики в конце симуляции). В действиях java эксперимента по симуляции есть раздел «После запуска симуляции», но, похоже, этот раздел не связан с основным.

Как вы можете подключить этот раздел к основному? Или какой будет правильный способ запуска кода в конце симуляции? Есть ли способ генерировать статистику во время окончания симуляции без выходной статистики?

Есть ли выражение для вызова времени окончания симуляции?

Спасибо за вашу помощь.

1 Ответ

1 голос
/ 29 апреля 2020

nurseService.count () и PatientArrival.count () имеют тип long, и когда вы делаете любую арифметику c с longs или int, результирующее значение будет int.

, так что если вы делите Например, 45/58, результат усекается до 0.

Так что вместо этого нужно, чтобы хотя бы одна из переменных была двойной:

(double)nurseService.count()/patientArrival.count()

И для Ваш второй вопрос: после запуска моделирования вместо main вы можете использовать root, поэтому, если имя переменной в main - это var, вы можете получить к нему доступ, используя root .var

...