MATSIM
EventsToScore.java
Go to the documentation of this file.
1 /* *********************************************************************** *
2  * project: org.matsim.*
3  * EventsToScore.java
4  * *
5  * *********************************************************************** *
6  * *
7  * copyright : (C) 2007, 2008 by the members listed in the COPYING, *
8  * LICENSE and WARRANTY file. *
9  * email : info at matsim dot org *
10  * *
11  * *********************************************************************** *
12  * *
13  * This program is free software; you can redistribute it and/or modify *
14  * it under the terms of the GNU General Public License as published by *
15  * the Free Software Foundation; either version 2 of the License, or *
16  * (at your option) any later version. *
17  * See also COPYING, LICENSE and WARRANTY file *
18  * *
19  * *********************************************************************** */
20 
21 package org.matsim.core.scoring;
22 
23 
24 import org.matsim.api.core.v01.Id;
25 import org.matsim.api.core.v01.Scenario;
35 
36 import jakarta.inject.Inject;
37 
38 
50 public final class EventsToScore {
51 
52  private final NewScoreAssigner newScoreAssigner;
54  private ScoringFunctionsForPopulation scoringFunctionsForPopulation;
55  private final Population population;
56 
57  private boolean finished = false;
58 
59  private int iteration = -1 ;
60  private boolean isLastIteration = false;
61 
62  @Inject
63  private EventsToScore(ControlerListenerManagerImpl controlerListenerManager, ScoringFunctionsForPopulation scoringFunctionsForPopulation, final Scenario scenario, NewScoreAssigner newScoreAssigner) {
64  this.controlerListenerManager = controlerListenerManager;
65  this.scoringFunctionsForPopulation = scoringFunctionsForPopulation;
66  this.population = scenario.getPopulation();
67  this.newScoreAssigner = newScoreAssigner;
68  }
69 
70  public static EventsToScore createWithScoreUpdating(final Scenario scenario, final ScoringFunctionFactory scoringFunctionFactory, final EventsManager eventsManager) {
71  com.google.inject.Injector injector = Injector.createInjector(scenario.getConfig(),
72  new ScenarioByInstanceModule(scenario),
74  new AbstractModule() {
75  @Override
76  public void install() {
77  bind(ScoringFunctionsForPopulation.class).asEagerSingleton();
78  bind(ScoringFunctionFactory.class).toInstance(scoringFunctionFactory);
79  bind(NewScoreAssigner.class).to(NewScoreAssignerImpl.class).asEagerSingleton();
80  bind(EventsToScore.class).asEagerSingleton();
81  bind(ControlerListenerManagerImpl.class).asEagerSingleton();
83  bind(EventsManager.class).toInstance(eventsManager);
84  bind(EventsManagerModule.EventHandlerRegistrator.class).asEagerSingleton();
85  }
86  });
87  return injector.getInstance(EventsToScore.class);
88  }
89 
90  public static EventsToScore createWithoutScoreUpdating(Scenario scenario, final ScoringFunctionFactory scoringFunctionFactory, final EventsManager eventsManager) {
91  com.google.inject.Injector injector = Injector.createInjector(scenario.getConfig(),
92  new ScenarioByInstanceModule(scenario),
94  new AbstractModule() {
95  @Override
96  public void install() {
97  bind(ScoringFunctionsForPopulation.class).asEagerSingleton();
98  bind(ScoringFunctionFactory.class).toInstance(scoringFunctionFactory);
99  bind(NewScoreAssigner.class).to(NoopNewScoreAssignerImpl.class).asEagerSingleton();
100  bind(EventsToScore.class).asEagerSingleton();
101  bind(ControlerListenerManagerImpl.class).asEagerSingleton();
103  bind(EventsManager.class).toInstance(eventsManager);
104  bind(EventsManagerModule.EventHandlerRegistrator.class).asEagerSingleton();
105  }
106  });
107  return injector.getInstance(EventsToScore.class);
108  }
109 
110  public void beginIteration(int iteration, boolean isLastIteration) {
111  this.iteration = iteration;
112  this.isLastIteration = isLastIteration;
113  this.controlerListenerManager.fireControlerIterationStartsEvent(iteration, isLastIteration);
114  }
115 
120  public void finish() {
121  if (iteration == -1) {
122  throw new RuntimeException("Please initialize me before the iteration starts.");
123  }
124  controlerListenerManager.fireControlerAfterMobsimEvent(iteration, isLastIteration);
125  scoringFunctionsForPopulation.finishScoringFunctions();
126  newScoreAssigner.assignNewScores(this.iteration, scoringFunctionsForPopulation, population);
127  finished = true;
128  }
129 
138  public Double getAgentScore(final Id<Person> agentId) {
139  if (!finished) {
140  throw new IllegalStateException("Must call finish first.");
141  }
142  ScoringFunction scoringFunction = scoringFunctionsForPopulation.getScoringFunctionForAgent(agentId);
143  if (scoringFunction == null)
144  return null;
145  return scoringFunction.getScore();
146  }
147 
148  private static class NoopNewScoreAssignerImpl implements NewScoreAssigner {
149  @Override
150  public void assignNewScores(int iteration, ScoringFunctionsForPopulation scoringFunctionsForPopulation, Population population) {
151 
152  }
153  }
154 }
void assignNewScores(int iteration, ScoringFunctionsForPopulation scoringFunctionsForPopulation, Population population)
static EventsToScore createWithScoreUpdating(final Scenario scenario, final ScoringFunctionFactory scoringFunctionFactory, final EventsManager eventsManager)
void beginIteration(int iteration, boolean isLastIteration)
static EventsToScore createWithoutScoreUpdating(Scenario scenario, final ScoringFunctionFactory scoringFunctionFactory, final EventsManager eventsManager)
Double getAgentScore(final Id< Person > agentId)
final ControlerListenerManagerImpl controlerListenerManager
final NewScoreAssigner newScoreAssigner
void fireControlerIterationStartsEvent(final int iteration, boolean isLastIteration)
EventsToScore(ControlerListenerManagerImpl controlerListenerManager, ScoringFunctionsForPopulation scoringFunctionsForPopulation, final Scenario scenario, NewScoreAssigner newScoreAssigner)
ScoringFunctionsForPopulation scoringFunctionsForPopulation
static com.google.inject.Injector createInjector(final Config config, Module... modules)
Definition: Injector.java:58
void fireControlerAfterMobsimEvent(final int iteration, boolean isLastIteration)