代码之家  ›  专栏  ›  技术社区  ›  António Vieira

任意逻辑中的系统动力学-斐波那契序列[闭合]

  •  1
  • António Vieira  · 技术社区  · 6 年前

    我在AnyLogic中有一个系统动力学模型,我试图对斐波那契序列建模。然而,由于某些原因,我的结果与预期的不同:

    而不是

    1,1,2,3,5,8,13...

    我明白了

    1、2.137954153、4.021788196、7.471205823、13.86070806。。。

    我跟着 these (spanish) instructions 来构建我的简单模型。

    我想这并不是所有软件都通用的,因为在VenSim中,这个例子似乎工作得很好。。。

    有人能解释一下为什么我的AnyLogic程序会发生这种情况吗?

    1 回复  |  直到 6 年前
        1
  •  2
  •   Felipe    3 年前

    之所以会发生这种情况,是因为每个软件处理微分方程的方式不同。

    在vensim中获取斐波那契序列的原因是,您正在使用Euler方法和时间步长1(检入模型设置)

    如果在Vensim中将积分类型更改为RK45,或者使用euler方法减少时间步长,则可能会得到与AnyLogic相同的结果。。。Runge-Kutta方法虽然从固定步长1开始,但随后会根据模型动力学的要求更改时间步长。

    现在,让我们了解一下,在系统动力学模型中使用1的时间步长,模型会以较低的时间步长给出错误的结果,这意味着您的模型不是很健壮。。。但这就是为什么你在vensim中得到确切的值。。。因为这些精确的数值对于模型的真实情况来说是非常不准确的。我甚至会说,你链接上的模型是一个糟糕的模型,不应该向公众展示。

    幸运的是(或不幸的是),AnyLogic不允许您这样做。您可以在模型属性中设置时间步为1,但anylogic会在不通知的情况下将时间步更改为其他时间步(除非您在虚拟模式下运行,并且满足其他条件)。。。AnyLogic仅允许在“混合方程”选项中使用Euler+Newton,但不允许仅使用Euler。

    我认为这是AnyLogic中存在多年的一个bug,我已经通知了他们,我认为他们永远都不会解决它,除非AnyLogic 9(如果我们幸运的话)。