20 package org.matsim.run;
22 import java.util.Collection;
23 import java.util.HashMap;
24 import java.util.LinkedHashMap;
27 import org.apache.logging.log4j.LogManager;
28 import org.apache.logging.log4j.Logger;
43 public static void main(
final String[] args ) {
44 final String inputConfig = args[ 0 ];
45 final String outputConfig = args[ 1 ];
49 config.
addModule(
new OldToNewPlanCalcScoreConfigGroup() );
55 final class OldToNewPlanCalcScoreConfigGroup
extends ConfigGroup {
57 private static final Logger log = LogManager.getLogger(OldToNewPlanCalcScoreConfigGroup.class);
59 public static final String GROUP_NAME =
"planCalcScore";
61 private static final String LEARNING_RATE =
"learningRate";
62 private static final String BRAIN_EXP_BETA =
"BrainExpBeta";
63 private static final String PATH_SIZE_LOGIT_BETA =
"PathSizeLogitBeta";
64 private static final String LATE_ARRIVAL =
"lateArrival";
65 private static final String EARLY_DEPARTURE =
"earlyDeparture";
66 private static final String PERFORMING =
"performing";
68 private static final String TRAVELING =
"traveling_";
69 private static final String TRAVELING_CAR =
"traveling";
70 private static final String TRAVELING_PT =
"travelingPt";
71 private static final String TRAVELING_BIKE =
"travelingBike";
72 private static final String TRAVELING_WALK =
"travelingWalk";
73 private static final String TRAVELING_OTHER =
"travelingOther";
74 private static final String WAITING =
"waiting";
75 private static final String WAITING_PT =
"waitingPt";
77 private static final String CONSTANT =
"constant_";
78 private static final String CONSTANT_CAR =
"constantCar" ;
79 private static final String CONSTANT_BIKE =
"constantBike" ;
80 private static final String CONSTANT_WALK =
"constantWalk" ;
81 private static final String CONSTANT_OTHER =
"constantOther" ;
82 private static final String CONSTANT_PT =
"constantPt" ;
84 private static final String WRITE_EXPERIENCED_PLANS =
"writeExperiencedPlans";
86 private static final String MARGINAL_UTL_OF_DISTANCE_CAR =
"marginalUtlOfDistanceCar";
88 private static final String MARGINAL_UTL_OF_DISTANCE_PT =
"marginalUtlOfDistancePt";
89 private static final String MARGINAL_UTL_OF_DISTANCE =
"marginalUtlOfDistance_";
90 private static final String MARGINAL_UTL_OF_DISTANCE_WALK =
"marginalUtlOfDistanceWalk";
91 private static final String MARGINAL_UTL_OF_DISTANCE_OTHER =
"marginalUtlOfDistanceOther";
93 private static final String MARGINAL_UTL_OF_MONEY =
"marginalUtilityOfMoney" ;
96 private static final String MONETARY_DISTANCE_COST_RATE =
"monetaryDistanceCostRate";
98 private static final String MONETARY_DISTANCE_RATE_ =
"monetaryDistanceRate_" ;
99 private static final Object MONETARY_DISTANCE_RATE_CAR =
"monetaryDistanceRateCar";
100 private static final Object MONETARY_DISTANCE_RATE_PT =
"monetaryDistanceRatePt";
102 private static final String UTL_OF_LINE_SWITCH =
"utilityOfLineSwitch" ;
104 private static final String ACTIVITY_TYPE =
"activityType_";
105 private static final String ACTIVITY_PRIORITY =
"activityPriority_";
106 private static final String ACTIVITY_TYPICAL_DURATION =
"activityTypicalDuration_";
107 private static final String ACTIVITY_MINIMAL_DURATION =
"activityMinimalDuration_";
108 private static final String ACTIVITY_OPENING_TIME =
"activityOpeningTime_";
109 private static final String ACTIVITY_LATEST_START_TIME =
"activityLatestStartTime_";
110 private static final String ACTIVITY_EARLIEST_END_TIME =
"activityEarliestEndTime_";
111 private static final String ACTIVITY_CLOSING_TIME =
"activityClosingTime_";
113 private static final String SCORING_THIS_ACTIVITY_AT_ALL =
"scoringThisActivityAtAll_" ;
115 private final ReflectiveDelegate delegate =
new ReflectiveDelegate();
116 private final Map<String, ActivityParams> activityTypesByNumber =
new HashMap< >();
118 public OldToNewPlanCalcScoreConfigGroup() {
129 private Double waitingPt = null ;
133 private static final String USING_OLD_SCORING_BELOW_ZERO_UTILITY_DURATION =
"usingOldScoringBelowZeroUtilityDuration" ;
138 private boolean memorizingExperiencedPlans = false ;
143 public static final String EXPERIENCED_PLAN_KEY =
"experiencedPlan";
146 private static final String FRACTION_OF_ITERATIONS_TO_START_SCORE_MSA =
"fractionOfIterationsToStartScoreMSA" ;
150 public String getValue(
final String key) {
151 throw new IllegalArgumentException(key +
": getValue access disabled; use direct getter");
155 public void addParam(
final String key,
final String value) {
157 if (key.startsWith(ACTIVITY_TYPE)) {
158 ActivityParams actParams = getActivityTypeByNumber(key.substring(ACTIVITY_TYPE.length()),
true);
160 actParams.setActivityType(value);
161 this.removeParameterSet( actParams );
162 addActivityParams( actParams );
164 else if (key.startsWith(ACTIVITY_PRIORITY)) {
165 ActivityParams actParams = getActivityTypeByNumber(key.substring(ACTIVITY_PRIORITY.length()),
true);
166 actParams.setPriority(Double.parseDouble(value));
168 else if (key.startsWith(ACTIVITY_TYPICAL_DURATION)) {
169 ActivityParams actParams = getActivityTypeByNumber(key.substring(ACTIVITY_TYPICAL_DURATION.length()),
true);
172 else if (key.startsWith(ACTIVITY_MINIMAL_DURATION)) {
173 ActivityParams actParams = getActivityTypeByNumber(key.substring(ACTIVITY_MINIMAL_DURATION.length()),
true);
176 else if (key.startsWith(ACTIVITY_OPENING_TIME)) {
177 ActivityParams actParams = getActivityTypeByNumber(key.substring(ACTIVITY_OPENING_TIME.length()),
true);
180 else if (key.startsWith(ACTIVITY_LATEST_START_TIME)) {
181 ActivityParams actParams = getActivityTypeByNumber(key.substring(ACTIVITY_LATEST_START_TIME.length()),
true);
184 else if (key.startsWith(ACTIVITY_EARLIEST_END_TIME)) {
185 ActivityParams actParams = getActivityTypeByNumber(key.substring(ACTIVITY_EARLIEST_END_TIME.length()),
true);
188 else if (key.startsWith(ACTIVITY_CLOSING_TIME)) {
189 ActivityParams actParams = getActivityTypeByNumber(key.substring(ACTIVITY_CLOSING_TIME.length()),
true);
192 else if (key.startsWith(SCORING_THIS_ACTIVITY_AT_ALL)) {
193 ActivityParams actParams = getActivityTypeByNumber(key.substring(SCORING_THIS_ACTIVITY_AT_ALL.length()),
true);
194 actParams.setScoringThisActivityAtAll( Boolean.parseBoolean(value) );
196 else if (key.startsWith(TRAVELING)) {
197 ModeParams modeParams = getOrCreateModeParams(key.substring(TRAVELING.length()));
198 modeParams.setMarginalUtilityOfTraveling(Double.parseDouble(value));
200 else if (key.startsWith(MARGINAL_UTL_OF_DISTANCE)) {
201 ModeParams modeParams = getOrCreateModeParams(key.substring(MARGINAL_UTL_OF_DISTANCE.length()));
202 modeParams.setMarginalUtilityOfDistance(Double.parseDouble(value));
204 else if (key.startsWith(MONETARY_DISTANCE_COST_RATE)) {
205 throw new RuntimeException(
"Please use monetaryDistanceRate (without `cost'). Even better, use config v2, " 206 +
"mode-parameters (see output of any recent run), and mode-specific monetary " 207 +
"distance rate.") ;
209 else if (key.startsWith(MONETARY_DISTANCE_RATE_)) {
210 ModeParams modeParams = getOrCreateModeParams(key.substring(MONETARY_DISTANCE_RATE_.length()));
211 modeParams.setMonetaryDistanceRate(Double.parseDouble(value));
213 else if ( MONETARY_DISTANCE_RATE_CAR.equals(key) ){
215 modeParams.setMonetaryDistanceRate(Double.parseDouble(value));
217 else if ( MONETARY_DISTANCE_RATE_PT.equals(key) ){
219 modeParams.setMonetaryDistanceRate(Double.parseDouble(value));
221 else if (key.startsWith(CONSTANT)) {
222 ModeParams modeParams = getOrCreateModeParams(key.substring(CONSTANT.length()));
223 modeParams.setConstant(Double.parseDouble(value));
227 else if (TRAVELING_CAR.equals(key)) {
228 setTraveling_utils_hr(Double.parseDouble(value));
230 else if (TRAVELING_PT.equals(key)) {
231 setTravelingPt_utils_hr(Double.parseDouble(value));
233 else if (TRAVELING_WALK.equals(key)) {
234 setTravelingWalk_utils_hr(Double.parseDouble(value));
236 else if (TRAVELING_OTHER.equals(key)) {
237 setTravelingOther_utils_hr(Double.parseDouble(value));
239 else if (TRAVELING_BIKE.equals(key)) {
240 setTravelingBike_utils_hr(Double.parseDouble(value));
244 else if (MARGINAL_UTL_OF_DISTANCE_CAR.equals(key)){
245 setMarginalUtlOfDistanceCar(Double.parseDouble(value));
247 else if (MARGINAL_UTL_OF_DISTANCE_PT.equals(key)){
248 setMarginalUtlOfDistancePt(Double.parseDouble(value));
250 else if (MARGINAL_UTL_OF_DISTANCE_WALK.equals(key)){
251 setMarginalUtlOfDistanceWalk(Double.parseDouble(value));
253 else if (MARGINAL_UTL_OF_DISTANCE_OTHER.equals(key)){
254 setMarginalUtlOfDistanceOther(Double.parseDouble(value));
258 else if ( CONSTANT_CAR.equals(key)) {
259 this.setConstantCar(Double.parseDouble(value)) ;
261 else if ( CONSTANT_WALK.equals(key)) {
262 this.setConstantWalk(Double.parseDouble(value)) ;
264 else if ( CONSTANT_OTHER.equals(key)) {
265 this.setConstantOther(Double.parseDouble(value)) ;
267 else if ( CONSTANT_PT.equals(key)) {
268 this.setConstantPt(Double.parseDouble(value)) ;
270 else if ( CONSTANT_BIKE.equals(key)) {
271 this.setConstantBike(Double.parseDouble(value)) ;
274 else if ( WAITING_PT.equals( key ) ) {
275 setMarginalUtlOfWaitingPt_utils_hr( Double.parseDouble( value ) );
279 delegate.addParam( key , value );
283 public ModeParams getOrCreateModeParams(String modeName) {
284 ModeParams modeParams = getModes().get(modeName);
285 if (modeParams == null) {
286 modeParams =
new ModeParams( modeName );
287 addParameterSet( modeParams );
293 public Map<String, String> getParams() {
294 final Map<String, String> params = delegate.getParams();
295 if ( waitingPt != null ) {
296 params.put( WAITING_PT , waitingPt.toString() );
302 public final Map<String, String> getComments() {
303 Map<String,String> map = super.getComments();
304 map.put(FRACTION_OF_ITERATIONS_TO_START_SCORE_MSA,
"fraction of iterations at which MSA score averaging is started. The matsim theory department " +
305 "suggests to use this together with switching off choice set innovation (where a similar switch exists), but it has not been tested yet.") ;
306 map.put(USING_OLD_SCORING_BELOW_ZERO_UTILITY_DURATION,
"There used to be a plateau between duration=0 and duration=zeroUtilityDuration. " 307 +
"This caused durations to evolve to zero once they were below zeroUtilityDuration, causing problems. Only use this switch if you need to be " 308 +
"backwards compatible with some old results. (changed nov'13)") ;
309 map.put(PERFORMING,
"[utils/hr] marginal utility of doing an activity. normally positive. also the opportunity cost of " +
310 "time if agent is doing nothing. MATSim separates the resource value of time from the direct (dis)utility of travel time, see, e.g., " 311 +
"Boerjesson and Eliasson, TR-A 59 (2014) 144-158.");
312 map.put(LATE_ARRIVAL,
"[utils/hr] utility for arriving late (i.e. after the latest start time). normally negative") ;
313 map.put(EARLY_DEPARTURE,
"[utils/hr] utility for departing early (i.e. before the earliest end time). Normally negative. Probably " +
314 "implemented correctly, but not tested." );
315 map.put(WAITING,
"[utils/hr] additional marginal utility for waiting. normally negative. this comes on top of the opportunity cost of time. Probably " +
316 "implemented correctly, but not tested.") ;
317 map.put(WAITING_PT,
"[utils/hr] additional marginal utility for waiting for a pt vehicle. normally negative. this comes on top of the opportunity cost " +
318 "of time. Default: if not set explicitly, it is equal to traveling_pt!!!" ) ;
319 map.put(BRAIN_EXP_BETA,
"logit model scale parameter. default: 1. Has name and default value for historical reasons " +
320 "(see Bryan Raney's phd thesis).") ;
321 map.put(LEARNING_RATE,
"new_score = (1-learningRate)*old_score + learningRate * score_from_mobsim. learning rates " +
322 "close to zero emulate score averaging, but slow down initial convergence") ;
323 map.put(UTL_OF_LINE_SWITCH,
"[utils] utility of switching a line (= transfer penalty). Normally negative") ;
324 map.put(MARGINAL_UTL_OF_MONEY,
"[utils/unit_of_money] conversion of money (e.g. toll, distance cost) into utils. Normall positive (i.e. toll/cost/fare are processed as negative amounts of money)." ) ;
325 map.put(WRITE_EXPERIENCED_PLANS,
"write a plans file in each iteration directory which contains what each agent actually did, and the score it received.");
330 private ActivityParams getActivityTypeByNumber(
final String number,
final boolean createIfMissing) {
331 ActivityParams actType = this.activityTypesByNumber.get(number);
332 if ((actType == null) && createIfMissing) {
335 actType =
new ActivityParams(number);
336 this.activityTypesByNumber.put(number, actType);
337 addParameterSet( actType );
342 public Collection<String> getActivityTypes() {
343 return this.getActivityParamsPerType().keySet();
346 public Collection<ActivityParams> getActivityParams() {
347 Collection<ActivityParams> collection = (Collection<ActivityParams>) getParameterSets( ActivityParams.SET_TYPE );
348 for ( ActivityParams params : collection ) {
349 if ( this.isLocked() ) {
356 public Map<String, ActivityParams> getActivityParamsPerType() {
357 final Map<String, ActivityParams> map =
new LinkedHashMap< >();
359 for ( ActivityParams pars : getActivityParams() ) {
360 map.put( pars.getActivityType() , pars );
366 public Map<String, ModeParams> getModes() {
367 final Collection<ModeParams> modes = (Collection<ModeParams>) getParameterSets( ModeParams.SET_TYPE );
368 final Map<String, ModeParams> map =
new LinkedHashMap< >();
370 for ( ModeParams pars : modes ) {
371 if ( this.isLocked() ) {
374 map.put( pars.getMode() , pars );
385 public void checkConsistency(
Config config) {
386 super.checkConsistency(config);
387 boolean hasOpeningAndClosingTime =
false;
388 boolean hasOpeningTimeAndLatePenalty = false ;
392 for ( ActivityParams actType : this.getActivityParams() ) {
393 if ( actType.isScoringThisActivityAtAll() ) {
396 if (actType.getOpeningTime().isDefined() && actType.getClosingTime().isDefined()) {
397 hasOpeningAndClosingTime =
true;
399 if (actType.getOpeningTime().seconds() == 0. && actType.getClosingTime().seconds() > 24. * 3600 - 1) {
400 log.error(
"it looks like you have an activity type with opening time set to 0:00 and closing " 401 +
"time set to 24:00. This is most probably not the same as not setting them at all. " 402 +
"In particular, activities which extend past midnight may not accumulate scores.");
406 if (actType.getOpeningTime().isDefined() && (getLateArrival_utils_hr() < -0.001)) {
407 hasOpeningTimeAndLatePenalty =
true;
411 if (!hasOpeningAndClosingTime && !hasOpeningTimeAndLatePenalty) {
412 log.info(
"NO OPENING OR CLOSING TIMES DEFINED!\n\n\n" 413 +
"There is no activity type that has an opening *and* closing time (or opening time and late penalty) defined.\n" 414 +
"This usually means that the activity chains can be shifted by an arbitrary\n" 415 +
"number of hours without having an effect on the score of the plans, and thus\n" 416 +
"resulting in wrong results / traffic patterns.\n" 417 +
"If you are using MATSim without time adaptation, you can ignore this warning.\n\n\n");
419 if ( this.getMarginalUtlOfWaiting_utils_hr() != 0.0 ) {
420 log.warn(
"marginal utl of wait set to: " + this.getMarginalUtlOfWaiting_utils_hr() +
". Setting this different from zero is " +
421 "discouraged. The parameter was also abused for pt routing; if you did that, consider setting the new " +
422 "parameter waitingPt instead.");
428 public double getMarginalUtlOfWaitingPt_utils_hr() {
429 return this.waitingPt == null ?
430 this.getModes().get(
TransportMode.
pt).getMarginalUtilityOfTraveling() :
434 public double getTraveling_utils_hr() {
435 return this.getModes().get(
TransportMode.
car).getMarginalUtilityOfTraveling();
437 public void setTraveling_utils_hr(
final double traveling) {
438 this.getModes().get(
TransportMode.
car).setMarginalUtilityOfTraveling(traveling);
441 public double getTravelingPt_utils_hr() {
442 return this.getModes().get(
TransportMode.
pt).getMarginalUtilityOfTraveling();
444 public void setTravelingPt_utils_hr(
final double travelingPt) {
445 this.getModes().get(
TransportMode.
pt).setMarginalUtilityOfTraveling(travelingPt);
448 public double getTravelingBike_utils_hr() {
451 public void setTravelingBike_utils_hr(
final double travelingBike) {
452 this.getModes().get(
TransportMode.
bike).setMarginalUtilityOfTraveling(travelingBike);
455 public double getTravelingWalk_utils_hr() {
458 public void setTravelingWalk_utils_hr(
final double travelingWalk) {
459 this.getModes().get(
TransportMode.
walk).setMarginalUtilityOfTraveling(travelingWalk);
466 public double getMarginalUtlOfDistanceWalk() {
474 public void setMarginalUtlOfDistanceWalk(
final double marginalUtlOfDistanceWalk) {
475 this.getModes().get(
TransportMode.
walk).setMarginalUtilityOfDistance(marginalUtlOfDistanceWalk);
481 private void setMarginalUtlOfDistancePt(
final double marginalUtlOfDistancePt) {
482 this.getModes().get(
TransportMode.
pt).setMarginalUtilityOfDistance(marginalUtlOfDistancePt);
488 private void setMarginalUtlOfDistanceCar(
final double marginalUtlOfDistanceCar) {
489 this.getModes().get(
TransportMode.
car).setMarginalUtilityOfDistance(marginalUtlOfDistanceCar);
493 public void setMarginalUtlOfWaitingPt_utils_hr(
double val) {
494 this.waitingPt = val ;
497 public ActivityParams getActivityParams(
final String actType) {
498 return this.getActivityParamsPerType().get(actType);
502 public void addParameterSet(
final ConfigGroup set ) {
503 switch (
set.getName() ) {
504 case ActivityParams.SET_TYPE:
505 addActivityParams( (ActivityParams)
set );
507 case ModeParams.SET_TYPE:
508 addModeParams( (ModeParams)
set );
511 throw new IllegalArgumentException(
set.getName() );
515 public void addModeParams(
final ModeParams params) {
516 final ModeParams previous = this.getModes().get( params.getMode() );
518 if ( previous != null ) {
519 log.info(
"mode parameters for mode " + previous.getMode() +
" were just overwritten.") ;
521 final boolean removed = removeParameterSet( previous );
522 if ( !removed )
throw new RuntimeException(
"problem replacing mode params " );
525 super.addParameterSet( params );
528 public void addActivityParams(
final ActivityParams params) {
529 final ActivityParams previous = this.getActivityParams( params.getActivityType() );
531 if ( previous != null ) {
533 log.error(
"ERROR: Activity parameters for activity type " + previous.getActivityType() +
" were just overwritten. This happens most " +
534 "likely because you defined them in the config file and the Controler overwrites them. Or the other way " +
535 "round. pt interaction has problems, but doing what you are doing here will just cause " +
536 "other (less visible) problem. Please take the effort to discuss with the core team " +
537 "what needs to be done. kai, nov'12") ;
539 log.info(
"activity parameters for activity type " + previous.getActivityType() +
" were just overwritten.") ;
542 final boolean removed = removeParameterSet( previous );
543 if ( !removed )
throw new RuntimeException(
"problem replacing activity params " );
546 super.addParameterSet( params );
556 private static final String TYPICAL_DURATION_SCORE_COMPUTATION =
"typicalDurationScoreComputation";
557 final static String SET_TYPE =
"activityParams";
559 private double priority = 1.0;
566 private boolean scoringThisActivityAtAll = true ;
582 final Map<String, String> map = super.getComments();
583 map.put( TYPICAL_DURATION_SCORE_COMPUTATION,
"method to compute score at typical duration. Use " 590 return this.typicalDurationScoreComputation ;
595 this.typicalDurationScoreComputation = str ;
599 public String getActivityType() {
604 public
void setActivityType(final String type) {
610 public
double getPriority() {
611 return this.priority;
615 public
void setPriority(final
double priority) {
617 this.priority = priority;
621 private String getTypicalDurationString() {
626 return this.typicalDuration;
630 private
void setTypicalDuration(final String typicalDuration) {
641 private String getMinimalDurationString() {
646 return this.minimalDuration;
650 private
void setMinimalDuration(final String minimalDuration) {
655 private static int minDurCnt=0 ;
659 if (this.minimalDuration.isDefined() && minDurCnt < 1 ) {
661 log.warn(
"Setting minimalDuration different from zero is discouraged. It is probably implemented correctly, " +
662 "but there is as of now no indication that it makes the results more realistic. KN, Sep'08" +
Gbl.
ONLYONCE );
667 private String getOpeningTimeString() {
672 return this.openingTime;
675 private
void setOpeningTime(final String openingTime) {
686 private String getLatestStartTimeString() {
691 return this.latestStartTime;
694 private
void setLatestStartTime(final String latestStartTime) {
705 private String getEarliestEndTimeString() {
710 return this.earliestEndTime;
713 private
void setEarliestEndTime(final String earliestEndTime) {
724 private String getClosingTimeString() {
729 return this.closingTime;
732 private
void setClosingTime(final String closingTime) {
743 public
boolean isScoringThisActivityAtAll() {
744 return scoringThisActivityAtAll;
748 public
void setScoringThisActivityAtAll(
boolean scoringThisActivityAtAll) {
750 this.scoringThisActivityAtAll = scoringThisActivityAtAll;
755 final static String SET_TYPE =
"modeParams";
757 private String mode = null;
758 private double traveling = -6.0;
759 private double distance = 0.0;
760 private double monetaryDistanceRate = 0.0;
761 private double constant = 0.0;
774 final Map<String, String> map = super.getComments();
775 map.put(
"marginalUtilityOfTraveling_util_hr",
"[utils/hr] additional marginal utility of traveling. normally negative. this comes on top " +
776 "of the opportunity cost of time");
777 map.put(
"marginalUtilityOfDistance_util_m",
"[utils/m] utility of walking per m, normally negative. this is " +
778 "on top of the time (dis)utility.") ;
779 map.put(
"monetaryDistanceCostRate",
"[unit_of_money/m] conversion of distance into money. Probably needs to be negative to work." ) ;
780 map.put(
"constant",
"[utils] alternative-specific constant. no guarantee that this is used anywhere. " +
781 "default=0 to be backwards compatible for the time being" ) ;
786 public
void setMode( final String mode ) {
792 public String getMode() {
797 public
void setMarginalUtilityOfTraveling(
double traveling) {
799 this.traveling = traveling;
803 public
double getMarginalUtilityOfTraveling() {
804 return this.traveling;
808 public
double getMarginalUtilityOfDistance() {
813 public
void setMarginalUtilityOfDistance(
double distance) {
815 this.distance = distance;
819 public
double getConstant() {
820 return this.constant;
824 public
void setConstant(
double constant) {
826 this.constant = constant;
830 public
double getMonetaryDistanceRate() {
831 return this.monetaryDistanceRate;
835 public
void setMonetaryDistanceRate(
double monetaryDistanceRate) {
837 this.monetaryDistanceRate = monetaryDistanceRate;
844 public ConfigGroup createParameterSet(
final String type) {
851 throw new IllegalArgumentException( type );
856 protected void checkParameterSet(
final ConfigGroup module ) {
862 final String t = ((ActivityParams) module).getActivityType();
863 if ( getActivityParams( t ) != null ) {
864 throw new IllegalStateException(
"already a parameter set for activity type "+t );
871 final String m = ((ModeParams) module).getMode();
872 if ( getModes().
get( m ) != null ) {
873 throw new IllegalStateException(
"already a parameter set for mode "+m );
877 throw new IllegalArgumentException( module.
getName() );
882 public double getMonetaryDistanceRateCar() {
886 public void setMonetaryDistanceRateCar(
double monetaryDistanceRateCar) {
887 this.getModes().get(
TransportMode.
car).setMonetaryDistanceRate(monetaryDistanceRateCar);
890 public double getMonetaryDistanceRatePt() {
891 return this.getModes().get(
TransportMode.
pt).getMonetaryDistanceRate();
895 public void setMonetaryDistanceRatePt(
double monetaryDistanceRatePt) {
896 this.getModes().get(
TransportMode.
pt).setMonetaryDistanceRate(monetaryDistanceRatePt);
901 public double getConstantCar() {
907 public void setConstantCar(
double constantCar) {
913 public double getConstantWalk() {
919 public void setConstantWalk(
double constantWalk) {
925 public double getConstantPt() {
931 public void setConstantPt(
double constantPt) {
937 public double getConstantBike() {
943 public void setConstantBike(
double constantBike) {
949 public double getTravelingOther_utils_hr() {
955 public double getConstantOther() {
961 public double getMarginalUtlOfDistanceOther() {
967 public void setMarginalUtlOfDistanceOther(
double marginalUtlOfDistanceOther) {
968 this.getModes().get(
TransportMode.
other).setMarginalUtilityOfDistance(marginalUtlOfDistanceOther);
973 public void setConstantOther(
double constantOther) {
979 public void setTravelingOther_utils_hr(
double travelingOtherUtilsHr) {
980 this.getModes().get(
TransportMode.
other).setMarginalUtilityOfTraveling(travelingOtherUtilsHr);
983 public boolean isMemorizingExperiencedPlans() {
984 return this.memorizingExperiencedPlans ;
987 public void setMemorizingExperiencedPlans(
boolean memorizingExperiencedPlans) {
988 this.memorizingExperiencedPlans = memorizingExperiencedPlans;
993 super( OldToNewPlanCalcScoreConfigGroup.GROUP_NAME );
996 private double learningRate = 1.0;
997 private double brainExpBeta = 1.0;
998 private double pathSizeLogitBeta = 1.0;
999 private double lateArrival = -18.0;
1000 private double earlyDeparture = -0.0;
1001 private double performing = +6.0;
1003 private double waiting = -0.0;
1006 private double marginalUtilityOfMoney = 1.0 ;
1008 private double utilityOfLineSwitch = - 1 ;
1010 private boolean usingOldScoringBelowZeroUtilityDuration = false ;
1012 private boolean writeExperiencedPlans =
false;
1014 private Double fractionOfIterationsToStartScoreMSA = null ;
1016 @
StringGetter(FRACTION_OF_ITERATIONS_TO_START_SCORE_MSA)
1017 public Double getFractionOfIterationsToStartScoreMSA() {
1018 return fractionOfIterationsToStartScoreMSA;
1020 @
StringSetter(FRACTION_OF_ITERATIONS_TO_START_SCORE_MSA)
1021 public
void setFractionOfIterationsToStartScoreMSA(Double fractionOfIterationsToStartScoreMSA) {
1023 this.fractionOfIterationsToStartScoreMSA = fractionOfIterationsToStartScoreMSA;
1027 public
double getLearningRate() {
1028 return learningRate;
1031 public
void setLearningRate(
double learningRate) {
1033 this.learningRate = learningRate;
1037 public
double getBrainExpBeta() {
1038 return brainExpBeta;
1042 public
void setBrainExpBeta(
double brainExpBeta) {
1044 this.brainExpBeta = brainExpBeta;
1048 public
double getPathSizeLogitBeta() {
1049 return pathSizeLogitBeta;
1053 public
void setPathSizeLogitBeta(
double beta) {
1056 log.warn(
"Setting pathSizeLogitBeta different from zero is experimental. KN, Sep'08") ;
1058 this.pathSizeLogitBeta = beta;
1062 public
double getLateArrival_utils_hr() {
1067 public
void setLateArrival_utils_hr(
double lateArrival) {
1069 this.lateArrival = lateArrival;
1073 public
double getEarlyDeparture_utils_hr() {
1074 return earlyDeparture;
1078 public
void setEarlyDeparture_utils_hr(
double earlyDeparture) {
1080 this.earlyDeparture = earlyDeparture;
1084 public
double getPerforming_utils_hr() {
1089 public
void setPerforming_utils_hr(
double performing) {
1090 this.performing = performing;
1094 public
double getMarginalUtilityOfMoney() {
1095 return marginalUtilityOfMoney;
1099 public
void setMarginalUtilityOfMoney(
double marginalUtilityOfMoney) {
1101 this.marginalUtilityOfMoney = marginalUtilityOfMoney;
1105 public
double getUtilityOfLineSwitch() {
1106 return utilityOfLineSwitch;
1110 public
void setUtilityOfLineSwitch(
double utilityOfLineSwitch) {
1112 this.utilityOfLineSwitch = utilityOfLineSwitch;
1115 @
StringGetter( USING_OLD_SCORING_BELOW_ZERO_UTILITY_DURATION )
1116 public
boolean isUsingOldScoringBelowZeroUtilityDuration() {
1117 return usingOldScoringBelowZeroUtilityDuration;
1120 @
StringSetter( USING_OLD_SCORING_BELOW_ZERO_UTILITY_DURATION )
1121 public
void setUsingOldScoringBelowZeroUtilityDuration(
1122 boolean usingOldScoringBelowZeroUtilityDuration) {
1124 this.usingOldScoringBelowZeroUtilityDuration = usingOldScoringBelowZeroUtilityDuration;
1128 public
boolean isWriteExperiencedPlans() {
1129 return writeExperiencedPlans;
1133 public
void setWriteExperiencedPlans(
boolean writeExperiencedPlans) {
1135 this.writeExperiencedPlans = writeExperiencedPlans;
1138 private static int setWaitingCnt=0 ;
1141 public
double getMarginalUtlOfWaiting_utils_hr() {
1142 return this.waiting;
1146 public
void setMarginalUtlOfWaiting_utils_hr(final
double waiting) {
1148 if ( (waiting != 0.) && (setWaitingCnt<1) ) {
1150 log.warn(
"Setting betaWaiting different from zero is discouraged. It is probably implemented correctly, " +
1151 "but there is as of now no indication that it makes the results more realistic." +
Gbl.
ONLYONCE );
1153 this.waiting = waiting;
1157 public double getLearningRate() {
1158 return delegate.getLearningRate();
1161 public void setLearningRate(
double learningRate) {
1162 delegate.setLearningRate(learningRate);
1165 public double getBrainExpBeta() {
1166 return delegate.getBrainExpBeta();
1169 public void setBrainExpBeta(
double brainExpBeta) {
1170 delegate.setBrainExpBeta(brainExpBeta);
1173 public double getPathSizeLogitBeta() {
1174 return delegate.getPathSizeLogitBeta();
1177 public void setPathSizeLogitBeta(
double beta) {
1178 delegate.setPathSizeLogitBeta(beta);
1181 public double getLateArrival_utils_hr() {
1182 return delegate.getLateArrival_utils_hr();
1185 public void setLateArrival_utils_hr(
double lateArrival) {
1186 delegate.setLateArrival_utils_hr(lateArrival);
1189 public double getEarlyDeparture_utils_hr() {
1190 return delegate.getEarlyDeparture_utils_hr();
1193 public void setEarlyDeparture_utils_hr(
double earlyDeparture) {
1194 delegate.setEarlyDeparture_utils_hr(earlyDeparture);
1197 public double getPerforming_utils_hr() {
1198 return delegate.getPerforming_utils_hr();
1201 public void setPerforming_utils_hr(
double performing) {
1202 delegate.setPerforming_utils_hr(performing);
1205 public double getMarginalUtilityOfMoney() {
1206 return delegate.getMarginalUtilityOfMoney();
1209 public void setMarginalUtilityOfMoney(
double marginalUtilityOfMoney) {
1210 delegate.setMarginalUtilityOfMoney(marginalUtilityOfMoney);
1213 public double getUtilityOfLineSwitch() {
1214 return delegate.getUtilityOfLineSwitch();
1217 public void setUtilityOfLineSwitch(
double utilityOfLineSwitch) {
1218 delegate.setUtilityOfLineSwitch(utilityOfLineSwitch);
1221 public boolean isUsingOldScoringBelowZeroUtilityDuration() {
1222 return delegate.isUsingOldScoringBelowZeroUtilityDuration();
1225 public void setUsingOldScoringBelowZeroUtilityDuration(
1226 boolean usingOldScoringBelowZeroUtilityDuration) {
1227 delegate.setUsingOldScoringBelowZeroUtilityDuration(usingOldScoringBelowZeroUtilityDuration);
1230 public boolean isWriteExperiencedPlans() {
1231 return delegate.isWriteExperiencedPlans();
1234 public void setWriteExperiencedPlans(
boolean writeExperiencedPlans) {
1235 delegate.setWriteExperiencedPlans(writeExperiencedPlans);
1238 public double getMarginalUtlOfWaiting_utils_hr() {
1239 return delegate.getMarginalUtlOfWaiting_utils_hr();
1241 public void setMarginalUtlOfWaiting_utils_hr(
double waiting) {
1242 delegate.setMarginalUtlOfWaiting_utils_hr(waiting);
1245 public void setFractionOfIterationsToStartScoreMSA( Double val ) {
1246 delegate.setFractionOfIterationsToStartScoreMSA(val);
1248 public Double getFractionOfIterationsToStartScoreMSA() {
1249 return delegate.getFractionOfIterationsToStartScoreMSA() ;
1252 public final void setLocked() {
1254 this.delegate.setLocked();
void readFile(final String filename, final String dtdFilename)
OptionalTime getLatestStartTime()
static final String ONLYONCE
static final String other
final void write(final String filename)
void setEarliestEndTime(final double earliestEndTime)
Map< String, String > getComments()
void setMinimalDuration(final double minimalDuration)
OptionalTime getEarliestEndTime()
static final String TRANSIT_ACTIVITY_TYPE
OptionalTime getTypicalDuration()
static void main(final String[] args)
OptionalTime getOpeningTime()
void setLatestStartTime(final double latestStartTime)
void setTypicalDuration(final double typicalDuration)
static final double parseTime(final String time)
final void addModule(final ConfigGroup specializedConfigModule)
OptionalTime getClosingTime()
static final String writeTime(final double seconds, final String timeformat)
static OptionalTime defined(double seconds)
OptionalTime getMinimalDuration()
void setOpeningTime(final double openingTime)
static OptionalTime undefined()
Map< String, String > getComments()
void setClosingTime(final double closingTime)
ActivityParams(final String type)
ModeParams(final String mode)