Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java rinsim中车辆的碰撞行为_Java_Rinsim - Fatal编程技术网

Java rinsim中车辆的碰撞行为

Java rinsim中车辆的碰撞行为,java,rinsim,Java,Rinsim,在rinsim中模拟多辆车辆时,我们发现以下行为: 车辆可以在不发生碰撞的情况下相互穿行,但有时会出现以下例外情况: 出租车eda0940通过连接(30.0,22.0)-(30.0,26.0)行驶 出租车3578436e正朝该连接(30.0,26.0)-(30.0,22.0)的相反方向行驶 两辆出租车似乎都相撞了,唯一的例外是它们不能跳跃或改变方向。他们两人都朝着正确的方向前进,而且是他们想继续追随的方向。有人能解释一下这种行为吗 如果这真的是两辆出租车相撞的话,我们会期待一个不同的例外。还有,

在rinsim中模拟多辆车辆时,我们发现以下行为: 车辆可以在不发生碰撞的情况下相互穿行,但有时会出现以下例外情况:

出租车eda0940通过连接(30.0,22.0)-(30.0,26.0)行驶

出租车3578436e正朝该连接(30.0,26.0)-(30.0,22.0)的相反方向行驶

两辆出租车似乎都相撞了,唯一的例外是它们不能跳跃或改变方向。他们两人都朝着正确的方向前进,而且是他们想继续追随的方向。有人能解释一下这种行为吗

如果这真的是两辆出租车相撞的话,我们会期待一个不同的例外。还有,为什么这些碰撞只会发生在某些情况下

taxi.Taxi@2eda0940: Current intended path: [(30.0,26.0), (30.0,30.0), (34.0,30.0), (38.0,30.0), (42.0,30.0), (46.0,30.0), (50.0,30.0), (54.0,30.0), (58.0,30.0)]
taxi.Taxi@2eda0940: Following path [(30.0,22.92888888888889), (30.0,26.0)]
taxi.Taxi@2eda0940: Current position (30.0,22.92888888888889)
taxi.Taxi@2eda0940: Current connection Optional.of(Connection{from=(30.0,22.0), to=(30.0,26.0), data=Optional.absent()})
java.lang.IllegalArgumentException: Illegal path for this object, from a position on a connection we can not jump to another connection or go back. From (30.0,22.92888888888889), to (30.0,26.0).
at com.google.common.base.Preconditions.checkArgument(Preconditions.java:146)
at com.github.rinde.rinsim.core.model.road.GraphRoadModelImpl.checkMoveValidity(GraphRoadModelImpl.java:241)
at com.github.rinde.rinsim.core.model.road.GraphRoadModelImpl.doFollowPath(GraphRoadModelImpl.java:169)
at com.github.rinde.rinsim.core.model.road.AbstractRoadModel.followPath(AbstractRoadModel.java:94)
at taxi.Taxi.delegate_mas_impl(Taxi.java:262)
at taxi.Taxi.tickImpl(Taxi.java:366)
at com.github.rinde.rinsim.core.model.pdp.Vehicle.tick(Vehicle.java:55)
at com.github.rinde.rinsim.core.model.time.TimeModel.tickImpl(TimeModel.java:139)
at com.github.rinde.rinsim.core.model.time.SimulatedTimeModel.doStart(SimulatedTimeModel.java:32)
at com.github.rinde.rinsim.core.model.time.TimeModel.start(TimeModel.java:94)
at com.github.rinde.rinsim.ui.SimulationViewer$5.run(SimulationViewer.java:401)

taxi.Taxi@3578436e: Optional.of(Connection{from=(30.0,26.0), to=(30.0,22.0), data=Optional.absent()})
taxi.Taxi@3578436e: []
taxi.Taxi@3578436e: 1920000
taxi.Taxi@3578436e: Moving to (30.0,22.0)
taxi.Taxi@3578436e: 

taxi.Taxi@3578436e: Current intended path: [(30.0,22.0), (30.0,18.0), (30.0,14.0), (16.0,16.0), (12.0,16.0), (8.0,16.0), (4.0,16.0), (0.0,16.0), (0.0,12.0), (0.0,8.0)]
taxi.Taxi@3578436e: Following path [(30.0,22.92888888888889), (30.0,22.0)]
java.lang.IllegalArgumentException: Illegal path for this object, from a position on a connection we can not jump to another connection or go back. From (30.0,22.92888888888889), to (30.0,22.0).
taxi.Taxi@3578436e: Current position (30.0,22.92888888888889)
at com.google.common.base.Preconditions.checkArgument(Preconditions.java:146)
taxi.Taxi@3578436e: Current connection Optional.of(Connection{from=(30.0,26.0), to=(30.0,22.0), data=Optional.absent()})
at com.github.rinde.rinsim.core.model.road.GraphRoadModelImpl.checkMoveValidity(GraphRoadModelImpl.java:241)
at com.github.rinde.rinsim.core.model.road.GraphRoadModelImpl.doFollowPath(GraphRoadModelImpl.java:169)
at com.github.rinde.rinsim.core.model.road.AbstractRoadModel.followPath(AbstractRoadModel.java:94)
at taxi.Taxi.delegate_mas_impl(Taxi.java:262)
at taxi.Taxi.tickImpl(Taxi.java:366)
at com.github.rinde.rinsim.core.model.pdp.Vehicle.tick(Vehicle.java:55)
at com.github.rinde.rinsim.core.model.time.TimeModel.tickImpl(TimeModel.java:139)
at com.github.rinde.rinsim.core.model.time.SimulatedTimeModel.doStart(SimulatedTimeModel.java:32)
at com.github.rinde.rinsim.core.model.time.TimeModel.start(TimeModel.java:94)
at com.github.rinde.rinsim.ui.SimulationViewer$5.run(SimulationViewer.java:401)

此行为是由RinSim中的错误引起的。解决方法是替换:

List<Point> path = rm.getShortestPathTo(start, cur_path.peek());
List path=rm.getShortestPathTo(start,cur_path.peek());
与:

pointstart=rm.getPosition(此);
if(rm.getConnection(this.isPresent()){
start=rm.getConnection(this.get().to();
}
List path=rm.getShortestPathTo(start,cur_path.peek());

您可以看到两辆出租车都有一条正确的路径:出租车1:
当前预期路径:[(30.0,26.0),(30.0,30.0),(34.0,30.0),(38.0,30.0),(42.0,30.0),(46.0,30.0),(50.0,30.0),(54.0,30.0),(58.0,30.0)]后续路径[(30.0,22.9288888889),(30.0,26.0)]当前位置(30.0,22.928888889)连接可选{from=(30.0,22.0),to=(30.0,26.0),data=Optional.缺席()})
因此以当前连接的端点开始的路径断言已满。(滑行2也适用)你能发布复制你描述的行为的最小工作示例代码吗?这样我就可以调查行为了。这是一个github,有一个最小的工作示例,出租车在11小时左右随机运行并撞车。好的,我在RinSim中发现了一个可能导致此问题的错误。不过需要一点时间来修复。将更新修复程序执行时为线程。使用解决问题的方法更新了答案。
Point start = rm.getPosition(this);
if (rm.getConnection(this).isPresent()) {
  start = rm.getConnection(this).get().to();
}
List<Point> path = rm.getShortestPathTo(start, cur_path.peek());