gpt4 book ai didi

java - RoadModel.getDistanceOfPath(RoadModel.getShortestPath(Vehicle, Point)) 错误

转载 作者:太空宇宙 更新时间:2023-11-04 10:25:21 25 4
gpt4 key购买 nike

我正在尝试获取移动到特定点所需的预期时间。这是我正在使用的代码:

long getTimeToReachGivenPoint(Point point) {

System.out.println("Point: " + point);

List<Point> path = getRoadModel().getShortestPathTo(this, point);

System.out.println("Path: " + path);
System.out.println("Path length: " + path.size());

Measure<Double,Length> distance = getRoadModel().getDistanceOfPath(path);

long time = (long) (distance.getValue()/AgvAgent.SPEED);
return time;
}

当我运行它时,我得到以下输出:

point: (8.0,36.0)
Path: [(12.0,28.22222222222222), (12.0,32.0), (12.0,36.0), (8.0,36.0)]
Path length: 4

以及以下异常:

Exception in thread "Thread-0" java.lang.IllegalArgumentException: Can not get connection length from a non-existing connection.
at com.google.common.base.Preconditions.checkArgument(Preconditions.java:135)
at com.github.rinde.rinsim.geom.AbstractGraph.connectionLength(AbstractGraph.java:48)
at com.github.rinde.rinsim.core.model.road.GraphRoadModelSnapshot.getDistanceOfPath(GraphRoadModelSnapshot.java:83)
at com.github.rinde.rinsim.core.model.road.DynamicGraphRoadModelImpl.getDistanceOfPath(DynamicGraphRoadModelImpl.java:226)
at project.agents.AgvAgent.getTimeToReachGivenPoint(AgvAgent.java:162)
at project.agents.AgvScheduler.calculateExpectedPickUpTime(AgvScheduler.java:116)
at project.agents.AgvScheduler.getReservationProposal(AgvScheduler.java:43)
at project.agents.AgvAgent.getReservationProposal(AgvAgent.java:147)
at project.smartMessage.ExplorationAntComputationalBehaviour.compute(ExplorationAntComputationalBehaviour.java:41)
at project.smartMessage.ExplorationAntComputationalBehaviour.run(ExplorationAntComputationalBehaviour.java:75)
at project.smartMessage.AntAgent.run(AntAgent.java:64)
at project.agents.AgvAgent.tickImpl(AgvAgent.java:205)
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)

据我了解, getShortestPath() 方法返回的路径上的点之间似乎没有连接?

最佳答案

getDistanceOfPath(Iterable<Point>)方法要求路径中的所有点都是图中的节点。 getShortestPathTo(RoadUser, Point) 返回的路径可能包含不是图中节点的位置,以防 RoadUser不在节点上。目前没有内置方法可以检测并解决此问题。

您可以使用 GraphRoadModel.getConnection(RoadUser) 检测这种情况方法,如果 RoadUser已连接,那么您可以使用 Connection.to()作为 getShortestPathTo(RoadUser, Point) 的起点称呼。例如:

Optional<? extends Connection<?>> conn = ((GraphRoadModel)getRoadModel()).getConnection(this);
Point from;
double dist = 0;
if( conn.isPresent() ){
dist += Point.distance(getRoadModel().getPosition(this),conn.to());
from = conn.to();
} else {
from = getRoadModel().getPosition(this);
}

List<Point> path = getRoadModel().getShortestPathTo(from, point);
Measure<Double,Length> distance = getRoadModel().getDistanceOfPath(path);

// total distance is the sum of distance and dist

关于java - RoadModel.getDistanceOfPath(RoadModel.getShortestPath(Vehicle, Point)) 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50600327/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com