Hel*_*rts 5 systemdynamics anylogic

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