首页 > 解决方案 > 为什么 Anylogic 不允许函数之间的操作?

问题描述

我有以下医院HospitalModel的简单模型。我正在尝试在模拟结束时为我的模型生成输出统计信息,例如护士看到的患者的百分比。我首先尝试使用值为nurseService.count()/patientArrival.count() 的输出“模拟结束”统计数据,因为我试图在不生成新变量的情况下计算该值,但我意识到这个表达式在模拟结束时给出了0。然后我尝试生成一个变量 porcentageNurse 并使用表达式nurseService.count()/patientArrival.count() 每小时用一个事件更新它,但我再次意识到计算从未计算过。

  1. 为什么 Anylogic 不计算这个操作?

后来我意识到让它工作的一种方法是首先计算nurseService.count()并将其值保存到变量'a'中,然后使用表达式:a/patientArrival.count()。如果您使用事件更新变量,则此方法有效,但在输出统计情况下,局部变量无法在值字段中定义,因此无法直接完成。

  1. 有什么方法可以在不创建附加变量的情况下输出诸如患者百分比之类的统计数据?

最后,我意识到除了使用输出统计信息之外,我找不到在模拟结束时运行代码的方法(或在模拟结束时生成统计信息)。模拟实验的java动作中有一个“模拟运行后”部分,但该部分似乎与main没有连接。

  1. 您如何将此部分连接到主要部分?或者哪一种是在模拟结束时运行代码的正确方法?有没有办法在没有输出统计信息的情况下在模拟结束时生成统计信息?

  2. 是否有一个表达式可以调用模拟结束时间?

    谢谢你的帮助。

标签: anylogic

解决方案


NurseService.count() 和 patientArrival.count() 是 long 类型,当您使用 long 或 int 进行任何算术时,结果值是一个 int。

因此,例如,如果您划分 45/58,则结果将被截断为 0。

所以你需要做的是至少有一个变量是双精度的:

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

对于第二个问题,在模拟运行之后,可以使用root代替main,所以如果main中的变量名是var,则可以使用root.var访问它


推荐阅读