public NetworkRouteSerializable(NetworkRoute route) { distance = route.getDistance(); endLinkIdString = route.getEndLinkId().toString(); startLinkIdString = route.getStartLinkId().toString(); travelCost = route.getTravelCost(); travelTime = route.getTravelTime(); vehicleIdString = route.getVehicleId() == null ? null : route.getVehicleId().toString(); List<Id<Link>> linkIds = route.getLinkIds(); linkIdStrings = new ArrayList<>(); for (Id<Link> linkid : linkIds) linkIdStrings.add(linkid.toString()); }
@Override public Route getRoute(String mode) { Id<Link> startLinkId = Id.createLinkId(startLinkIdString); Id<Link> endLinkId = Id.createLinkId(endLinkIdString); NetworkRoute route = RouteUtils.createLinkNetworkRouteImpl(startLinkId, endLinkId); route.setDistance(distance); List<Id<Link>> linkIds = new ArrayList<>(); for (String linkId : linkIdStrings) linkIds.add(Id.createLinkId(linkId)); route.setLinkIds(startLinkId, linkIds, endLinkId); route.setTravelCost(travelCost); route.setTravelTime(travelTime); route.setVehicleId(vehicleIdString == null ? null : Id.create(vehicleIdString, Vehicle.class)); return route; }
@Override public Id<Link> getNextLinkId() { List<Id<Link>> linkIds = route.getLinkIds(); if (currentLinkIdx == linkIds.size()) { return null; } if (currentLinkIdx == linkIds.size() - 1) { return route.getEndLinkId(); } return linkIds.get(currentLinkIdx + 1); }
private static List<Id<Link>> getRouteLinkIds(Route route) { List<Id<Link>> linkIds = new ArrayList<>(); if (route instanceof NetworkRoute) { NetworkRoute networkRoute = (NetworkRoute) route; linkIds.add(networkRoute.getStartLinkId()); linkIds.addAll(networkRoute.getLinkIds()); linkIds.add(networkRoute.getEndLinkId()); } else { throw new RuntimeException("Currently only NetworkRoutes are supported for Within-Day Replanning!"); } return linkIds; } }
@Test public void testGetSubRoute_sameLinks_emptyRoute1() { Network network = createTestNetwork(); Id<Link> id1 = Id.create("1", Link.class); NetworkRoute route = getNetworkRouteInstance(id1, id1, network); route.setLinkIds(id1, null, id1); NetworkRoute subRoute = route.getSubRoute(id1, id1); List<Id<Link>> linkIds = subRoute.getLinkIds(); Assert.assertEquals("number of links in subRoute.", 0, linkIds.size()); Assert.assertEquals("wrong start link.", id1, subRoute.getStartLinkId()); Assert.assertEquals("wrong end link.", id1, subRoute.getEndLinkId()); }
@Test public void testStartAndEndOnSameLinks_setLinks() { Network network = createTestNetwork(); Id<Link> link = Id.create("3", Link.class); NetworkRoute route = getNetworkRouteInstance(link, link, network); route.setLinkIds(link, new ArrayList<Id<Link>>(0), link); Assert.assertEquals(0, route.getLinkIds().size()); }
@Override public void setLinkIds( final Id<Link> startLinkId, final List<Id<Link>> linkIds, final Id<Link> endLinkId) { netRoute.setLinkIds(startLinkId, linkIds, endLinkId); }
@Override public List<Id<Link>> getLinkIds() { return this.delegate.getLinkIds(); }
@Override public void testZeroScore() { this.network = createNetwork(); PlanSelector<Plan,Person> selector = getPlanSelector(); Link l1 = network.getLinks().get(Id.create("1", Link.class)); Link l6 = network.getLinks().get(Id.create("6", Link.class)); Link l7 = network.getLinks().get(Id.create("7", Link.class)); Person person = PopulationUtils.getFactory().createPerson(Id.create(1, Person.class)); Plan p1 = PopulationUtils.createPlan(person); Activity a = PopulationUtils.createActivityFromLinkId("h", l6.getId()); Activity b = PopulationUtils.createActivityFromLinkId("w", l7.getId()); Leg leg = PopulationUtils.createLeg(TransportMode.car); leg.setDepartureTime(0.0); leg.setTravelTime(10.0); leg.setTravelTime( 10.0 - leg.getDepartureTime() ); NetworkRoute r = RouteUtils.createLinkNetworkRouteImpl(l6.getId(), l7.getId()); ArrayList<Id<Link>> srcRoute = new ArrayList<Id<Link>>(); srcRoute.add(l1.getId()); r.setLinkIds(l6.getId(), srcRoute, l7.getId()); r.setDistance(RouteUtils.calcDistanceExcludingStartEndLink(r, network)); leg.setRoute(r); p1.addActivity(a); p1.addLeg(leg); p1.addActivity(b); p1.setScore(0.0); person.addPlan(p1); assertNotNull(selector.selectPlan(person)); }
/** * If the old trip had vehicles set in its network routes, and it used a single vehicle, * and if the new trip does not come with vehicles set in its network routes, * then put the vehicle of the old trip into the network routes of the new trip. * @param oldTrip The old trip * @param newTrip The new trip */ private static void putVehicleFromOldTripIntoNewTripIfMeaningful(Trip oldTrip, List<? extends PlanElement> newTrip) { Id<Vehicle> oldVehicleId = getUniqueVehicleId(oldTrip); if (oldVehicleId != null) { for (Leg leg : TripStructureUtils.getLegs(newTrip)) { if (leg.getRoute() instanceof NetworkRoute) { if (((NetworkRoute) leg.getRoute()).getVehicleId() == null) { ((NetworkRoute) leg.getRoute()).setVehicleId(oldVehicleId); } } } } }
@Override public Id<Vehicle> getPlannedVehicleId() { return route.getVehicleId(); }
@Test public void testGetDistance() { Network network = createTestNetwork(); Id<Link> link1 = Id.create("1", Link.class); Id<Link> link4 = Id.create("4", Link.class); NetworkRoute route = getNetworkRouteInstance(link1, link4, network); route.setLinkIds(link1, NetworkUtils.getLinkIds("22 12 -23 3"), link4); route.setDistance(1234.5); Assert.assertEquals("wrong difference.", 1234.5, route.getDistance(), MatsimTestCase.EPSILON); }
private void startRoute(final Attributes atts) { this.currroute = this.plans.getFactory().getRouteFactories().createRoute(NetworkRoute.class, this.prevAct.getLinkId(), this.prevAct.getLinkId()); this.currleg.setRoute(this.currroute); if (atts.getValue("dist") != null) { this.currroute.setDistance(Double.parseDouble(atts.getValue("dist"))); } if (atts.getValue("trav_time") != null) { this.currroute.setTravelTime(Time.parseTime(atts.getValue("trav_time"))); } }
@Override public void handleLeg(Leg leg) { if(leg.getRoute() instanceof NetworkRoute){ NetworkRoute nRoute = (NetworkRoute) leg.getRoute(); Id vehicleId = nRoute.getVehicleId(); CarrierVehicle vehicle = getVehicle(vehicleId); if(vehicle == null) throw new IllegalStateException("vehicle with id " + vehicleId + " is missing"); if(!employedVehicles.contains(vehicle)){ employedVehicles.add(vehicle); } double distance = 0.0; double toll = 0.; if(leg.getRoute() instanceof NetworkRoute){ Link startLink = network.getLinks().get(leg.getRoute().getStartLinkId()); distance += startLink.getLength(); for(Id linkId : ((NetworkRoute) leg.getRoute()).getLinkIds()){ distance += network.getLinks().get(linkId).getLength(); } distance += network.getLinks().get(leg.getRoute().getEndLinkId()).getLength(); } double distanceCosts = distance*getDistanceParameter(vehicle); assert distanceCosts >= 0.0 : "distanceCosts must be positive"; score += (-1) * distanceCosts; double timeCosts = leg.getTravelTime()*getTimeParameter(vehicle); assert timeCosts >= 0.0 : "timeCosts must be positive"; score += (-1) * timeCosts; } }
@Override public void setVehicleId(final Id vehicleId) { netRoute.setVehicleId(vehicleId); }
public void addUmlaufStueckToUmlauf(UmlaufStueck umlaufStueck, Umlauf umlauf) { List<UmlaufStueckI> umlaufStueckeOfThisUmlauf = umlauf.getUmlaufStuecke(); if (! umlaufStueckeOfThisUmlauf.isEmpty()) { UmlaufStueckI previousUmlaufStueck = umlaufStueckeOfThisUmlauf.get(umlaufStueckeOfThisUmlauf.size() - 1); NetworkRoute previousCarRoute = previousUmlaufStueck.getCarRoute(); Id<Link> fromLinkId = previousCarRoute.getEndLinkId(); Id<Link> toLinkId = umlaufStueck.getCarRoute().getStartLinkId(); if (!fromLinkId.equals(toLinkId)) { insertWenden(fromLinkId, toLinkId, umlauf); } } umlaufStueckeOfThisUmlauf.add(umlaufStueck); }
Leg l1 = PopulationUtils.createAndAddLeg( plan, TransportMode.car ); NetworkRoute route1 = f.scenario.getPopulation().getFactory().getRouteFactories().createRoute(NetworkRoute.class, f.link2.getId(), f.link3.getId()); route1.setLinkIds(f.link2.getId(), f.linkIdsNone, f.link3.getId()); route1.setVehicleId(Id.create(2, Vehicle.class)); l1.setRoute(route1); PopulationUtils.createAndAddActivityFromLinkId(plan, "w", f.link3.getId());
@Override public Id<Link> getDestinationLinkId() { return route.getEndLinkId(); }
/** * * @param event */ public void handleEvent(PersonArrivalEvent event) { currentLeg.setTravelTime( event.getTime() - currentLeg.getDepartureTime() ); double travelTime = currentLeg.getDepartureTime() + currentLeg.getTravelTime() - currentLeg.getDepartureTime(); currentLeg.setTravelTime(travelTime); if (currentRoute.size() > 1) { NetworkRoute networkRoute = RouteUtils.createNetworkRoute(currentRoute, null); networkRoute.setTravelTime(travelTime); networkRoute.setVehicleId(getVehicle().getVehicleId()); currentLeg.setRoute(networkRoute); currentRoute = null; } else { Id<Link> startLink; if(currentRoute.size() != 0){ startLink = currentRoute.get(0); } else{ startLink = event.getLinkId(); } Route genericRoute = RouteUtils.createGenericRouteImpl(startLink, event.getLinkId()); genericRoute.setDistance(0.0); currentLeg.setRoute(genericRoute); } scoringFunction.handleLeg(currentLeg); }
@Override public double getTravelCost() { return this.delegate.getTravelCost(); }