1 package org.matsim.core.replanning.conflicts;
3 import java.util.Collections;
4 import java.util.HashMap;
7 import java.util.Random;
9 import java.util.stream.Collectors;
11 import org.apache.logging.log4j.LogManager;
12 import org.apache.logging.log4j.Logger;
20 import com.google.common.base.Preconditions;
46 if (resolvers.size() > 0) {
52 if (resolvers.size() == 0) {
56 logger.info(
"Resolving conflicts ...");
58 Map<String, Integer> conflictCounts =
new HashMap<>();
62 IdSet<Person> resolverConflictingIds = resolver.resolve(population, iteration);
63 conflictCounts.put(resolver.getName(), resolverConflictingIds.
size());
64 conflictingIds.
addAll(resolverConflictingIds);
67 logger.info(
" Conflicts: " + conflictCounts.entrySet().stream()
68 .map(entry -> String.format(
"%s=%d", entry.getKey(), entry.getValue()))
69 .collect(Collectors.joining(
", ")));
71 int switchedToInitialCount = 0;
72 int switchedToRandomCount = 0;
82 switchedToInitialCount++;
86 .collect(Collectors.toList());
87 Preconditions.checkState(candidates.size() > 0,
88 String.format(
"Agent %s has no non-conflicting plan", personId));
91 Collections.shuffle(candidates, random);
94 switchedToRandomCount++;
98 logger.info(String.format(
" %d (%.2f%%) switched to initial", switchedToInitialCount,
99 (
double) switchedToInitialCount / population.
getPersons().size()));
100 logger.info(String.format(
" %d (%.2f%%) switched to random", switchedToRandomCount,
101 (
double) switchedToRandomCount / population.
getPersons().size()));
103 writer.
write(iteration, switchedToInitialCount, switchedToRandomCount, conflictCounts);
105 logger.info(
" Done resolving conflicts!");
110 if (resolver.isPotentiallyConflicting(plan)) {
final Set< ConflictResolver > resolvers
static Plan getInitialPlan(Person person)
static void setInitialPlan(Person person)
Map< Id< Person >,? extends Person > getPersons()
ConflictManager(Set< ConflictResolver > resolvers, ConflictWriter writer, Random random)
boolean addAll(Collection<? extends Id< T >> c)
final ConflictWriter writer
static final Logger logger
void run(Population population, int iteration)
abstract void setSelectedPlan(T selectedPlan)
void initializeReplanning(Population population)
boolean isPotentiallyConflicting(Plan plan)
void write(int iteration, int rejectedToInitial, int rejectedToRandom, Map< String, Integer > conflictCounts)
abstract List<? extends T > getPlans()