AnyLogic 中的意外行为 SelectOutput 块
Unexpected behavior SelectOutput block in AnyLogic
在一个模型中,我使用一个使用条件的 selectoutput 块,该块基于代理的 p_Dx_EGFR_SOC_AH 参数,类型为 Option list
(选项:Mutated、NotMutated、UnknownStatus)。如果 agent.p_Dx_EGFR_SOC_AH == Mutated
计算为 true
,则通过 true 端口退出,否则通过 false 端口退出。为了检查它是否正常工作,我在该 selectoutput 块的 On exit (True)
字段中包含了一个 traceln(agent.p_Dx_EGFR_SOC_AH);
。
事实证明它没有按预期工作。跟踪线显示具有参数的三个选项之一的代理通过 True 端口退出:
假端口也是如此;具有三个选项之一的代理通过该端口退出。我在这里做错了什么,还是 AnyLogic 中的已知错误?
这里的问题是,计算的顺序是相反的...所以让我们想象以下模型,退出 true 的条件是 agent.parameter==0 和默认值参数为0
事情发生的顺序是
- 代理在源块的出口处开启
- 代理计算选择输出块上的条件
- 代理移出源块并对“退出时”操作进行计算
这意味着,如果您更改源块退出操作上的参数值 agent.parameter=1,代理仍将在 selectoutput 的真正退出时退出,因为条件已经计算
如果更改 on at exit 操作的参数值,代理将通过 selectoutput 块的错误退出退出
有点奇怪,但事情就是这样
有时您没有“在退出时打开”操作,在这种情况下,您可能需要在 1 毫秒的辅助延迟之间进行操作,以便获得您想要的顺序。
在一个模型中,我使用一个使用条件的 selectoutput 块,该块基于代理的 p_Dx_EGFR_SOC_AH 参数,类型为 Option list
(选项:Mutated、NotMutated、UnknownStatus)。如果 agent.p_Dx_EGFR_SOC_AH == Mutated
计算为 true
,则通过 true 端口退出,否则通过 false 端口退出。为了检查它是否正常工作,我在该 selectoutput 块的 On exit (True)
字段中包含了一个 traceln(agent.p_Dx_EGFR_SOC_AH);
。
事实证明它没有按预期工作。跟踪线显示具有参数的三个选项之一的代理通过 True 端口退出:
假端口也是如此;具有三个选项之一的代理通过该端口退出。我在这里做错了什么,还是 AnyLogic 中的已知错误?
这里的问题是,计算的顺序是相反的...所以让我们想象以下模型,退出 true 的条件是 agent.parameter==0 和默认值参数为0
事情发生的顺序是
- 代理在源块的出口处开启
- 代理计算选择输出块上的条件
- 代理移出源块并对“退出时”操作进行计算
这意味着,如果您更改源块退出操作上的参数值 agent.parameter=1,代理仍将在 selectoutput 的真正退出时退出,因为条件已经计算
如果更改 on at exit 操作的参数值,代理将通过 selectoutput 块的错误退出退出
有点奇怪,但事情就是这样
有时您没有“在退出时打开”操作,在这种情况下,您可能需要在 1 毫秒的辅助延迟之间进行操作,以便获得您想要的顺序。