【发布时间】:2018-09-23 21:43:12
【问题描述】:
库存初始值为1 流速为 0.1 Stock1初始值为0。
当我运行模拟时,我意识到股票的价值低于 0(得到负值)。当 Stock 的值达到零时如何停止流动。
【问题讨论】:
库存初始值为1 流速为 0.1 Stock1初始值为0。
当我运行模拟时,我意识到股票的价值低于 0(得到负值)。当 Stock 的值达到零时如何停止流动。
【问题讨论】:
一个应该有一个非常明显答案的问题,但没有。
首先也是最重要的:没有选项可以设置为将 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 组合起来)
【讨论】: