道路交通库 - MoveTo 块 - while 循环?

Posted

技术标签:

【中文标题】道路交通库 - MoveTo 块 - while 循环?【英文标题】:Road Traffic Library - MoveTo block - while loop? 【发布时间】:2019-07-14 13:14:30 【问题描述】:

我想在 AnyLogic 中实现一个联网的自动驾驶车队。因此,车辆代理有能力改变其路线。我的理解是,使用标准的“MoveTo”块可以让您移动车辆代理一次,告诉它要将代理移动到哪条道路。

例如:

可以在road4Source中指定的任何道路上创建跟随上述街区的任何车辆,然后移动到moveToRoad2中指定的另一条道路上然后将被销毁/当它到达 endOfRoute 块时被删除/丢弃。

但是,由于车辆可以自己选择路线,我只知道车辆的OriginDestination,不知道它会走哪条路线。因此,理想情况下,MoveTo 块的数量应该是动态的。

考虑到这一点,是否可以重用 MoveTo 块(将其视为一种 while 循环),以便车辆保持在 MoveTo 块中直到到达目的地(在我的例子中是一条特定的道路)?

类似这样的:

所以在 moveToRoad2Road 参数中,我可以这样写(可能是错误的,只是为了说明):

car.getRoad() == car.destination ? endOfRoute : car.getRoad()

car.getRoad() 将返回车辆想要去的道路,如果它等于汽车的目的地,那么它将去 endOfRoute 块。

编辑 1

我现在明白了,如果有两个连接到同一个端口,AnyLogic 会抛出错误:

Out 端口不能与多个 In Port 连接。

那么还有其他方法可以实现我想要在这里做的事情吗?

【问题讨论】:

【参考方案1】:

首先,这是您想要的配置:

然后您需要生成汽车将要行驶的道路集合...此集合在 carSource 中生成...或者您可以在“循环”中进行更新时对其进行更新。

汽车代理必须有一个变量,该变量从 0 开始,每次退出 carMoveTo 时递增 +1...

所以这辆车要走的新路是:

collection.get(car.variable)

在 carMoveTo 的出口处:

car.variable++;

在 selectOutput 中,true 的条件是:

agent.variable==collection.size()

我希望这会有所帮助... 但是,如果您的交通量过多,您会在模型中看到很大的问题,因为汽车不一定会在 carMoveTo 中识别目的地之后的交通量,因此您可能会迷恋……或者可能不会……取决于不同的因素.

【讨论】:

以上是关于道路交通库 - MoveTo 块 - while 循环?的主要内容,如果未能解决你的问题,请参考以下文章

AcWing 342. 道路与航线

Anylogic道路交通库变道错误

P3008 [USACO11JAN]道路和飞机Roads and Planes

else配合while或者for循环只用注意点

PHP while 循环

PHP while 循环