【问题标题】:Unexpected result using statechart to model truck deliveries?使用状态图对卡车交付建模的意外结果?
【发布时间】:2019-12-17 14:00:31
【问题描述】:

我正在构建一个模型,在该模型中,卡车离开主要分销商,沿一条路线向多个客户交付货物,然后在空车时返回给分销商。我创建了一个“卡车”代理,它模拟卡车从分销商、客户到客户、然后返回分销商的行为。在我的模型中,我希望卡车在返回前的行程不超过 20 小时。

为此,我在我的卡车代理中创建了一个状态图,但它并没有按照我的代码预期的方式工作。这是我的状态图中状态的屏幕截图,如下图所示:

我有密码

startTime = time(HOUR);

在我的“atDistributor”状态下,atDistributor 和 prepareToLeave 之后的转换分别在 1 天和 0 小时。我的movingToCustomer块代码如下:

client = getNearestAgent(customers);
if ((time(HOUR) - startTime) < 20)
    moveTo(client);
else
    moveTo(main.distributor);

卸载时间为30分钟,分支回movingToCustomer的条件为

customers.size() > 0

且movingBackToNewton有进入动作

moveTo(main.Newton);

但是,当我运行模型时,我会查看每辆卡车的行程时间,它们超过 20 小时。这让我相信我的代码或逻辑中一定存在某种错误,尽管我不知道该去哪里找。

【问题讨论】:

  • 请向我们展示与此相关的所有代码以及一些小样本数据集。
  • 您好,感谢您的回复。我在状态图中包含了所有代码,您还需要其他代码吗?我不确定我是否可以共享数据集,但它包含大约 300 个点以及订单识别号、订单重量和订单位置(城市、邮编、州)。
  • 只是一些小测试if ((time(HOUR) - startTime) &lt; 20) 因为我不知道这些数字是什么
  • 嗯,我不确定我完全明白你的意思——时间(TIME_UNIT)在 AnyLogic 帮助中被列为返回当前模型时间,所以我把那个代码块用来比较 startTime我确定了卡车在经销商处的时间。
  • 试试这个函数differenceInCalendarUnits( timeUnit, time1, time2 )你得到同样的结果吗? help.anylogic.com/…

标签: anylogic


【解决方案1】:

这是您可能遇到的问题:

这是你的movingToCustomer代码:

client = getNearestAgent(customers);
if ((time(HOUR) - startTime) < 20)
    moveTo(client);
else
    moveTo(main.distributor);

这意味着如果时间超过20,它会回到分销商......但是当它到达你的分销商时,它会进入“卸载”状态,然后它会去分支询问问题customers.size() &gt; 0

既然这是真的,它会回到movingToCustomer状态

这个状态图在概念上是错误的。

【讨论】:

  • 您好,感谢您的回复。你能解释一下我如何能够修复它吗?再次感谢!
猜你喜欢
  • 2019-05-05
  • 1970-01-01
  • 2016-10-11
  • 2018-09-16
  • 1970-01-01
  • 1970-01-01
  • 2021-06-25
  • 2021-12-13
  • 1970-01-01
相关资源
最近更新 更多