系统动力学仿真 - 将 Stella 转换为 AnyLogic 语法
Posted
技术标签:
【中文标题】系统动力学仿真 - 将 Stella 转换为 AnyLogic 语法【英文标题】:System Dynamics simulation - Translating Stella into AnyLogic syntax 【发布时间】:2021-09-15 01:57:48 【问题描述】:我在 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
【问题讨论】:
【参考方案1】:anylogic 中的等价物应该是:
cause>0 && uniform(0,100) < probability*DT ? 1 : 0
您需要创建一个名为 DT 的变量,该变量等于您在模型配置中选择的固定时间步长,或者您认为应该足够的值。
由于任何逻辑取决于您运行模型的方式,不认为固定时间步长是固定的,您需要自己定义 DT。
无论如何,您可能会得到不完全等于 stella 的结果,因为时间步长不一定相同......但可能足够相似应该让您满意
【讨论】:
以上是关于系统动力学仿真 - 将 Stella 转换为 AnyLogic 语法的主要内容,如果未能解决你的问题,请参考以下文章