21 package org.matsim.core.scoring;
23 import com.google.inject.Inject;
24 import com.google.inject.Singleton;
47 final class PlansScoringImpl
implements PlansScoring, ScoringListener, IterationEndsListener {
49 @Inject
private ScoringConfigGroup scoringConfigGroup;
50 @Inject
private ControllerConfigGroup controllerConfigGroup;
51 @Inject
private Population population;
52 @Inject
private OutputDirectoryHierarchy controlerIO;
53 @Inject
private ScoringFunctionsForPopulation scoringFunctionsForPopulation;
54 @Inject
private ExperiencedPlansService experiencedPlansService;
55 @Inject
private NewScoreAssigner newScoreAssigner;
58 public void notifyScoring(
final ScoringEvent event) {
59 scoringFunctionsForPopulation.finishScoringFunctions();
60 newScoreAssigner.assignNewScores(event.getIteration(), this.scoringFunctionsForPopulation, this.population);
64 public void notifyIterationEnds(
final IterationEndsEvent event) {
65 this.experiencedPlansService.finishIteration();
68 if(scoringConfigGroup.isWriteExperiencedPlans()) {
69 final int writePlansInterval = controllerConfigGroup.getWritePlansInterval();
70 if (writePlansInterval > 0 && (event.getIteration() % writePlansInterval == 0 ||
event.isLastIteration())) {
71 this.experiencedPlansService.writeExperiencedPlans(controlerIO.getIterationFilename(event.getIteration(),
"experienced_plans.xml.gz"));
72 this.scoringFunctionsForPopulation.writePartialScores(controlerIO.getIterationFilename(event.getIteration(),
"experienced_plans_scores.txt.gz"));
75 if (scoringConfigGroup.isMemorizingExperiencedPlans() ) {
76 for ( Person person : this.population.getPersons().values() ) {
77 Plan experiencedPlan = this.experiencedPlansService.getExperiencedPlans().get( person.getId() ) ;
78 if ( experiencedPlan==null ) {
79 throw new RuntimeException(
"experienced plan is null; I don't think this should happen") ;
81 Plan selectedPlan = person.getSelectedPlan() ;
82 selectedPlan.getCustomAttributes().put(ScoringConfigGroup.EXPERIENCED_PLAN_KEY, experiencedPlan ) ;