22 package org.matsim.core.mobsim.qsim;
24 import static java.util.Comparator.comparing;
27 import java.util.ArrayList;
28 import java.util.Collections;
29 import java.util.LinkedHashMap;
30 import java.util.List;
32 import java.util.Optional;
33 import java.util.TreeMap;
35 import org.apache.logging.log4j.LogManager;
36 import org.apache.logging.log4j.Logger;
72 import com.google.inject.Inject;
119 log.warn(
"running onPrepareSim");
123 log.warn(
"registering TripInfo.Provider for mode=" + mode);
132 this.editPlans =
new EditPlans(internalInterface.
getMobsim(),
new EditTrips( tripRouter, scenario, internalInterface, timeInterpretation ) );
146 final MobsimAgent mobsimAgent = entry.getKey();
149 List<TripInfo> allTripInfos =
new ArrayList<>();
151 allTripInfos.addAll( provider.getTripInfos( request ) );
160 decide( mobsimAgent, allTripInfos );
165 for (Map.Entry<MobsimAgent, Optional<TripInfo>> entry : tripInfoUpdatesMap.entrySet()) {
166 MobsimAgent agent = entry.getKey();
168 Optional<TripInfo> tripInfo = entry.getValue();
170 if (tripInfo.isPresent()) {
171 TripInfo actualTripInfo = tripInfo.get();
189 tripInfoUpdatesMap.clear();
199 tripInfoUpdatesMap.put(agent, tripInfoUpdate);
206 private void decide(MobsimAgent agent, List<TripInfo> allTripInfos) {
211 if (allTripInfos.isEmpty()) {
217 TripInfo tripInfo = allTripInfos.iterator().next();
256 return Collections.emptyList();
261 if (prebookingOffset_s == null) {
262 log.warn(
"The " +
"prebookingOffset_s" +
" is not set in the agent. No wakeup for prebooking will be generated." );
263 return Collections.emptyList();
276 final double prebookingTime = drtLeg.getDepartureTime().seconds() - prebookingOffset_s;
277 if (prebookingTime < agent.getActivityEndTime()) {
281 log.info(
"generating wakeup entry");
316 final double expectedEndTimeOfOriginActivity = timeInterpretation.
decideOnActivityEndTime( drtTrip.getOriginActivity(), now ).seconds();
318 final TripInfo.
Request request =
new TripInfoRequestWithActivities.Builder(scenario)
319 .setFromActivity( drtTrip.getOriginActivity() )
320 .setToActivity(drtTrip.getDestinationActivity())
321 .setTime( expectedEndTimeOfOriginActivity )
366 log.warn(
"agentId=" + agent.
getId() +
" | newActEndTime=" + inputTrip.getOriginActivity()
372 TripRouter.
insertTrip(plan, inputTrip.getOriginActivity(), result, inputTrip.getDestinationActivity());
377 log.warn(
"new plan for agentId=" + agent.
getId());
379 log.warn(planElement.toString());
387 List<PlanElement> result =
new ArrayList<>();
395 toFacility, departureTime, null, inputTrip.getTripAttributes() );
398 result.addAll(planElements);
409 Route route = pf.getRouteFactories()
423 double expectedTravelTime;
427 expectedTravelTime = 15. * 60;
431 toFacility, departureTime, null, inputTrip.getOriginActivity().getAttributes() );
433 result.addAll(planElements);
440 static String toString(
TripInfo info) {
441 StringBuilder strb =
new StringBuilder();
443 strb.append(
"mode=").append(info.
getMode());
451 return strb.toString();
OptionalTime getEndTime()
synchronized List<? extends PlanElement > calcRoute(final String mainMode, final Facility fromFacility, final Facility toFacility, final double departureTime, final Person person, final Attributes routingAttributes)
final Population population
InternalInterface internalInterface
void setInternalInterface(InternalInterface internalInterface)
static double calcEuclideanDistance(Coord coord, Coord other)
static List< Leg > findLegsWithModeInFuture(MobsimAgent agent, String mode)
double getExpectedBoardingTime()
OptionalTime decideOnActivityEndTime(Activity activity, double startTime)
Facility getPickupLocation()
Activity getOriginActivity()
static Double getPrebookingOffset_s(Plan plan)
static List< PlanElement > insertTrip(final Plan plan, final Activity origin, final List<? extends PlanElement > trip, final Activity destination)
void updateAgentPlan(MobsimAgent agent, TripInfo tripInfo)
static PlanElement getCurrentPlanElement(MobsimAgent agent)
Map< Id< Person >,? extends Person > getPersons()
Facility getDropoffLocation()
static Trip findTripAtPlanElement(MobsimAgent agent, PlanElement pe)
void setMaximumDuration(double seconds)
final Map< MobsimAgent, TripInfo.Request > tripInfoRequestMap
Population getPopulation()
List< PlanElement > createDrtTripInclAccessEgress(TripInfo tripInfo, TripStructureUtils.Trip inputTrip)
final ActivityFacilities facilities
void setRoute(Route route)
void decide(MobsimAgent agent, List< TripInfo > allTripInfos)
static List< Trip > getTrips(final Plan plan)
List< PlanElement > getPlanElements()
final Map< String, TripInfo.Provider > tripInfoProviders
final TripRouter tripRouter
final Map< MobsimAgent, Optional< TripInfo > > tripInfoUpdatesMap
void doSimStep(double time)
static void assertNotNull(Object obj)
List< DepartureHandler > getDepartureHandlers()
static void resetCaches(MobsimAgent agent)
static Trip findTripAtPlanElement(PlanElement currentPlanElement, Plan plan)
void rescheduleActivityEnd(MobsimAgent agent)
final TimeInterpretation timeInterpretation
static String createStageActivityType(String mode)
static String createStageActivityType(String mode)
ActivityFacilities getActivityFacilities()
static Coord decideOnCoordForActivity(Activity act, Scenario sc)
static Coord decideOnCoord(final Facility facility, final Network network, final Config config)
PopulationFactory getFactory()
synchronized void notifyChangedTripInformation(MobsimAgent agent, Optional< TripInfo > tripInfoUpdate)
void setEndTime(final double seconds)
synchronized void notifyTripInfoNeeded(MobsimAgent agent, TripInfo.Request tripInfoRequest)
static Facility toFacility(final Activity toWrap, ActivityFacilities activityFacilities)
double getExpectedTravelTime()
void preplanLeg(MobsimAgent agent, double now, Leg leg)
void bookTrip(MobsimPassengerAgent agent)
static Plan getModifiablePlan(MobsimAgent agent)