【问题标题】:Why Anylogic doesn't allow operations between functions?为什么 Anylogic 不允许函数之间的操作?
【发布时间】:2020-08-13 05:00:24
【问题描述】:

我有以下简单的医院模型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


    【解决方案1】:

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

    因此,例如,如果除以 45/58,结果将被截断为 0。

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

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

    对于你的第二个问题,对于After simulation run,你可以使用root代替main,所以如果main中的变量名是var,你可以使用root.var访问它

    【讨论】:

      猜你喜欢
      • 2023-03-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多