我想在AnyLogic中实现一个联网的自动驾驶车队。因此,车辆代理人有能力更改其路线。我的理解是,使用标准的“ MoveTo ”块,您可以通过告诉车辆代理商将其移动到什么路来只移动一次 。
例如:
可以在 road4Source 中指定的任何道路上创建跟随上述代码块的任何车辆,然后移动到 moveToRoad2 代码块中指定的另一条道路,然后将其销毁/到达 endOfRoute 块时被删除/丢弃。
但是,由于车辆可以自行选择路线,因此我只知道车辆的来源和目的地,不确定该走什么路线。因此,理想情况下, MoveTo 块的数量应该是动态的。
考虑到这一点,是否可以重用 MoveTo 块(考虑一下while循环),以使车辆保持在 MoveTo 块中,直到到达目的地(在我的情况下是一条特定的道路)?
类似这样的东西:
因此,在 moveToRoad2 的 Road 参数中,我可以输入类似内容(仅出于说明目的可能是错误的):
car.getRoad() == car.destination ? endOfRoute : car.getRoad()
car.getRoad()
将返回车辆要去的道路,如果它等于汽车的目的地,则它将走 endOfRoute 块。
编辑1
我现在了解,如果同一端口有两个连接,则AnyLogic将引发错误:
Out端口不能与多个In Port连接。
那么还有其他方法可以实现我在这里要做的事情吗?
答案 0 :(得分:0)
然后,您需要生成汽车将要行驶的道路的集合...此集合是在carSource中生成的...或者您可以在“循环”中进行更新。
汽车代理商必须有一个以0开头的变量,并且每次退出carMoveTo时都会递增+1。
所以汽车要走的新路是:
collection.get(car.variable)
在carMoveTo出口处:
car.variable++;
在selectOutput中,为true的条件为:
agent.variable==collection.size()
我希望这会有所帮助... 但是,如果您的车辆过多,您会在模型中看到大问题,因为汽车不一定会在carMoveTo中的目的地之后识别出车辆的通行,因此您可能会拥挤……或可能……取决于不同的因素