private void setReplanningWeights(Config config, double mutationRate) { if (mutationRate > 1) mutationRate = 0.9999; List<StrategyConfigGroup.StrategySettings> strategySettings = new ArrayList<>(); strategySettings.addAll(config.strategy().getStrategySettings()); Map<Integer, Double> selectors = new HashMap<>(); Map<Integer, Double> mutators = new HashMap<>(); for (int i = 0; i < strategySettings.size(); i++) { StrategyConfigGroup.StrategySettings setting = strategySettings.get(i); if (DistributedPlanStrategyTranslationAndRegistration.SupportedSelectors.keySet().contains(setting.getStrategyName())) selectors.put(i, setting.getWeight()); else { mutators.put(i, setting.getWeight()); } } double mutatorSum = CollectionUtils.sumElements(mutators.values()); double selectorSum = CollectionUtils.sumElements(selectors.values()); // set to new weight for (Map.Entry<Integer, Double> entry : selectors.entrySet()) { strategySettings.get(entry.getKey()).setWeight((1 - mutationRate) * entry.getValue() / selectorSum); } for (Map.Entry<Integer, Double> entry : mutators.entrySet()) { strategySettings.get(entry.getKey()).setWeight(mutationRate * entry.getValue() / mutatorSum); } //put it back in the config config.strategy().clearStrategySettings(); for (StrategyConfigGroup.StrategySettings strategySetting : strategySettings) { config.strategy().addStrategySettings(strategySetting); } }
@Override protected void checkConsistency(Config config) { super.checkConsistency(config); if ( getStrategyName() == null || getStrategyName().length() == 0 ) { throw new RuntimeException("Strategy strategyName is not set"); } if ( getWeight() < 0.0 ) { throw new RuntimeException("Weight for strategy " + getStrategyName() + " must be >= 0.0" ); } }
StrategyConfigGroup.StrategySettings setting = strategySettings.get(i); if (DistributedPlanStrategyTranslationAndRegistration.SupportedSelectors.keySet().contains(setting.getStrategyName())) selectors.put(i, setting.getWeight()); else { mutators.put(i, setting.getWeight()); maximumIterationForMutationDisabling = Math.max(setting.getDisableAfter(), maximumIterationForMutationDisabling);
originalValue = setting.getWeight();
PlanStrategy strategy = entry.getValue(); StrategyConfigGroup.StrategySettings settings = entry.getKey(); addStrategy(strategy, settings.getSubpopulation(), settings.getWeight());
public static void substituteStrategies(Config config, boolean quickReplanning, int selectionInflationFactor) { for (StrategyConfigGroup.StrategySettings settings : config.strategy().getStrategySettings()) { String classname = settings.getStrategyName(); if (classname.startsWith("org.matsim.demandmodeling.plans.strategies.")) { classname = classname.replace("org.matsim.demandmodeling.plans.strategies.", ""); settings.setStrategyName(classname); } if (!DistributedPlanStrategyTranslationAndRegistration.isStrategySupported(classname)) { throw new RuntimeException("Strategy " + classname + " not known to be compatible with (Distributed) PSim. Exiting."); } else { if (SupportedMutators.containsKey(classname)) settings.setStrategyName(classname + DistributedPlanStrategyTranslationAndRegistration.SUFFIX); if (SupportedSelectors.containsKey(classname)) { settings.setStrategyName(classname + DistributedPlanStrategyTranslationAndRegistration.SUFFIX); //implement quick replanning by simply multiplying the selector weights by the number of PSim Iterations if (quickReplanning) { settings.setWeight(settings.getWeight() * (double) selectionInflationFactor); } } } } } }
private ConfigGroup toUnderscoredModule(final StrategyConfigGroup initialGroup) { // yyyy is this method/this execution path still necessary? Maybe we need to be able to read config v1, but certainly // we don't need to WRITE it, do we? kai/mz, nov'15 final ConfigGroup module = new ConfigGroup( initialGroup.getName() ); for ( Map.Entry<String, String> e : initialGroup.getParams().entrySet() ) { log.info( "add param "+e.getKey() ); module.addParam( e.getKey() , e.getValue() ); } for ( StrategySettings settings : initialGroup.getStrategySettings() ) { final Id<StrategySettings> id = settings.getId(); module.addParam( "Module_"+id , settings.getStrategyName() ); module.addParam( "ModuleProbability_"+id , ""+settings.getWeight() ); module.addParam( "ModuleDisableAfterIteration_"+id , ""+settings.getDisableAfter() ); module.addParam( "ModuleExePath_"+id , settings.getExePath() ); module.addParam( "ModuleSubpopulation_"+id , settings.getSubpopulation() ); } return module; }