public SubtourRecord( final Subtour subtour, final List<VehicleRecord> possibleVehicles) { this.possibleVehicles = possibleVehicles; this.subtour = subtour; final Trip firstTrip = subtour.getTrips().get( 0 ); this.startTime = firstTrip.getOriginActivity().getEndTime(); if ( startTime == Time.UNDEFINED_TIME ) throw new RuntimeException( "no end time in "+firstTrip.getOriginActivity() ); final Trip lastTrip = subtour.getTrips().get( subtour.getTrips().size() - 1 ); this.endTime = calcArrivalTime( lastTrip ); } }
@Override public void run(final Plan plan) { final List<Id> vehs = new ArrayList<Id>( vehicleRessources.identifyVehiclesUsableForAgent( plan.getPerson().getId() ) ); // make sure order is deterministic Collections.sort( vehs ); final List<Subtour> rootSubtours = getRootSubtoursWithMode( plan ); if ( rootSubtours.isEmpty() ) return; final Subtour toHandle = rootSubtours.get( random.nextInt( rootSubtours.size() ) ); final Id veh = vehs.get( random.nextInt( vehs.size() ) ); for ( Trip t : toHandle.getTrips() ) { if ( !identifyMainMode( t ).equals( mode ) ) continue; for ( Leg l : t.getLegsOnly() ) { if ( !(l.getRoute() instanceof NetworkRoute) ) continue; final NetworkRoute route = (NetworkRoute) l.getRoute(); route.setVehicleId( veh ); } } }
@Override public String identifyMode(final Subtour subtour) { return modeIdentifier.identifyMainMode( subtour.getTrips().get( 0 ).getTripElements() ); } }
subtour.getTrips().get( 0 ).getOriginActivity().getFacilityId() !=null ? subtour.getTrips().get( 0 ).getOriginActivity().getFacilityId() : subtour.getTrips().get( 0 ).getOriginActivity().getLinkId(); subtour.getTrips().size() == 1 ? singleTripSubtourModes : chainBasedModes; trips.subList( 0, trips.indexOf( subtour.getTrips().get( 0 ) )), mode); if (lastDestination != null) {
for ( Trip t : s.getTrips() ) { Assert.assertEquals( "unexpected mutated trip length",
if ( s.getParent() != null ) continue; // is not a root tour boolean isFirstTrip = true; for ( final Trip t : s.getTrips() ) { final Subtour s = record.subtour; assert s.getParent() == null; final Id anchor = s.getTrips().get( 0 ).getOriginActivity().getFacilityId()!=null ? s.getTrips().get( 0 ).getOriginActivity().getFacilityId() : s.getTrips().get( 0 ).getOriginActivity().getLinkId();
for ( Trip t : s.getTrips() ) { Assert.assertEquals( "unexpected mutated trip length",
String modePreviousTripSameSubtour = null; for (Trip trip: subtour.getTrips()) {
/*for tests*/ double calcOverlap(final GroupPlans gps) { final List<SubtourRecord> tours = getVehicularToursSortedByStartTime( gps ); double overlap = 0; for ( final SubtourRecord tour : tours ) { Id veh = null; for ( final Trip t : tour.subtour.getTrips() ) { veh = getVehicle( t ); if ( veh != null ) break; } for ( final VehicleRecord vr : tour.possibleVehicles ) { if ( vr.id.equals( veh ) ) { overlap += Math.max( 0 , vr.availableFrom - tour.startTime ); if ( vr.availableFrom < tour.endTime ) { vr.availableFrom = tour.endTime; } break; } } } return overlap; }
private void applyChange( final Candidate whatToDo, final Plan plan) { for (Trip trip : whatToDo.subtour.getTrips()) { if ( behavior== SubtourModeChoice.Behavior.fromSpecifiedModesToSpecifiedModes ) { if (!modes.contains(mainModeIdentifier.identifyMainMode(trip.getTripElements()))) { // (ignore trips with modes that are not in "modes". MATSIM-809) continue; } } TripRouter.insertTrip( plan, trip.getOriginActivity(), Collections.singletonList(PopulationUtils.createLeg(whatToDo.newTransportMode)), trip.getDestinationActivity()); } }
private void processAllocation(final List<SubtourRecord> vehicularTours) { for ( final SubtourRecord r : vehicularTours ) { for ( final Trip t : r.subtour.getTrips() ) { for ( final Leg leg : t.getLegsOnly() ) { if ( !vehicularModes.contains( leg.getMode() ) ) continue; if ( allowNullRoutes && leg.getRoute() == null ) { // this is not so nice... leg.setRoute( new VehicleOnlyNetworkRoute() ); } if ( !( leg.getRoute() instanceof NetworkRoute ) ) { throw new RuntimeException( "route for mode "+leg.getMode()+" has non-network route "+leg.getRoute() ); } ((NetworkRoute) leg.getRoute()).setVehicleId( r.allocatedVehicle ); } } } }
@Override public void run(final Plan plan) { for ( Subtour subtour : TripStructureUtils.getSubtours( plan , stages ) ) { // not clear what we should do with open tours if ( !subtour.isClosed() ) continue; // only consider "root" tours: tours without (closed) parent if ( subtour.getParent() != null && subtour.getParent().isClosed() ) continue; final String mode = modeIdentifier.identifyMode( subtour ); for ( Trip trip : subtour.getTrips() ) { TripRouter.insertTrip( plan, trip.getOriginActivity(), Collections.singletonList( PopulationUtils.createLeg(mode) ), trip.getDestinationActivity() ); } } }
private boolean isMassConserving( final Subtour subtour, final String mode) { final Activity firstOrigin = findFirstOriginOfMode( subtour.getTrips(), mode); if (firstOrigin == null) { return true; } final Activity lastDestination = findLastDestinationOfMode( subtour.getTrips(), mode); return atSameLocation(firstOrigin, lastDestination); }
private String getTransportMode(final Subtour subtour) { return mainModeIdentifier.identifyMainMode( subtour.getTrips().get( 0 ).getTripElements() ); }
private boolean containsMode( final Subtour s ) { for ( Trip t : s.getTrips() ) { if ( tripRouter.getMainModeIdentifier().identifyMainMode( t.getTripElements() ).equals( mode ) ) { return true; } } return false; } }
private boolean containsUnknownMode(final Subtour subtour) { for (Trip trip : subtour.getTrips()) { if (!modes.contains( mainModeIdentifier.identifyMainMode( trip.getTripElements() ))) { return true; } } return false; }