【问题标题】:Trouble with agent state chart代理状态图有问题
【发布时间】:2019-08-22 17:37:04
【问题描述】:

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

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

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

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

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

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

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

【问题讨论】:

  • 如果你展示你的状态图会很有帮助......因为你在stackoverflow中问了很多问题,你应该开始标记那些得到回答的......你从来没有这样做过。
  • 一些选项为什么你的转换不起作用:当前状态没有你想要的转换,你的条件永远不会被评估,你的模拟永远不会到下午 4 点......这就是我能做到的想想
  • 感谢您的 cmets Felipe,我刚刚在问题中添加了状态图图片。另外,感谢您警告我关于问号的问题,我不知道我能做到这一点。

标签: anylogic


【解决方案1】:

您的代理不会通过内部转换进入活动状态。

重新绘制过渡以实际退出 Active 状态,然后再次进入,如下所示:

【讨论】:

    【解决方案2】:

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

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

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

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

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

    【讨论】:

    • 感谢本杰明的回答和提示!我刚刚从我的模拟上传了图片。问题是,我需要我的代理人收集每天下午 4 点将交付给我的客户的物品。我希望在我的代理的“活动”状态下发生这种情况。我创建了一个状态图,因为我正在处理重新安排,而我的代理“客户”需要与我的代理“计划”交谈,以防需要就交付数量达成一致。
    猜你喜欢
    • 2019-11-23
    • 1970-01-01
    • 2020-11-06
    • 2021-12-19
    • 2021-04-07
    • 1970-01-01
    • 2020-11-16
    • 1970-01-01
    相关资源
    最近更新 更多