22 package org.matsim.core.scoring;
24 import com.google.inject.Inject;
25 import org.apache.logging.log4j.LogManager;
26 import org.apache.logging.log4j.Logger;
39 class ExperiencedPlansServiceImpl
implements ExperiencedPlansService, EventsToLegs.LegHandler, EventsToActivities.ActivityHandler {
41 private final static Logger log = LogManager.getLogger(ExperiencedPlansServiceImpl.class);
43 @Inject
private Config config;
45 @Inject(optional =
true) private ScoringFunctionsForPopulation scoringFunctionsForPopulation;
47 private final IdMap<
Person,
Plan> agentRecords = new IdMap<>(Person.class);
50 ExperiencedPlansServiceImpl(ControlerListenerManager controlerListenerManager, EventsToActivities eventsToActivities, EventsToLegs eventsToLegs) {
51 controlerListenerManager.addControlerListener(
new IterationStartsListener() {
53 public void notifyIterationStarts(IterationStartsEvent event) {
54 for (Person person : population.getPersons().values()) {
55 agentRecords.put(person.getId(), PopulationUtils.createPlan());
59 eventsToActivities.addActivityHandler(
this);
60 eventsToLegs.addLegHandler(
this);
63 ExperiencedPlansServiceImpl(EventsToActivities eventsToActivities, EventsToLegs eventsToLegs, Scenario scenario) {
64 this.population = scenario.getPopulation();
66 for (Person person : population.getPersons().values()) {
67 agentRecords.put(person.getId(), PopulationUtils.createPlan());
69 eventsToActivities.addActivityHandler(
this);
70 eventsToLegs.addLegHandler(
this);
71 this.config = scenario.getConfig();
75 synchronized public void handleLeg(PersonExperiencedLeg o) {
80 Plan plan = agentRecords.get(agentId);
87 synchronized public void handleActivity(PersonExperiencedActivity o) {
92 Plan plan = agentRecords.get(agentId);
99 public void writeExperiencedPlans(String iterationFilename) {
101 Population tmpPop = PopulationUtils.createPopulation(config);
102 for (Map.Entry<
Id<Person>,
Plan> entry :
this.agentRecords.entrySet()) {
104 Plan plan = entry.getValue();
114 public final void finishIteration() {
117 for (Map.Entry<
Id<Person>,
Plan> entry :
this.agentRecords.entrySet()) {
118 Plan plan = entry.getValue();
119 if (scoringFunctionsForPopulation != null) {
120 plan.
setScore(scoringFunctionsForPopulation.getScoringFunctionForAgent(entry.getKey()).getScore());
122 log.warn(
"score is NaN; plan:" + plan.toString());
129 public IdMap<Person, Plan> getExperiencedPlans() {
130 return this.agentRecords;
void write(final String filename)
void addLeg(final Leg leg)
abstract boolean addPlan(T p)
Person createPerson(Id< Person > id)
void addActivity(final Activity act)
void setScore(Double score)
PopulationFactory getFactory()
void addPerson(final Person p)