首页 > 解决方案 > 系统动力学仿真 - 将 Stella 转换为 AnyLogic 语法

问题描述

我在 stella 中建模了以下逻辑:

(IF "cause" > 0  THEN MONTECARLO("probabilityofconsequence") ELSE 0

但我在 AnyLogic 上没有得到正确的语法:

(cause > 0) ? (uniform() < probabilityofconsequence) ? 1 : 0 : 0 

有任何想法吗?

免责声明: stella 所做的是使用 Montecarlo 函数根据提供的概率从伯努利分布中获得一系列零和一。概率是每个 DT 发生事件的百分比概率除以 DT(它也相似,但与每单位时间事件的百分比概率不同)。概率值可以是变量或常数,但应计算为 0 到 100/DT 之间的数字(超出范围的数字将设置为 0 或 100/DT)。单位时间内生成的数字流的期望值等于概率/100。

MONTECARLO 等价于以下逻辑:

IF (UNIFORM(0,100,<seed>) < probability*DT THEN 1 ELSE 0

标签: anylogic

解决方案


anylogic中的等价物应该是:

cause>0 && uniform(0,100) < probability*DT ? 1 : 0

您需要创建一个名为 DT 的变量,该变量等于您在模型配置中选择的固定时间步长,或者您认为应该足够的值。

由于任何逻辑取决于您运行模型的方式,不认为固定时间步长是固定的,因此您需要自己定义 DT。

无论如何,您可能会得到不完全等于 stella 的结果,因为时间步长不一定相同......但也许足够相似应该让您满意


推荐阅读