001/* *********************************************************************** * 002 * project: org.matsim.* 003 * *********************************************************************** * 004 * * 005 * copyright : (C) 2007 by the members listed in the COPYING, * 006 * LICENSE and WARRANTY file. * 007 * email : info at matsim dot org * 008 * * 009 * *********************************************************************** * 010 * * 011 * This program is free software; you can redistribute it and/or modify * 012 * it under the terms of the GNU General Public License as published by * 013 * the Free Software Foundation; either version 2 of the License, or * 014 * (at your option) any later version. * 015 * See also COPYING, LICENSE and WARRANTY file * 016 * * 017 * *********************************************************************** */ 018 019package org.matsim.contrib.freight; 020 021import org.matsim.core.config.ConfigGroup; 022import org.matsim.core.config.ReflectiveConfigGroup; 023 024import javax.validation.constraints.Positive; 025import java.net.URL; 026import java.util.Map; 027 028public class FreightConfigGroup extends ReflectiveConfigGroup { 029 030 public static final String GROUPNAME="freight" ; 031 032 private String carriersFile; 033 public static final String CARRIERSFILEDE = "carriersFile"; 034 private static final String CARRIERSFILEDESC = "Freight Carriers File, according to MATSim freight contrib"; 035 036 private String carriersVehicleTypesFile; 037 public static final String CARRIERSVEHICLETYPED = "carriersVehicleTypeFile"; 038 private static final String CARRIERSVEHICLETYPEDESC = "Carrier Vehicle Types file, according to MATSim freight contrib"; 039 040 private String vehicleRoutingAlgortihmFile; 041 public static final String VEHICLEROUTINGALGORITHM = "vehicleRoutingAlgortihmFile"; 042 private static final String VEHICLEROUTINGALGORITHMDESC = "(Optional) Vehicle Routing Algorithm File, according to jsprit library. " 043 + "Empty value \"\" means an default algorithm is used."; 044 045 @Positive 046 private int travelTimeSliceWidth = 1800; 047 public static final String TRAVELTIMESLICEWIDTH = "travelTimeSliceWidth"; 048 private static final String TRAVELTIMESLICEWIDTHDESC = "time slice width used for calculation of travel times in seconds." + 049 " The smaller the value, the more precise the calculation of routing costs but the longer the computation time." + 050 " Default value is 1800 seconds."; 051 052 public enum UseDistanceConstraintForTourPlanning {noDistanceConstraint, basedOnEnergyConsumption}; 053 private static final String USE_DISTANCE_CONSTRAINT = "useDistanceConstraintForTourPlanning"; 054 private UseDistanceConstraintForTourPlanning useDistanceConstraintForTourPlanning = UseDistanceConstraintForTourPlanning.noDistanceConstraint; 055 private static final String USE_DISTANCE_CONSTRAINT_DESC = "Use distant constraint within the tour planning phase. This does NOT ensure that the tours in MATSim will respect this limitation"; 056 057 public FreightConfigGroup() { 058 super(GROUPNAME); 059 } 060 061 //### CarriersFile ### 062 /** 063 * @return -- {@value #CARRIERSFILEDESC} 064 */ 065// @StringGetter(CARRIERSFILEDE) 066 public String getCarriersFile() { 067 return carriersFile; 068 } 069 070 URL getCarriersFileUrl(URL context) { 071 return ConfigGroup.getInputFileURL(context, this.carriersFile); 072 } 073 074 /** 075 * @param -- {@value #CARRIERSFILEDESC} 076 */ 077// @StringSetter(CARRIERSFILEDE) 078 public void setCarriersFile(String carriersFile) { 079 this.carriersFile = carriersFile; 080 } 081 082 083 //### CarriersVehicleTypeFile ### 084 /** 085 * @return -- {@value #CARRIERSVEHICLETYPEDESC} 086 */ 087// @StringGetter(CARRIERSVEHICLETYPED) 088 public String getCarriersVehicleTypesFile() { 089 return carriersVehicleTypesFile; 090 } 091 092 URL getCarriersVehicleTypesFileUrl(URL context) { 093 return ConfigGroup.getInputFileURL(context, this.carriersVehicleTypesFile); 094 } 095 096 /** 097 * @param -- {@value #CARRIERSVEHICLETYPEDESC} 098 */ 099// @StringSetter(CARRIERSVEHICLETYPED) 100 public void setCarriersVehicleTypesFile(String carriersVehicleTypesFile) { 101 this.carriersVehicleTypesFile = carriersVehicleTypesFile; 102 } 103 104 //### VehicleRoutingAlgorithmFile ### 105 /** 106 * @return -- {@value #VEHICLEROUTINGALGORITHMDESC} 107 */ 108// @StringGetter(VEHICLEROUTINGALGORITHM) 109 public String getVehicleRoutingAlgortihmFile() { 110 return vehicleRoutingAlgortihmFile; 111 } 112 113 URL getVehicleAlgortihemsFileUrl(URL context) { 114 return ConfigGroup.getInputFileURL(context, this.vehicleRoutingAlgortihmFile); 115 } 116 117 /** 118 * @param -- {@value #VEHICLEROUTINGALGORITHMDESC} 119 */ 120// @StringSetter(VEHICLEROUTINGALGORITHM) 121 public void setVehicleRoutingAlgortihmFileFile(String vehicleRoutingAlgortihmFile) { 122 this.vehicleRoutingAlgortihmFile = vehicleRoutingAlgortihmFile; 123 } 124 125 126 //### TravelTimeSliceWidth ### 127 /** 128 * @return travelTimeSliceWidth --{@value #TRAVELTIMESLICEWIDTHDESC} 129 */ 130// @StringGetter(TRAVELTIMESLICEWIDTH) 131 public int getTravelTimeSliceWidth() { 132 return travelTimeSliceWidth; 133 } 134 135 /** 136 * @param travelTimeSliceWidth --{@value #TRAVELTIMESLICEWIDTHDESC} 137 */ 138// @StringSetter(JSPRITTIMESLICEWIDTH) 139 public void setTravelTimeSliceWidth(int travelTimeSliceWidth) { 140 this.travelTimeSliceWidth = travelTimeSliceWidth; 141 } 142 143 //### TimeWindowHandling ### 144 public enum TimeWindowHandling{ ignore, enforceBeginnings } 145 private TimeWindowHandling timeWindowHandling = TimeWindowHandling.enforceBeginnings ; 146 /** 147 * Physically enforces beginnings of time windows for freight activities, i.e. freight agents 148 * wait before closed doors until they can deliver / pick up their goods, and then take their required duration. 149 */ 150 public void setTimeWindowHandling( TimeWindowHandling handling ) { 151 this.timeWindowHandling = handling ; 152 } 153 public TimeWindowHandling getTimeWindowHandling() { 154 return this.timeWindowHandling ; 155 } 156 157 158 159 //--- 160 //--- 161 /** 162 * @return useDistanceConstraint 163 */ 164 @StringGetter(USE_DISTANCE_CONSTRAINT) 165 public UseDistanceConstraintForTourPlanning getUseDistanceConstraintForTourPlanning() { 166 return useDistanceConstraintForTourPlanning; 167 } 168 /** 169 * @param useDistanceConstraintForTourPlanning {@value #USE_DISTANCE_CONSTRAINT_DESC} 170 */ 171 @StringSetter(USE_DISTANCE_CONSTRAINT) 172 public void setUseDistanceConstraintForTourPlanning(UseDistanceConstraintForTourPlanning useDistanceConstraintForTourPlanning) { 173 this.useDistanceConstraintForTourPlanning = useDistanceConstraintForTourPlanning; 174 } 175 176 //--- 177 //--- 178 @Override 179 public Map<String, String> getComments() { 180 Map<String, String> map = super.getComments(); 181 map.put(CARRIERSFILEDE, CARRIERSFILEDESC); 182 map.put(CARRIERSVEHICLETYPED, CARRIERSVEHICLETYPEDESC); 183 map.put(VEHICLEROUTINGALGORITHM, VEHICLEROUTINGALGORITHMDESC); 184 map.put(TRAVELTIMESLICEWIDTH, TRAVELTIMESLICEWIDTHDESC); 185 map.put(USE_DISTANCE_CONSTRAINT, USE_DISTANCE_CONSTRAINT_DESC); 186 return map; 187 } 188 189}