MATSIM
ScoringFunctionAccumulator.java
Go to the documentation of this file.
1 /* *********************************************************************** *
2  * project: org.matsim.*
3  * CharyparNagelOpenTimesScoringFunctionFactory.java
4  * *
5  * *********************************************************************** *
6  * *
7  * copyright : (C) 2007 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.deprecated.scoring;
22 
23 import java.util.ArrayList;
24 
25 import org.apache.logging.log4j.LogManager;
26 import org.apache.logging.log4j.Logger;
32 
53 @Deprecated // preferably use SumScoringFunction. kai, oct'13
54 public final class ScoringFunctionAccumulator implements ScoringFunction {
55 
56  @Deprecated // preferably use SumScoringFunction. kai, oct'13
57  public interface BasicScoring {
58  @Deprecated // preferably use SumScoringFunction. kai, oct'13
59  public void finish();
60  @Deprecated // preferably use SumScoringFunction. kai, oct'13
61  public double getScore();
62  @Deprecated // preferably use SumScoringFunction. kai, oct'13
63  public void reset();
64  }
65 
66  @Deprecated // preferably use SumScoringFunction. kai, oct'13
67  public interface ActivityScoring extends BasicScoring {
68  @Deprecated // preferably use SumScoringFunction. kai, oct'13
69  void startActivity(final double time, final Activity act);
70  @Deprecated // preferably use SumScoringFunction. kai, oct'13
71  void endActivity(final double time, final Activity act);
72  }
73 
74  @Deprecated // preferably use SumScoringFunction. kai, oct'13
75  public interface LegScoring extends BasicScoring {
76  @Deprecated // preferably use SumScoringFunction. kai, oct'13
77  void startLeg(final double time, final Leg leg);
78  @Deprecated // preferably use SumScoringFunction. kai, oct'13
79  void endLeg(final double time);
80  }
81 
82  @Deprecated // preferably use SumScoringFunction. kai, oct'13
83  public interface MoneyScoring extends BasicScoring {
84  @Deprecated // preferably use SumScoringFunction. kai, oct'13
85  void addMoney(final double amount);
86  }
87 
88  @Deprecated // preferably use SumScoringFunction. kai, oct'13
89  public interface AgentStuckScoring extends BasicScoring {
90  @Deprecated // preferably use SumScoringFunction. kai, oct'13
91  void agentStuck(final double time);
92  }
93 
94  @Deprecated // preferably use SumScoringFunction. kai, oct'13
95  public interface ArbitraryEventScoring extends BasicScoring {
96  @Deprecated // preferably use SumScoringFunction. kai, oct'13
97  void handleEvent( final Event event ) ;
98  }
99 
100  private static final Logger log = LogManager.getLogger(ScoringFunctionAccumulator.class);
101 
102  private ArrayList<BasicScoring> basicScoringFunctions = new ArrayList<BasicScoring>();
103  private ArrayList<ActivityScoring> activityScoringFunctions = new ArrayList<ActivityScoring>();
104  private ArrayList<MoneyScoring> moneyScoringFunctions = new ArrayList<MoneyScoring>();
105  private ArrayList<LegScoring> legScoringFunctions = new ArrayList<LegScoring>();
106  private ArrayList<AgentStuckScoring> agentStuckScoringFunctions = new ArrayList<AgentStuckScoring>();
107  private ArrayList<ArbitraryEventScoring> arbtraryEventScoringFunctions = new ArrayList<ArbitraryEventScoring>() ;
108 
109  @Deprecated // preferably use SumScoringFunction. kai, oct'13
110  public ScoringFunctionAccumulator() {} // empty constructor so I can find where this is called. kai, dec'12
111 
112  @Override
113  public final void handleActivity(Activity activity) {
114  if (activity.getStartTime().isDefined()) {
115  startActivity(activity.getStartTime().seconds(), activity);
116  }
117  if (activity.getEndTime().isDefined()) {
118  endActivity(activity.getEndTime().seconds(), activity);
119  }
120  }
121 
122  @Override
123  public final void handleLeg(Leg leg) {
124  startLeg(leg.getDepartureTime().seconds(), leg);
126  }
127 
128  @Override
129  public void addMoney(double amount) {
130  for (MoneyScoring moneyScoringFunction : moneyScoringFunctions) {
131  moneyScoringFunction.addMoney(amount);
132  }
133  }
134 
135  @Override
136  public void addScore(double amount) {
137  // unsupported in deprecated class
138  }
139 
140  @Override
141  public void agentStuck(double time) {
142  for (AgentStuckScoring agentStuckScoringFunction : agentStuckScoringFunctions) {
143  agentStuckScoringFunction.agentStuck(time);
144  }
145  }
146 
147  @Override
148  public void handleTrip( final TripStructureUtils.Trip trip ) {
149  throw new RuntimeException( "not implemented" );
150  }
151 
152  @Override
153  public void handleEvent(Event event) {
154  for ( ArbitraryEventScoring eventScoringFunction : this.arbtraryEventScoringFunctions ) {
155  eventScoringFunction.handleEvent(event) ;
156  }
157  }
158 
159  @Deprecated // use handleActivity instead
160  public void startActivity(double time, Activity act) {
161  for (ActivityScoring activityScoringFunction : activityScoringFunctions) {
162  activityScoringFunction.startActivity(time, act);
163  }
164  }
165 
166  @Deprecated // use handleActivity instead
167  public void endActivity(double time, Activity act) {
168  for (ActivityScoring activityScoringFunction : activityScoringFunctions) {
169  activityScoringFunction.endActivity(time, act);
170  }
171  }
172 
173  @Deprecated // use handleLeg instead
174  public void startLeg(double time, Leg leg) {
175  for (LegScoring legScoringFunction : legScoringFunctions) {
176  legScoringFunction.startLeg(time, leg);
177  }
178  }
179 
180  @Deprecated // use handleLeg instead
181  public void endLeg(double time) {
182  for (LegScoring legScoringFunction : legScoringFunctions) {
183  legScoringFunction.endLeg(time);
184  }
185  }
186 
187  @Override
188  public void finish() {
189  for (BasicScoring basicScoringFunction : basicScoringFunctions) {
190  basicScoringFunction.finish();
191  }
192  }
193 
197  @Override
198  public double getScore() {
199  double score = 0.0;
200  for (BasicScoring basicScoringFunction : basicScoringFunctions) {
201  double contribution = basicScoringFunction.getScore();
202  if (log.isTraceEnabled()) {
203  log.trace("Contribution of scoring function: " + basicScoringFunction.getClass().getName() + " is: " + contribution);
204  }
205  score += contribution;
206  }
207  return score;
208  }
209 
210  @Deprecated
214  public void reset() {
215  for (BasicScoring basicScoringFunction : basicScoringFunctions) {
216  basicScoringFunction.reset();
217  }
218  }
219 
220  @Deprecated
225  public ArrayList<ActivityScoring> getActivityScoringFunctions() {
227  }
228 
235  @Deprecated // preferably use SumScoringFunction. kai, oct'13
236  public void addScoringFunction(BasicScoring scoringFunction) {
237  basicScoringFunctions.add(scoringFunction);
238 
239  if (scoringFunction instanceof ActivityScoring) {
240  activityScoringFunctions.add((ActivityScoring) scoringFunction);
241  }
242 
243  if (scoringFunction instanceof AgentStuckScoring) {
244  agentStuckScoringFunctions.add((AgentStuckScoring) scoringFunction);
245  }
246 
247  if (scoringFunction instanceof LegScoring) {
248  legScoringFunctions.add((LegScoring) scoringFunction);
249  }
250 
251  if (scoringFunction instanceof MoneyScoring) {
252  moneyScoringFunctions.add((MoneyScoring) scoringFunction);
253  }
254 
255  if (scoringFunction instanceof ArbitraryEventScoring ) {
256  this.arbtraryEventScoringFunctions.add((ArbitraryEventScoring) scoringFunction) ;
257  }
258 
259  }
260 
261 }