【问题标题】:Anylogic System Dynamics : Stock capacityAnylogic System Dynamics : 库存容量
【发布时间】:2018-09-23 21:43:12
【问题描述】:

库存初始值为1 流速为 0.1 Stock1初始值为0。

当我运行模拟时,我意识到股票的价值低于 0(得到负值)。当 Stock 的值达到零时如何停止流动。

【问题讨论】:

    标签: anylogic systemdynamics


    【解决方案1】:

    一个应该有一个非常明显答案的问题,但没有。

    首先也是最重要的:没有选项可以设置为将 0 定义为存量的最小值,因为无论如何流量都会继续从存量中获取,所以你要做的就是改变库存为0(或接近0)时的流量。

    请记住,系统动力学是一种连续模拟技术,由于它使用步骤,它并不完美......所以我将向您展示 2 个可能的技巧来做到这一点

    技巧 1: 这个技巧会给你一个接近零的不精确数字,但它总是足够好: 轻松,在流程中,输入以下公式:

    stock-(getEngine().getNextStepTime()-time())*0.1<0 ? 0 : 0.1
    

    getEngine().getNextStepTime() 是下一次计算发生的时间,所以getEngine().getNextStepTime()-time() 会告诉你下一次迭代的时间步长(计算每次迭代使用的任何逻辑步长的数值方法) ,所以你必须这样做)。我将时间步长乘以 0.1,因为这是您选择的流速。流量永远不会是 0.1,实际值是 0.1*(time Step)/(time Unit)。在这种情况下,时间单位是 1 秒,所以我要除以 1,所以我不需要放那个除法。 公式最后指出,如果下一次迭代会给你一个负库存,那么让流量等于 0 而不是 0.1

    技巧 2: 使用以下配置: flow 将在公式中包含 flowrate flowRate 变量等于 0.1 并且该事件是具有以下条件的条件事件:

    stock<=0
    

    以及以下操作:

    flowRate=0;
    stock1=stock1+stock;
    stock=0;
    

    在这种情况下,股票将在一个时间步长(大约 1-10 毫秒)内为负数。我们人为地设置了实际值。

    (如果需要,您可以将技巧 1 和技巧 2 组合起来)

    【讨论】:

    • 根据我的经验,大多数时候你不需要强迫一只股票总是积极的。如果你的股票变成负数,它通常意味着你的等式有一个错误,至少在我建模的区域。例如,一阶延迟可以防止库存变为负数。
    • @buggaby 我不同意你...零下。在很多情况下,你的方程是正确的,但你仍然低于零......这总是有点问题......例如,如果你有一个初始金额并且你用永远不会进入的政策来花钱债务......你如何在不强迫它积极的情况下对其进行建模?你不能。
    • 我从事医疗保健和流行病学工作。通常,股票要么是人,要么是统计数据。因此,在 SIR 模型中,导致人们从一只股票转移到另一只股票的“力量”取决于该股票中的人。许多一阶延误;不可能低于 0,因为流量取决于股票价值。使用一阶延迟使得不可能低于 0(例如,流出“I”的流量取决于 I,因此当 I = 0 时,流量 = 0)。
    • 但是银行账户的情况可能不适用于一阶延迟。
    猜你喜欢
    • 2018-08-20
    • 2020-04-08
    • 2017-12-31
    • 1970-01-01
    • 2020-09-17
    • 2021-03-26
    • 2018-05-02
    • 2018-11-03
    • 2019-08-13
    相关资源
    最近更新 更多