道路交通库 - MoveTo 块 - while 循环?
Posted
技术标签:
【中文标题】道路交通库 - MoveTo 块 - while 循环?【英文标题】:Road Traffic Library - MoveTo block - while loop? 【发布时间】:2019-07-14 13:14:30 【问题描述】:我想在 AnyLogic 中实现一个联网的自动驾驶车队。因此,车辆代理有能力改变其路线。我的理解是,使用标准的“MoveTo”块可以让您移动车辆代理一次,告诉它要将代理移动到哪条道路。
例如:
可以在road4Source中指定的任何道路上创建跟随上述街区的任何车辆,然后移动到moveToRoad2中指定的另一条道路上然后将被销毁/当它到达 endOfRoute 块时被删除/丢弃。
但是,由于车辆可以自己选择路线,我只知道车辆的Origin和Destination,不知道它会走哪条路线。因此,理想情况下,MoveTo 块的数量应该是动态的。
考虑到这一点,是否可以重用 MoveTo 块(将其视为一种 while 循环),以便车辆保持在 MoveTo 块中直到到达目的地(在我的例子中是一条特定的道路)?
类似这样的:
所以在 moveToRoad2 的 Road 参数中,我可以这样写(可能是错误的,只是为了说明):
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 循环?的主要内容,如果未能解决你的问题,请参考以下文章