【发布时间】: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) < 20)因为我不知道这些数字是什么 -
嗯,我不确定我完全明白你的意思——时间(TIME_UNIT)在 AnyLogic 帮助中被列为返回当前模型时间,所以我把那个代码块用来比较 startTime我确定了卡车在经销商处的时间。
-
试试这个函数
differenceInCalendarUnits( timeUnit, time1, time2 )你得到同样的结果吗? help.anylogic.com/…
标签: anylogic