首页 > 解决方案 > 代理状态图有问题

问题描述

我正在尝试创建一个代理状态图,其中应该在每天下午 4 点(周末除外)发生转换。

我已经尝试过:1. 条件转换(条件:getHourOfDay() == 16)2:超时转换,它将每隔 1 秒将我的代理“重新插入”到图表中并检查时间是否 = 16。

我的代码仍然没有运行,有人知道如何解决吗?

在此处输入图像描述

这是我的状态图视图。客户是一个单一的资源,应该每天下午 4 点从我的库存中“获取”产品。它应该在“活动”状态下发生。

在此处输入图像描述

我设置了每 1 秒运行一次的超时转换(从 Active-Active)。

在此处输入图像描述

在“入口操作”的“活动”状态中,我编写了代码来检查它是否是下午 4 点,如果是,则运行我的操作。

我想,因为我设置了超时转换,它会每隔 1 秒检查一次我的状况,但显然它不起作用。

标签: anylogic

解决方案


出于性能原因,请勿使用基于条件的转换。在您的情况下,它也永远不会触发,因为它仅在模型中发生某些事情时才被评估。顺便说一句,下午 4 点的情况并非如此。

重新您的超时方法:您为什么要将您的代理“重新插入”到它自己的状态图中?不确定我明白...

为什么不根据您的重复要求设置时间表或事件,并使其向状态图发送消息:stateChart.fireEvent("trigger!");. 在您的状态图中,添加等待此消息的基于消息的转换。这将起作用。

不过,请注意理解 theStatechart.fireEvent()Statechart.receiveMessage()函数之间的区别。

PS:并同意Felipe:请按照它的意思开始使用SOF,即将回复标记为已解决。它可以帮助我们以及未来的用户快速找到解决方案 :-) 干杯


推荐阅读