如何正确使用 Anylogic getEngine().step() 函数?

问题描述 投票:0回答:1

我的模型中的状态图有问题。例如,如果我写

statechart.fireevent("1")
将活动状态 1 更改为状态 2 时,它不会立即更改,而是通过“原子延迟”进行更改。如果我问第二行代码中的activestate是什么(在创建fireevent之后),Anylogic说它是state1(activestate还没有改变)。这给我编程时带来了很多困难。

我在Anylogic help中发现了一个有趣的功能

getEngine().step()
我所理解的女巫做我想做的事。如果我将它放在 fireevent 方法 statechart 更改其状态之后,并且只有在它完成我的代码的第二行之后才执行,并且 Anylogic 说活动状态现在是 state2!太好了,因为它为我解决了很多困难。

但是如果仔细阅读Anylogic帮助,那里写着一个奇怪的短语,据我了解,这个函数只能为处于暂停状态的模型调用:

*

最多执行模型的一个离散步骤(可以从 仅暂停状态)

!我对正在运行的模型进行了测试,一切都正常。目前尚不清楚暂停的原因以及暂停的重要性。如果这导致错误的结果,那么我可以人为地将模型置于暂停模式,在代码中调用step()函数,然后再次将模型返回到run()模式(但这似乎不必要地复杂)

你对此有何看法?

anylogic
1个回答
0
投票

不要用它,它真的很高级,没有必要。

您可以使用statechart.receiveMessage()代替fireEvent

直接消费(fireEvent将自身写入引擎,下一步执行)。另请参阅帮助和示例模型,它们对此进行了更深入的探讨。

© www.soinside.com 2019 - 2024. All rights reserved.