库存初始值为1流量为0.1库存1初始值为0 .
当我运行模拟时,我意识到股票的 Value 低于0(获得负值) . 如何在Stock的值达到零时停止流动 .
一个问题应该有一个非常明显的答案,但没有 .
第一个也是最重要的:没有选项可以设置为将0定义为股票的最小值,因为无论如何流量都将继续从库存中获取,因此您需要做的是改变流量时股票为0(或接近0) .
记住系统动力学是一种连续的模拟技术,因为它使用的步骤并不完美...所以我会告诉你2个可能的技巧来做到这一点
Trick 1: 这个技巧会给你一个接近于零的不精确数字,但它总是足够好:轻松,在流程中,放入以下公式:
stock-(getEngine().getNextStepTime()-time())*0.1<0 ? 0 : 0.1
getEngine() . getNextStepTime()是下次计算发生的时间,因此 getEngine().getNextStepTime()-time() 会告诉你下一次迭代的时间步长(计算每次迭代的任何逻辑变化使用的步骤的数值方法,所以你必须做这个) . 我将时间步长乘以0.1,因为这是您选择的流速 . 流量从不为0.1,实际值为0.1 *(时间步长)/(时间单位) . 在这种情况下,时间单位是1秒,所以我需要放置该分区 . 该公式最后指出,如果下一次迭代将给出负库存,则使流量等于0而不是0.1
getEngine().getNextStepTime()-time()
Trick 2: 使用以下配置:flow将在公式中使用 flowrate flowRate变量等于0.1,并且事件是具有以下条件的条件事件:
flowrate
stock<=0
并执行以下操作:
flowRate=0; stock1=stock1+stock; stock=0;
在这种情况下,股票将在一个时间步长(约1-10毫秒)为负 . 我们人为地设置实际值 .
(如果需要,你可以结合技巧1和技巧2)
1 回答
一个问题应该有一个非常明显的答案,但没有 .
第一个也是最重要的:没有选项可以设置为将0定义为股票的最小值,因为无论如何流量都将继续从库存中获取,因此您需要做的是改变流量时股票为0(或接近0) .
记住系统动力学是一种连续的模拟技术,因为它使用的步骤并不完美...所以我会告诉你2个可能的技巧来做到这一点
Trick 1: 这个技巧会给你一个接近于零的不精确数字,但它总是足够好:轻松,在流程中,放入以下公式:
getEngine() . getNextStepTime()是下次计算发生的时间,因此
getEngine().getNextStepTime()-time()
会告诉你下一次迭代的时间步长(计算每次迭代的任何逻辑变化使用的步骤的数值方法,所以你必须做这个) . 我将时间步长乘以0.1,因为这是您选择的流速 . 流量从不为0.1,实际值为0.1 *(时间步长)/(时间单位) . 在这种情况下,时间单位是1秒,所以我需要放置该分区 . 该公式最后指出,如果下一次迭代将给出负库存,则使流量等于0而不是0.1Trick 2: 使用以下配置:
flow将在公式中使用
flowrate
flowRate变量等于0.1,并且事件是具有以下条件的条件事件:并执行以下操作:
在这种情况下,股票将在一个时间步长(约1-10毫秒)为负 . 我们人为地设置实际值 .
(如果需要,你可以结合技巧1和技巧2)