MATSIM
CharyparNagelScoringParameters.java
Go to the documentation of this file.
1 /* *********************************************************************** *
2  * project: org.matsim.*
3  * CharyparNagelScoringParameters.java
4  * *
5  * *********************************************************************** *
6  * *
7  * copyright : (C) 2009 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.functions;
22 
23 import java.util.Collections;
24 import java.util.Map;
25 import java.util.TreeMap;
26 
27 import org.matsim.api.core.v01.Id;
28 import org.matsim.api.core.v01.Scenario;
35 
37 
38  public final Map<String, ActivityUtilityParameters> utilParams;
39  public final Map<String, ModeUtilityParameters> modeParams;
40  public final double marginalUtilityOfWaiting_s;
41  public final double marginalUtilityOfLateArrival_s;
42  public final double marginalUtilityOfEarlyDeparture_s;
43  public final double marginalUtilityOfWaitingPt_s;
44  public final double marginalUtilityOfPerforming_s;
45  public final double utilityOfLineSwitch ;
46  public final double marginalUtilityOfMoney;
47  public final double abortedPlanScore;
48  public final boolean scoreActs;
49 
51 
52  public final double simulationPeriodInDays;
53 
55  final Map<String, ActivityUtilityParameters> utilParams,
56  final Map<String, ModeUtilityParameters> modeParams,
57  final double marginalUtilityOfWaiting_s,
58  final double marginalUtilityOfLateArrival_s,
59  final double marginalUtilityOfEarlyDeparture_s,
60  final double marginalUtilityOfWaitingPt_s,
61  final double marginalUtilityOfPerforming_s,
62  final double utilityOfLineSwitch,
63  final double marginalUtilityOfMoney,
64  final double abortedPlanScore,
65  final boolean scoreActs,
66  final boolean usingOldScoringBelowZeroUtilityDuration,
67  final double simulationPeriodInDays) {
68  this.utilParams = utilParams;
69  this.modeParams = modeParams;
70  this.marginalUtilityOfWaiting_s = marginalUtilityOfWaiting_s;
71  this.marginalUtilityOfLateArrival_s = marginalUtilityOfLateArrival_s;
72  this.marginalUtilityOfEarlyDeparture_s = marginalUtilityOfEarlyDeparture_s;
73  this.marginalUtilityOfWaitingPt_s = marginalUtilityOfWaitingPt_s;
74  this.marginalUtilityOfPerforming_s = marginalUtilityOfPerforming_s;
75  this.utilityOfLineSwitch = utilityOfLineSwitch;
76  this.marginalUtilityOfMoney = marginalUtilityOfMoney;
77  this.abortedPlanScore = abortedPlanScore;
78  this.scoreActs = scoreActs;
79  this.usingOldScoringBelowZeroUtilityDuration = usingOldScoringBelowZeroUtilityDuration;
80  this.simulationPeriodInDays = simulationPeriodInDays;
81  }
82 
83  public static final class Builder {
84  private final Map<String, ActivityUtilityParameters.Builder> utilParams;
85  private final Map<String, ModeUtilityParameters.Builder> modeParams;
86 
92  private double utilityOfLineSwitch;
93  private double marginalUtilityOfMoney;
94  private double abortedPlanScore;
95  private boolean scoreActs;
97  private double simulationPeriodInDays = 1.0;
98 
99  public Builder(
100  final Scenario scenario,
101  final Id<Person> person ) {
102  this(
103  scenario.getConfig().planCalcScore(),
105  (String)
107  person.toString(),
108  scenario.getConfig().plans().getSubpopulationAttributeName() ) ),
109  scenario.getConfig().scenario() );
110  }
111 
112  public Builder(
113  final PlanCalcScoreConfigGroup configGroup,
114  final PlanCalcScoreConfigGroup.ScoringParameterSet scoringParameterSet,
115  final ScenarioConfigGroup scenarioConfig) {
116  this.simulationPeriodInDays = scenarioConfig.getSimulationPeriodInDays();
117 
118  this.usingOldScoringBelowZeroUtilityDuration = configGroup.isUsingOldScoringBelowZeroUtilityDuration() ;
119 
120  marginalUtilityOfWaiting_s = scoringParameterSet.getMarginalUtlOfWaiting_utils_hr() / 3600.0;
121  marginalUtilityOfLateArrival_s = scoringParameterSet.getLateArrival_utils_hr() / 3600.0;
122  marginalUtilityOfEarlyDeparture_s = scoringParameterSet.getEarlyDeparture_utils_hr() / 3600.0;
123  marginalUtilityOfWaitingPt_s = scoringParameterSet.getMarginalUtlOfWaitingPt_utils_hr() / 3600.0 ;
124  marginalUtilityOfPerforming_s = scoringParameterSet.getPerforming_utils_hr() / 3600.0;
125  utilityOfLineSwitch = scoringParameterSet.getUtilityOfLineSwitch() ;
126  marginalUtilityOfMoney = scoringParameterSet.getMarginalUtilityOfMoney() ;
127  scoreActs = marginalUtilityOfPerforming_s != 0 || marginalUtilityOfWaiting_s != 0 ||
128  marginalUtilityOfLateArrival_s != 0 || marginalUtilityOfEarlyDeparture_s != 0;
129 
130  utilParams = new TreeMap<>() ;
131  for (ActivityParams params : scoringParameterSet.getActivityParams()) {
133  utilParams.put(params.getActivityType(), factory ) ;
134  }
135 
136  modeParams = new TreeMap<>() ;
137  Map<String, PlanCalcScoreConfigGroup.ModeParams> modes = scoringParameterSet.getModes();
138  double worstMarginalUtilityOfTraveling_s = 0.0;
139  for (Map.Entry<String, PlanCalcScoreConfigGroup.ModeParams> mode : modes.entrySet()) {
140  String modeName = mode.getKey();
141  ModeParams params = mode.getValue();
142  worstMarginalUtilityOfTraveling_s = Math.min(worstMarginalUtilityOfTraveling_s, params.getMarginalUtilityOfTraveling() / 3600. );
143  modeParams.put(modeName, new ModeUtilityParameters.Builder( params ) );
144  }
145 
146  abortedPlanScore = Math.min(
147  Math.min(marginalUtilityOfLateArrival_s, marginalUtilityOfEarlyDeparture_s),
148  Math.min(worstMarginalUtilityOfTraveling_s-marginalUtilityOfPerforming_s, marginalUtilityOfWaiting_s-marginalUtilityOfPerforming_s)
149  ) * 3600.0 * 24.0; // SCENARIO_DURATION
150  // TODO 24 has to be replaced by a variable like scenario_dur (see also other places below)
151  // This rather complicated definition has to do with the fact that exp(some_large_number) relatively quickly becomes Inf.
152  // In consequence, the abortedPlanScore needs to be more strongly negative than anything else, but not much more.
153  // kai, feb'12
154  }
155 
156  public Builder setActivityParameters(String activityType, ActivityUtilityParameters.Builder params) {
157  this.utilParams.put( activityType , params );
158  return this;
159  }
160 
162  return this.utilParams.get( activityType );
163  }
164 
166  this.modeParams.put( mode , params );
167  return this;
168  }
169 
171  return this.modeParams.get( mode );
172  }
173 
174  public Builder setMarginalUtilityOfWaiting_s(double marginalUtilityOfWaiting_s) {
175  this.marginalUtilityOfWaiting_s = marginalUtilityOfWaiting_s;
176  return this;
177  }
178 
179  public Builder setMarginalUtilityOfLateArrival_s(double marginalUtilityOfLateArrival_s) {
180  this.marginalUtilityOfLateArrival_s = marginalUtilityOfLateArrival_s;
181  return this;
182  }
183 
184  public Builder setMarginalUtilityOfEarlyDeparture_s(double marginalUtilityOfEarlyDeparture_s) {
185  this.marginalUtilityOfEarlyDeparture_s = marginalUtilityOfEarlyDeparture_s;
186  return this;
187  }
188 
189  public Builder setMarginalUtilityOfWaitingPt_s(double marginalUtilityOfWaitingPt_s) {
190  this.marginalUtilityOfWaitingPt_s = marginalUtilityOfWaitingPt_s;
191  return this;
192  }
193 
194  public Builder setMarginalUtilityOfPerforming_s(double marginalUtilityOfPerforming_s) {
195  this.marginalUtilityOfPerforming_s = marginalUtilityOfPerforming_s;
196  return this;
197  }
198 
199  public Builder setUtilityOfLineSwitch(double utilityOfLineSwitch) {
200  this.utilityOfLineSwitch = utilityOfLineSwitch;
201  return this;
202  }
203 
204  public Builder setMarginalUtilityOfMoney(double marginalUtilityOfMoney) {
205  this.marginalUtilityOfMoney = marginalUtilityOfMoney;
206  return this;
207  }
208 
209  public Builder setAbortedPlanScore(double abortedPlanScore) {
210  this.abortedPlanScore = abortedPlanScore;
211  return this;
212  }
213 
214  public Builder setScoreActs(boolean scoreActs) {
215  this.scoreActs = scoreActs;
216  return this;
217  }
218 
219  public Builder setUsingOldScoringBelowZeroUtilityDuration(boolean usingOldScoringBelowZeroUtilityDuration) {
220  this.usingOldScoringBelowZeroUtilityDuration = usingOldScoringBelowZeroUtilityDuration;
221  return this;
222  }
223 
225  final Map<String, ModeUtilityParameters> modes = new TreeMap<>();
226  for ( Map.Entry<String, ModeUtilityParameters.Builder> e : modeParams.entrySet() ) {
227  modes.put( e.getKey() , e.getValue().build() );
228  }
229 
230  final Map<String, ActivityUtilityParameters> acts = new TreeMap<>();
231  for ( Map.Entry<String, ActivityUtilityParameters.Builder> e : utilParams.entrySet() ) {
232  acts.put( e.getKey() , e.getValue().build() );
233  }
234 
236  acts,
237  modes,
238  marginalUtilityOfWaiting_s,
239  marginalUtilityOfLateArrival_s,
240  marginalUtilityOfEarlyDeparture_s,
241  marginalUtilityOfWaitingPt_s,
242  marginalUtilityOfPerforming_s,
243  utilityOfLineSwitch,
244  marginalUtilityOfMoney,
245  abortedPlanScore,
246  scoreActs,
247  usingOldScoringBelowZeroUtilityDuration,
248  this.simulationPeriodInDays);
249  }
250  }
251 }
CharyparNagelScoringParameters(final Map< String, ActivityUtilityParameters > utilParams, final Map< String, ModeUtilityParameters > modeParams, final double marginalUtilityOfWaiting_s, final double marginalUtilityOfLateArrival_s, final double marginalUtilityOfEarlyDeparture_s, final double marginalUtilityOfWaitingPt_s, final double marginalUtilityOfPerforming_s, final double utilityOfLineSwitch, final double marginalUtilityOfMoney, final double abortedPlanScore, final boolean scoreActs, final boolean usingOldScoringBelowZeroUtilityDuration, final double simulationPeriodInDays)
PlansConfigGroup plans
Definition: Config.java:95
ScoringParameterSet getScoringParameters(String subpopulation)
Builder setUsingOldScoringBelowZeroUtilityDuration(boolean usingOldScoringBelowZeroUtilityDuration)
Builder(final PlanCalcScoreConfigGroup configGroup, final PlanCalcScoreConfigGroup.ScoringParameterSet scoringParameterSet, final ScenarioConfigGroup scenarioConfig)
Builder setActivityParameters(String activityType, ActivityUtilityParameters.Builder params)
final String getValue(final String param_name)
ScenarioConfigGroup scenario()
Definition: Config.java:473
Builder setModeParameters(String mode, ModeUtilityParameters.Builder params)
Object getAttribute(final String objectId, final String attribute)
final PlanCalcScoreConfigGroup planCalcScore()
Definition: Config.java:445