21 package org.matsim.core.population.algorithms;
24 import java.util.Random;
55 final boolean affectingDuration,
final Random random) {
60 final Random random,
final Map<String, Double> subpopulationMutationRanges,
61 final Map<String, Boolean> subpopulationAffectingDuration) {
67 final Random random,
final Map<String, Double> subpopulationMutationRanges,
68 final Map<String, Boolean> subpopulationAffectingDuration,
final double latestEndTime) {
85 boolean isFirst =
true;
101 act.setStartTime(now);
105 if (affectingDuration) {
106 act.setMaximumDuration(act.getEndTime().seconds() - act.getStartTime().seconds());
109 now += act.getEndTime().seconds();
112 }
else if (act != lastAct) {
115 act.setStartTime(now);
117 if (this.useActivityDurations) {
118 if (act.getMaximumDuration().isDefined()) {
120 if (affectingDuration) {
123 now += act.getMaximumDuration().seconds();
130 if (newEndTime < now) {
133 act.setEndTime(newEndTime);
138 if (act.getEndTime().isUndefined()) {
139 throw new IllegalStateException(
"Can not mutate activity end time because it is not set for Person: " + plan.
getPerson().getId());
142 if (newEndTime < now) {
145 act.setEndTime(newEndTime);
153 act.setStartTime(now);
156 act.setMaximumDurationUndefined();
157 act.setEndTimeUndefined();
169 final double arrTime = now;
181 if (t > this.latestEndTime)
185 return this.random.nextInt((
int) this.latestEndTime);
194 if (plan.
getPerson() == null)
return null;
199 if (subpopulation != null) {
201 if (isAffectingDuration != null)
return isAffectingDuration.booleanValue();
209 if (subpopulation != null) {
210 Double mutationRange = this.subpopulationMutationRanges.get(subpopulation);
211 if (mutationRange != null)
return mutationRange.doubleValue();
boolean isAffectingDuration(final String subpopulation)
void setDepartureTime(final double seconds)
final double mutationRange
final boolean affectingDuration
OptionalTime getDepartureTime()
final Map< String, Boolean > subpopulationAffectingDuration
void run(final Plan plan)
static final double DEFAULT_LATEST_END_TIME
static final boolean isStageActivity(final String activityType)
static String getSubpopulation(HasPlansAndId<?, ?> person)
TripPlanMutateTimeAllocation(final double mutationRange, final boolean affectingDuration, final Random random, final Map< String, Double > subpopulationMutationRanges, final Map< String, Boolean > subpopulationAffectingDuration)
List< PlanElement > getPlanElements()
OptionalTime getTravelTime()
final Map< String, Double > subpopulationMutationRanges
final double latestEndTime
double getMutationRange(final String subpopulation)
void setTravelTime(final double seconds)
String getSubpopulation(final Plan plan)
boolean useActivityDurations
void mutatePlan(final Plan plan)
double mutateTime(final OptionalTime time, final double mutationRange)
TripPlanMutateTimeAllocation(final double mutationRange, final boolean affectingDuration, final Random random, final Map< String, Double > subpopulationMutationRanges, final Map< String, Boolean > subpopulationAffectingDuration, final double latestEndTime)
TripPlanMutateTimeAllocation(final double mutationRange, final boolean affectingDuration, final Random random)
void setUseActivityDurations(final boolean useActivityDurations)