/** * Creates a new TimeAllocationMutator with a mutation range as defined in * the configuration (module "TimeAllocationMutator", param "mutationRange"). */ public TripTimeAllocationMutator(Config config, Provider<TripRouter> tripRouterProvider) { super(config.global()); this.tripRouterProvider = tripRouterProvider; this.mutationRange = config.timeAllocationMutator().getMutationRange() ; this.affectingDuration = config.timeAllocationMutator().isAffectingDuration() ; PlansConfigGroup.ActivityDurationInterpretation actDurInterpr = ( config.plans().getActivityDurationInterpretation() ) ; if ( actDurInterpr == PlansConfigGroup.ActivityDurationInterpretation.minOfDurationAndEndTime ) { useActivityDurations = true ; } else if ( actDurInterpr == PlansConfigGroup.ActivityDurationInterpretation.endTimeOnly ) { useActivityDurations = false ; } else if ( actDurInterpr == PlansConfigGroup.ActivityDurationInterpretation.tryEndTimeThenDuration ) { throw new UnsupportedOperationException( "need to clarify the correct setting here. Probably not a big deal, but not done yet. kai, aug'10") ; } else { throw new IllegalStateException( "beahvior not defined for this configuration setting") ; } }
public TimeAllocationMutator(Provider<TripRouter> tripRouterProvider, PlansConfigGroup plansConfigGroup, TimeAllocationMutatorConfigGroup timeAllocationMutatorConfigGroup, GlobalConfigGroup globalConfigGroup, final Population population) { super(globalConfigGroup); this.tripRouterProvider = tripRouterProvider; this.activityDurationInterpretation = plansConfigGroup.getActivityDurationInterpretation(); this.mutationRange = timeAllocationMutatorConfigGroup.getMutationRange(); this.affectingDuration = timeAllocationMutatorConfigGroup.isAffectingDuration(); // in case we have subpopulations and individual settings for them if (plansConfigGroup.getSubpopulationAttributeName() != null && timeAllocationMutatorConfigGroup.isUseIndividualSettingsForSubpopulations() && population != null) { this.subpopulationAttribute = plansConfigGroup.getSubpopulationAttributeName(); this.subpopulationMutationRanges = new HashMap<>(); this.subpopulationAffectingDuration = new HashMap<>(); this.personAttributes = population.getPersonAttributes(); Collection<? extends ConfigGroup> settings = timeAllocationMutatorConfigGroup.getParameterSets(TimeAllocationMutatorSubpopulationSettings.SET_NAME); for (ConfigGroup group : settings) { TimeAllocationMutatorSubpopulationSettings subpopulationSettings = (TimeAllocationMutatorSubpopulationSettings) group; String subpopulation = subpopulationSettings.getSubpopulation(); this.subpopulationMutationRanges.put(subpopulation, subpopulationSettings.getMutationRange()); this.subpopulationAffectingDuration.put(subpopulation, subpopulationSettings.isAffectingDuration()); log.info("Found individual time mutator settings for subpopulation: " + subpopulation); } } else { this.personAttributes = null; this.subpopulationAttribute = null; this.subpopulationMutationRanges = null; this.subpopulationAffectingDuration = null; } }
@Override public PlanAlgorithm getPlanAlgoInstance() { final CompositeStageActivityTypes blackList = new CompositeStageActivityTypes(); blackList.addActivityTypes( tripRouterFactory.get().getStageActivityTypes() ); blackList.addActivityTypes( JointActingTypes.JOINT_STAGE_ACTS ); final int iteration = getReplanningContext().getIteration(); final int firstIteration = config.controler().getFirstIteration(); final double nIters = config.controler().getLastIteration() - firstIteration; final double minTemp = 1; final double startMin = (2 / 3.) * nIters; final double progress = (iteration - firstIteration) / startMin; final double temp = minTemp + Math.max(1 - progress , 0) * (maxTemp - minTemp); log.debug( "temperature in iteration "+iteration+": "+temp ); final BlackListedTimeAllocationMutator algo = new BlackListedTimeAllocationMutator( blackList, config.timeAllocationMutator().getMutationRange() * temp, MatsimRandom.getLocalInstance() ); return algo; } }));
if ( config.timeAllocationMutator().getMutationRange() < 7200 ) { problem = true ; System.out.flush() ;