我想在AnyLogic中实现一个连接的自动驾驶车队。因此,车辆代理能够改变其路线。我的理解是,使用标准的“MoveTo”块可以让您只通过告诉它将代理移动到哪条道路来移动车辆代理。
例如:
可以在road4Source中指定的任何道路上创建跟随上述块的任何车辆,然后移动到moveToRoad2块中指定的另一条道路,然后当它到达endOfRoute块时将被销毁/删除/丢弃。
但是,由于车辆可以为自己选择路线,我只知道车辆的原点和目的地,不知道它将采取什么路线。因此,理想情况下,MoveTo块的数量应该是动态的。
考虑到这一点,是否可以重用MoveTo块(认为它是一种while循环),以便车辆保持在MoveTo块中,直到它到达Destination(在我的情况下是一条特定的道路)?
像这样的东西:
因此,在moveToRoad2的Road参数中,我可以放一些类似的东西(可能只是为了说明而错):
car.getRoad() == car.destination ? endOfRoute : car.getRoad()
其中car.getRoad()
将返回车辆想要前往的道路,如果它等于汽车的目的地那么它将进入endOfRoute区块。
编辑1
我现在明白,如果有两个连接到同一个端口,AnyLogic将抛出一个错误:
输出端口不能与多个输入端口连接。
那么有没有其他方法来实现我想要做的事情?
然后你需要生成汽车将采取的道路集合...这个集合在carSource中生成...或者你可以在“循环”中进行更新。
汽车代理必须有一个以0开头的变量,并且每次退出carMoveTo时都会增加+1 ...
所以这辆车将采取的新道路是:
collection.get(car.variable)
并在carMoveTo退出时:
car.variable++;
在selectOutput中,true的条件是:
agent.variable==collection.size()
我希望这会有所帮助......但是,如果你有太多的流量,你会发现模型中存在很大的问题,因为汽车不一定能识别carMoveTo目的地之后的交通,所以你可能已经粉碎......或者可能没有......取决于不同的因素。