@Override public Id getVehicleId() { return netRoute.getVehicleId(); }
@Override public Id<Vehicle> getPlannedVehicleId() { return route.getVehicleId(); }
@Override public Id<Vehicle> getPlannedVehicleId() { Route route = ((Leg)this.currentPlanElement).getRoute() ; return ((NetworkRoute)route).getVehicleId() ; }
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()); }
private Id getVehicleId( final Person p, final Leg leg) { final Route route = leg.getRoute(); if (route instanceof NetworkRoute && ((NetworkRoute) route).getVehicleId() != null) { if ( usedPersonId ) throw new InconsistentVehiculeSpecificationsException(); usedRouteField = true; return ((NetworkRoute) route).getVehicleId(); } if ( usedRouteField ) throw new InconsistentVehiculeSpecificationsException(); usedPersonId = true; return p.getId(); }
if ( route instanceof NetworkRoute) { out.write(" vehicleRefId=\""); final Id<Vehicle> vehicleId = ((NetworkRoute) route).getVehicleId(); if ( vehicleId==null ) { out.write("null");
public static Set<Id> getVehiclesInPlan( final Plan plan, final Collection<String> legModes) { final Set<Id> vehs = new HashSet<Id>(); for ( PlanElement pe : plan.getPlanElements() ) { if ( !(pe instanceof Leg) ) continue; final Leg l = (Leg) pe; if ( !legModes.contains( l.getMode() ) ) continue; if ( !(l.getRoute() instanceof NetworkRoute) ) continue; final Id v = ((NetworkRoute) l.getRoute()).getVehicleId(); if ( v == null ) continue; vehs.add( v ); } return vehs; } }
private static Id<Vehicle> getUniqueVehicleId(Trip trip) { Id<Vehicle> vehicleId = null; for (Leg leg : trip.getLegsOnly()) { if (leg.getRoute() instanceof NetworkRoute) { if (vehicleId != null && (!vehicleId.equals(((NetworkRoute) leg.getRoute()).getVehicleId()))) { return null; // The trip uses several vehicles. } vehicleId = ((NetworkRoute) leg.getRoute()).getVehicleId(); } } return vehicleId; }
out.write(Id.writeId( ((NetworkRoute) route).getVehicleId() ) ); out.write("\"");
@Override public Id<Vehicle> getPlannedVehicleId() { return ((NetworkRoute)this.dummyLeg.getRoute()).getVehicleId(); // not sure if this is very clever. kai, jun'11 }
private Id getVehicle( final Trip t ) { final List<Leg> legs = t.getLegsOnly(); if ( legs.isEmpty() ) return null; // XXX what to do if several legs??? final Leg l = legs.get( 0 ); if ( !vehicularModes.contains( l.getMode() ) ) return null; if ( !allowNullRoutes && l.getRoute() == null ) return null; if ( l.getRoute() != null && !(l.getRoute() instanceof NetworkRoute) ) return null; return ((NetworkRoute) l.getRoute()).getVehicleId(); }
@Override public final Id<Vehicle> getPlannedVehicleId() { NetworkRoute route = (NetworkRoute) this.getCurrentLeg().getRoute(); // if casts fail: illegal state. if (route.getVehicleId() != null) { return route.getVehicleId(); } Gbl.assertIf( scenario.getConfig().qsim().getUsePersonIdForMissingVehicleId() ); return Id.create(this.getId(), Vehicle.class); // we still assume the vehicleId is the agentId if no vehicleId is given. } @Override
private static Id getVehicleId(final Trip old) { Id id = null; for (Leg l : old.getLegsOnly()) { if ( !(l.getRoute() instanceof NetworkRoute) ) continue; final Id currId = ((NetworkRoute) l.getRoute()).getVehicleId(); // would be more efficient to just return the first found Id, // but there would be a risk of this problem poping up at some // point if ( id != null && !id.equals( currId ) ) { throw new RuntimeException( "cannot handle trips with multiple vehicles, such as "+id+" and "+currId+" in "+l.getRoute() ); } id = currId; } return id; }
private boolean hasVehicle(final Plan p) { for ( PlanElement pe : p.getPlanElements() ) { if ( !(pe instanceof Leg) ) continue; final Leg leg = (Leg) pe; if ( !modes.contains( leg.getMode() ) ) continue; if ( !( ( allowNullRoutes && leg.getRoute() == null ) || ( leg.getRoute() instanceof NetworkRoute ) ) ) { throw new RuntimeException( "route for mode "+leg.getMode()+" has non-network route "+leg.getRoute() ); } if ( !preserveVehicleAllocations || leg.getRoute() == null || ((NetworkRoute) leg.getRoute()).getVehicleId() == null ) { return true; } } return false; }
/** * 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); } } } } }
@Test public void testVehicleId() { Network network = createTestNetwork(); Id<Link> link0 = Id.create("0", Link.class); Id<Link> link15 = Id.create("15", Link.class); NetworkRoute route = getNetworkRouteInstance(link0, link15, network); Assert.assertNull(route.getVehicleId()); Id<Vehicle> id = Id.create("8134", Vehicle.class); route.setVehicleId(id); Assert.assertEquals(id, route.getVehicleId()); route.setVehicleId(null); Assert.assertNull(route.getVehicleId()); }
@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; } }
@Test public void testVehicleIdInRoute() { final MutableScenario scenario = (MutableScenario) ScenarioUtils.createScenario(ConfigUtils.createConfig()); PopulationReaderMatsimV5 reader = new PopulationReaderMatsimV5(scenario); final Population population = scenario.getPopulation(); String str = "<?xml version=\"1.0\" ?>"+ "<!DOCTYPE population SYSTEM \"http://www.matsim.org/files/dtd/population_v5.dtd\">"+ "<population>"+ "<person id=\"1\">"+ " <plan>"+ " <act type=\"h\" x=\"-25000\" y=\"0\" end_time=\"06:00\" />"+ " <leg mode=\"car\" >"+ " <route type=\"links\" vehicleRefId=\"123\"/>" + " </leg>" + " <act type=\"w\" x=\"10000\" y=\"0\" end_time=\"12:00\" />"+ " </plan>"+ "</person>"+ "</population>"; reader.parse(new ByteArrayInputStream(str.getBytes())); Plan plan = population.getPersons().get(Id.create(1, Person.class)).getSelectedPlan(); Assert.assertEquals(3, plan.getPlanElements().size()); Assert.assertTrue(plan.getPlanElements().get(0) instanceof Activity); Assert.assertTrue(plan.getPlanElements().get(1) instanceof Leg); Leg leg = (Leg) plan.getPlanElements().get(1) ; NetworkRoute route = (NetworkRoute) leg.getRoute() ; Assert.assertEquals(Id.create("123", Vehicle.class), route.getVehicleId() ) ; Assert.assertTrue(plan.getPlanElements().get(2) instanceof Activity); }
@Test public void passesVehicleFromOldPlan() { final Config config = ConfigUtils.loadConfig(IOUtils.newUrl(ExamplesUtils.getTestScenarioURL("equil"), "config.xml")); config.plans().setInputFile("plans1.xml"); final Scenario scenario = ScenarioUtils.loadScenario(config); com.google.inject.Injector injector = Injector.createInjector(scenario.getConfig(), new AbstractModule() { @Override public void install() { install(new TripRouterModule()); install(new ScenarioByInstanceModule(scenario)); addTravelTimeBinding("car").toInstance(new FreespeedTravelTimeAndDisutility(config.planCalcScore())); addTravelDisutilityFactoryBinding("car").toInstance(new OnlyTimeDependentTravelDisutilityFactory()); } }); TripRouter tripRouter = injector.getInstance(TripRouter.class); PlanRouter testee = new PlanRouter(tripRouter); Plan plan = scenario.getPopulation().getPersons().get(Id.createPersonId(1)).getSelectedPlan(); Id<Vehicle> vehicleId = Id.create(1, Vehicle.class); ((NetworkRoute) TripStructureUtils.getLegs(plan).get(0).getRoute()).setVehicleId(vehicleId); testee.run(plan); if ( !config.plansCalcRoute().isInsertingAccessEgressWalk() ) { Assert.assertEquals("Vehicle Id transferred to new Plan", vehicleId, ((NetworkRoute) TripStructureUtils.getLegs(plan).get(0).getRoute()).getVehicleId()); } else { Assert.assertEquals("Vehicle Id transferred to new Plan", vehicleId, ((NetworkRoute) TripStructureUtils.getLegs(plan).get(1).getRoute()).getVehicleId()); // yy I changed get(0) to get(1) since in the input file there is no intervening walk leg, but in the output there is. kai, feb'16 } }
testee.run(plan); if ( !config.plansCalcRoute().isInsertingAccessEgressWalk() ) { Assert.assertEquals("Vehicle Id from TripRouter used", newVehicleId, ((NetworkRoute) TripStructureUtils.getLegs(plan).get(0).getRoute()).getVehicleId()); } else { Assert.assertEquals("Vehicle Id from TripRouter used", newVehicleId, ((NetworkRoute) TripStructureUtils.getLegs(plan).get(1).getRoute()).getVehicleId());