From 4ea33f5752a233aa269805681d9ef12196ea1e7e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aitan=20Medeiros=20Milit=C3=A3o?= Date: Thu, 19 Sep 2019 17:47:49 +0200 Subject: [PATCH 1/5] Updated class documentation -Updated class documentation on analysis folder. --- .../uam/analysis/RunBatchConversions.java | 8 +++ .../ConvertDemographicsFromPopulation.java | 72 ++++++++++--------- .../analysis/traffic/CSVLinkStatsWriter.java | 5 ++ .../uam/analysis/traffic/LinkStatsItem.java | 5 ++ .../run/BatchConvertLinkStatsFromEvents.java | 8 +++ .../run/ConvertLinkStatsFromEvents.java | 2 + .../transit/CSVTransitTripWriter.java | 5 ++ .../uam/analysis/transit/TransitTripItem.java | 5 ++ .../listeners/TransitTripListener.java | 5 ++ .../listeners/TransitTripListenerItem.java | 5 ++ .../readers/EventsTransitTripReader.java | 10 +++ .../BatchConvertTransitTripsFromEvents.java | 6 ++ .../run/ConvertTransitTripsFromEvents.java | 2 + .../RunCalculateCarTravelTimes.java | 2 +- .../RunCalculatePTTravelTimes.java | 2 +- .../RunCalculateUAMTravelTimes.java | 2 +- .../uam/analysis/trips/CSVTripWriter.java | 5 ++ .../uam/analysis/trips/DeckGLTripItem.java | 5 ++ .../matsim/uam/analysis/trips/TripItem.java | 5 ++ .../trips/listeners/DeckGLTripListener.java | 5 ++ .../trips/listeners/TripListener.java | 5 ++ .../trips/listeners/TripListenerItem.java | 5 ++ .../trips/readers/EventsTripReader.java | 11 +++ .../trips/readers/PopulationTripReader.java | 5 ++ .../run/BatchConvertTripsFromEvents.java | 6 ++ .../run/BatchConvertTripsFromPopulation.java | 5 ++ .../run/ConvertDeckGLTripsFromEvents.java | 9 +++ .../trips/run/ConvertTripsFromEvents.java | 7 ++ .../trips/run/ConvertTripsFromPopulation.java | 7 ++ .../trips/utils/BasicHomeActivityTypes.java | 5 ++ .../trips/utils/HomeActivityTypes.java | 5 ++ .../uamdemand/CSVUAMDemandWriter.java | 5 ++ .../uam/analysis/uamdemand/UAMDemandItem.java | 5 ++ .../uamdemand/listeners/UAMListener.java | 5 ++ .../uamdemand/listeners/UAMListenerItem.java | 5 ++ .../uamdemand/readers/EventsUAMReader.java | 11 +++ .../run/BatchConvertUAMDemandFromEvents.java | 7 ++ .../run/ConvertUAMDemandFromEvents.java | 2 +- .../uamroutes/run/RunCalculateUAMRoutes.java | 7 ++ .../uamstations/CSVUAMStationWriter.java | 5 ++ .../analysis/uamstations/UAMStationItem.java | 5 ++ ...atchConvertUAMStationsFromUAMVehicles.java | 7 ++ .../ConvertUAMStationsFromUAMVehicles.java | 2 +- 43 files changed, 263 insertions(+), 37 deletions(-) diff --git a/src/main/java/net/bhl/matsim/uam/analysis/RunBatchConversions.java b/src/main/java/net/bhl/matsim/uam/analysis/RunBatchConversions.java index 3dcecf67..e7fb4663 100644 --- a/src/main/java/net/bhl/matsim/uam/analysis/RunBatchConversions.java +++ b/src/main/java/net/bhl/matsim/uam/analysis/RunBatchConversions.java @@ -7,8 +7,16 @@ import net.bhl.matsim.uam.analysis.trips.run.BatchConvertTripsFromEvents; import net.bhl.matsim.uam.analysis.trips.run.BatchConvertTripsFromPopulation; import net.bhl.matsim.uam.analysis.uamdemand.run.BatchConvertUAMDemandFromEvents; +import net.bhl.matsim.uam.analysis.uamdemand.run.ConvertUAMDemandFromEvents; import net.bhl.matsim.uam.analysis.uamstations.run.BatchConvertUAMStationsFromUAMVehicles; +/** +* This script takes a specific folder path and runs {@link BatchConvertUAMStationsFromUAMVehicles}, {@link BatchConvertUAMDemandFromEvents}, +* {@link BatchConvertTripsFromEvents}, {@link BatchConvertTransitTripsFromEvents}, {@link BatchConvertTripsFromPopulation} and +* {@link BatchConvertLinkStatsFromEvents} consecutively for all MATSim output folders within the provided base folder. +* +* @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) +*/ public class RunBatchConversions { public static void main(String[] args) throws IOException { diff --git a/src/main/java/net/bhl/matsim/uam/analysis/demographics/ConvertDemographicsFromPopulation.java b/src/main/java/net/bhl/matsim/uam/analysis/demographics/ConvertDemographicsFromPopulation.java index 60cd7afd..044d5eec 100644 --- a/src/main/java/net/bhl/matsim/uam/analysis/demographics/ConvertDemographicsFromPopulation.java +++ b/src/main/java/net/bhl/matsim/uam/analysis/demographics/ConvertDemographicsFromPopulation.java @@ -22,10 +22,18 @@ import org.matsim.households.Household; import org.matsim.households.HouseholdsReaderV10; +/** + * This script Creates a demographics file by reading through and gathering + * socio-demographic attributes from each person object in an existing + * population (or plan) file. Necessary inputs are in the following order: -plans + * file; -households file; -output file + * + * @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) + */ public class ConvertDemographicsFromPopulation { public static void main(String[] args) throws IOException { - //cmd-line input: input-population input-households outfile + // cmd-line input: input-population input-households outfile Scenario scenario = ScenarioUtils.createScenario(ConfigUtils.createConfig()); int i = 0; @@ -37,93 +45,93 @@ public static void main(String[] args) throws IOException { for (Household household : scenario.getHouseholds().getHouseholds().values()) { household.getMemberIds().forEach(id -> householdMap.put(id, household.getId())); } - + Set columns = new HashSet(); Set> population = new HashSet>(); for (Person person : scenario.getPopulation().getPersons().values()) { Map personAttrMap = new HashMap(); - + personAttrMap.put("ID", person.getId().toString()); columns.add("ID"); - - String[] attributePairs = person.getAttributes().toString().split("[{}]+"); + + String[] attributePairs = person.getAttributes().toString().split("[{}]+"); for (String attributePair : attributePairs) { if (attributePair.isEmpty()) continue; - + String[] extracts = attributePair.split("[;=]+"); // e.g. key age object 39 columns.add(extracts[1].trim()); personAttrMap.put(extracts[1].trim(), extracts[3].trim()); } - + Household household = scenario.getHouseholds().getHouseholds().get(householdMap.get(person.getId())); - + if (household != null) { personAttrMap.put("household_ID", household.getId().toString()); columns.add("household_ID"); - + personAttrMap.put("household_income", "" + household.getIncome().getIncome()); columns.add("household_income"); - + personAttrMap.put("household_currency", household.getIncome().getCurrency()); columns.add("household_currency"); - + personAttrMap.put("household_incomePeriod", household.getIncome().getIncomePeriod().toString()); columns.add("household_incomePeriod"); - String[] hhAttributePairs = household.getAttributes().toString().split("[{}]+"); + String[] hhAttributePairs = household.getAttributes().toString().split("[{}]+"); for (String hhAttributePair : hhAttributePairs) { if (hhAttributePair.isEmpty()) continue; - + String[] extracts = hhAttributePair.split("[;=]+"); // e.g. key age object 39 columns.add("household_" + extracts[1].trim()); personAttrMap.put("household_" + extracts[1].trim(), extracts[3].trim()); } } - + population.add(personAttrMap); } - + BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outfile))); - + // Make columns into ordered list, write header List columnList = new ArrayList(); columnList.addAll(columns); Collections.sort(columnList); System.out.println(columnList); - + boolean first = true; for (Map personAttrMap : population) { if (first) { first = false; - + for (Iterator it = columnList.iterator(); it.hasNext();) { - writer.write(it.next()); - - if (it.hasNext()) - writer.write(","); - else - writer.write(System.lineSeparator()); + writer.write(it.next()); + + if (it.hasNext()) + writer.write(","); + else + writer.write(System.lineSeparator()); } } - + for (Iterator it = columnList.iterator(); it.hasNext();) { String key = it.next(); if (personAttrMap.containsKey(key)) writer.write(personAttrMap.get(key)); - - if (it.hasNext()) - writer.write(","); - else - writer.write(System.lineSeparator()); + + if (it.hasNext()) + writer.write(","); + else + writer.write(System.lineSeparator()); } } - + writer.close(); - + System.out.println("done."); } } diff --git a/src/main/java/net/bhl/matsim/uam/analysis/traffic/CSVLinkStatsWriter.java b/src/main/java/net/bhl/matsim/uam/analysis/traffic/CSVLinkStatsWriter.java index 5e8080a7..90e37ab9 100644 --- a/src/main/java/net/bhl/matsim/uam/analysis/traffic/CSVLinkStatsWriter.java +++ b/src/main/java/net/bhl/matsim/uam/analysis/traffic/CSVLinkStatsWriter.java @@ -10,6 +10,11 @@ import java.util.SortedSet; import java.util.TreeSet; +/** +* This class writes a CSV file containing information of links for different times. +* +* @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) +*/ public class CSVLinkStatsWriter { final private Collection links; final private String delimiter; diff --git a/src/main/java/net/bhl/matsim/uam/analysis/traffic/LinkStatsItem.java b/src/main/java/net/bhl/matsim/uam/analysis/traffic/LinkStatsItem.java index 6ef2d18c..b3ec5ad9 100644 --- a/src/main/java/net/bhl/matsim/uam/analysis/traffic/LinkStatsItem.java +++ b/src/main/java/net/bhl/matsim/uam/analysis/traffic/LinkStatsItem.java @@ -7,6 +7,11 @@ import org.matsim.api.core.v01.network.Link; import org.matsim.api.core.v01.population.Person; +/** +* This class stores link information in a specific time. +* +* @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) +*/ public class LinkStatsItem { public Id linkId; public double distance; diff --git a/src/main/java/net/bhl/matsim/uam/analysis/traffic/run/BatchConvertLinkStatsFromEvents.java b/src/main/java/net/bhl/matsim/uam/analysis/traffic/run/BatchConvertLinkStatsFromEvents.java index ad8c1e99..547e3811 100644 --- a/src/main/java/net/bhl/matsim/uam/analysis/traffic/run/BatchConvertLinkStatsFromEvents.java +++ b/src/main/java/net/bhl/matsim/uam/analysis/traffic/run/BatchConvertLinkStatsFromEvents.java @@ -1,6 +1,8 @@ package net.bhl.matsim.uam.analysis.traffic.run; import java.io.File; + + import java.io.IOException; import java.nio.file.Paths; import java.util.Collection; @@ -8,6 +10,12 @@ import org.apache.commons.io.FileUtils; +/** +* This script takes a specific folder path and runs {@link ConvertLinkStatsFromEvents} for all +* all MATSim output folders within the provided base folder. +* +* @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) +*/ public class BatchConvertLinkStatsFromEvents { // PROVIDE PARENT FOLDER OF OUTPUT FOLDERS private static String eventfile = "output_events.xml"; diff --git a/src/main/java/net/bhl/matsim/uam/analysis/traffic/run/ConvertLinkStatsFromEvents.java b/src/main/java/net/bhl/matsim/uam/analysis/traffic/run/ConvertLinkStatsFromEvents.java index 30a7b73e..385d7d92 100644 --- a/src/main/java/net/bhl/matsim/uam/analysis/traffic/run/ConvertLinkStatsFromEvents.java +++ b/src/main/java/net/bhl/matsim/uam/analysis/traffic/run/ConvertLinkStatsFromEvents.java @@ -29,6 +29,8 @@ * -Network file; * -Events file; * -output file; +* +* @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) */ public class ConvertLinkStatsFromEvents { diff --git a/src/main/java/net/bhl/matsim/uam/analysis/transit/CSVTransitTripWriter.java b/src/main/java/net/bhl/matsim/uam/analysis/transit/CSVTransitTripWriter.java index e1d72d99..72c12b0a 100644 --- a/src/main/java/net/bhl/matsim/uam/analysis/transit/CSVTransitTripWriter.java +++ b/src/main/java/net/bhl/matsim/uam/analysis/transit/CSVTransitTripWriter.java @@ -6,6 +6,11 @@ import java.io.OutputStreamWriter; import java.util.Collection; +/** +* This class writes a CSV file containing information about trips performed by transit. +* +* @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) +*/ public class CSVTransitTripWriter { final private Collection trips; final private String delimiter; diff --git a/src/main/java/net/bhl/matsim/uam/analysis/transit/TransitTripItem.java b/src/main/java/net/bhl/matsim/uam/analysis/transit/TransitTripItem.java index 002529fc..aaef4d0e 100644 --- a/src/main/java/net/bhl/matsim/uam/analysis/transit/TransitTripItem.java +++ b/src/main/java/net/bhl/matsim/uam/analysis/transit/TransitTripItem.java @@ -4,6 +4,11 @@ import org.matsim.api.core.v01.Id; import org.matsim.api.core.v01.population.Person; +/** +* This class stores information about a trip performed by transit. +* +* @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) +*/ public class TransitTripItem { public Id personId = null; public int personTripId = -1; diff --git a/src/main/java/net/bhl/matsim/uam/analysis/transit/listeners/TransitTripListener.java b/src/main/java/net/bhl/matsim/uam/analysis/transit/listeners/TransitTripListener.java index 920635ce..15b4d883 100644 --- a/src/main/java/net/bhl/matsim/uam/analysis/transit/listeners/TransitTripListener.java +++ b/src/main/java/net/bhl/matsim/uam/analysis/transit/listeners/TransitTripListener.java @@ -30,6 +30,11 @@ import ch.ethz.matsim.baseline_scenario.transit.events.PublicTransitEvent; import net.bhl.matsim.uam.analysis.transit.TransitTripItem; +/** +* A listener that retrieves information from transit events. +* +* @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) +*/ public class TransitTripListener implements ActivityStartEventHandler, ActivityEndEventHandler, PersonDepartureEventHandler, PersonArrivalEventHandler, GenericEventHandler, TeleportationArrivalEventHandler, PersonStuckEventHandler { diff --git a/src/main/java/net/bhl/matsim/uam/analysis/transit/listeners/TransitTripListenerItem.java b/src/main/java/net/bhl/matsim/uam/analysis/transit/listeners/TransitTripListenerItem.java index e160367a..3df15c0f 100644 --- a/src/main/java/net/bhl/matsim/uam/analysis/transit/listeners/TransitTripListenerItem.java +++ b/src/main/java/net/bhl/matsim/uam/analysis/transit/listeners/TransitTripListenerItem.java @@ -4,6 +4,11 @@ import net.bhl.matsim.uam.analysis.transit.TransitTripItem; +/** +* This class stores information about a transit trip that is being read by the {@link TransitTripListener}. +* +* @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) +*/ public class TransitTripListenerItem extends TransitTripItem { public String mode = "unknown"; public Coord intermediateOrigin; diff --git a/src/main/java/net/bhl/matsim/uam/analysis/transit/readers/EventsTransitTripReader.java b/src/main/java/net/bhl/matsim/uam/analysis/transit/readers/EventsTransitTripReader.java index e0bd5aba..6e598164 100644 --- a/src/main/java/net/bhl/matsim/uam/analysis/transit/readers/EventsTransitTripReader.java +++ b/src/main/java/net/bhl/matsim/uam/analysis/transit/readers/EventsTransitTripReader.java @@ -12,6 +12,12 @@ import ch.ethz.matsim.baseline_scenario.transit.events.PublicTransitEvent; import ch.ethz.matsim.baseline_scenario.transit.events.PublicTransitEventMapper; +/** + * This class is used to retrieve the a collection of {@link TransitTripItem} by + * using a simulation events file as input + * + * @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) + */ public class EventsTransitTripReader { final private TransitTripListener tripListener; @@ -19,6 +25,10 @@ public EventsTransitTripReader(TransitTripListener tripListener) { this.tripListener = tripListener; } + /** + * @param eventsPath the events file path + * @return A collection of {@link TransitTripItem}. + */ public Collection readTrips(String eventsPath) { EventsManager eventsManager = EventsUtils.createEventsManager(); eventsManager.addHandler(tripListener); diff --git a/src/main/java/net/bhl/matsim/uam/analysis/transit/run/BatchConvertTransitTripsFromEvents.java b/src/main/java/net/bhl/matsim/uam/analysis/transit/run/BatchConvertTransitTripsFromEvents.java index 38d3be49..dc9aa4c8 100644 --- a/src/main/java/net/bhl/matsim/uam/analysis/transit/run/BatchConvertTransitTripsFromEvents.java +++ b/src/main/java/net/bhl/matsim/uam/analysis/transit/run/BatchConvertTransitTripsFromEvents.java @@ -8,6 +8,12 @@ import org.apache.commons.io.FileUtils; +/** +* This script takes a specific folder path and runs {@link ConvertTransitTripsFromEvents} for all +* MATSim output folders within the provided base folder. +* +* @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) +*/ public class BatchConvertTransitTripsFromEvents { // PROVIDE PARENT FOLDER OF OUTPUT FOLDERS private static String eventfile = "output_events.xml"; diff --git a/src/main/java/net/bhl/matsim/uam/analysis/transit/run/ConvertTransitTripsFromEvents.java b/src/main/java/net/bhl/matsim/uam/analysis/transit/run/ConvertTransitTripsFromEvents.java index ce572fde..0bd65596 100644 --- a/src/main/java/net/bhl/matsim/uam/analysis/transit/run/ConvertTransitTripsFromEvents.java +++ b/src/main/java/net/bhl/matsim/uam/analysis/transit/run/ConvertTransitTripsFromEvents.java @@ -22,6 +22,8 @@ * -Network file; * -Events file; * -output file; +* +* @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) */ public class ConvertTransitTripsFromEvents { diff --git a/src/main/java/net/bhl/matsim/uam/analysis/traveltimes/RunCalculateCarTravelTimes.java b/src/main/java/net/bhl/matsim/uam/analysis/traveltimes/RunCalculateCarTravelTimes.java index 1744e020..12d797e9 100644 --- a/src/main/java/net/bhl/matsim/uam/analysis/traveltimes/RunCalculateCarTravelTimes.java +++ b/src/main/java/net/bhl/matsim/uam/analysis/traveltimes/RunCalculateCarTravelTimes.java @@ -50,7 +50,7 @@ * -Network file; -Events file; -Trips file; -output file; -output * networkEventsChangeFile; * - * @author Aitan Militao + * @author Aitanm (Aitan Militão), RRothfeld (Raoul Rothfeld) */ public class RunCalculateCarTravelTimes { diff --git a/src/main/java/net/bhl/matsim/uam/analysis/traveltimes/RunCalculatePTTravelTimes.java b/src/main/java/net/bhl/matsim/uam/analysis/traveltimes/RunCalculatePTTravelTimes.java index 49e933ff..6600d1dc 100644 --- a/src/main/java/net/bhl/matsim/uam/analysis/traveltimes/RunCalculatePTTravelTimes.java +++ b/src/main/java/net/bhl/matsim/uam/analysis/traveltimes/RunCalculatePTTravelTimes.java @@ -42,7 +42,7 @@ * -Network file; -Transit Schedule file; -Transit Vehicles file; -Trips file; * -output file; * - * @author Aitan Militao + * @author Aitanm (Aitan Militão), RRothfeld (Raoul Rothfeld) */ public class RunCalculatePTTravelTimes { diff --git a/src/main/java/net/bhl/matsim/uam/analysis/traveltimes/RunCalculateUAMTravelTimes.java b/src/main/java/net/bhl/matsim/uam/analysis/traveltimes/RunCalculateUAMTravelTimes.java index 55e6a365..3816cc79 100644 --- a/src/main/java/net/bhl/matsim/uam/analysis/traveltimes/RunCalculateUAMTravelTimes.java +++ b/src/main/java/net/bhl/matsim/uam/analysis/traveltimes/RunCalculateUAMTravelTimes.java @@ -72,7 +72,7 @@ * -strategy name(minTraveltime, minDistance, minAccessTravelTime, * minAccessDistance) -output file; ; * - * @author Aitan Militao + * @author Aitanm (Aitan Militão), RRothfeld (Raoul Rothfeld) */ public class RunCalculateUAMTravelTimes { diff --git a/src/main/java/net/bhl/matsim/uam/analysis/trips/CSVTripWriter.java b/src/main/java/net/bhl/matsim/uam/analysis/trips/CSVTripWriter.java index ec5905bc..c24c4ac2 100644 --- a/src/main/java/net/bhl/matsim/uam/analysis/trips/CSVTripWriter.java +++ b/src/main/java/net/bhl/matsim/uam/analysis/trips/CSVTripWriter.java @@ -6,6 +6,11 @@ import java.io.OutputStreamWriter; import java.util.Collection; +/** +* This class writes a CSV file containing information about each trip. +* +* @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) +*/ public class CSVTripWriter { final private Collection trips; final private String delimiter; diff --git a/src/main/java/net/bhl/matsim/uam/analysis/trips/DeckGLTripItem.java b/src/main/java/net/bhl/matsim/uam/analysis/trips/DeckGLTripItem.java index 2f62f1fd..0efa2c8e 100644 --- a/src/main/java/net/bhl/matsim/uam/analysis/trips/DeckGLTripItem.java +++ b/src/main/java/net/bhl/matsim/uam/analysis/trips/DeckGLTripItem.java @@ -14,6 +14,11 @@ import com.vividsolutions.jts.geom.Coordinate; +/** +* This class stores information about a trip for deck.gl format. +* +* @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) +*/ public class DeckGLTripItem { public Coord location; public long time; diff --git a/src/main/java/net/bhl/matsim/uam/analysis/trips/TripItem.java b/src/main/java/net/bhl/matsim/uam/analysis/trips/TripItem.java index 22b0448e..36ededff 100644 --- a/src/main/java/net/bhl/matsim/uam/analysis/trips/TripItem.java +++ b/src/main/java/net/bhl/matsim/uam/analysis/trips/TripItem.java @@ -4,6 +4,11 @@ import org.matsim.api.core.v01.Id; import org.matsim.api.core.v01.population.Person; +/** +* This class stores information about a trip. +* +* @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) +*/ public class TripItem { public Id personId; public int personTripId; diff --git a/src/main/java/net/bhl/matsim/uam/analysis/trips/listeners/DeckGLTripListener.java b/src/main/java/net/bhl/matsim/uam/analysis/trips/listeners/DeckGLTripListener.java index 11fe1b49..b3de3472 100644 --- a/src/main/java/net/bhl/matsim/uam/analysis/trips/listeners/DeckGLTripListener.java +++ b/src/main/java/net/bhl/matsim/uam/analysis/trips/listeners/DeckGLTripListener.java @@ -16,6 +16,11 @@ import net.bhl.matsim.uam.analysis.trips.DeckGLTripItem; +/** +* A listener that retrieves information from trip events and stores in <{@link DeckGLTripItem} format. +* +* @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) +*/ public class DeckGLTripListener implements LinkEnterEventHandler, LinkLeaveEventHandler { final private Map, List> deckGLTrips; final private Network network; diff --git a/src/main/java/net/bhl/matsim/uam/analysis/trips/listeners/TripListener.java b/src/main/java/net/bhl/matsim/uam/analysis/trips/listeners/TripListener.java index 2f02f526..39c03759 100644 --- a/src/main/java/net/bhl/matsim/uam/analysis/trips/listeners/TripListener.java +++ b/src/main/java/net/bhl/matsim/uam/analysis/trips/listeners/TripListener.java @@ -37,6 +37,11 @@ import net.bhl.matsim.uam.analysis.trips.TripItem; import net.bhl.matsim.uam.analysis.trips.utils.HomeActivityTypes; +/** +* A listener that retrieves information from trip events. +* +* @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) +*/ public class TripListener implements ActivityStartEventHandler, ActivityEndEventHandler, PersonDepartureEventHandler, PersonEntersVehicleEventHandler, PersonLeavesVehicleEventHandler, LinkEnterEventHandler, PersonStuckEventHandler, TeleportationArrivalEventHandler { diff --git a/src/main/java/net/bhl/matsim/uam/analysis/trips/listeners/TripListenerItem.java b/src/main/java/net/bhl/matsim/uam/analysis/trips/listeners/TripListenerItem.java index 86cf0c9b..64e3b35e 100644 --- a/src/main/java/net/bhl/matsim/uam/analysis/trips/listeners/TripListenerItem.java +++ b/src/main/java/net/bhl/matsim/uam/analysis/trips/listeners/TripListenerItem.java @@ -11,6 +11,11 @@ import net.bhl.matsim.uam.analysis.trips.TripItem; +/** +* This class stores information about a trip performed. +* +* @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) +*/ public class TripListenerItem extends TripItem { public List elements = new LinkedList<>(); public List> route = new LinkedList<>(); diff --git a/src/main/java/net/bhl/matsim/uam/analysis/trips/readers/EventsTripReader.java b/src/main/java/net/bhl/matsim/uam/analysis/trips/readers/EventsTripReader.java index b139fad5..c182862f 100644 --- a/src/main/java/net/bhl/matsim/uam/analysis/trips/readers/EventsTripReader.java +++ b/src/main/java/net/bhl/matsim/uam/analysis/trips/readers/EventsTripReader.java @@ -6,9 +6,16 @@ import org.matsim.core.events.EventsUtils; import org.matsim.core.events.MatsimEventsReader; +import net.bhl.matsim.uam.analysis.transit.TransitTripItem; import net.bhl.matsim.uam.analysis.trips.TripItem; import net.bhl.matsim.uam.analysis.trips.listeners.TripListener; +/** + * This class is used to retrieve the a collection of {@link TripItem} by + * using a simulation events file as input + * + * @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) + */ public class EventsTripReader { final private TripListener tripListener; @@ -16,6 +23,10 @@ public EventsTripReader(TripListener tripListener) { this.tripListener = tripListener; } + /** + * @param eventsPath the events file path + * @return A collection of {@link TripItem}. + */ public Collection readTrips(String eventsPath) { EventsManager eventsManager = EventsUtils.createEventsManager(); eventsManager.addHandler(tripListener); diff --git a/src/main/java/net/bhl/matsim/uam/analysis/trips/readers/PopulationTripReader.java b/src/main/java/net/bhl/matsim/uam/analysis/trips/readers/PopulationTripReader.java index b04a9229..d9af254b 100644 --- a/src/main/java/net/bhl/matsim/uam/analysis/trips/readers/PopulationTripReader.java +++ b/src/main/java/net/bhl/matsim/uam/analysis/trips/readers/PopulationTripReader.java @@ -24,6 +24,11 @@ import net.bhl.matsim.uam.analysis.trips.TripItem; import net.bhl.matsim.uam.analysis.trips.utils.HomeActivityTypes; +/** + * A reader for trips based on a population file (plans file). + * + * @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) + */ public class PopulationTripReader { final private Network network; final private StageActivityTypes stageActivityTypes; diff --git a/src/main/java/net/bhl/matsim/uam/analysis/trips/run/BatchConvertTripsFromEvents.java b/src/main/java/net/bhl/matsim/uam/analysis/trips/run/BatchConvertTripsFromEvents.java index b5ea861d..eb7f5029 100644 --- a/src/main/java/net/bhl/matsim/uam/analysis/trips/run/BatchConvertTripsFromEvents.java +++ b/src/main/java/net/bhl/matsim/uam/analysis/trips/run/BatchConvertTripsFromEvents.java @@ -8,6 +8,12 @@ import org.apache.commons.io.FileUtils; +/** +* This script takes a specific folder path and runs {@link ConvertTripsFromEvents} for all +* MATSim output folders within the provided base folder. +* +* @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) +*/ public class BatchConvertTripsFromEvents { // PROVIDE PARENT FOLDER OF OUTPUT FOLDERS private static String eventfile = "output_events.xml"; diff --git a/src/main/java/net/bhl/matsim/uam/analysis/trips/run/BatchConvertTripsFromPopulation.java b/src/main/java/net/bhl/matsim/uam/analysis/trips/run/BatchConvertTripsFromPopulation.java index 453cae64..db46897d 100644 --- a/src/main/java/net/bhl/matsim/uam/analysis/trips/run/BatchConvertTripsFromPopulation.java +++ b/src/main/java/net/bhl/matsim/uam/analysis/trips/run/BatchConvertTripsFromPopulation.java @@ -8,6 +8,11 @@ import org.apache.commons.io.FileUtils; +/** +* This script takes a specific folder path and runs {@link ConvertTripsFromPopulation} for all MATSim output folders within the provided base folder. +* +* @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) +*/ public class BatchConvertTripsFromPopulation { // PROVIDE PARENT FOLDER OF OUTPUT FOLDERS private static String eventfile = "output_plans.xml"; diff --git a/src/main/java/net/bhl/matsim/uam/analysis/trips/run/ConvertDeckGLTripsFromEvents.java b/src/main/java/net/bhl/matsim/uam/analysis/trips/run/ConvertDeckGLTripsFromEvents.java index a036a5d3..0e45af85 100644 --- a/src/main/java/net/bhl/matsim/uam/analysis/trips/run/ConvertDeckGLTripsFromEvents.java +++ b/src/main/java/net/bhl/matsim/uam/analysis/trips/run/ConvertDeckGLTripsFromEvents.java @@ -20,6 +20,15 @@ import net.bhl.matsim.uam.analysis.trips.DeckGLTripItem; import net.bhl.matsim.uam.analysis.trips.listeners.DeckGLTripListener; +/** + * This script convert events file to deck.gl-readable trips input file. + * Necessary inputs are in the following order: + * -Network file; -Events file; + * Optional inputs: + * -EPSG:EPSG-code (Example: EPSG:2154) + * +* @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) + */ public class ConvertDeckGLTripsFromEvents { private static String inCRS = "EPSG:2154"; diff --git a/src/main/java/net/bhl/matsim/uam/analysis/trips/run/ConvertTripsFromEvents.java b/src/main/java/net/bhl/matsim/uam/analysis/trips/run/ConvertTripsFromEvents.java index 10c49b5c..a1b1ac53 100644 --- a/src/main/java/net/bhl/matsim/uam/analysis/trips/run/ConvertTripsFromEvents.java +++ b/src/main/java/net/bhl/matsim/uam/analysis/trips/run/ConvertTripsFromEvents.java @@ -22,6 +22,13 @@ import net.bhl.matsim.uam.router.UAMIntermodalRoutingModule; import net.bhl.matsim.uam.router.UAMMainModeIdentifier; +/** + * This script creates a trips file by reading through and gathering trip information from an existing events file. + * Necessary inputs are in the following order: + * -Network file; -Events file; -output file; + * +* @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) + */ public class ConvertTripsFromEvents { static public void main(String[] args) throws IOException { // PROVIDE: NETWORK EVENTS OUTFILE-NAME diff --git a/src/main/java/net/bhl/matsim/uam/analysis/trips/run/ConvertTripsFromPopulation.java b/src/main/java/net/bhl/matsim/uam/analysis/trips/run/ConvertTripsFromPopulation.java index b90d5374..73753d09 100644 --- a/src/main/java/net/bhl/matsim/uam/analysis/trips/run/ConvertTripsFromPopulation.java +++ b/src/main/java/net/bhl/matsim/uam/analysis/trips/run/ConvertTripsFromPopulation.java @@ -20,6 +20,13 @@ import net.bhl.matsim.uam.router.UAMIntermodalRoutingModule; import net.bhl.matsim.uam.router.UAMMainModeIdentifier; +/** + * This script creates a trips file by reading through and gathering trip information from an existing population (or plan) file. + * Necessary inputs are in the following order: + * -Network file; -Plans file; -output file; + * +* @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) + */ public class ConvertTripsFromPopulation { static public void main(String[] args) throws IOException { // PROVIDE: NETWORK PLANS OUTFILE-NAME diff --git a/src/main/java/net/bhl/matsim/uam/analysis/trips/utils/BasicHomeActivityTypes.java b/src/main/java/net/bhl/matsim/uam/analysis/trips/utils/BasicHomeActivityTypes.java index 9e44f3a7..bc7fee11 100644 --- a/src/main/java/net/bhl/matsim/uam/analysis/trips/utils/BasicHomeActivityTypes.java +++ b/src/main/java/net/bhl/matsim/uam/analysis/trips/utils/BasicHomeActivityTypes.java @@ -1,5 +1,10 @@ package net.bhl.matsim.uam.analysis.trips.utils; +/** + * An implementation of {@link HomeActivityTypes} for basic home activities. + * +* @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) + */ public class BasicHomeActivityTypes implements HomeActivityTypes { @Override public boolean isHomeActivity(String activityType) { diff --git a/src/main/java/net/bhl/matsim/uam/analysis/trips/utils/HomeActivityTypes.java b/src/main/java/net/bhl/matsim/uam/analysis/trips/utils/HomeActivityTypes.java index 58f9eda8..e7768757 100644 --- a/src/main/java/net/bhl/matsim/uam/analysis/trips/utils/HomeActivityTypes.java +++ b/src/main/java/net/bhl/matsim/uam/analysis/trips/utils/HomeActivityTypes.java @@ -1,5 +1,10 @@ package net.bhl.matsim.uam.analysis.trips.utils; +/** + * An interface for home activity types. + * +* @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) + */ public interface HomeActivityTypes { boolean isHomeActivity(String activityType); } diff --git a/src/main/java/net/bhl/matsim/uam/analysis/uamdemand/CSVUAMDemandWriter.java b/src/main/java/net/bhl/matsim/uam/analysis/uamdemand/CSVUAMDemandWriter.java index 032b0f51..dce6a6b6 100644 --- a/src/main/java/net/bhl/matsim/uam/analysis/uamdemand/CSVUAMDemandWriter.java +++ b/src/main/java/net/bhl/matsim/uam/analysis/uamdemand/CSVUAMDemandWriter.java @@ -7,6 +7,11 @@ import java.util.Collection; import java.util.HashSet; +/** +* This class writes a CSV file containing UAMDemand data. +* +* @author Aitanm (Aitan Militão), RRothfeld (Raoul Rothfeld) +*/ public class CSVUAMDemandWriter { final private HashSet uamData; final private String delimiter; diff --git a/src/main/java/net/bhl/matsim/uam/analysis/uamdemand/UAMDemandItem.java b/src/main/java/net/bhl/matsim/uam/analysis/uamdemand/UAMDemandItem.java index 4512b229..f6eb44cc 100644 --- a/src/main/java/net/bhl/matsim/uam/analysis/uamdemand/UAMDemandItem.java +++ b/src/main/java/net/bhl/matsim/uam/analysis/uamdemand/UAMDemandItem.java @@ -6,6 +6,11 @@ import net.bhl.matsim.uam.infrastructure.UAMStation; +/** +* This class stores information about a UAM trip. +* +* @author Aitanm (Aitan Militão), RRothfeld (Raoul Rothfeld) +*/ public class UAMDemandItem { public Id personId; public Coord origin; diff --git a/src/main/java/net/bhl/matsim/uam/analysis/uamdemand/listeners/UAMListener.java b/src/main/java/net/bhl/matsim/uam/analysis/uamdemand/listeners/UAMListener.java index f29b516f..87784c18 100644 --- a/src/main/java/net/bhl/matsim/uam/analysis/uamdemand/listeners/UAMListener.java +++ b/src/main/java/net/bhl/matsim/uam/analysis/uamdemand/listeners/UAMListener.java @@ -34,6 +34,11 @@ import net.bhl.matsim.uam.infrastructure.UAMVehicle; import net.bhl.matsim.uam.infrastructure.readers.UAMXMLReader; +/** +* A listener that retrieves information from UAMtrip events. +* +* @author Aitanm (Aitan Militão), RRothfeld (Raoul Rothfeld) +*/ public class UAMListener implements ActivityStartEventHandler, PersonDepartureEventHandler, PersonArrivalEventHandler, PersonEntersVehicleEventHandler{ final private StageActivityTypes stageActivityTypes; diff --git a/src/main/java/net/bhl/matsim/uam/analysis/uamdemand/listeners/UAMListenerItem.java b/src/main/java/net/bhl/matsim/uam/analysis/uamdemand/listeners/UAMListenerItem.java index 8fb0a7af..8fdd51d8 100644 --- a/src/main/java/net/bhl/matsim/uam/analysis/uamdemand/listeners/UAMListenerItem.java +++ b/src/main/java/net/bhl/matsim/uam/analysis/uamdemand/listeners/UAMListenerItem.java @@ -6,6 +6,11 @@ import net.bhl.matsim.uam.analysis.uamdemand.UAMDemandItem; +/** +* This class stores information about a UAMtrip performed. +* +* @author Aitanm (Aitan Militão), RRothfeld (Raoul Rothfeld) +*/ public class UAMListenerItem extends UAMDemandItem{ public UAMListenerItem(Id personId, Coord origin, double startTime, String accessMode) { super(personId, origin, null, null, null, null, null, startTime, Double.NaN, Double.NaN, Double.NaN, Double.NaN, Double.NaN, diff --git a/src/main/java/net/bhl/matsim/uam/analysis/uamdemand/readers/EventsUAMReader.java b/src/main/java/net/bhl/matsim/uam/analysis/uamdemand/readers/EventsUAMReader.java index 9acdac22..bfe299c8 100644 --- a/src/main/java/net/bhl/matsim/uam/analysis/uamdemand/readers/EventsUAMReader.java +++ b/src/main/java/net/bhl/matsim/uam/analysis/uamdemand/readers/EventsUAMReader.java @@ -7,8 +7,15 @@ import org.matsim.core.events.MatsimEventsReader; import net.bhl.matsim.uam.analysis.uamdemand.listeners.UAMListener; +import net.bhl.matsim.uam.analysis.trips.TripItem; import net.bhl.matsim.uam.analysis.uamdemand.UAMDemandItem; +/** + * This class is used to retrieve the a collection of {@link UAMDemandItem} by + * using a simulation events file as input + * + * @author Aitanm (Aitan Militão), RRothfeld (Raoul Rothfeld) + */ public class EventsUAMReader { final private UAMListener uamListener; @@ -16,6 +23,10 @@ public EventsUAMReader(UAMListener uamListener) { this.uamListener = uamListener; } + /** + * @param eventsPath the events file path + * @return A collection of {@link UAMDemandItem}. + */ public Collection readUAMData(String eventsPath) { EventsManager eventsManager = EventsUtils.createEventsManager(); eventsManager.addHandler(uamListener); diff --git a/src/main/java/net/bhl/matsim/uam/analysis/uamdemand/run/BatchConvertUAMDemandFromEvents.java b/src/main/java/net/bhl/matsim/uam/analysis/uamdemand/run/BatchConvertUAMDemandFromEvents.java index 7558b3e4..a54594dd 100644 --- a/src/main/java/net/bhl/matsim/uam/analysis/uamdemand/run/BatchConvertUAMDemandFromEvents.java +++ b/src/main/java/net/bhl/matsim/uam/analysis/uamdemand/run/BatchConvertUAMDemandFromEvents.java @@ -8,6 +8,13 @@ import org.apache.commons.io.FileUtils; +import net.bhl.matsim.uam.analysis.trips.run.ConvertTripsFromEvents; + +/** +* This script takes a specific folder path and runs {@link ConvertUAMDemandFromEvents} for all MATSim output folders within the provided base folder. +* +* @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) +*/ public class BatchConvertUAMDemandFromEvents { // PROVIDE PARENT FOLDER OF OUTPUT FOLDERS private static String eventfile = "output_events.xml"; diff --git a/src/main/java/net/bhl/matsim/uam/analysis/uamdemand/run/ConvertUAMDemandFromEvents.java b/src/main/java/net/bhl/matsim/uam/analysis/uamdemand/run/ConvertUAMDemandFromEvents.java index 65b504c5..078cc088 100644 --- a/src/main/java/net/bhl/matsim/uam/analysis/uamdemand/run/ConvertUAMDemandFromEvents.java +++ b/src/main/java/net/bhl/matsim/uam/analysis/uamdemand/run/ConvertUAMDemandFromEvents.java @@ -29,7 +29,7 @@ * -UAMConfig file; * -output file; * - * @author Aitan Militao + * @author Aitanm (Aitan Militão), RRothfeld (Raoul Rothfeld) */ public class ConvertUAMDemandFromEvents { diff --git a/src/main/java/net/bhl/matsim/uam/analysis/uamroutes/run/RunCalculateUAMRoutes.java b/src/main/java/net/bhl/matsim/uam/analysis/uamroutes/run/RunCalculateUAMRoutes.java index cc3af981..a1b703bd 100644 --- a/src/main/java/net/bhl/matsim/uam/analysis/uamroutes/run/RunCalculateUAMRoutes.java +++ b/src/main/java/net/bhl/matsim/uam/analysis/uamroutes/run/RunCalculateUAMRoutes.java @@ -29,6 +29,13 @@ import java.util.Map; import java.util.Set; +/** + * This script generates a CSV file containing the distance, travel time and utility between UAM stations. + * Necessary inputs are in the following order: + * -Network file; -UAMVehicles file; -output file; + * +* @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) + */ public class RunCalculateUAMRoutes { static private Map, UAMStation> stations; diff --git a/src/main/java/net/bhl/matsim/uam/analysis/uamstations/CSVUAMStationWriter.java b/src/main/java/net/bhl/matsim/uam/analysis/uamstations/CSVUAMStationWriter.java index 48fcac2d..f4549de1 100644 --- a/src/main/java/net/bhl/matsim/uam/analysis/uamstations/CSVUAMStationWriter.java +++ b/src/main/java/net/bhl/matsim/uam/analysis/uamstations/CSVUAMStationWriter.java @@ -7,6 +7,11 @@ import java.util.Collection; import java.util.HashSet; +/** +* This class writes a CSV file containing UAM Stations data. +* +* @author Aitanm (Aitan Militão), RRothfeld (Raoul Rothfeld) +*/ public class CSVUAMStationWriter { final private HashSet uamStations; final private String delimiter; diff --git a/src/main/java/net/bhl/matsim/uam/analysis/uamstations/UAMStationItem.java b/src/main/java/net/bhl/matsim/uam/analysis/uamstations/UAMStationItem.java index 2d34df90..f1a85274 100644 --- a/src/main/java/net/bhl/matsim/uam/analysis/uamstations/UAMStationItem.java +++ b/src/main/java/net/bhl/matsim/uam/analysis/uamstations/UAMStationItem.java @@ -4,6 +4,11 @@ import net.bhl.matsim.uam.infrastructure.UAMStation; +/** +* This class stores information about a UAM Station. +* +* @author Aitanm (Aitan Militão), RRothfeld (Raoul Rothfeld) +*/ public class UAMStationItem { public String name; public Id id; diff --git a/src/main/java/net/bhl/matsim/uam/analysis/uamstations/run/BatchConvertUAMStationsFromUAMVehicles.java b/src/main/java/net/bhl/matsim/uam/analysis/uamstations/run/BatchConvertUAMStationsFromUAMVehicles.java index cbbe2980..27e6b8ce 100644 --- a/src/main/java/net/bhl/matsim/uam/analysis/uamstations/run/BatchConvertUAMStationsFromUAMVehicles.java +++ b/src/main/java/net/bhl/matsim/uam/analysis/uamstations/run/BatchConvertUAMStationsFromUAMVehicles.java @@ -8,6 +8,13 @@ import org.apache.commons.io.FileUtils; +import net.bhl.matsim.uam.analysis.uamdemand.run.ConvertUAMDemandFromEvents; + +/** +* This script takes a specific folder path and runs {@link ConvertUAMStationsFromUAMVehicles} for all MATSim output folders within the provided base folder. +* +* @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) +*/ public class BatchConvertUAMStationsFromUAMVehicles { // PROVIDE PARENT FOLDER OF OUTPUT FOLDERS private static String vehiclefile = "output_uam_vehicles.xml"; diff --git a/src/main/java/net/bhl/matsim/uam/analysis/uamstations/run/ConvertUAMStationsFromUAMVehicles.java b/src/main/java/net/bhl/matsim/uam/analysis/uamstations/run/ConvertUAMStationsFromUAMVehicles.java index 35a39021..2186b32e 100644 --- a/src/main/java/net/bhl/matsim/uam/analysis/uamstations/run/ConvertUAMStationsFromUAMVehicles.java +++ b/src/main/java/net/bhl/matsim/uam/analysis/uamstations/run/ConvertUAMStationsFromUAMVehicles.java @@ -34,7 +34,7 @@ * -UAM Vehicles file * -output file; * - * @author Aitan Militao + * @author Aitanm (Aitan Militão), RRothfeld (Raoul Rothfeld) */ public class ConvertUAMStationsFromUAMVehicles { From 7a1244c07296dcf6ac64f53b54fff7bc8e90b201 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aitan=20Medeiros=20Milit=C3=A3o?= Date: Fri, 20 Sep 2019 14:26:41 +0200 Subject: [PATCH 2/5] -Documentation and formatting -Documenation of config, data and dispatcher folders. -Formating of analysis, config, data and dispatcher folders. --- .../uam/analysis/RunBatchConversions.java | 16 +- .../ConvertDemographicsFromPopulation.java | 4 +- .../analysis/traffic/CSVLinkStatsWriter.java | 15 +- .../uam/analysis/traffic/LinkStatsItem.java | 8 +- .../run/BatchConvertLinkStatsFromEvents.java | 12 +- .../run/ConvertLinkStatsFromEvents.java | 57 +++-- .../transit/CSVTransitTripWriter.java | 27 ++- .../uam/analysis/transit/TransitTripItem.java | 10 +- .../listeners/TransitTripListener.java | 8 +- .../listeners/TransitTripListenerItem.java | 9 +- .../readers/EventsTransitTripReader.java | 2 +- .../BatchConvertTransitTripsFromEvents.java | 26 ++- .../run/ConvertTransitTripsFromEvents.java | 17 +- .../RunCalculateCarTravelTimes.java | 16 +- .../RunCalculatePTTravelTimes.java | 8 +- .../uam/analysis/trips/CSVTripWriter.java | 8 +- .../uam/analysis/trips/DeckGLTripItem.java | 18 +- .../matsim/uam/analysis/trips/TripItem.java | 8 +- .../trips/listeners/DeckGLTripListener.java | 25 ++- .../trips/listeners/TripListener.java | 12 +- .../trips/listeners/TripListenerItem.java | 8 +- .../trips/readers/EventsTripReader.java | 8 +- .../run/BatchConvertTripsFromEvents.java | 23 +- .../run/BatchConvertTripsFromPopulation.java | 22 +- .../run/ConvertDeckGLTripsFromEvents.java | 32 ++- .../trips/run/ConvertTripsFromEvents.java | 8 +- .../trips/run/ConvertTripsFromPopulation.java | 8 +- .../trips/utils/BasicHomeActivityTypes.java | 2 +- .../trips/utils/HomeActivityTypes.java | 2 +- .../uamdemand/CSVUAMDemandWriter.java | 49 ++-- .../uam/analysis/uamdemand/UAMDemandItem.java | 13 +- .../uamdemand/listeners/UAMListener.java | 75 ++++--- .../uamdemand/listeners/UAMListenerItem.java | 16 +- .../uamdemand/readers/EventsUAMReader.java | 4 +- .../run/BatchConvertUAMDemandFromEvents.java | 28 ++- .../run/ConvertUAMDemandFromEvents.java | 20 +- .../uamroutes/run/RunCalculateUAMRoutes.java | 134 ++++++----- .../uamstations/CSVUAMStationWriter.java | 8 +- .../analysis/uamstations/UAMStationItem.java | 8 +- ...atchConvertUAMStationsFromUAMVehicles.java | 28 ++- .../ConvertUAMStationsFromUAMVehicles.java | 26 +-- .../bhl/matsim/uam/config/UAMConfigGroup.java | 36 +-- .../bhl/matsim/uam/config/package-info.java | 2 +- .../matsim/uam/data/UAMAccessRouteData.java | 4 +- .../net/bhl/matsim/uam/data/UAMFleetData.java | 5 + .../net/bhl/matsim/uam/data/UAMLoader.java | 2 +- .../net/bhl/matsim/uam/data/UAMRoute.java | 6 + .../net/bhl/matsim/uam/data/UAMRoutes.java | 3 +- .../uam/data/UAMStationConnectionGraph.java | 209 ++++++++++-------- .../matsim/uam/data/WaitingStationData.java | 7 +- .../bhl/matsim/uam/dispatcher/Dispatcher.java | 22 ++ .../UAMClosestVehicleDispatcher.java | 18 +- .../matsim/uam/dispatcher/UAMDispatcher.java | 9 +- .../uam/dispatcher/UAMDispatcherListener.java | 10 +- .../bhl/matsim/uam/dispatcher/UAMManager.java | 46 ++-- .../uam/dispatcher/UAMPooledDispatcher.java | 51 +++-- .../matsim/uam/dispatcher/package-info.java | 2 +- 57 files changed, 689 insertions(+), 571 deletions(-) diff --git a/src/main/java/net/bhl/matsim/uam/analysis/RunBatchConversions.java b/src/main/java/net/bhl/matsim/uam/analysis/RunBatchConversions.java index e7fb4663..10b93fb5 100644 --- a/src/main/java/net/bhl/matsim/uam/analysis/RunBatchConversions.java +++ b/src/main/java/net/bhl/matsim/uam/analysis/RunBatchConversions.java @@ -11,12 +11,16 @@ import net.bhl.matsim.uam.analysis.uamstations.run.BatchConvertUAMStationsFromUAMVehicles; /** -* This script takes a specific folder path and runs {@link BatchConvertUAMStationsFromUAMVehicles}, {@link BatchConvertUAMDemandFromEvents}, -* {@link BatchConvertTripsFromEvents}, {@link BatchConvertTransitTripsFromEvents}, {@link BatchConvertTripsFromPopulation} and -* {@link BatchConvertLinkStatsFromEvents} consecutively for all MATSim output folders within the provided base folder. -* -* @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) -*/ + * This script takes a specific folder path and runs + * {@link BatchConvertUAMStationsFromUAMVehicles}, + * {@link BatchConvertUAMDemandFromEvents}, {@link BatchConvertTripsFromEvents}, + * {@link BatchConvertTransitTripsFromEvents}, + * {@link BatchConvertTripsFromPopulation} and + * {@link BatchConvertLinkStatsFromEvents} consecutively for all MATSim output + * folders within the provided base folder. + * + * @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) + */ public class RunBatchConversions { public static void main(String[] args) throws IOException { diff --git a/src/main/java/net/bhl/matsim/uam/analysis/demographics/ConvertDemographicsFromPopulation.java b/src/main/java/net/bhl/matsim/uam/analysis/demographics/ConvertDemographicsFromPopulation.java index 044d5eec..1178be25 100644 --- a/src/main/java/net/bhl/matsim/uam/analysis/demographics/ConvertDemographicsFromPopulation.java +++ b/src/main/java/net/bhl/matsim/uam/analysis/demographics/ConvertDemographicsFromPopulation.java @@ -25,8 +25,8 @@ /** * This script Creates a demographics file by reading through and gathering * socio-demographic attributes from each person object in an existing - * population (or plan) file. Necessary inputs are in the following order: -plans - * file; -households file; -output file + * population (or plan) file. Necessary inputs are in the following order: + * -plans file; -households file; -output file * * @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) */ diff --git a/src/main/java/net/bhl/matsim/uam/analysis/traffic/CSVLinkStatsWriter.java b/src/main/java/net/bhl/matsim/uam/analysis/traffic/CSVLinkStatsWriter.java index 90e37ab9..5e28be5f 100644 --- a/src/main/java/net/bhl/matsim/uam/analysis/traffic/CSVLinkStatsWriter.java +++ b/src/main/java/net/bhl/matsim/uam/analysis/traffic/CSVLinkStatsWriter.java @@ -11,10 +11,11 @@ import java.util.TreeSet; /** -* This class writes a CSV file containing information of links for different times. -* -* @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) -*/ + * This class writes a CSV file containing information of links for different + * times. + * + * @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) + */ public class CSVLinkStatsWriter { final private Collection links; final private String delimiter; @@ -43,7 +44,7 @@ private String formatHeader() { header.add("link_id"); header.add("length_m"); header.add("freespeed_ms"); - + timeHeaders = new TreeSet(); for (LinkStatsItem link : links) { for (Integer i : link.timeDependantSpeed.keySet()) { @@ -52,7 +53,7 @@ private String formatHeader() { } for (Integer timeHead : timeHeaders) { - header.add("avgspeed_ms_at_H" + (int) (timeHead/ 3600) + "M" + (int) ((timeHead % 3600) / 60)); + header.add("avgspeed_ms_at_H" + (int) (timeHead / 3600) + "M" + (int) ((timeHead % 3600) / 60)); } return String.join(delimiter, header); @@ -63,7 +64,7 @@ private String formatLinkStatsItem(LinkStatsItem link) { row.add(link.linkId.toString()); row.add(String.valueOf(link.distance)); row.add(String.valueOf(link.freeSpeed)); - + for (Integer timeHead : timeHeaders) { if (link.timeDependantSpeed.containsKey(timeHead)) row.add(String.valueOf(link.timeDependantSpeed.get(timeHead))); diff --git a/src/main/java/net/bhl/matsim/uam/analysis/traffic/LinkStatsItem.java b/src/main/java/net/bhl/matsim/uam/analysis/traffic/LinkStatsItem.java index b3ec5ad9..4c0f79f0 100644 --- a/src/main/java/net/bhl/matsim/uam/analysis/traffic/LinkStatsItem.java +++ b/src/main/java/net/bhl/matsim/uam/analysis/traffic/LinkStatsItem.java @@ -8,10 +8,10 @@ import org.matsim.api.core.v01.population.Person; /** -* This class stores link information in a specific time. -* -* @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) -*/ + * This class stores link information in a specific time. + * + * @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) + */ public class LinkStatsItem { public Id linkId; public double distance; diff --git a/src/main/java/net/bhl/matsim/uam/analysis/traffic/run/BatchConvertLinkStatsFromEvents.java b/src/main/java/net/bhl/matsim/uam/analysis/traffic/run/BatchConvertLinkStatsFromEvents.java index 547e3811..5b4c7075 100644 --- a/src/main/java/net/bhl/matsim/uam/analysis/traffic/run/BatchConvertLinkStatsFromEvents.java +++ b/src/main/java/net/bhl/matsim/uam/analysis/traffic/run/BatchConvertLinkStatsFromEvents.java @@ -2,7 +2,6 @@ import java.io.File; - import java.io.IOException; import java.nio.file.Paths; import java.util.Collection; @@ -11,11 +10,12 @@ import org.apache.commons.io.FileUtils; /** -* This script takes a specific folder path and runs {@link ConvertLinkStatsFromEvents} for all -* all MATSim output folders within the provided base folder. -* -* @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) -*/ + * This script takes a specific folder path and runs + * {@link ConvertLinkStatsFromEvents} for all all MATSim output folders within + * the provided base folder. + * + * @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) + */ public class BatchConvertLinkStatsFromEvents { // PROVIDE PARENT FOLDER OF OUTPUT FOLDERS private static String eventfile = "output_events.xml"; diff --git a/src/main/java/net/bhl/matsim/uam/analysis/traffic/run/ConvertLinkStatsFromEvents.java b/src/main/java/net/bhl/matsim/uam/analysis/traffic/run/ConvertLinkStatsFromEvents.java index 385d7d92..1569f019 100644 --- a/src/main/java/net/bhl/matsim/uam/analysis/traffic/run/ConvertLinkStatsFromEvents.java +++ b/src/main/java/net/bhl/matsim/uam/analysis/traffic/run/ConvertLinkStatsFromEvents.java @@ -6,7 +6,6 @@ import java.util.HashMap; import java.util.HashSet; import java.util.Map; -import java.util.Set; import org.matsim.api.core.v01.network.Link; import org.matsim.api.core.v01.network.Network; @@ -15,7 +14,6 @@ import org.matsim.core.events.EventsReaderXMLv1; import org.matsim.core.events.EventsUtils; import org.matsim.core.network.NetworkUtils; -import org.matsim.core.network.algorithms.TransportModeNetworkFilter; import org.matsim.core.network.io.MatsimNetworkReader; import org.matsim.core.trafficmonitoring.TravelTimeCalculator; @@ -23,15 +21,13 @@ import net.bhl.matsim.uam.analysis.traffic.LinkStatsItem; /** -* This script generates a csv file containing the average speed per link per hour of the input network from an output simulation events file. -* trips performed from an events output file. -* Necessary inputs are in the following order: -* -Network file; -* -Events file; -* -output file; -* -* @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) -*/ + * This script generates a csv file containing the average speed per link per + * hour of the input network from an output simulation events file. trips + * performed from an events output file. Necessary inputs are in the following + * order: -Network file; -Events file; -output file; + * + * @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) + */ public class ConvertLinkStatsFromEvents { static int timeBinSize = 3600; @@ -50,34 +46,31 @@ static public void main(String[] args) throws IOException { static public void extract(String network, String events, String outfile) throws IOException { Network netw = NetworkUtils.createNetwork(); new MatsimNetworkReader(netw).readFile(network); - + TravelTimeCalculatorConfigGroup tconfig = new TravelTimeCalculatorConfigGroup(); - tconfig.setAnalyzedModes(analyzedMode); // TODO does nothing? + tconfig.setAnalyzedModes(analyzedMode); // TODO does nothing? tconfig.setCalculateLinkToLinkTravelTimes(calculateLinkToLinkTravelTimes); tconfig.setCalculateLinkTravelTimes(calculateLinkTravelTimes); tconfig.setFilterModes(filterModes); // TODO does nothing? tconfig.setMaxTime(maxTime); tconfig.setTraveltimeBinSize(timeBinSize); - + TravelTimeCalculator ttc = TravelTimeCalculator.create(netw, tconfig); - EventsManager manager = EventsUtils.createEventsManager(); + EventsManager manager = EventsUtils.createEventsManager(); manager.addHandler(ttc); - EventsReaderXMLv1 eventsReader = new EventsReaderXMLv1(manager); - eventsReader.readFile(events); - - Collection linkStats = new HashSet<>(); - for (Link link : netw.getLinks().values()) { - Map timeDependantSpeeds = new HashMap<>(); - for (int time = 0 + timeBinSize / 2; time < maxTime; time += timeBinSize) { - timeDependantSpeeds.put(time, link.getLength() / ttc.getLinkTravelTime(link, time)); - } - - linkStats.add(new LinkStatsItem(link.getId(), - link.getLength(), - link.getFreespeed(), - timeDependantSpeeds)); - } - - new CSVLinkStatsWriter(linkStats).write(outfile); + EventsReaderXMLv1 eventsReader = new EventsReaderXMLv1(manager); + eventsReader.readFile(events); + + Collection linkStats = new HashSet<>(); + for (Link link : netw.getLinks().values()) { + Map timeDependantSpeeds = new HashMap<>(); + for (int time = 0 + timeBinSize / 2; time < maxTime; time += timeBinSize) { + timeDependantSpeeds.put(time, link.getLength() / ttc.getLinkTravelTime(link, time)); + } + + linkStats.add(new LinkStatsItem(link.getId(), link.getLength(), link.getFreespeed(), timeDependantSpeeds)); + } + + new CSVLinkStatsWriter(linkStats).write(outfile); } } diff --git a/src/main/java/net/bhl/matsim/uam/analysis/transit/CSVTransitTripWriter.java b/src/main/java/net/bhl/matsim/uam/analysis/transit/CSVTransitTripWriter.java index 72c12b0a..89ad6f1d 100644 --- a/src/main/java/net/bhl/matsim/uam/analysis/transit/CSVTransitTripWriter.java +++ b/src/main/java/net/bhl/matsim/uam/analysis/transit/CSVTransitTripWriter.java @@ -7,10 +7,11 @@ import java.util.Collection; /** -* This class writes a CSV file containing information about trips performed by transit. -* -* @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) -*/ + * This class writes a CSV file containing information about trips performed by + * transit. + * + * @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) + */ public class CSVTransitTripWriter { final private Collection trips; final private String delimiter; @@ -48,13 +49,15 @@ private String formatHeader() { } private String formatTrip(TransitTripItem trip) { - return String.join(delimiter, new String[] { trip.personId.toString(), String.valueOf(trip.personTripId), - String.valueOf(trip.origin.getX()), String.valueOf(trip.origin.getY()), - String.valueOf(trip.destination.getX()), String.valueOf(trip.destination.getY()), - String.valueOf(trip.startTime), String.valueOf(trip.inVehicleTime), String.valueOf(trip.waitingTime), - String.valueOf(trip.transferTime), String.valueOf(trip.inVehicleDistance), - String.valueOf(trip.inVehicleCrowflyDistance), String.valueOf(trip.transferDistance), - String.valueOf(trip.transferCrowflyDistance), String.valueOf(trip.numberOfTransfers), - String.valueOf(trip.crowflyDistance), String.valueOf(trip.firstWaitingTime), String.valueOf(trip.routing) }); + return String.join(delimiter, + new String[] { trip.personId.toString(), String.valueOf(trip.personTripId), + String.valueOf(trip.origin.getX()), String.valueOf(trip.origin.getY()), + String.valueOf(trip.destination.getX()), String.valueOf(trip.destination.getY()), + String.valueOf(trip.startTime), String.valueOf(trip.inVehicleTime), + String.valueOf(trip.waitingTime), String.valueOf(trip.transferTime), + String.valueOf(trip.inVehicleDistance), String.valueOf(trip.inVehicleCrowflyDistance), + String.valueOf(trip.transferDistance), String.valueOf(trip.transferCrowflyDistance), + String.valueOf(trip.numberOfTransfers), String.valueOf(trip.crowflyDistance), + String.valueOf(trip.firstWaitingTime), String.valueOf(trip.routing) }); } } diff --git a/src/main/java/net/bhl/matsim/uam/analysis/transit/TransitTripItem.java b/src/main/java/net/bhl/matsim/uam/analysis/transit/TransitTripItem.java index aaef4d0e..99848891 100644 --- a/src/main/java/net/bhl/matsim/uam/analysis/transit/TransitTripItem.java +++ b/src/main/java/net/bhl/matsim/uam/analysis/transit/TransitTripItem.java @@ -5,10 +5,10 @@ import org.matsim.api.core.v01.population.Person; /** -* This class stores information about a trip performed by transit. -* -* @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) -*/ + * This class stores information about a trip performed by transit. + * + * @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) + */ public class TransitTripItem { public Id personId = null; public int personTripId = -1; @@ -30,7 +30,7 @@ public class TransitTripItem { public double transferCrowflyDistance = 0.0; public int numberOfTransfers = -1; - + public String routing = ""; public double firstWaitingTime = Double.NaN; diff --git a/src/main/java/net/bhl/matsim/uam/analysis/transit/listeners/TransitTripListener.java b/src/main/java/net/bhl/matsim/uam/analysis/transit/listeners/TransitTripListener.java index 15b4d883..391a2f7e 100644 --- a/src/main/java/net/bhl/matsim/uam/analysis/transit/listeners/TransitTripListener.java +++ b/src/main/java/net/bhl/matsim/uam/analysis/transit/listeners/TransitTripListener.java @@ -31,10 +31,10 @@ import net.bhl.matsim.uam.analysis.transit.TransitTripItem; /** -* A listener that retrieves information from transit events. -* -* @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) -*/ + * A listener that retrieves information from transit events. + * + * @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) + */ public class TransitTripListener implements ActivityStartEventHandler, ActivityEndEventHandler, PersonDepartureEventHandler, PersonArrivalEventHandler, GenericEventHandler, TeleportationArrivalEventHandler, PersonStuckEventHandler { diff --git a/src/main/java/net/bhl/matsim/uam/analysis/transit/listeners/TransitTripListenerItem.java b/src/main/java/net/bhl/matsim/uam/analysis/transit/listeners/TransitTripListenerItem.java index 3df15c0f..fe02beaa 100644 --- a/src/main/java/net/bhl/matsim/uam/analysis/transit/listeners/TransitTripListenerItem.java +++ b/src/main/java/net/bhl/matsim/uam/analysis/transit/listeners/TransitTripListenerItem.java @@ -5,10 +5,11 @@ import net.bhl.matsim.uam.analysis.transit.TransitTripItem; /** -* This class stores information about a transit trip that is being read by the {@link TransitTripListener}. -* -* @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) -*/ + * This class stores information about a transit trip that is being read by the + * {@link TransitTripListener}. + * + * @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) + */ public class TransitTripListenerItem extends TransitTripItem { public String mode = "unknown"; public Coord intermediateOrigin; diff --git a/src/main/java/net/bhl/matsim/uam/analysis/transit/readers/EventsTransitTripReader.java b/src/main/java/net/bhl/matsim/uam/analysis/transit/readers/EventsTransitTripReader.java index 6e598164..de163986 100644 --- a/src/main/java/net/bhl/matsim/uam/analysis/transit/readers/EventsTransitTripReader.java +++ b/src/main/java/net/bhl/matsim/uam/analysis/transit/readers/EventsTransitTripReader.java @@ -26,7 +26,7 @@ public EventsTransitTripReader(TransitTripListener tripListener) { } /** - * @param eventsPath the events file path + * @param eventsPath the events file path * @return A collection of {@link TransitTripItem}. */ public Collection readTrips(String eventsPath) { diff --git a/src/main/java/net/bhl/matsim/uam/analysis/transit/run/BatchConvertTransitTripsFromEvents.java b/src/main/java/net/bhl/matsim/uam/analysis/transit/run/BatchConvertTransitTripsFromEvents.java index dc9aa4c8..8aa021a6 100644 --- a/src/main/java/net/bhl/matsim/uam/analysis/transit/run/BatchConvertTransitTripsFromEvents.java +++ b/src/main/java/net/bhl/matsim/uam/analysis/transit/run/BatchConvertTransitTripsFromEvents.java @@ -9,11 +9,12 @@ import org.apache.commons.io.FileUtils; /** -* This script takes a specific folder path and runs {@link ConvertTransitTripsFromEvents} for all -* MATSim output folders within the provided base folder. -* -* @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) -*/ + * This script takes a specific folder path and runs + * {@link ConvertTransitTripsFromEvents} for all MATSim output folders within + * the provided base folder. + * + * @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) + */ public class BatchConvertTransitTripsFromEvents { // PROVIDE PARENT FOLDER OF OUTPUT FOLDERS private static String eventfile = "output_events.xml"; @@ -22,25 +23,26 @@ public class BatchConvertTransitTripsFromEvents { public static void main(final String[] args) throws IOException { File folder = Paths.get(args[0]).toFile(); - String[] ext = {"gz", "xml"}; + String[] ext = { "gz", "xml" }; Collection potentialFiles = FileUtils.listFiles(folder, ext, true); - - String[] ecl = {"csv"}; + + String[] ecl = { "csv" }; Collection alreadyExistingFiles = FileUtils.listFiles(folder, ecl, true); Collection alreadyExistingFileNames = new HashSet(); for (File f : alreadyExistingFiles) { alreadyExistingFileNames.add(f.getAbsolutePath()); } - + for (File f : potentialFiles) { - if (!f.getName().contains(eventfile) || alreadyExistingFileNames.contains(f.getAbsolutePath() + "_transit.csv")) + if (!f.getName().contains(eventfile) + || alreadyExistingFileNames.contains(f.getAbsolutePath() + "_transit.csv")) continue; - + System.err.println("Working on: " + f.getAbsolutePath()); String network = f.getAbsolutePath().replace(eventfile, networkfile); ConvertTransitTripsFromEvents.extract(network, f.getAbsolutePath(), f.getAbsolutePath() + "_transit.csv"); } - + System.err.println("done."); } } diff --git a/src/main/java/net/bhl/matsim/uam/analysis/transit/run/ConvertTransitTripsFromEvents.java b/src/main/java/net/bhl/matsim/uam/analysis/transit/run/ConvertTransitTripsFromEvents.java index 0bd65596..b4e2cc1e 100644 --- a/src/main/java/net/bhl/matsim/uam/analysis/transit/run/ConvertTransitTripsFromEvents.java +++ b/src/main/java/net/bhl/matsim/uam/analysis/transit/run/ConvertTransitTripsFromEvents.java @@ -16,15 +16,12 @@ import net.bhl.matsim.uam.analysis.transit.readers.EventsTransitTripReader; /** -* This script generates a csv file containing information of all public transport -* trips performed from an events output file. -* Necessary inputs are in the following order: -* -Network file; -* -Events file; -* -output file; -* -* @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) -*/ + * This script generates a csv file containing information of all public + * transport trips performed from an events output file. Necessary inputs are in + * the following order: -Network file; -Events file; -output file; + * + * @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) + */ public class ConvertTransitTripsFromEvents { static public void main(String[] args) throws IOException { @@ -32,7 +29,7 @@ static public void main(String[] args) throws IOException { extract(args[0], args[1], args[2]); System.out.println("done."); } - + static public void extract(String networkfile, String events, String outfile) throws IOException { // PROVIDE: NETWORK EVENTS OUTFILE-NAME Network network = NetworkUtils.createNetwork(); diff --git a/src/main/java/net/bhl/matsim/uam/analysis/traveltimes/RunCalculateCarTravelTimes.java b/src/main/java/net/bhl/matsim/uam/analysis/traveltimes/RunCalculateCarTravelTimes.java index 12d797e9..8999a43e 100644 --- a/src/main/java/net/bhl/matsim/uam/analysis/traveltimes/RunCalculateCarTravelTimes.java +++ b/src/main/java/net/bhl/matsim/uam/analysis/traveltimes/RunCalculateCarTravelTimes.java @@ -145,15 +145,15 @@ public static void main(String[] args) throws Exception { int counter = 1; for (TripItem trip : trips) { if (trips.size() < 100 || counter % (trips.size() / 100) == 0) - log.info("Calculation completion: " + counter + "/" + trips.size() + - " (" + String.format("%.0f", (double) counter / trips.size() * 100) + "%)."); + log.info("Calculation completion: " + counter + "/" + trips.size() + " (" + + String.format("%.0f", (double) counter / trips.size() * 100) + "%)."); try { Link from = NetworkUtils.getNearestLink(network, trip.origin); Link to = NetworkUtils.getNearestLink(network, trip.destination); trip.travelTime = estimateTravelTime(from, to, trip.departureTime, networkCar, pathCalculator); } catch (NullPointerException e) { - log.warn("No travel time estimation could be made for trip #" + counter + " from " + trip.origin + - " to " + trip.destination + " at departure time " + trip.departureTime + "!"); + log.warn("No travel time estimation could be made for trip #" + counter + " from " + trip.origin + + " to " + trip.destination + " at departure time " + trip.departureTime + "!"); failedTrips.add(trip); } @@ -183,9 +183,11 @@ private static double estimateTravelTime(Link from, Link to, double departureTim to = NetworkUtils.getNearestLinkExactly(carNetwork, to.getCoord()); Future path = pathCalculator.calcLeastCostPath(from.getFromNode(), to.getToNode(), departureTime, null, null); - /* for (Link link : path.get().links) { log.warn("Link ID: " + link.getId() + - " Capacity: "+ link.getCapacity() + " FlowCapacityPerSec: " + - link.getFlowCapacityPerSec() +" FreeSpeed: "+link.getFreespeed()); }*/ + /* + * for (Link link : path.get().links) { log.warn("Link ID: " + link.getId() + + * " Capacity: "+ link.getCapacity() + " FlowCapacityPerSec: " + + * link.getFlowCapacityPerSec() +" FreeSpeed: "+link.getFreespeed()); } + */ return path.get().travelTime; } diff --git a/src/main/java/net/bhl/matsim/uam/analysis/traveltimes/RunCalculatePTTravelTimes.java b/src/main/java/net/bhl/matsim/uam/analysis/traveltimes/RunCalculatePTTravelTimes.java index 6600d1dc..b2f7b607 100644 --- a/src/main/java/net/bhl/matsim/uam/analysis/traveltimes/RunCalculatePTTravelTimes.java +++ b/src/main/java/net/bhl/matsim/uam/analysis/traveltimes/RunCalculatePTTravelTimes.java @@ -156,15 +156,15 @@ public static void main(String[] args) throws Exception { int counter = 1; for (TripItem trip : trips) { if (trips.size() < 100 || counter % (trips.size() / 100) == 0) - log.info("Calculation completion: " + counter + "/" + trips.size() + - " (" + String.format("%.0f", (double) counter / trips.size() * 100) + "%)."); + log.info("Calculation completion: " + counter + "/" + trips.size() + " (" + + String.format("%.0f", (double) counter / trips.size() * 100) + "%)."); try { Link from = NetworkUtils.getNearestLink(network, trip.origin); Link to = NetworkUtils.getNearestLink(network, trip.destination); trip.travelTime = estimateTravelTime(from, to, trip.departureTime, router); } catch (NullPointerException e) { - log.warn("No travel time estimation could be made for trip #" + counter + " from " + trip.origin + - " to " + trip.destination + " at departure time " + trip.departureTime + "!"); + log.warn("No travel time estimation could be made for trip #" + counter + " from " + trip.origin + + " to " + trip.destination + " at departure time " + trip.departureTime + "!"); failedTrips.add(trip); } diff --git a/src/main/java/net/bhl/matsim/uam/analysis/trips/CSVTripWriter.java b/src/main/java/net/bhl/matsim/uam/analysis/trips/CSVTripWriter.java index c24c4ac2..18367daf 100644 --- a/src/main/java/net/bhl/matsim/uam/analysis/trips/CSVTripWriter.java +++ b/src/main/java/net/bhl/matsim/uam/analysis/trips/CSVTripWriter.java @@ -7,10 +7,10 @@ import java.util.Collection; /** -* This class writes a CSV file containing information about each trip. -* -* @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) -*/ + * This class writes a CSV file containing information about each trip. + * + * @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) + */ public class CSVTripWriter { final private Collection trips; final private String delimiter; diff --git a/src/main/java/net/bhl/matsim/uam/analysis/trips/DeckGLTripItem.java b/src/main/java/net/bhl/matsim/uam/analysis/trips/DeckGLTripItem.java index 0efa2c8e..5b571df7 100644 --- a/src/main/java/net/bhl/matsim/uam/analysis/trips/DeckGLTripItem.java +++ b/src/main/java/net/bhl/matsim/uam/analysis/trips/DeckGLTripItem.java @@ -15,10 +15,10 @@ import com.vividsolutions.jts.geom.Coordinate; /** -* This class stores information about a trip for deck.gl format. -* -* @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) -*/ + * This class stores information about a trip for deck.gl format. + * + * @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) + */ public class DeckGLTripItem { public Coord location; public long time; @@ -27,7 +27,7 @@ public class DeckGLTripItem { public DeckGLTripItem(Coord location, long time) { this(location, time, 0); } - + public DeckGLTripItem(Coord location, long time, long timeShift) { this.location = location; this.time = time; @@ -38,10 +38,10 @@ public DeckGLTripItem(Coord location, long time, long timeShift) { public String toString() { return "[" + location.getX() + "," + location.getY() + "," + time + "]"; } - + public String convert(String inputEPSGCode, String outputEPSGCode, long timeMultiplier) { Coordinate convertedSource = null; - + CoordinateReferenceSystem crsIn = null; CoordinateReferenceSystem crsOut = null; try { @@ -50,7 +50,7 @@ public String convert(String inputEPSGCode, String outputEPSGCode, long timeMult MathTransform transform = CRS.findMathTransform(crsIn, crsOut); Coordinate source = new Coordinate(location.getX(), location.getY()); convertedSource = JTS.transform(source, null, transform); - + } catch (IllegalArgumentException e) { System.err.println("Old geotools version is not compatible with Java 9"); e.printStackTrace(); @@ -60,7 +60,7 @@ public String convert(String inputEPSGCode, String outputEPSGCode, long timeMult } catch (TransformException e) { e.printStackTrace(); } - + return "[" + convertedSource.x + "," + convertedSource.y + "," + ((time - timeShift) * timeMultiplier) + "]"; } } diff --git a/src/main/java/net/bhl/matsim/uam/analysis/trips/TripItem.java b/src/main/java/net/bhl/matsim/uam/analysis/trips/TripItem.java index 36ededff..837a7d43 100644 --- a/src/main/java/net/bhl/matsim/uam/analysis/trips/TripItem.java +++ b/src/main/java/net/bhl/matsim/uam/analysis/trips/TripItem.java @@ -5,10 +5,10 @@ import org.matsim.api.core.v01.population.Person; /** -* This class stores information about a trip. -* -* @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) -*/ + * This class stores information about a trip. + * + * @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) + */ public class TripItem { public Id personId; public int personTripId; diff --git a/src/main/java/net/bhl/matsim/uam/analysis/trips/listeners/DeckGLTripListener.java b/src/main/java/net/bhl/matsim/uam/analysis/trips/listeners/DeckGLTripListener.java index b3de3472..b11a7129 100644 --- a/src/main/java/net/bhl/matsim/uam/analysis/trips/listeners/DeckGLTripListener.java +++ b/src/main/java/net/bhl/matsim/uam/analysis/trips/listeners/DeckGLTripListener.java @@ -17,10 +17,11 @@ import net.bhl.matsim.uam.analysis.trips.DeckGLTripItem; /** -* A listener that retrieves information from trip events and stores in <{@link DeckGLTripItem} format. -* -* @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) -*/ + * A listener that retrieves information from trip events and stores in + * <{@link DeckGLTripItem} format. + * + * @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) + */ public class DeckGLTripListener implements LinkEnterEventHandler, LinkLeaveEventHandler { final private Map, List> deckGLTrips; final private Network network; @@ -30,14 +31,14 @@ public class DeckGLTripListener implements LinkEnterEventHandler, LinkLeaveEvent public DeckGLTripListener(Network network) { this(network, 0, Long.MAX_VALUE); } - + public DeckGLTripListener(Network network, long minTime, long maxTime) { this.deckGLTrips = new HashMap, List>(); this.network = network; this.minTime = minTime; this.maxTime = maxTime; } - + public Map, List> getDeckGLTripItems() { return deckGLTrips; } @@ -50,15 +51,15 @@ public void reset(int iteration) { @Override public void handleEvent(LinkEnterEvent event) { long time = (long) event.getTime(); - + if (minTime <= time && time <= maxTime) { List trips = deckGLTrips.get(event.getVehicleId()); - + if (trips == null) { trips = new LinkedList(); deckGLTrips.put(event.getVehicleId(), trips); } - + Coord location = network.getLinks().get(event.getLinkId()).getFromNode().getCoord(); trips.add(new DeckGLTripItem(location, time, minTime)); } @@ -67,15 +68,15 @@ public void handleEvent(LinkEnterEvent event) { @Override public void handleEvent(LinkLeaveEvent event) { long time = (long) event.getTime(); - + if (minTime <= time && time <= maxTime) { List trips = deckGLTrips.get(event.getVehicleId()); - + if (trips == null) { trips = new LinkedList(); deckGLTrips.put(event.getVehicleId(), trips); } - + Coord location = network.getLinks().get(event.getLinkId()).getToNode().getCoord(); trips.add(new DeckGLTripItem(location, time, minTime)); } diff --git a/src/main/java/net/bhl/matsim/uam/analysis/trips/listeners/TripListener.java b/src/main/java/net/bhl/matsim/uam/analysis/trips/listeners/TripListener.java index 39c03759..7033bea3 100644 --- a/src/main/java/net/bhl/matsim/uam/analysis/trips/listeners/TripListener.java +++ b/src/main/java/net/bhl/matsim/uam/analysis/trips/listeners/TripListener.java @@ -38,10 +38,10 @@ import net.bhl.matsim.uam.analysis.trips.utils.HomeActivityTypes; /** -* A listener that retrieves information from trip events. -* -* @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) -*/ + * A listener that retrieves information from trip events. + * + * @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) + */ public class TripListener implements ActivityStartEventHandler, ActivityEndEventHandler, PersonDepartureEventHandler, PersonEntersVehicleEventHandler, PersonLeavesVehicleEventHandler, LinkEnterEventHandler, PersonStuckEventHandler, TeleportationArrivalEventHandler { @@ -174,9 +174,9 @@ public void handleEvent(LinkEnterEvent event) { } private double getNetworkDistance(TripListenerItem trip) { - + // TODO RAOUL CHECK FOR HOW UAM IS DONE HERE - + if (networkRouteModes.contains(mainModeIdentifier.identifyMainMode(trip.elements))) { double distance = 0.0; diff --git a/src/main/java/net/bhl/matsim/uam/analysis/trips/listeners/TripListenerItem.java b/src/main/java/net/bhl/matsim/uam/analysis/trips/listeners/TripListenerItem.java index 64e3b35e..15a62d60 100644 --- a/src/main/java/net/bhl/matsim/uam/analysis/trips/listeners/TripListenerItem.java +++ b/src/main/java/net/bhl/matsim/uam/analysis/trips/listeners/TripListenerItem.java @@ -12,10 +12,10 @@ import net.bhl.matsim.uam.analysis.trips.TripItem; /** -* This class stores information about a trip performed. -* -* @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) -*/ + * This class stores information about a trip performed. + * + * @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) + */ public class TripListenerItem extends TripItem { public List elements = new LinkedList<>(); public List> route = new LinkedList<>(); diff --git a/src/main/java/net/bhl/matsim/uam/analysis/trips/readers/EventsTripReader.java b/src/main/java/net/bhl/matsim/uam/analysis/trips/readers/EventsTripReader.java index c182862f..57884358 100644 --- a/src/main/java/net/bhl/matsim/uam/analysis/trips/readers/EventsTripReader.java +++ b/src/main/java/net/bhl/matsim/uam/analysis/trips/readers/EventsTripReader.java @@ -11,18 +11,18 @@ import net.bhl.matsim.uam.analysis.trips.listeners.TripListener; /** - * This class is used to retrieve the a collection of {@link TripItem} by - * using a simulation events file as input + * This class is used to retrieve the a collection of {@link TripItem} by using + * a simulation events file as input * * @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) */ public class EventsTripReader { final private TripListener tripListener; - + public EventsTripReader(TripListener tripListener) { this.tripListener = tripListener; } - + /** * @param eventsPath the events file path * @return A collection of {@link TripItem}. diff --git a/src/main/java/net/bhl/matsim/uam/analysis/trips/run/BatchConvertTripsFromEvents.java b/src/main/java/net/bhl/matsim/uam/analysis/trips/run/BatchConvertTripsFromEvents.java index eb7f5029..4c6352ea 100644 --- a/src/main/java/net/bhl/matsim/uam/analysis/trips/run/BatchConvertTripsFromEvents.java +++ b/src/main/java/net/bhl/matsim/uam/analysis/trips/run/BatchConvertTripsFromEvents.java @@ -9,11 +9,12 @@ import org.apache.commons.io.FileUtils; /** -* This script takes a specific folder path and runs {@link ConvertTripsFromEvents} for all -* MATSim output folders within the provided base folder. -* -* @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) -*/ + * This script takes a specific folder path and runs + * {@link ConvertTripsFromEvents} for all MATSim output folders within the + * provided base folder. + * + * @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) + */ public class BatchConvertTripsFromEvents { // PROVIDE PARENT FOLDER OF OUTPUT FOLDERS private static String eventfile = "output_events.xml"; @@ -22,25 +23,25 @@ public class BatchConvertTripsFromEvents { public static void main(final String[] args) throws IOException { File folder = Paths.get(args[0]).toFile(); - String[] ext = {"gz", "xml"}; + String[] ext = { "gz", "xml" }; Collection potentialFiles = FileUtils.listFiles(folder, ext, true); - - String[] ecl = {"csv"}; + + String[] ecl = { "csv" }; Collection alreadyExistingFiles = FileUtils.listFiles(folder, ecl, true); Collection alreadyExistingFileNames = new HashSet(); for (File f : alreadyExistingFiles) { alreadyExistingFileNames.add(f.getAbsolutePath()); } - + for (File f : potentialFiles) { if (!f.getName().contains(eventfile) || alreadyExistingFileNames.contains(f.getAbsolutePath() + ".csv")) continue; - + System.err.println("Working on: " + f.getAbsolutePath()); String network = f.getAbsolutePath().replace(eventfile, networkfile); ConvertTripsFromEvents.extract(network, f.getAbsolutePath(), f.getAbsolutePath() + ".csv"); } - + System.err.println("done."); } } diff --git a/src/main/java/net/bhl/matsim/uam/analysis/trips/run/BatchConvertTripsFromPopulation.java b/src/main/java/net/bhl/matsim/uam/analysis/trips/run/BatchConvertTripsFromPopulation.java index db46897d..e5d22e7f 100644 --- a/src/main/java/net/bhl/matsim/uam/analysis/trips/run/BatchConvertTripsFromPopulation.java +++ b/src/main/java/net/bhl/matsim/uam/analysis/trips/run/BatchConvertTripsFromPopulation.java @@ -9,10 +9,12 @@ import org.apache.commons.io.FileUtils; /** -* This script takes a specific folder path and runs {@link ConvertTripsFromPopulation} for all MATSim output folders within the provided base folder. -* -* @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) -*/ + * This script takes a specific folder path and runs + * {@link ConvertTripsFromPopulation} for all MATSim output folders within the + * provided base folder. + * + * @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) + */ public class BatchConvertTripsFromPopulation { // PROVIDE PARENT FOLDER OF OUTPUT FOLDERS private static String eventfile = "output_plans.xml"; @@ -21,25 +23,25 @@ public class BatchConvertTripsFromPopulation { public static void main(final String[] args) throws IOException { File folder = Paths.get(args[0]).toFile(); - String[] ext = {"gz", "xml"}; + String[] ext = { "gz", "xml" }; Collection potentialFiles = FileUtils.listFiles(folder, ext, true); - - String[] ecl = {"csv"}; + + String[] ecl = { "csv" }; Collection alreadyExistingFiles = FileUtils.listFiles(folder, ecl, true); Collection alreadyExistingFileNames = new HashSet(); for (File f : alreadyExistingFiles) { alreadyExistingFileNames.add(f.getAbsolutePath()); } - + for (File f : potentialFiles) { if (!f.getName().contains(eventfile) || alreadyExistingFileNames.contains(f.getAbsolutePath() + ".csv")) continue; - + System.err.println("Working on: " + f.getAbsolutePath()); String network = f.getAbsolutePath().replace(eventfile, networkfile); ConvertTripsFromPopulation.extract(network, f.getAbsolutePath(), f.getAbsolutePath() + ".csv"); } - + System.err.println("done."); } } diff --git a/src/main/java/net/bhl/matsim/uam/analysis/trips/run/ConvertDeckGLTripsFromEvents.java b/src/main/java/net/bhl/matsim/uam/analysis/trips/run/ConvertDeckGLTripsFromEvents.java index 0e45af85..8937de3f 100644 --- a/src/main/java/net/bhl/matsim/uam/analysis/trips/run/ConvertDeckGLTripsFromEvents.java +++ b/src/main/java/net/bhl/matsim/uam/analysis/trips/run/ConvertDeckGLTripsFromEvents.java @@ -22,27 +22,25 @@ /** * This script convert events file to deck.gl-readable trips input file. - * Necessary inputs are in the following order: - * -Network file; -Events file; - * Optional inputs: - * -EPSG:EPSG-code (Example: EPSG:2154) + * Necessary inputs are in the following order: -Network file; -Events file; + * Optional inputs: -EPSG:EPSG-code (Example: EPSG:2154) * -* @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) + * @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) */ public class ConvertDeckGLTripsFromEvents { - + private static String inCRS = "EPSG:2154"; private static String outCRS = "EPSG:4326"; private static long deckGLanimationSpeed = 1; private static long minTime = 21600; private static long maxTime = minTime + (1 * 3600); - + static public void main(String[] args) throws IOException { // PROVIDE: NETWORK EVENTS INPUT_CRS* // * optional if (args.length == 3) inCRS = args[2]; - + extract(args[0], args[1]); System.out.println("done."); } @@ -66,27 +64,27 @@ static public void extract(String network, String events) throws IOException { } FileWriter fw = new FileWriter(file); bw = new BufferedWriter(fw); - + bw.write("[" + System.lineSeparator()); - + for (Iterator> it = deckGLTrips.keySet().iterator(); it.hasNext();) { Id id = it.next(); int vendor = id.toString().contains("uam") ? 1 : 0; bw.write("{\"vendor\": " + vendor + ", "); bw.write("\"segments\": ["); - - for(Iterator itemIter = deckGLTrips.get(id).iterator(); itemIter.hasNext();) { + + for (Iterator itemIter = deckGLTrips.get(id).iterator(); itemIter.hasNext();) { DeckGLTripItem item = itemIter.next(); bw.write(item.convert(inCRS, outCRS, deckGLanimationSpeed)); - + if (itemIter.hasNext()) bw.write(","); } - + bw.write("]}"); - - if (it.hasNext()) - bw.write("," + System.lineSeparator()); + + if (it.hasNext()) + bw.write("," + System.lineSeparator()); } bw.write(System.lineSeparator() + "]"); diff --git a/src/main/java/net/bhl/matsim/uam/analysis/trips/run/ConvertTripsFromEvents.java b/src/main/java/net/bhl/matsim/uam/analysis/trips/run/ConvertTripsFromEvents.java index a1b1ac53..56601709 100644 --- a/src/main/java/net/bhl/matsim/uam/analysis/trips/run/ConvertTripsFromEvents.java +++ b/src/main/java/net/bhl/matsim/uam/analysis/trips/run/ConvertTripsFromEvents.java @@ -23,11 +23,11 @@ import net.bhl.matsim.uam.router.UAMMainModeIdentifier; /** - * This script creates a trips file by reading through and gathering trip information from an existing events file. - * Necessary inputs are in the following order: - * -Network file; -Events file; -output file; + * This script creates a trips file by reading through and gathering trip + * information from an existing events file. Necessary inputs are in the + * following order: -Network file; -Events file; -output file; * -* @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) + * @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) */ public class ConvertTripsFromEvents { static public void main(String[] args) throws IOException { diff --git a/src/main/java/net/bhl/matsim/uam/analysis/trips/run/ConvertTripsFromPopulation.java b/src/main/java/net/bhl/matsim/uam/analysis/trips/run/ConvertTripsFromPopulation.java index 73753d09..45f26f39 100644 --- a/src/main/java/net/bhl/matsim/uam/analysis/trips/run/ConvertTripsFromPopulation.java +++ b/src/main/java/net/bhl/matsim/uam/analysis/trips/run/ConvertTripsFromPopulation.java @@ -21,11 +21,11 @@ import net.bhl.matsim.uam.router.UAMMainModeIdentifier; /** - * This script creates a trips file by reading through and gathering trip information from an existing population (or plan) file. - * Necessary inputs are in the following order: - * -Network file; -Plans file; -output file; + * This script creates a trips file by reading through and gathering trip + * information from an existing population (or plan) file. Necessary inputs are + * in the following order: -Network file; -Plans file; -output file; * -* @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) + * @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) */ public class ConvertTripsFromPopulation { static public void main(String[] args) throws IOException { diff --git a/src/main/java/net/bhl/matsim/uam/analysis/trips/utils/BasicHomeActivityTypes.java b/src/main/java/net/bhl/matsim/uam/analysis/trips/utils/BasicHomeActivityTypes.java index bc7fee11..ee506b9e 100644 --- a/src/main/java/net/bhl/matsim/uam/analysis/trips/utils/BasicHomeActivityTypes.java +++ b/src/main/java/net/bhl/matsim/uam/analysis/trips/utils/BasicHomeActivityTypes.java @@ -3,7 +3,7 @@ /** * An implementation of {@link HomeActivityTypes} for basic home activities. * -* @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) + * @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) */ public class BasicHomeActivityTypes implements HomeActivityTypes { @Override diff --git a/src/main/java/net/bhl/matsim/uam/analysis/trips/utils/HomeActivityTypes.java b/src/main/java/net/bhl/matsim/uam/analysis/trips/utils/HomeActivityTypes.java index e7768757..4ad31ca3 100644 --- a/src/main/java/net/bhl/matsim/uam/analysis/trips/utils/HomeActivityTypes.java +++ b/src/main/java/net/bhl/matsim/uam/analysis/trips/utils/HomeActivityTypes.java @@ -3,7 +3,7 @@ /** * An interface for home activity types. * -* @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) + * @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) */ public interface HomeActivityTypes { boolean isHomeActivity(String activityType); diff --git a/src/main/java/net/bhl/matsim/uam/analysis/uamdemand/CSVUAMDemandWriter.java b/src/main/java/net/bhl/matsim/uam/analysis/uamdemand/CSVUAMDemandWriter.java index dce6a6b6..6b0aa401 100644 --- a/src/main/java/net/bhl/matsim/uam/analysis/uamdemand/CSVUAMDemandWriter.java +++ b/src/main/java/net/bhl/matsim/uam/analysis/uamdemand/CSVUAMDemandWriter.java @@ -8,23 +8,23 @@ import java.util.HashSet; /** -* This class writes a CSV file containing UAMDemand data. -* -* @author Aitanm (Aitan Militão), RRothfeld (Raoul Rothfeld) -*/ + * This class writes a CSV file containing UAMDemand data. + * + * @author Aitanm (Aitan Militão), RRothfeld (Raoul Rothfeld) + */ public class CSVUAMDemandWriter { final private HashSet uamData; final private String delimiter; - + public CSVUAMDemandWriter(Collection uamData) { this(uamData, ","); } - + public CSVUAMDemandWriter(Collection uamData, String delimiter) { this.uamData = new HashSet(uamData); this.delimiter = delimiter; } - + public void write(String outputPath) throws IOException { BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outputPath))); writer.write(formatHeader() + "\n"); @@ -39,23 +39,28 @@ public void write(String outputPath) throws IOException { private String formatHeader() { return String.join(delimiter, - new String[] {"personId", "originCoordX", "originCoordY", "originStationCoordX", "originStationCoordY", "destinationStationCoordX", - "destinationStationCoordY", "destinationCoordX", "destinationCoordY", "startTime", "arrivalAtStationTime", "takeOffTime", - "landingTime", "departureFromStationTime", "endTime", "vehicleId", "originStationId", "destinationStationId", "accessMode", - "egressMode", "uamTrip"}); + new String[] { "personId", "originCoordX", "originCoordY", "originStationCoordX", "originStationCoordY", + "destinationStationCoordX", "destinationStationCoordY", "destinationCoordX", + "destinationCoordY", "startTime", "arrivalAtStationTime", "takeOffTime", "landingTime", + "departureFromStationTime", "endTime", "vehicleId", "originStationId", "destinationStationId", + "accessMode", "egressMode", "uamTrip" }); } - + private String formatData(UAMDemandItem uamData) { - try { return String.join(delimiter, new String[] { uamData.personId.toString(), - String.valueOf(uamData.origin.getX()), String.valueOf(uamData.origin.getY()), - String.valueOf(uamData.originStationCoord.getX()), String.valueOf(uamData.originStationCoord.getY()), - String.valueOf(uamData.destinationStationCoord.getX()), String.valueOf(uamData.destinationStationCoord.getY()), - String.valueOf(uamData.destination.getX()), String.valueOf(uamData.destination.getY()), - String.valueOf(uamData.startTime), String.valueOf(uamData.arrivalAtStationTime),String.valueOf(uamData.takeOffTime), - String.valueOf(uamData.landingTime), String.valueOf(uamData.departureFromStationTime),String.valueOf(uamData.endTime), - uamData.vehicleId.toString(), uamData.originStationId.toString(), - uamData.destinationStationId.toString(), uamData.accessMode.toString(), uamData.egressMode.toString(), - String.valueOf(uamData.uamTrip) }); + try { + return String.join(delimiter, + new String[] { uamData.personId.toString(), String.valueOf(uamData.origin.getX()), + String.valueOf(uamData.origin.getY()), String.valueOf(uamData.originStationCoord.getX()), + String.valueOf(uamData.originStationCoord.getY()), + String.valueOf(uamData.destinationStationCoord.getX()), + String.valueOf(uamData.destinationStationCoord.getY()), + String.valueOf(uamData.destination.getX()), String.valueOf(uamData.destination.getY()), + String.valueOf(uamData.startTime), String.valueOf(uamData.arrivalAtStationTime), + String.valueOf(uamData.takeOffTime), String.valueOf(uamData.landingTime), + String.valueOf(uamData.departureFromStationTime), String.valueOf(uamData.endTime), + uamData.vehicleId.toString(), uamData.originStationId.toString(), + uamData.destinationStationId.toString(), uamData.accessMode.toString(), + uamData.egressMode.toString(), String.valueOf(uamData.uamTrip) }); } catch (Exception NullPointerException) { } return "uamData could not be read"; diff --git a/src/main/java/net/bhl/matsim/uam/analysis/uamdemand/UAMDemandItem.java b/src/main/java/net/bhl/matsim/uam/analysis/uamdemand/UAMDemandItem.java index f6eb44cc..79e0283d 100644 --- a/src/main/java/net/bhl/matsim/uam/analysis/uamdemand/UAMDemandItem.java +++ b/src/main/java/net/bhl/matsim/uam/analysis/uamdemand/UAMDemandItem.java @@ -7,10 +7,10 @@ import net.bhl.matsim.uam.infrastructure.UAMStation; /** -* This class stores information about a UAM trip. -* -* @author Aitanm (Aitan Militão), RRothfeld (Raoul Rothfeld) -*/ + * This class stores information about a UAM trip. + * + * @author Aitanm (Aitan Militão), RRothfeld (Raoul Rothfeld) + */ public class UAMDemandItem { public Id personId; public Coord origin; @@ -29,6 +29,7 @@ public class UAMDemandItem { public String accessMode; public String egressMode; public boolean uamTrip; + public UAMDemandItem(Id personId, Coord origin, Coord originStationCoord, Coord destinationStationCoord, Coord destination, Id originStationId, Id destinationStationId, double startTime, double arrivalAtStationTime, double takeOffTime, double landingTime, double departureFromStationTime, @@ -52,13 +53,13 @@ public UAMDemandItem(Id personId, Coord origin, Coord originStationCoord this.egressMode = egressMode; this.uamTrip = uamTrip; } - + public void setOriginStationId(Id originStationId) { this.originStationId = originStationId; } + public void setTakeOffTime(double takeOffTime) { this.takeOffTime = takeOffTime; } - } diff --git a/src/main/java/net/bhl/matsim/uam/analysis/uamdemand/listeners/UAMListener.java b/src/main/java/net/bhl/matsim/uam/analysis/uamdemand/listeners/UAMListener.java index 87784c18..79a13bf0 100644 --- a/src/main/java/net/bhl/matsim/uam/analysis/uamdemand/listeners/UAMListener.java +++ b/src/main/java/net/bhl/matsim/uam/analysis/uamdemand/listeners/UAMListener.java @@ -35,12 +35,12 @@ import net.bhl.matsim.uam.infrastructure.readers.UAMXMLReader; /** -* A listener that retrieves information from UAMtrip events. -* -* @author Aitanm (Aitan Militão), RRothfeld (Raoul Rothfeld) -*/ + * A listener that retrieves information from UAMtrip events. + * + * @author Aitanm (Aitan Militão), RRothfeld (Raoul Rothfeld) + */ public class UAMListener implements ActivityStartEventHandler, PersonDepartureEventHandler, PersonArrivalEventHandler, -PersonEntersVehicleEventHandler{ + PersonEntersVehicleEventHandler { final private StageActivityTypes stageActivityTypes; final private Network network; final private Collection uamData = new LinkedList<>(); @@ -49,41 +49,42 @@ public class UAMListener implements ActivityStartEventHandler, PersonDepartureEv Map, Id> personToVehicle = new ConcurrentHashMap<>(); Map, Set>> vehicleToPerson = new ConcurrentHashMap<>(); UAMXMLReader uamReader; - final private UAMStations uamStations; + final private UAMStations uamStations; final private Map, UAMVehicle> vehicles; TransportModeNetworkFilter filter; - - public UAMListener(Network network, String uamConfigFile, StageActivityTypes stageActivityTypes, MainModeIdentifier mainModeIdentifier, - Collection networkRouteModes) { + + public UAMListener(Network network, String uamConfigFile, StageActivityTypes stageActivityTypes, + MainModeIdentifier mainModeIdentifier, Collection networkRouteModes) { this.network = network; - this.stageActivityTypes = stageActivityTypes; + this.stageActivityTypes = stageActivityTypes; Set modes = new HashSet<>(); modes.add("uam"); Network networkUAM = NetworkUtils.createNetwork(); filter = new TransportModeNetworkFilter(this.network); - filter.filter(networkUAM, modes); + filter.filter(networkUAM, modes); this.uamReader = new UAMXMLReader(networkUAM); uamReader.readFile(uamConfigFile); this.uamStations = new UAMStations(this.uamReader.getStations(), network); this.vehicles = this.uamReader.getVehicles(); } - + @Override public void reset(int iteration) { uamData.clear(); ongoing.clear(); tempPTData = new ConcurrentHashMap<>(); } - + @Override public void handleEvent(PersonDepartureEvent event) { if (event.getLegMode().startsWith("access_uam")) { - ongoing.put(event.getPersonId(), new UAMListenerItem(event.getPersonId(), network.getLinks().get(event.getLinkId()).getCoord(), - event.getTime(), event.getLegMode())); + ongoing.put(event.getPersonId(), new UAMListenerItem(event.getPersonId(), + network.getLinks().get(event.getLinkId()).getCoord(), event.getTime(), event.getLegMode())); } else if (event.getLegMode().startsWith("egress_uam")) { UAMDemandItem uamData = ongoing.get(event.getPersonId()); - uamData.departureFromStationTime = event.getTime(); - } else if (event.getLegMode().equals("access_walk") || event.getLegMode().equals("transit_walk")|| event.getLegMode().equals("pt")) { + uamData.departureFromStationTime = event.getTime(); + } else if (event.getLegMode().equals("access_walk") || event.getLegMode().equals("transit_walk") + || event.getLegMode().equals("pt")) { // we need to store the information about the pt trip // in case this becomes an access or an egress uam trip if (!tempPTData.containsKey(event.getPersonId())) { @@ -93,8 +94,14 @@ public void handleEvent(PersonDepartureEvent event) { tempPTData.put(event.getPersonId(), ptData); } } else if (event.getLegMode().equals("uam")) { - Coord originStationCoord = network.getLinks().get(event.getLinkId()).getCoord(); // get the coord from the link - UAMStation station = uamStations.getNearestUAMStation(network.getLinks().get(event.getLinkId())); // uses the link to get station + Coord originStationCoord = network.getLinks().get(event.getLinkId()).getCoord(); // get the coord from the + // link + UAMStation station = uamStations.getNearestUAMStation(network.getLinks().get(event.getLinkId())); // uses + // the + // link + // to + // get + // station if (tempPTData.containsKey(event.getPersonId())) { // if there was pt information we need to add it // to the UAMData object @@ -104,7 +111,7 @@ public void handleEvent(PersonDepartureEvent event) { UAMDemandItem uamData = ongoing.get(event.getPersonId()); uamData.originStationCoord = originStationCoord; uamData.originStationId = station.getId(); - uamData.arrivalAtStationTime = data.endTime; + uamData.arrivalAtStationTime = data.endTime; this.tempPTData.remove(event.getPersonId()); } else { // there was a normal access mode @@ -114,7 +121,7 @@ public void handleEvent(PersonDepartureEvent event) { uamData.setOriginStationId(station.getId()); } } - + if (event.getLegMode().equals("car") && event.getPersonId().toString().startsWith("uam_vh_")) { // TODO: pooling is not correctly documented for take-off time // this needs to be corrected @@ -125,9 +132,9 @@ public void handleEvent(PersonDepartureEvent event) { } this.vehicleToPerson.remove(event.getPersonId()); } - } + } } - + @Override public void handleEvent(PersonArrivalEvent event) { if (event.getLegMode().equals("uam")) { @@ -135,9 +142,10 @@ public void handleEvent(PersonArrivalEvent event) { tempPTData.remove(event.getPersonId()); uamData.destinationStationCoord = network.getLinks().get(event.getLinkId()).getCoord(); UAMStation station = uamStations.getNearestUAMStation(network.getLinks().get(event.getLinkId())); - uamData.destinationStationId = station.getId(); + uamData.destinationStationId = station.getId(); double deboardingTime = vehicles.get(this.personToVehicle.get(event.getPersonId())).getDeboardingTime(); - uamData.landingTime = event.getTime() - deboardingTime; //#Landing time is when the vehicle touches the ground + uamData.landingTime = event.getTime() - deboardingTime; // #Landing time is when the vehicle touches the + // ground uamData.vehicleId = this.personToVehicle.get(event.getPersonId()).toString(); uamData.uamTrip = true; } else if (event.getLegMode().startsWith("egress_uam")) { @@ -148,14 +156,15 @@ public void handleEvent(PersonArrivalEvent event) { } else if (event.getLegMode().startsWith("access_uam")) { UAMDemandItem uamData = ongoing.get(event.getPersonId()); uamData.arrivalAtStationTime = event.getTime(); - } else if (event.getLegMode().equals("egress_walk") || event.getLegMode().equals("transit_walk")|| (event.getLegMode().equals("pt"))) { + } else if (event.getLegMode().equals("egress_walk") || event.getLegMode().equals("transit_walk") + || (event.getLegMode().equals("pt"))) { // we are still in the potential access or egress pt trip PTData data = tempPTData.get(event.getPersonId()); data.endTime = event.getTime(); data.destinationLink = network.getLinks().get(event.getLinkId()); - } + } } - + @Override public void handleEvent(ActivityStartEvent event) { // when we arrive at the destination we need to check if there was an egress pt @@ -173,16 +182,16 @@ public void handleEvent(ActivityStartEvent event) { tempPTData.remove(event.getPersonId()); } } - } + } tempPTData.remove(event.getPersonId()); - } - //if it is not an stage activity it is the end of a trip + } + // if it is not an stage activity it is the end of a trip if (!stageActivityTypes.isStageActivity(event.getActType()) && ongoing.containsKey(event.getPersonId())) { UAMDemandItem uamItem = ongoing.remove(event.getPersonId()); this.uamData.add(uamItem); - } + } } - + public Collection getUAMItems() { return uamData; } diff --git a/src/main/java/net/bhl/matsim/uam/analysis/uamdemand/listeners/UAMListenerItem.java b/src/main/java/net/bhl/matsim/uam/analysis/uamdemand/listeners/UAMListenerItem.java index 8fdd51d8..3ce4374a 100644 --- a/src/main/java/net/bhl/matsim/uam/analysis/uamdemand/listeners/UAMListenerItem.java +++ b/src/main/java/net/bhl/matsim/uam/analysis/uamdemand/listeners/UAMListenerItem.java @@ -7,13 +7,13 @@ import net.bhl.matsim.uam.analysis.uamdemand.UAMDemandItem; /** -* This class stores information about a UAMtrip performed. -* -* @author Aitanm (Aitan Militão), RRothfeld (Raoul Rothfeld) -*/ -public class UAMListenerItem extends UAMDemandItem{ - public UAMListenerItem(Id personId, Coord origin, double startTime, String accessMode) { - super(personId, origin, null, null, null, null, null, startTime, Double.NaN, Double.NaN, Double.NaN, Double.NaN, Double.NaN, - "unknown", accessMode, "unknown", false); + * This class stores information about a UAMtrip performed. + * + * @author Aitanm (Aitan Militão), RRothfeld (Raoul Rothfeld) + */ +public class UAMListenerItem extends UAMDemandItem { + public UAMListenerItem(Id personId, Coord origin, double startTime, String accessMode) { + super(personId, origin, null, null, null, null, null, startTime, Double.NaN, Double.NaN, Double.NaN, Double.NaN, + Double.NaN, "unknown", accessMode, "unknown", false); } } diff --git a/src/main/java/net/bhl/matsim/uam/analysis/uamdemand/readers/EventsUAMReader.java b/src/main/java/net/bhl/matsim/uam/analysis/uamdemand/readers/EventsUAMReader.java index bfe299c8..9e0ca75a 100644 --- a/src/main/java/net/bhl/matsim/uam/analysis/uamdemand/readers/EventsUAMReader.java +++ b/src/main/java/net/bhl/matsim/uam/analysis/uamdemand/readers/EventsUAMReader.java @@ -18,11 +18,11 @@ */ public class EventsUAMReader { final private UAMListener uamListener; - + public EventsUAMReader(UAMListener uamListener) { this.uamListener = uamListener; } - + /** * @param eventsPath the events file path * @return A collection of {@link UAMDemandItem}. diff --git a/src/main/java/net/bhl/matsim/uam/analysis/uamdemand/run/BatchConvertUAMDemandFromEvents.java b/src/main/java/net/bhl/matsim/uam/analysis/uamdemand/run/BatchConvertUAMDemandFromEvents.java index a54594dd..945df55f 100644 --- a/src/main/java/net/bhl/matsim/uam/analysis/uamdemand/run/BatchConvertUAMDemandFromEvents.java +++ b/src/main/java/net/bhl/matsim/uam/analysis/uamdemand/run/BatchConvertUAMDemandFromEvents.java @@ -11,10 +11,12 @@ import net.bhl.matsim.uam.analysis.trips.run.ConvertTripsFromEvents; /** -* This script takes a specific folder path and runs {@link ConvertUAMDemandFromEvents} for all MATSim output folders within the provided base folder. -* -* @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) -*/ + * This script takes a specific folder path and runs + * {@link ConvertUAMDemandFromEvents} for all MATSim output folders within the + * provided base folder. + * + * @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) + */ public class BatchConvertUAMDemandFromEvents { // PROVIDE PARENT FOLDER OF OUTPUT FOLDERS private static String eventfile = "output_events.xml"; @@ -24,26 +26,28 @@ public class BatchConvertUAMDemandFromEvents { public static void main(final String[] args) throws IOException { File folder = Paths.get(args[0]).toFile(); - String[] ext = {"gz", "xml"}; + String[] ext = { "gz", "xml" }; Collection potentialFiles = FileUtils.listFiles(folder, ext, true); - - String[] ecl = {"csv"}; + + String[] ecl = { "csv" }; Collection alreadyExistingFiles = FileUtils.listFiles(folder, ecl, true); Collection alreadyExistingFileNames = new HashSet(); for (File f : alreadyExistingFiles) { alreadyExistingFileNames.add(f.getAbsolutePath()); } - + for (File f : potentialFiles) { - if (!f.getName().contains(vehiclefile) || alreadyExistingFileNames.contains(f.getAbsolutePath() + "_demand.csv")) + if (!f.getName().contains(vehiclefile) + || alreadyExistingFileNames.contains(f.getAbsolutePath() + "_demand.csv")) continue; - + System.err.println("Working on: " + f.getAbsolutePath()); String network = f.getAbsolutePath().replace(vehiclefile, networkfile); String events = f.getAbsolutePath().replace(vehiclefile, eventfile); - ConvertUAMDemandFromEvents.extract(network, events, f.getAbsolutePath(), f.getAbsolutePath() + "_demand.csv"); + ConvertUAMDemandFromEvents.extract(network, events, f.getAbsolutePath(), + f.getAbsolutePath() + "_demand.csv"); } - + System.err.println("done."); } } diff --git a/src/main/java/net/bhl/matsim/uam/analysis/uamdemand/run/ConvertUAMDemandFromEvents.java b/src/main/java/net/bhl/matsim/uam/analysis/uamdemand/run/ConvertUAMDemandFromEvents.java index 078cc088..ac7b2661 100644 --- a/src/main/java/net/bhl/matsim/uam/analysis/uamdemand/run/ConvertUAMDemandFromEvents.java +++ b/src/main/java/net/bhl/matsim/uam/analysis/uamdemand/run/ConvertUAMDemandFromEvents.java @@ -22,12 +22,9 @@ import net.bhl.matsim.uam.router.UAMMainModeIdentifier; /** - * This script generates a UAMDemand csv file containing UAMDemand data. - * Necessary inputs are in the following order: - * -Network file; - * -Events file; - * -UAMConfig file; - * -output file; + * This script generates a UAMDemand csv file containing UAMDemand data. + * Necessary inputs are in the following order: -Network file; -Events file; + * -UAMConfig file; -output file; * * @author Aitanm (Aitan Militão), RRothfeld (Raoul Rothfeld) */ @@ -38,19 +35,20 @@ static public void main(String[] args) throws IOException { extract(args[0], args[1], args[2], args[3]); System.out.println("done."); } - + static public void extract(String network, String events, String uamVehicles, String outfile) throws IOException { Network netw = NetworkUtils.createNetwork(); new MatsimNetworkReader(netw).readFile(network); - + // Add UAM stage activity types StageActivityTypes stageActivityTypes = new StageActivityTypesImpl(PtConstants.TRANSIT_ACTIVITY_TYPE, UAMIntermodalRoutingModule.UAM_INTERACTION); MainModeIdentifier mainModeIdentifier = new UAMMainModeIdentifier(new MainModeIdentifierImpl()); - Collection networkRouteModes = Arrays.asList("car", "uam", "access_uam_car", "egress_uam_car"); - - UAMListener uamListener = new UAMListener(netw, uamVehicles, stageActivityTypes, mainModeIdentifier, networkRouteModes); + Collection networkRouteModes = Arrays.asList("car", "uam", "access_uam_car", "egress_uam_car"); + + UAMListener uamListener = new UAMListener(netw, uamVehicles, stageActivityTypes, mainModeIdentifier, + networkRouteModes); Collection uamData = new EventsUAMReader(uamListener).readUAMData(events); new CSVUAMDemandWriter(uamData).write(outfile); diff --git a/src/main/java/net/bhl/matsim/uam/analysis/uamroutes/run/RunCalculateUAMRoutes.java b/src/main/java/net/bhl/matsim/uam/analysis/uamroutes/run/RunCalculateUAMRoutes.java index a1b703bd..f2c35c85 100644 --- a/src/main/java/net/bhl/matsim/uam/analysis/uamroutes/run/RunCalculateUAMRoutes.java +++ b/src/main/java/net/bhl/matsim/uam/analysis/uamroutes/run/RunCalculateUAMRoutes.java @@ -30,78 +30,74 @@ import java.util.Set; /** - * This script generates a CSV file containing the distance, travel time and utility between UAM stations. - * Necessary inputs are in the following order: + * This script generates a CSV file containing the distance, travel time and + * utility between UAM stations. Necessary inputs are in the following order: * -Network file; -UAMVehicles file; -output file; * -* @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) + * @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) */ public class RunCalculateUAMRoutes { - static private Map, UAMStation> stations; - static private UAMStationConnectionGraph uamSCG; - static final private String delimiter = ","; - - static public void main(String[] args) throws IOException { - // PROVIDE: NETWORK UAMVEHICLES OUTFILE-NAME - extract(args[0], args[1], args[2]); - System.out.println("done."); - } - - static public void extract(String networkString, String uamVehicles, String outfile) throws IOException { - Config config = ConfigUtils.createConfig(); - config.network().setInputFile(networkString); - Network network = NetworkUtils.createNetwork(); - new MatsimNetworkReader(network).readFile(networkString); - - UAMXMLReader uamReader = new UAMXMLReader(network); - uamReader.readFile(uamVehicles); - - stations = uamReader.getStations(); - uamSCG = calculateRoutes(network, uamReader); - write(outfile); - } - - static public UAMStationConnectionGraph calculateRoutes(Network network, UAMXMLReader uamReader) { - TravelTime tt = new FreeSpeedTravelTime(); - TravelDisutility td = TravelDisutilityUtils.createFreespeedTravelTimeAndDisutility( - ConfigUtils.createConfig().planCalcScore()); - - UAMManager uamManager = new UAMManager(network); - uamManager.setStations(new UAMStations(uamReader.getStations(), network)); - uamManager.setVehicles(uamReader.getVehicles()); - - return new UAMStationConnectionGraph(uamManager, null, - DefaultParallelLeastCostPathCalculator.create( - Runtime.getRuntime().availableProcessors(), - new DijkstraFactory(), - network, td, tt)); - } - - private static void write(String outputPath) throws IOException { - BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outputPath))); - writer.write(formatHeader() + "\n"); - - for (UAMStation stationFrom : stations.values()) { - for (UAMStation stationTo : stations.values()) { - if (stationFrom.equals(stationTo)) - continue; - - writer.write(String.join(delimiter, new String[] { - String.valueOf(stationFrom.getId()), - String.valueOf(stationTo.getId()), - String.valueOf(uamSCG.getTravelTime(stationFrom.getId(), stationTo.getId())), - String.valueOf(uamSCG.getDistance(stationFrom.getId(), stationTo.getId())), - uamSCG.getUtility(stationFrom.getId(), stationTo.getId()) + "\n"})); - } - } - - writer.flush(); - writer.close(); - } - - private static String formatHeader() { - return String.join(delimiter, - new String[] { "station_from", "station_to", "travel_time_s", "travel_distance_m", "travel_utility"}); - } + static private Map, UAMStation> stations; + static private UAMStationConnectionGraph uamSCG; + static final private String delimiter = ","; + + static public void main(String[] args) throws IOException { + // PROVIDE: NETWORK UAMVEHICLES OUTFILE-NAME + extract(args[0], args[1], args[2]); + System.out.println("done."); + } + + static public void extract(String networkString, String uamVehicles, String outfile) throws IOException { + Config config = ConfigUtils.createConfig(); + config.network().setInputFile(networkString); + Network network = NetworkUtils.createNetwork(); + new MatsimNetworkReader(network).readFile(networkString); + + UAMXMLReader uamReader = new UAMXMLReader(network); + uamReader.readFile(uamVehicles); + + stations = uamReader.getStations(); + uamSCG = calculateRoutes(network, uamReader); + write(outfile); + } + + static public UAMStationConnectionGraph calculateRoutes(Network network, UAMXMLReader uamReader) { + TravelTime tt = new FreeSpeedTravelTime(); + TravelDisutility td = TravelDisutilityUtils + .createFreespeedTravelTimeAndDisutility(ConfigUtils.createConfig().planCalcScore()); + + UAMManager uamManager = new UAMManager(network); + uamManager.setStations(new UAMStations(uamReader.getStations(), network)); + uamManager.setVehicles(uamReader.getVehicles()); + + return new UAMStationConnectionGraph(uamManager, null, DefaultParallelLeastCostPathCalculator + .create(Runtime.getRuntime().availableProcessors(), new DijkstraFactory(), network, td, tt)); + } + + private static void write(String outputPath) throws IOException { + BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outputPath))); + writer.write(formatHeader() + "\n"); + + for (UAMStation stationFrom : stations.values()) { + for (UAMStation stationTo : stations.values()) { + if (stationFrom.equals(stationTo)) + continue; + + writer.write(String.join(delimiter, + new String[] { String.valueOf(stationFrom.getId()), String.valueOf(stationTo.getId()), + String.valueOf(uamSCG.getTravelTime(stationFrom.getId(), stationTo.getId())), + String.valueOf(uamSCG.getDistance(stationFrom.getId(), stationTo.getId())), + uamSCG.getUtility(stationFrom.getId(), stationTo.getId()) + "\n" })); + } + } + + writer.flush(); + writer.close(); + } + + private static String formatHeader() { + return String.join(delimiter, + new String[] { "station_from", "station_to", "travel_time_s", "travel_distance_m", "travel_utility" }); + } } diff --git a/src/main/java/net/bhl/matsim/uam/analysis/uamstations/CSVUAMStationWriter.java b/src/main/java/net/bhl/matsim/uam/analysis/uamstations/CSVUAMStationWriter.java index f4549de1..4d68f2d5 100644 --- a/src/main/java/net/bhl/matsim/uam/analysis/uamstations/CSVUAMStationWriter.java +++ b/src/main/java/net/bhl/matsim/uam/analysis/uamstations/CSVUAMStationWriter.java @@ -8,10 +8,10 @@ import java.util.HashSet; /** -* This class writes a CSV file containing UAM Stations data. -* -* @author Aitanm (Aitan Militão), RRothfeld (Raoul Rothfeld) -*/ + * This class writes a CSV file containing UAM Stations data. + * + * @author Aitanm (Aitan Militão), RRothfeld (Raoul Rothfeld) + */ public class CSVUAMStationWriter { final private HashSet uamStations; final private String delimiter; diff --git a/src/main/java/net/bhl/matsim/uam/analysis/uamstations/UAMStationItem.java b/src/main/java/net/bhl/matsim/uam/analysis/uamstations/UAMStationItem.java index f1a85274..3cf7c810 100644 --- a/src/main/java/net/bhl/matsim/uam/analysis/uamstations/UAMStationItem.java +++ b/src/main/java/net/bhl/matsim/uam/analysis/uamstations/UAMStationItem.java @@ -5,10 +5,10 @@ import net.bhl.matsim.uam.infrastructure.UAMStation; /** -* This class stores information about a UAM Station. -* -* @author Aitanm (Aitan Militão), RRothfeld (Raoul Rothfeld) -*/ + * This class stores information about a UAM Station. + * + * @author Aitanm (Aitan Militão), RRothfeld (Raoul Rothfeld) + */ public class UAMStationItem { public String name; public Id id; diff --git a/src/main/java/net/bhl/matsim/uam/analysis/uamstations/run/BatchConvertUAMStationsFromUAMVehicles.java b/src/main/java/net/bhl/matsim/uam/analysis/uamstations/run/BatchConvertUAMStationsFromUAMVehicles.java index 27e6b8ce..029090e9 100644 --- a/src/main/java/net/bhl/matsim/uam/analysis/uamstations/run/BatchConvertUAMStationsFromUAMVehicles.java +++ b/src/main/java/net/bhl/matsim/uam/analysis/uamstations/run/BatchConvertUAMStationsFromUAMVehicles.java @@ -11,10 +11,12 @@ import net.bhl.matsim.uam.analysis.uamdemand.run.ConvertUAMDemandFromEvents; /** -* This script takes a specific folder path and runs {@link ConvertUAMStationsFromUAMVehicles} for all MATSim output folders within the provided base folder. -* -* @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) -*/ + * This script takes a specific folder path and runs + * {@link ConvertUAMStationsFromUAMVehicles} for all MATSim output folders + * within the provided base folder. + * + * @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) + */ public class BatchConvertUAMStationsFromUAMVehicles { // PROVIDE PARENT FOLDER OF OUTPUT FOLDERS private static String vehiclefile = "output_uam_vehicles.xml"; @@ -23,25 +25,27 @@ public class BatchConvertUAMStationsFromUAMVehicles { public static void main(final String[] args) throws IOException { File folder = Paths.get(args[0]).toFile(); - String[] ext = {"gz", "xml"}; + String[] ext = { "gz", "xml" }; Collection potentialFiles = FileUtils.listFiles(folder, ext, true); - - String[] ecl = {"csv"}; + + String[] ecl = { "csv" }; Collection alreadyExistingFiles = FileUtils.listFiles(folder, ecl, true); Collection alreadyExistingFileNames = new HashSet(); for (File f : alreadyExistingFiles) { alreadyExistingFileNames.add(f.getAbsolutePath()); } - + for (File f : potentialFiles) { - if (!f.getName().contains(vehiclefile) || alreadyExistingFileNames.contains(f.getAbsolutePath() + "_stations.csv")) + if (!f.getName().contains(vehiclefile) + || alreadyExistingFileNames.contains(f.getAbsolutePath() + "_stations.csv")) continue; - + System.err.println("Working on: " + f.getAbsolutePath()); String network = f.getAbsolutePath().replace(vehiclefile, networkfile); - ConvertUAMStationsFromUAMVehicles.extract(network, f.getAbsolutePath(), f.getAbsolutePath() + "_stations.csv"); + ConvertUAMStationsFromUAMVehicles.extract(network, f.getAbsolutePath(), + f.getAbsolutePath() + "_stations.csv"); } - + System.err.println("done."); } } diff --git a/src/main/java/net/bhl/matsim/uam/analysis/uamstations/run/ConvertUAMStationsFromUAMVehicles.java b/src/main/java/net/bhl/matsim/uam/analysis/uamstations/run/ConvertUAMStationsFromUAMVehicles.java index 2186b32e..d56e1f98 100644 --- a/src/main/java/net/bhl/matsim/uam/analysis/uamstations/run/ConvertUAMStationsFromUAMVehicles.java +++ b/src/main/java/net/bhl/matsim/uam/analysis/uamstations/run/ConvertUAMStationsFromUAMVehicles.java @@ -28,11 +28,9 @@ import net.bhl.matsim.uam.router.UAMMainModeIdentifier; /** - * This script generates a Generates a csv file containing information about UAM Stations. - * Necessary inputs are in the following order: - * -Network file; - * -UAM Vehicles file - * -output file; + * This script generates a Generates a csv file containing information about UAM + * Stations. Necessary inputs are in the following order: -Network file; -UAM + * Vehicles file -output file; * * @author Aitanm (Aitan Militão), RRothfeld (Raoul Rothfeld) */ @@ -43,26 +41,22 @@ static public void main(String[] args) throws IOException { extract(args[0], args[1], args[2]); System.out.println("done."); } - + static public void extract(String network, String uamVehicles, String outfile) throws IOException { Network netw = NetworkUtils.createNetwork(); new MatsimNetworkReader(netw).readFile(network); - + UAMXMLReader uamReader = new UAMXMLReader(netw); uamReader.readFile(uamVehicles); UAMStations uamStations = new UAMStations(uamReader.getStations(), netw); - + Collection uamData = new HashSet<>(); for (UAMStation station : uamStations.getUAMStations().values()) { - uamData.add(new UAMStationItem(station.getName(), - station.getId(), - station.getLandingCapacity(), - (int) station.getPreFlightTime(), - (int) station.getPostFlightTime(), - (int) station.getDefaultWaitTime(), - station.getLocationLink().getId().toString())); + uamData.add(new UAMStationItem(station.getName(), station.getId(), station.getLandingCapacity(), + (int) station.getPreFlightTime(), (int) station.getPostFlightTime(), + (int) station.getDefaultWaitTime(), station.getLocationLink().getId().toString())); } - + new CSVUAMStationWriter(uamData).write(outfile); } } \ No newline at end of file diff --git a/src/main/java/net/bhl/matsim/uam/config/UAMConfigGroup.java b/src/main/java/net/bhl/matsim/uam/config/UAMConfigGroup.java index c23883b5..56a89d01 100644 --- a/src/main/java/net/bhl/matsim/uam/config/UAMConfigGroup.java +++ b/src/main/java/net/bhl/matsim/uam/config/UAMConfigGroup.java @@ -7,14 +7,16 @@ import org.apache.log4j.Logger; import org.matsim.core.config.ReflectiveConfigGroup; -import net.bhl.matsim.uam.router.UAMIntermodalRoutingModule; import net.bhl.matsim.uam.router.strategy.UAMStrategy; //import net.bhl.matsim.uam.router.UAMStrategyRouter.UAMStrategyType; import net.bhl.matsim.uam.router.strategy.UAMStrategy.UAMStrategyType; /** + * Config group for the UAM. This class sets the parameters required for UAM + * simulation. Its parameters can be set in the config file, under the uam + * module. * - * @author balacm + * @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) * */ public class UAMConfigGroup extends ReflectiveConfigGroup { @@ -22,14 +24,16 @@ public class UAMConfigGroup extends ReflectiveConfigGroup { private String inputUAMFile; private Set availableAccessModes; - + private UAMStrategyType routingStrategy = UAMStrategyType.MAXACCESSUTILITY; - + private int parallelRouters = 2; private double searchRadius = 5000; // maximum crow fly distance to origin/destination stations - private double walkDistance = 500; // if the access/egress distance is less than walkDistance, then walk will be the uam access and egress mode, otherwise the fastest (car or pt) + private double walkDistance = 500; // if the access/egress distance is less than walkDistance, then walk will be + // the uam access and egress mode, otherwise the fastest (car or pt) - private boolean ptSimulation = true; // selects whether public transport will be simulated or performed by teleportation + private boolean ptSimulation = true; // selects whether public transport will be simulated or performed by + // teleportation private static final Logger log = Logger.getLogger(UAMConfigGroup.class); public UAMConfigGroup() { @@ -45,7 +49,7 @@ public String getUAM() { public void setUAM(final String inputUAMFile) { this.inputUAMFile = inputUAMFile; } - + @StringGetter("routingStrategy") public UAMStrategyType getUAMRoutingStrategy() { return this.routingStrategy; @@ -60,13 +64,13 @@ public void setUAMRoutingStrategy(final String routingStrategy) { int i = 0; for (UAMStrategyType st : UAMStrategy.UAMStrategyType.values()) log.warn(i++ + ". " + st.toString()); - + e.printStackTrace(); System.exit(-1); } - + } - + @StringGetter("parallelRouters") public int getParallelRouters() { return this.parallelRouters; @@ -86,7 +90,7 @@ public double getSearchRadius() { public void setWalkDistance(final String walkDistance) { this.walkDistance = Double.parseDouble(walkDistance); } - + @StringGetter("walkDistance") public double getWalkDistance() { return this.walkDistance; @@ -96,18 +100,20 @@ public double getWalkDistance() { public void setSearchRadius(final String searchRadius) { this.searchRadius = Double.parseDouble(searchRadius); } - + @StringGetter("ptSimulation") public boolean getPtSimulation() { return this.ptSimulation; } - + @StringSetter("ptSimulation") public void setPtSimulation(final String ptSimulation) { if (Boolean.parseBoolean(ptSimulation)) { - log.warn("In case of simulating PT do not add \"pt\" as a parameterset type=\"teleportedModeParameteres\" in the planscalcroute module!"); + log.warn( + "In case of simulating PT do not add \"pt\" as a parameterset type=\"teleportedModeParameteres\" in the planscalcroute module!"); } else { - log.warn("You chose to not simulate PT, please add \"pt\" as a parameterset type=\"teleportedModeParameteres\" in the planscalcroute module!"); + log.warn( + "You chose to not simulate PT, please add \"pt\" as a parameterset type=\"teleportedModeParameteres\" in the planscalcroute module!"); } this.ptSimulation = Boolean.parseBoolean(ptSimulation); } diff --git a/src/main/java/net/bhl/matsim/uam/config/package-info.java b/src/main/java/net/bhl/matsim/uam/config/package-info.java index bce8cf10..10a28ac8 100644 --- a/src/main/java/net/bhl/matsim/uam/config/package-info.java +++ b/src/main/java/net/bhl/matsim/uam/config/package-info.java @@ -2,7 +2,7 @@ * */ /** - * @author balacm + * @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) * */ package net.bhl.matsim.uam.config; \ No newline at end of file diff --git a/src/main/java/net/bhl/matsim/uam/data/UAMAccessRouteData.java b/src/main/java/net/bhl/matsim/uam/data/UAMAccessRouteData.java index b8a56746..da1d528f 100644 --- a/src/main/java/net/bhl/matsim/uam/data/UAMAccessRouteData.java +++ b/src/main/java/net/bhl/matsim/uam/data/UAMAccessRouteData.java @@ -3,9 +3,9 @@ import net.bhl.matsim.uam.infrastructure.UAMStation; /** - * This class is used to store data from access/egress legs to/from UAMStations + * This class is used to store data from access/egress legs to/from UAMStations. * - * @author Aitan Militao + * @author Aitanm (Aitan Militão), RRothfeld (Raoul Rothfeld) */ public class UAMAccessRouteData { private double accessDistance; diff --git a/src/main/java/net/bhl/matsim/uam/data/UAMFleetData.java b/src/main/java/net/bhl/matsim/uam/data/UAMFleetData.java index 91003732..6604b113 100644 --- a/src/main/java/net/bhl/matsim/uam/data/UAMFleetData.java +++ b/src/main/java/net/bhl/matsim/uam/data/UAMFleetData.java @@ -2,6 +2,11 @@ import org.matsim.contrib.dvrp.data.FleetImpl; +/** + * An implementation of {@link FleetImpl} for a UAM vehicles fleet. + * + * @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) + */ public class UAMFleetData extends FleetImpl { } diff --git a/src/main/java/net/bhl/matsim/uam/data/UAMLoader.java b/src/main/java/net/bhl/matsim/uam/data/UAMLoader.java index 7810d10c..34b23f84 100644 --- a/src/main/java/net/bhl/matsim/uam/data/UAMLoader.java +++ b/src/main/java/net/bhl/matsim/uam/data/UAMLoader.java @@ -13,7 +13,7 @@ * Class that loads the UAM vehicle data. * Initially all vehicles are in the Stay mode at their initial stations. * - * @author balacm + * @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) * */ @Singleton diff --git a/src/main/java/net/bhl/matsim/uam/data/UAMRoute.java b/src/main/java/net/bhl/matsim/uam/data/UAMRoute.java index 062c3b8e..adba0b50 100644 --- a/src/main/java/net/bhl/matsim/uam/data/UAMRoute.java +++ b/src/main/java/net/bhl/matsim/uam/data/UAMRoute.java @@ -2,6 +2,12 @@ import net.bhl.matsim.uam.infrastructure.UAMStation; +/** + * Class that stores information about a UAM route. + * + * @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) + * + */ public class UAMRoute { public String accessMode; public UAMStation bestOriginStation; diff --git a/src/main/java/net/bhl/matsim/uam/data/UAMRoutes.java b/src/main/java/net/bhl/matsim/uam/data/UAMRoutes.java index 7ec54876..bb8b779c 100644 --- a/src/main/java/net/bhl/matsim/uam/data/UAMRoutes.java +++ b/src/main/java/net/bhl/matsim/uam/data/UAMRoutes.java @@ -8,7 +8,8 @@ /** * Storage class for UAM leg chains (routes) of access mode, origin and destination stations, and egress mode - * @author Raoul + * + * @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) * */ public class UAMRoutes { diff --git a/src/main/java/net/bhl/matsim/uam/data/UAMStationConnectionGraph.java b/src/main/java/net/bhl/matsim/uam/data/UAMStationConnectionGraph.java index 8b1d60d0..9e0ea604 100644 --- a/src/main/java/net/bhl/matsim/uam/data/UAMStationConnectionGraph.java +++ b/src/main/java/net/bhl/matsim/uam/data/UAMStationConnectionGraph.java @@ -16,102 +16,121 @@ import java.util.concurrent.ExecutionException; import java.util.concurrent.Future; +/** + * Class that stores information about UAMStations, such as distances, travel + * times and utilities between stations. + * + * @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) + * + */ public class UAMStationConnectionGraph { - private Map, Map, Double>> utilities; - private Map, Map, Double>> travelTimes; - private Map, Map, Double>> distances; - - // TODO this class should store the distance each pair of stations for each vehicle, e.g.: - //private Map, Id>, Map, Double>> travelTimes; - - final private static Logger log = Logger.getLogger(UAMStationConnectionGraph.class); - - public UAMStationConnectionGraph(UAMManager uamManager, CustomModeChoiceParameters parameters, - @Named("uam") ParallelLeastCostPathCalculator plcpc) { - log.info("Calculating travel times and distances between all UAM stations."); - - utilities = new HashMap<>(); - travelTimes = new HashMap<>(); - distances = new HashMap<>(); - - //TODO for now it assumes there only being one singular UAM vehicle type, enhancing this would be part of future work - double horizontalSpeed = uamManager.getVehicles().entrySet().iterator().next().getValue().getCruiseSpeed(); - double verticalSpeed = uamManager.getVehicles().entrySet().iterator().next().getValue().getVerticalSpeed(); - - for (UAMStation uamStationOrigin : uamManager.getStations().stations.values()) { - for (UAMStation uamStationDestination : uamManager.getStations().stations.values()) { - if (uamStationOrigin == uamStationDestination) - continue; - - Future path = plcpc.calcLeastCostPath(uamStationOrigin.getLocationLink().getFromNode(), - uamStationDestination.getLocationLink().getToNode(), 0.0, null, null); - - double distance = 0; - double travelTime = 0; - double utility = 0; - try { - for (Link link : path.get().links) { - distance += link.getLength(); - - if (!link.getId().toString().startsWith(RunCreateUAMScenario.name_uam_horizontal_link)) - travelTime += link.getLength() / verticalSpeed; - else - travelTime += link.getLength() / horizontalSpeed; - } - - if (parameters != null) - utility = estimateUtilityUAM(travelTime, distance, parameters, uamStationOrigin, uamStationDestination); - - if (travelTimes.containsKey(uamStationOrigin.getId())) { - this.utilities.get(uamStationOrigin.getId()).put(uamStationDestination.getId(), utility); - this.travelTimes.get(uamStationOrigin.getId()).put(uamStationDestination.getId(), travelTime); - this.distances.get(uamStationOrigin.getId()).put(uamStationDestination.getId(), distance); - } else { - Map, Double> newEntry = new HashMap<>(); - newEntry.put(uamStationDestination.getId(), utility); - this.utilities.put(uamStationOrigin.getId(), newEntry); - - Map, Double> newEntryTT = new HashMap<>(); - newEntryTT.put(uamStationDestination.getId(), travelTime); - this.travelTimes.put(uamStationOrigin.getId(), newEntryTT); - - Map, Double> newEntryD = new HashMap<>(); - newEntryD.put(uamStationDestination.getId(), distance); - this.distances.put(uamStationOrigin.getId(), newEntryD); - } - } catch (InterruptedException | ExecutionException e) { - e.printStackTrace(); - } - } - } - } - - private double estimateUtilityUAM(double travelTime, double distance, CustomModeChoiceParameters parameters, - UAMStation stationOrigin, UAMStation stationDestination) { - - double utility = 0.0; - - utility += parameters.alphaUAM; - utility += parameters.betaTravelTimeUAM_min * travelTime / 60.0; - utility += parameters.betaWaitUAM_min * - (stationOrigin.getPreFlightTime() + stationDestination.getPostFlightTime()) / 60.0; - // utility += parameters.betaCost(distance * 1e-3, parameters.averageIncome) * - // parameters.distanceCostUAM_km * distance * 1e-3; - - return utility; - } - - public double getUtility(Id originStation, Id destinationStation) { - return this.utilities.get(originStation).get(destinationStation); - } - - public double getTravelTime(Id originStation, Id destinationStation) { - return this.travelTimes.get(originStation).get(destinationStation); - } - - public double getDistance(Id originStation, Id destinationStation) { - return this.distances.get(originStation).get(destinationStation); - } + private Map, Map, Double>> utilities; + private Map, Map, Double>> travelTimes; + private Map, Map, Double>> distances; + + // TODO this class should store the distance each pair of stations for each + // vehicle, e.g.: + // private Map, Id>, Map, Double>> + // travelTimes; + + final private static Logger log = Logger.getLogger(UAMStationConnectionGraph.class); + + public UAMStationConnectionGraph(UAMManager uamManager, CustomModeChoiceParameters parameters, + @Named("uam") ParallelLeastCostPathCalculator plcpc) { + log.info("Calculating travel times and distances between all UAM stations."); + + utilities = new HashMap<>(); + travelTimes = new HashMap<>(); + distances = new HashMap<>(); + + // TODO for now it assumes there only being one singular UAM vehicle type, + // enhancing this would be part of future work + double horizontalSpeed = uamManager.getVehicles().entrySet().iterator().next().getValue().getCruiseSpeed(); + double verticalSpeed = uamManager.getVehicles().entrySet().iterator().next().getValue().getVerticalSpeed(); + + for (UAMStation uamStationOrigin : uamManager.getStations().stations.values()) { + for (UAMStation uamStationDestination : uamManager.getStations().stations.values()) { + if (uamStationOrigin == uamStationDestination) + continue; + + Future path = plcpc.calcLeastCostPath(uamStationOrigin.getLocationLink().getFromNode(), + uamStationDestination.getLocationLink().getToNode(), 0.0, null, null); + + double distance = 0; + double travelTime = 0; + double utility = 0; + try { + for (Link link : path.get().links) { + distance += link.getLength(); + + if (!link.getId().toString().startsWith(RunCreateUAMScenario.name_uam_horizontal_link)) + travelTime += link.getLength() / verticalSpeed; + else + travelTime += link.getLength() / horizontalSpeed; + } + + if (parameters != null) + utility = estimateUtilityUAM(travelTime, distance, parameters, uamStationOrigin, + uamStationDestination); + + if (travelTimes.containsKey(uamStationOrigin.getId())) { + this.utilities.get(uamStationOrigin.getId()).put(uamStationDestination.getId(), utility); + this.travelTimes.get(uamStationOrigin.getId()).put(uamStationDestination.getId(), travelTime); + this.distances.get(uamStationOrigin.getId()).put(uamStationDestination.getId(), distance); + } else { + Map, Double> newEntry = new HashMap<>(); + newEntry.put(uamStationDestination.getId(), utility); + this.utilities.put(uamStationOrigin.getId(), newEntry); + + Map, Double> newEntryTT = new HashMap<>(); + newEntryTT.put(uamStationDestination.getId(), travelTime); + this.travelTimes.put(uamStationOrigin.getId(), newEntryTT); + + Map, Double> newEntryD = new HashMap<>(); + newEntryD.put(uamStationDestination.getId(), distance); + this.distances.put(uamStationOrigin.getId(), newEntryD); + } + } catch (InterruptedException | ExecutionException e) { + e.printStackTrace(); + } + } + } + } + + /** + * @param travelTime Travel time between two UAM stations. + * @param distance Distance between two UAM stations. + * @param parameters Parameters for utility calculation + * @param stationOrigin Origin UAM Station + * @param stationDestination Destination UAM Station + * @return utility between two UAM Stations + */ + private double estimateUtilityUAM(double travelTime, double distance, CustomModeChoiceParameters parameters, + UAMStation stationOrigin, UAMStation stationDestination) { + + double utility = 0.0; + + utility += parameters.alphaUAM; + utility += parameters.betaTravelTimeUAM_min * travelTime / 60.0; + utility += parameters.betaWaitUAM_min + * (stationOrigin.getPreFlightTime() + stationDestination.getPostFlightTime()) / 60.0; + // utility += parameters.betaCost(distance * 1e-3, parameters.averageIncome) * + // parameters.distanceCostUAM_km * distance * 1e-3; + + return utility; + } + + public double getUtility(Id originStation, Id destinationStation) { + return this.utilities.get(originStation).get(destinationStation); + } + + public double getTravelTime(Id originStation, Id destinationStation) { + return this.travelTimes.get(originStation).get(destinationStation); + } + + public double getDistance(Id originStation, Id destinationStation) { + return this.distances.get(originStation).get(destinationStation); + } } diff --git a/src/main/java/net/bhl/matsim/uam/data/WaitingStationData.java b/src/main/java/net/bhl/matsim/uam/data/WaitingStationData.java index 2b309939..4e8ccfce 100644 --- a/src/main/java/net/bhl/matsim/uam/data/WaitingStationData.java +++ b/src/main/java/net/bhl/matsim/uam/data/WaitingStationData.java @@ -12,8 +12,13 @@ import net.bhl.matsim.uam.dispatcher.UAMManager; import net.bhl.matsim.uam.events.WaitingData; import net.bhl.matsim.uam.infrastructure.UAMStation; -import net.bhl.matsim.uam.modechoice.estimation.CustomModeChoiceParameters; +/** + * Class that stores waiting data of stations. + * + * @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) + * + */ public class WaitingStationData implements BeforeMobsimListener{ @Inject diff --git a/src/main/java/net/bhl/matsim/uam/dispatcher/Dispatcher.java b/src/main/java/net/bhl/matsim/uam/dispatcher/Dispatcher.java index d778398e..5060ecb3 100644 --- a/src/main/java/net/bhl/matsim/uam/dispatcher/Dispatcher.java +++ b/src/main/java/net/bhl/matsim/uam/dispatcher/Dispatcher.java @@ -3,12 +3,34 @@ import net.bhl.matsim.uam.infrastructure.UAMVehicle; import net.bhl.matsim.uam.passenger.UAMRequest; +/** + * Interface for the UAM Dispatchers. + * + * @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) + * + */ public interface Dispatcher { + /** + * @param request UAM Request + * + * Method that manages a new request + */ void onRequestSubmitted(UAMRequest request); + /** + * @param vehicle UAM Vehicle + * + * Method that prepares the UAM Vehicle for the next task + */ void onNextTaskStarted(UAMVehicle vehicle); + /** + * @param simulationTime Simulation time + * + * Method used for any change to be performed before the + * next simulation step + */ void onNextTimeStep(double simulationTime); } \ No newline at end of file diff --git a/src/main/java/net/bhl/matsim/uam/dispatcher/UAMClosestVehicleDispatcher.java b/src/main/java/net/bhl/matsim/uam/dispatcher/UAMClosestVehicleDispatcher.java index 5285a530..51757297 100644 --- a/src/main/java/net/bhl/matsim/uam/dispatcher/UAMClosestVehicleDispatcher.java +++ b/src/main/java/net/bhl/matsim/uam/dispatcher/UAMClosestVehicleDispatcher.java @@ -23,9 +23,11 @@ import net.bhl.matsim.uam.schedule.UAMSingleRideAppender; import net.bhl.matsim.uam.schedule.UAMStayTask; import net.bhl.matsim.uam.schedule.UAMTask; + /** + * UAM Dispatcher that selects the closest available vehicle to a request. * - * @author balacm + * @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) * */ @Singleton @@ -43,7 +45,6 @@ public class UAMClosestVehicleDispatcher implements MobsimBeforeSimStepListener public UAMClosestVehicleDispatcher(UAMSingleRideAppender appender, UAMManager uamManager, Network network) { this.appender = appender; this.appender.setLandingStations(uamManager.getStations()); - double[] bounds = NetworkUtils.getBoundingBox(network.getNodes().values()); // minx, // miny, @@ -54,13 +55,13 @@ public UAMClosestVehicleDispatcher(UAMSingleRideAppender appender, UAMManager ua for (Vehicle veh : uamManager.getVehicles().values()) { this.availableVehicles.add((UAMVehicle) veh); - - Id stationId = ((UAMVehicle)veh).getInitialStationId(); + + Id stationId = ((UAMVehicle) veh).getInitialStationId(); UAMStation uamStation = uamManager.getStations().getUAMStations().get(stationId); Link linkStation = uamStation.getLocationLink(); Coord coord = linkStation.getCoord(); - - this.availableVehiclesTree.put(coord.getX(), coord.getY(), (UAMVehicle)veh); + + this.availableVehiclesTree.put(coord.getX(), coord.getY(), (UAMVehicle) veh); } } @@ -80,15 +81,14 @@ public void onNextTaskStarted(UAMVehicle vehicle) { UAMTask task = (UAMTask) vehicle.getSchedule().getCurrentTask(); if (task.getUAMTaskType() == UAMTask.UAMTaskType.STAY) { availableVehicles.add(vehicle); - Coord coord = ((UAMStayTask)task).getLink().getCoord(); + Coord coord = ((UAMStayTask) task).getLink().getCoord(); this.availableVehiclesTree.put(coord.getX(), coord.getY(), vehicle); } } /** * - * @param now - * current time + * @param now current time * * Method that dispatches a first vehicle in the Queue - no * optimization. diff --git a/src/main/java/net/bhl/matsim/uam/dispatcher/UAMDispatcher.java b/src/main/java/net/bhl/matsim/uam/dispatcher/UAMDispatcher.java index 1146dc76..12d6c48d 100644 --- a/src/main/java/net/bhl/matsim/uam/dispatcher/UAMDispatcher.java +++ b/src/main/java/net/bhl/matsim/uam/dispatcher/UAMDispatcher.java @@ -13,6 +13,12 @@ import net.bhl.matsim.uam.schedule.UAMSingleRideAppender; import net.bhl.matsim.uam.schedule.UAMTask; +/** + * UAM Dispatcher that selects the first vehicle in the queue. + * + * @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) + * + */ @Singleton public class UAMDispatcher implements Dispatcher { @@ -69,8 +75,7 @@ public void onNextTaskStarted(UAMVehicle vehicle) { /** * - * @param now - * current time + * @param now current time * * Method that dispatches a first vehicle in the Queue - no * optimization. diff --git a/src/main/java/net/bhl/matsim/uam/dispatcher/UAMDispatcherListener.java b/src/main/java/net/bhl/matsim/uam/dispatcher/UAMDispatcherListener.java index 193ec6f8..740b70f6 100644 --- a/src/main/java/net/bhl/matsim/uam/dispatcher/UAMDispatcherListener.java +++ b/src/main/java/net/bhl/matsim/uam/dispatcher/UAMDispatcherListener.java @@ -7,18 +7,24 @@ import com.google.inject.Inject; +/** + * A listener for the UAMDispatchers to prepare for next simulation step. + * + * @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) + * + */ public class UAMDispatcherListener implements MobsimBeforeSimStepListener { @Inject List dispatchers; - + @Override public void notifyMobsimBeforeSimStep(MobsimBeforeSimStepEvent e) { for (Dispatcher d : dispatchers) { d.onNextTimeStep(e.getSimulationTime()); } - + } } diff --git a/src/main/java/net/bhl/matsim/uam/dispatcher/UAMManager.java b/src/main/java/net/bhl/matsim/uam/dispatcher/UAMManager.java index 2ecf2a23..c084fa49 100644 --- a/src/main/java/net/bhl/matsim/uam/dispatcher/UAMManager.java +++ b/src/main/java/net/bhl/matsim/uam/dispatcher/UAMManager.java @@ -20,6 +20,13 @@ import net.bhl.matsim.uam.infrastructure.UAMStations; import net.bhl.matsim.uam.infrastructure.UAMVehicle; +/** + * A class that stores information about UAM infrastructure and manages its + * changes. + * + * @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) + * + */ public class UAMManager implements IterationStartsListener { private Set availableVehicles = new HashSet<>(); @@ -27,7 +34,7 @@ public class UAMManager implements IterationStartsListener { private Map, Id> vehicleLocations = new HashMap<>();; private UAMStations stations; // private Set vehicles; - private Map, UAMVehicle> vehicles = new HashMap, UAMVehicle>(); //added + private Map, UAMVehicle> vehicles = new HashMap, UAMVehicle>(); // added private Map, StationOccupancy> availablespaceStations = new HashMap<>(); private QuadTree stationsWithFreeLandingSpace; @@ -57,27 +64,33 @@ public void setVehicles(Map, UAMVehicle> vehicles) { } /** + * @param vehicle UAM Vehicle + * @param station UAM Station * - * Adds a vehicle, after it lands, to the available vehicles. - * + * Adds a vehicle, after it lands, to the available vehicles. */ public synchronized void addVehicle(UAMVehicle vehicle, UAMStation station) { Coord coord = station.getLocationLink().getCoord(); if (!this.availableVehicles.add(vehicle)) - throw new RuntimeException("The system is in incosistent state! \n " - + "Trying to add a vehicle but it is already there!"); + throw new RuntimeException( + "The system is in incosistent state! \n " + "Trying to add a vehicle but it is already there!"); this.mapAvailableVehicles.put(coord.getX(), coord.getY(), vehicle); this.vehicleLocations.put(vehicle.getId(), station.getId()); - - } + } + /** + * @param vehicle UAM Vehicle + * @param ls UAM Station + * + * Removes a vehicle from the station, after departure. + */ public synchronized void removeVehicle(UAMVehicle vehicle, UAMStation ls) { if (!ls.getId().equals(this.vehicleLocations.get(vehicle.getId()))) throw new RuntimeException("The system is in incosistent state! \n " - + "Trying to remove a vehicle from a station where it is not actually located!"); + + "Trying to remove a vehicle from a station where it is not actually located!"); this.availablespaceStations.get(ls.getId()).landingSpace++; Coord coord = ls.getLocationLink().getCoord(); @@ -86,15 +99,19 @@ public synchronized void removeVehicle(UAMVehicle vehicle, UAMStation ls) { } + /** + * @param coord Coordinate location + * @return The closest UAM Vehicle based on the given Coordinate location. + */ public synchronized UAMVehicle getClosestAvailableVehicle(Coord coord) { return this.mapAvailableVehicles.getClosest(coord.getX(), coord.getY()); } public synchronized void reserveVehicle(Id personId, UAMVehicle vehicle) { - if(!this.availableVehicles.remove(vehicle)) - throw new RuntimeException("The system is in incosistent state! \n " - + "Trying to remove a vehicle, but it was already removed!"); + if (!this.availableVehicles.remove(vehicle)) + throw new RuntimeException("The system is in incosistent state! \n " + + "Trying to remove a vehicle, but it was already removed!"); this.availableVehicles.remove(vehicle); UAMStation station = this.stations.getUAMStations().get(this.vehicleLocations.get(vehicle.getId())); Coord coord = station.getLocationLink().getCoord(); @@ -125,7 +142,7 @@ public synchronized UAMStation getLSWHereVehicleIs(UAMVehicle vehicle) { private class StationOccupancy { int landingSpace; - //int parkingSpace; + // int parkingSpace; } /** @@ -149,14 +166,13 @@ public void notifyIterationStarts(IterationStartsEvent event) { StationOccupancy so = new StationOccupancy(); so.landingSpace = ls.getLandingCapacity(); - //so.parkingSpace = ls.getParkingCapacity(); + // so.parkingSpace = ls.getParkingCapacity(); availablespaceStations.put(ls.getId(), so); stationsWithFreeLandingSpace.put(ls.getLocationLink().getCoord().getX(), ls.getLocationLink().getCoord().getY(), ls); } - - + for (UAMVehicle vehicle : vehicles.values()) { UAMStation station = this.stations.getUAMStations().get((vehicle).getInitialStationId()); this.availablespaceStations.get(station.getId()).landingSpace--; diff --git a/src/main/java/net/bhl/matsim/uam/dispatcher/UAMPooledDispatcher.java b/src/main/java/net/bhl/matsim/uam/dispatcher/UAMPooledDispatcher.java index 54f23b5a..e4ca9d49 100644 --- a/src/main/java/net/bhl/matsim/uam/dispatcher/UAMPooledDispatcher.java +++ b/src/main/java/net/bhl/matsim/uam/dispatcher/UAMPooledDispatcher.java @@ -29,6 +29,12 @@ import net.bhl.matsim.uam.schedule.UAMStayTask; import net.bhl.matsim.uam.schedule.UAMTask; +/** + * UAM Dispatcher that allows pooled ride between passengers. + * + * @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) + * + */ public class UAMPooledDispatcher implements Dispatcher { @Inject final private UAMSingleRideAppender appender; @@ -43,21 +49,21 @@ public class UAMPooledDispatcher implements Dispatcher { public UAMPooledDispatcher(UAMSingleRideAppender appender, UAMManager uamManager, Network network) { this.appender = appender; this.appender.setLandingStations(uamManager.getStations()); - + double[] bounds = NetworkUtils.getBoundingBox(network.getNodes().values()); // minx, availableVehiclesTree = new QuadTree<>(bounds[0], bounds[1], bounds[2], bounds[3]); for (Vehicle veh : uamManager.getVehicles().values()) { this.availableVehicles.add((UAMVehicle) veh); - - Id stationId = ((UAMVehicle)veh).getInitialStationId(); + + Id stationId = ((UAMVehicle) veh).getInitialStationId(); UAMStation uamStation = uamManager.getStations().getUAMStations().get(stationId); Link linkStation = uamStation.getLocationLink(); Coord coord = linkStation.getCoord(); - - this.availableVehiclesTree.put(coord.getX(), coord.getY(), (UAMVehicle)veh); - locationVehicles.put((UAMVehicle)veh, coord); + + this.availableVehiclesTree.put(coord.getX(), coord.getY(), (UAMVehicle) veh); + locationVehicles.put((UAMVehicle) veh, coord); } } @@ -92,7 +98,7 @@ public void onNextTaskStarted(UAMVehicle vehicle) { UAMTask task = (UAMTask) vehicle.getSchedule().getCurrentTask(); if (task.getUAMTaskType() == UAMTask.UAMTaskType.STAY) { availableVehicles.add(vehicle); - Coord coord = ((UAMStayTask)task).getLink().getCoord(); + Coord coord = ((UAMStayTask) task).getLink().getCoord(); this.availableVehiclesTree.put(coord.getX(), coord.getY(), vehicle); this.locationVehicles.put(vehicle, coord); reoptimize = true; @@ -103,7 +109,7 @@ public void onNextTaskStarted(UAMVehicle vehicle) { private void reoptimize(double now) { - //TODO: have pending requests per station + // TODO: have pending requests per station while (availableVehicles.size() > 0 && pendingRequests.size() > 0) { UAMRequest request = pendingRequests.poll(); @@ -111,20 +117,19 @@ private void reoptimize(double now) { UAMVehicle vehicle = this.availableVehiclesTree.getClosest(request.getFromLink().getCoord().getX(), request.getFromLink().getCoord().getY()); Coord coord = this.locationVehicles.get(vehicle); - this.availableVehiclesTree.remove(coord.getX(), - coord.getY(), vehicle); + this.availableVehiclesTree.remove(coord.getX(), coord.getY(), vehicle); this.availableVehicles.remove(vehicle); - //UAMVehicle vehicle = availableVehicles.poll(); + // UAMVehicle vehicle = availableVehicles.poll(); appender.schedule(request, vehicle, now); if (vehicle.getCapacity() > 1) this.enRouteToPickupVehicles.add(vehicle); } } - + if (availableVehicles.size() == 0) { - + while (pendingRequests.size() > 0) { - + UAMRequest request = pendingRequests.peek(); if (!findEligableEnRouteVehicle(request)) break; @@ -133,9 +138,14 @@ private void reoptimize(double now) { } } - //reoptimize = false; + // reoptimize = false; } + /** + * @param request UAM Request + * @return True if origins and destinations of requests are the same and vehicle + * capacity constraint is met, otherwise false. + */ private boolean findEligableEnRouteVehicle(UAMRequest request) { for (UAMVehicle vehicle : enRouteToPickupVehicles) { @@ -143,7 +153,7 @@ private boolean findEligableEnRouteVehicle(UAMRequest request) { Schedule schedule = vehicle.getSchedule(); if (schedule.getCurrentTask() instanceof UAMFlyTask) { int index = schedule.getTasks().indexOf(schedule.getCurrentTask()); - + if (schedule.getTasks().get(index + 1) instanceof UAMPickupTask) { UAMPickupTask pickupTask = (UAMPickupTask) schedule.getTasks().get(index + 1); UAMRequest oldReq = (UAMRequest) pickupTask.getRequests().toArray()[0]; @@ -152,15 +162,16 @@ private boolean findEligableEnRouteVehicle(UAMRequest request) { pickupTask.getRequests().add(request); UAMDropoffTask dropOff = (UAMDropoffTask) schedule.getTasks().get(index + 3); dropOff.getRequests().add(request); - - if ((int)vehicle.getCapacity() == dropOff.getRequests().size()) + + if ((int) vehicle.getCapacity() == dropOff.getRequests().size()) this.enRouteToPickupVehicles.remove(vehicle); - + return true; } } else { Logger log = Logger.getLogger(UAMPooledDispatcher.class); - log.warn("Task following a UAMFlyTask is unexpectedly not a UAMPickupTask for vehicle: " + vehicle.getId()); + log.warn("Task following a UAMFlyTask is unexpectedly not a UAMPickupTask for vehicle: " + + vehicle.getId()); } } } diff --git a/src/main/java/net/bhl/matsim/uam/dispatcher/package-info.java b/src/main/java/net/bhl/matsim/uam/dispatcher/package-info.java index 97c23016..49b0df84 100644 --- a/src/main/java/net/bhl/matsim/uam/dispatcher/package-info.java +++ b/src/main/java/net/bhl/matsim/uam/dispatcher/package-info.java @@ -2,7 +2,7 @@ * */ /** - * @author balacm + * @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) * */ package net.bhl.matsim.uam.dispatcher; \ No newline at end of file From e1cf3be5cbea0ae095176d615894593f7e206387 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aitan=20Medeiros=20Milit=C3=A3o?= Date: Fri, 20 Sep 2019 17:42:09 +0200 Subject: [PATCH 3/5] -More documentation and formating -Folders: events, infrastructure, listeners, passenger -Mode choice folders: constraints, estimation --- .../uam/events/NoUAMLandingSpaceEvent.java | 15 ++++-- .../events/NoUAMLandingSpaceEventHandler.java | 8 ++- .../matsim/uam/events/NoUAMVehicleEvent.java | 17 ++++-- .../uam/events/NoUAMVehicleEventHandler.java | 9 +++- .../net/bhl/matsim/uam/events/UAMData.java | 43 ++++++++------- .../net/bhl/matsim/uam/events/UAMDemand.java | 21 +++++--- .../matsim/uam/events/UAMEventHandler.java | 36 ++++++++----- .../uam/events/UAMTransitEventHandler.java | 5 ++ .../uam/events/UAMUtilitiesAccessEgress.java | 8 ++- .../matsim/uam/events/UAMUtilitiesData.java | 6 +++ .../matsim/uam/events/UAMUtilitiesTrip.java | 8 ++- .../bhl/matsim/uam/events/WaitingData.java | 32 ++++++----- .../bhl/matsim/uam/events/package-info.java | 2 +- .../matsim/uam/infrastructure/UAMStation.java | 39 ++++++++------ .../uam/infrastructure/UAMStationSimple.java | 5 +- .../uam/infrastructure/UAMStations.java | 18 ++++--- .../matsim/uam/infrastructure/UAMVehicle.java | 54 +++++++++++-------- .../uam/infrastructure/UAMVehicleType.java | 18 +++---- .../uam/infrastructure/package-info.java | 2 +- .../infrastructure/readers/UAMXMLReader.java | 4 +- .../infrastructure/readers/package-info.java | 5 +- ...astCostPathCalculatorShutdownListener.java | 7 +++ .../bhl/matsim/uam/listeners/UAMListener.java | 3 +- .../uam/listeners/UAMShutdownListener.java | 2 +- .../AdvancedVehicleTripConstraint.java | 17 +++--- .../constraints/AvoidOnlyWalkConstraint.java | 6 +++ .../CarPassangerTripConstraint.java | 6 +++ .../constraints/CustomHybridConstraint.java | 7 +++ .../constraints/ShortDistanceConstraint.java | 7 +++ .../constraints/UAMTripConstraint.java | 6 +++ .../constraints/VehicleTourConstraint.java | 6 +++ .../VehicleTourConstraintAirport.java | 6 +++ .../constraints/VehicleTripConstraint.java | 6 +++ .../CustomModeChoiceParameters.java | 6 +++ .../PublicTransportCostStructure.java | 6 +++ .../estimation/car/CustomCarEstimator.java | 19 ++++--- .../estimation/car/CustomCarPrediction.java | 6 +++ .../estimation/car/CustomCarPredictor.java | 7 ++- .../motorcycle/CustomMCEstimator.java | 12 +++-- .../motorcycle/CustomMCPrediction.java | 6 +++ .../motorcycle/CustomMCPredictor.java | 26 +++++---- .../estimation/other/CustomBikeEstimator.java | 24 +++++---- .../other/CustomCarPassengerEstimator.java | 7 +++ .../estimation/other/CustomWalkEstimator.java | 16 ++++-- .../pt/CustomPublicTransportEstimator.java | 7 ++- .../pt/CustomPublicTransportPrediction.java | 6 +++ .../pt/CustomPublicTransportPredictor.java | 27 ++++++---- .../pt/subscription/SubscriptionFinder.java | 10 +++- .../subscription/SubscriptionInformation.java | 9 +++- .../estimation/taxi/CustomTaxiEstimator.java | 6 +++ .../estimation/uam/CustomUAMEstimator.java | 18 +++++-- .../estimation/uam/CustomUAMPrediction.java | 17 ++++-- .../estimation/uam/CustomUAMPredictor.java | 45 ++++++++++++++++ .../UAMPassengerDropoffActivity.java | 6 +++ .../passenger/UAMPassengerPickupActivity.java | 6 +++ .../bhl/matsim/uam/passenger/UAMRequest.java | 6 +++ .../uam/passenger/UAMRequestCreator.java | 6 +++ 57 files changed, 546 insertions(+), 192 deletions(-) diff --git a/src/main/java/net/bhl/matsim/uam/events/NoUAMLandingSpaceEvent.java b/src/main/java/net/bhl/matsim/uam/events/NoUAMLandingSpaceEvent.java index a7d0a6e6..cb992d28 100644 --- a/src/main/java/net/bhl/matsim/uam/events/NoUAMLandingSpaceEvent.java +++ b/src/main/java/net/bhl/matsim/uam/events/NoUAMLandingSpaceEvent.java @@ -7,11 +7,18 @@ import org.matsim.api.core.v01.network.Link; import org.matsim.api.core.v01.population.Person; +/** + * An event for the case of no UAM Stations available for landing. + * + * @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) + * + */ public class NoUAMLandingSpaceEvent extends Event { public static final String EVENT_TYPE = "nouamstationcapacity"; private Link destinationLink; private Id personId; + public NoUAMLandingSpaceEvent(double time, Link destinationLink, Id personId) { super(time); this.destinationLink = destinationLink; @@ -22,18 +29,18 @@ public NoUAMLandingSpaceEvent(double time, Link destinationLink, Id pers public String getEventType() { return EVENT_TYPE; } - + @Override public Map getAttributes() { Map atts = super.getAttributes(); atts.put("personid", this.personId.toString()); atts.put("destinationlink", this.destinationLink.getId().toString()); - return atts; + return atts; } - + @Override public String toString() { - Map attr = this.getAttributes() ; + Map attr = this.getAttributes(); StringBuilder eventXML = new StringBuilder("\t entry : attr.entrySet()) { eventXML.append(entry.getKey()); diff --git a/src/main/java/net/bhl/matsim/uam/events/NoUAMLandingSpaceEventHandler.java b/src/main/java/net/bhl/matsim/uam/events/NoUAMLandingSpaceEventHandler.java index 3cb4630b..c5470bf3 100644 --- a/src/main/java/net/bhl/matsim/uam/events/NoUAMLandingSpaceEventHandler.java +++ b/src/main/java/net/bhl/matsim/uam/events/NoUAMLandingSpaceEventHandler.java @@ -2,7 +2,13 @@ import org.matsim.core.events.handler.EventHandler; +/** + * Event Handler for the {@link NoUAMLandingSpaceEvent} event. + * + * @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) + * + */ public interface NoUAMLandingSpaceEventHandler extends EventHandler { - public void handleEvent (NoUAMLandingSpaceEvent event); + public void handleEvent(NoUAMLandingSpaceEvent event); } diff --git a/src/main/java/net/bhl/matsim/uam/events/NoUAMVehicleEvent.java b/src/main/java/net/bhl/matsim/uam/events/NoUAMVehicleEvent.java index 16d684a8..d355340f 100644 --- a/src/main/java/net/bhl/matsim/uam/events/NoUAMVehicleEvent.java +++ b/src/main/java/net/bhl/matsim/uam/events/NoUAMVehicleEvent.java @@ -7,11 +7,18 @@ import org.matsim.api.core.v01.network.Link; import org.matsim.api.core.v01.population.Person; -public class NoUAMVehicleEvent extends Event{ +/** + * An event for the case of no UAM Vehicle available. + * + * @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) + * + */ +public class NoUAMVehicleEvent extends Event { public static final String EVENT_TYPE = "nouamvehicle"; private Link originLink; private Id personId; + public NoUAMVehicleEvent(double time, Link originLink, Id personId) { super(time); this.originLink = originLink; @@ -22,18 +29,18 @@ public NoUAMVehicleEvent(double time, Link originLink, Id personId) { public String getEventType() { return EVENT_TYPE; } - + @Override public Map getAttributes() { Map atts = super.getAttributes(); atts.put("personid", this.personId.toString()); atts.put("originlink", this.originLink.getId().toString()); - return atts; + return atts; } - + @Override public String toString() { - Map attr = this.getAttributes() ; + Map attr = this.getAttributes(); StringBuilder eventXML = new StringBuilder("\t entry : attr.entrySet()) { eventXML.append(entry.getKey()); diff --git a/src/main/java/net/bhl/matsim/uam/events/NoUAMVehicleEventHandler.java b/src/main/java/net/bhl/matsim/uam/events/NoUAMVehicleEventHandler.java index 6b4aa102..5c1379e7 100644 --- a/src/main/java/net/bhl/matsim/uam/events/NoUAMVehicleEventHandler.java +++ b/src/main/java/net/bhl/matsim/uam/events/NoUAMVehicleEventHandler.java @@ -1,6 +1,13 @@ package net.bhl.matsim.uam.events; + import org.matsim.core.events.handler.EventHandler; +/** + * Event Handler for the {@link NoUAMVehicleEvent} event. + * + * @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) + * + */ public interface NoUAMVehicleEventHandler extends EventHandler { - public void handleEvent (NoUAMVehicleEvent event); + public void handleEvent(NoUAMVehicleEvent event); } diff --git a/src/main/java/net/bhl/matsim/uam/events/UAMData.java b/src/main/java/net/bhl/matsim/uam/events/UAMData.java index e0bef564..90887fa0 100644 --- a/src/main/java/net/bhl/matsim/uam/events/UAMData.java +++ b/src/main/java/net/bhl/matsim/uam/events/UAMData.java @@ -7,11 +7,11 @@ /** * Object of this class contains all the information describing one uam trip. * - * @author balacm + * @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) * */ public class UAMData { - + Link originLink; Link originStationLink; Link destinationStationLink; @@ -28,24 +28,27 @@ public class UAMData { String accessMode; String egressMode; boolean uamTrip = false; - + public String toString() { - if (uamTrip && originLink != null && originStationLink != null && destinationLink != null && destinationStationLink != null ) { - return originLink.getCoord().getX() + "," + originLink.getCoord().getY() + "," + originStationLink.getCoord().getX() - + "," + originStationLink.getCoord().getY() + "," + destinationStationLink.getCoord().getX() + "," - + destinationStationLink.getCoord().getY() + "," + destinationLink.getCoord().getX() + "," + destinationLink.getCoord().getY() + "," - + startTime + "," + arrivalAtStationTime + "," + takeOffTime + "," + landingTime + "," + departureFromStationTime + "," + endTime + "," - + vehicleId + "," + originStationId + "," + destinationStationId + "," + accessMode + "," + egressMode + "," + uamTrip; - } - else if (uamTrip && originLink != null && originStationLink != null && destinationStationLink != null) { - - return originLink.getCoord().getX() + "," + originLink.getCoord().getY() + "," + originStationLink.getCoord().getX() - + "," + originStationLink.getCoord().getY() + "," + destinationStationLink.getCoord().getX() + "," + - destinationStationLink.getCoord().getY() + "," + "," + "," - + startTime + "," + arrivalAtStationTime + "," + takeOffTime + "," + landingTime + "," + departureFromStationTime + "," + endTime + "," - + vehicleId + "," + originStationId + "," + destinationStationId + "," + accessMode + "," + egressMode + "," + uamTrip; - } - else - return originLink.getCoord().getX() + "," + originLink.getCoord().getY() + ",,,,,,,"+ startTime + ",,,,,,," + originStationId + ",," + accessMode + ",," + uamTrip; + if (uamTrip && originLink != null && originStationLink != null && destinationLink != null + && destinationStationLink != null) { + return originLink.getCoord().getX() + "," + originLink.getCoord().getY() + "," + + originStationLink.getCoord().getX() + "," + originStationLink.getCoord().getY() + "," + + destinationStationLink.getCoord().getX() + "," + destinationStationLink.getCoord().getY() + "," + + destinationLink.getCoord().getX() + "," + destinationLink.getCoord().getY() + "," + startTime + + "," + arrivalAtStationTime + "," + takeOffTime + "," + landingTime + "," + + departureFromStationTime + "," + endTime + "," + vehicleId + "," + originStationId + "," + + destinationStationId + "," + accessMode + "," + egressMode + "," + uamTrip; + } else if (uamTrip && originLink != null && originStationLink != null && destinationStationLink != null) { + + return originLink.getCoord().getX() + "," + originLink.getCoord().getY() + "," + + originStationLink.getCoord().getX() + "," + originStationLink.getCoord().getY() + "," + + destinationStationLink.getCoord().getX() + "," + destinationStationLink.getCoord().getY() + "," + + "," + "," + startTime + "," + arrivalAtStationTime + "," + takeOffTime + "," + landingTime + "," + + departureFromStationTime + "," + endTime + "," + vehicleId + "," + originStationId + "," + + destinationStationId + "," + accessMode + "," + egressMode + "," + uamTrip; + } else + return originLink.getCoord().getX() + "," + originLink.getCoord().getY() + ",,,,,,," + startTime + ",,,,,,," + + originStationId + ",," + accessMode + ",," + uamTrip; } } \ No newline at end of file diff --git a/src/main/java/net/bhl/matsim/uam/events/UAMDemand.java b/src/main/java/net/bhl/matsim/uam/events/UAMDemand.java index 7f0f131b..5b15a5a1 100644 --- a/src/main/java/net/bhl/matsim/uam/events/UAMDemand.java +++ b/src/main/java/net/bhl/matsim/uam/events/UAMDemand.java @@ -2,7 +2,6 @@ import java.util.ArrayList; import java.util.HashSet; -import java.util.Iterator; import java.util.Map; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; @@ -28,8 +27,13 @@ import net.bhl.matsim.uam.data.WaitingStationData; import net.bhl.matsim.uam.dispatcher.UAMManager; import net.bhl.matsim.uam.infrastructure.UAMStation; -import net.bhl.matsim.uam.infrastructure.UAMVehicle; +/** + * Class that saves information about UAM trips for each agent. + * + * @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) + * + */ public class UAMDemand implements PersonArrivalEventHandler, PersonDepartureEventHandler, ActivityStartEventHandler, PersonEntersVehicleEventHandler { @Inject @@ -81,7 +85,8 @@ public void handleEvent(PersonDepartureEvent event) { data.departureFromStationTime = event.getTime(); uamTrips.remove(event.getPersonId()); - } else if (event.getLegMode().equals("access_walk") || event.getLegMode().equals("transit_walk") || event.getLegMode().equals("pt")) { + } else if (event.getLegMode().equals("access_walk") || event.getLegMode().equals("transit_walk") + || event.getLegMode().equals("pt")) { // we need to store the information about the pt trip // in case this becomes an access or an egress uam trip @@ -157,9 +162,10 @@ public void handleEvent(PersonArrivalEvent event) { data.destinationStationLink = network.getLinks().get(event.getLinkId()); UAMStation station = this.manager.getStations() .getNearestUAMStation(network.getLinks().get(event.getLinkId())); - data.destinationStationId = station.getId(); - double deboardingTime = this.manager.getVehicles().get(this.personToVehicle.get(event.getPersonId())).getDeboardingTime(); - data.landingTime = event.getTime() - deboardingTime; //#Landing time is when the vehicle touches the ground + data.destinationStationId = station.getId(); + double deboardingTime = this.manager.getVehicles().get(this.personToVehicle.get(event.getPersonId())) + .getDeboardingTime(); + data.landingTime = event.getTime() - deboardingTime; // #Landing time is when the vehicle touches the ground data.vehicleId = this.personToVehicle.get(event.getPersonId()).toString(); data.uamTrip = true; } else if (event.getLegMode().startsWith("egress_uam")) { @@ -173,7 +179,8 @@ public void handleEvent(PersonArrivalEvent event) { } else if (event.getLegMode().startsWith("access_uam")) { UAMData data = this.demand.get(event.getPersonId()).get(this.demand.get(event.getPersonId()).size() - 1); data.arrivalAtStationTime = event.getTime(); - } else if (event.getLegMode().equals("egress_walk") || event.getLegMode().equals("transit_walk") || (event.getLegMode().equals("pt")&&!scenario.getConfig().transit().isUseTransit())) { + } else if (event.getLegMode().equals("egress_walk") || event.getLegMode().equals("transit_walk") + || (event.getLegMode().equals("pt") && !scenario.getConfig().transit().isUseTransit())) { // we are still in the potential access or egress pt trip PTData data = tempPTData.get(event.getPersonId()); data.endTime = event.getTime(); diff --git a/src/main/java/net/bhl/matsim/uam/events/UAMEventHandler.java b/src/main/java/net/bhl/matsim/uam/events/UAMEventHandler.java index 77f70072..e807b5a6 100644 --- a/src/main/java/net/bhl/matsim/uam/events/UAMEventHandler.java +++ b/src/main/java/net/bhl/matsim/uam/events/UAMEventHandler.java @@ -7,7 +7,6 @@ import org.matsim.api.core.v01.events.handler.PersonDepartureEventHandler; import org.matsim.api.core.v01.network.Link; import org.matsim.api.core.v01.network.Network; -import org.matsim.contrib.dvrp.data.Vehicle; import com.google.inject.Inject; @@ -15,48 +14,57 @@ import net.bhl.matsim.uam.infrastructure.UAMStation; import net.bhl.matsim.uam.infrastructure.UAMVehicle; -public class UAMEventHandler implements PersonDepartureEventHandler, PersonArrivalEventHandler{ +/** + * Class that handles arrival and departure events. + * + * @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) + * + */ +public class UAMEventHandler implements PersonDepartureEventHandler, PersonArrivalEventHandler { @Inject private UAMManager manager; @Inject private Scenario scenario; - + @Inject public UAMEventHandler(UAMManager manager, Scenario scenario) { this.manager = manager; this.scenario = scenario; } - - + @Override public void handleEvent(PersonArrivalEvent event) { Network network = scenario.getNetwork(); - //if the agent just arrived with uam, place the vehicle on the - //nearest station oto the arrival link, this should be the link where the station is located - //if there are multiple stations at the same link this will cause problems balac feb '18 + // if the agent just arrived with uam, place the vehicle on the + // nearest station oto the arrival link, this should be the link where the + // station is located + // if there are multiple stations at the same link this will cause problems + // balac feb '18 if (event.getLegMode().equals("uam")) { Link link = network.getLinks().get(event.getLinkId()); UAMVehicle vehicle = this.manager.getReservedVehicle(event.getPersonId()); UAMStation station = this.manager.getStations().getNearestUAMStation(link); this.manager.addVehicle(vehicle, station); } - + } @Override public void handleEvent(PersonDepartureEvent event) { Network network = scenario.getNetwork(); - //if the agent is departing with the uam, we remove the vehicle from the station and - //free the space for landing, again if there are multiple stations at the same link this - //will cause problems balac feb '18 + // if the agent is departing with the uam, we remove the vehicle from the + // station and + // free the space for landing, again if there are multiple stations at the same + // link this + // will cause problems balac feb '18 if (event.getLegMode().equals("uam")) { Link link = network.getLinks().get(event.getLinkId()); UAMVehicle vehicle = this.manager.getReservedVehicle(event.getPersonId()); UAMStation station = this.manager.getStations().getNearestUAMStation(link); - this.manager.removeVehicle(vehicle, station); + this.manager.removeVehicle(vehicle, station); } - + } } diff --git a/src/main/java/net/bhl/matsim/uam/events/UAMTransitEventHandler.java b/src/main/java/net/bhl/matsim/uam/events/UAMTransitEventHandler.java index 4b5a7f3e..0deced2a 100644 --- a/src/main/java/net/bhl/matsim/uam/events/UAMTransitEventHandler.java +++ b/src/main/java/net/bhl/matsim/uam/events/UAMTransitEventHandler.java @@ -4,6 +4,11 @@ import net.bhl.matsim.uam.schedule.UAMTransitEvent; +/** + * An interface for the UAMTransit events. + * + * @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) + */ public interface UAMTransitEventHandler extends EventHandler { public void handleEvent(UAMTransitEvent event); } \ No newline at end of file diff --git a/src/main/java/net/bhl/matsim/uam/events/UAMUtilitiesAccessEgress.java b/src/main/java/net/bhl/matsim/uam/events/UAMUtilitiesAccessEgress.java index b2aa98df..1d9d00d8 100644 --- a/src/main/java/net/bhl/matsim/uam/events/UAMUtilitiesAccessEgress.java +++ b/src/main/java/net/bhl/matsim/uam/events/UAMUtilitiesAccessEgress.java @@ -6,6 +6,12 @@ import net.bhl.matsim.uam.infrastructure.UAMStation; +/** + * A class that stores information about an access or egress leg to a UAM + * station. + * + * @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) + */ public class UAMUtilitiesAccessEgress { private Id person; private Id station; @@ -37,7 +43,7 @@ public boolean equals(Object o) { UAMUtilitiesAccessEgress other = (UAMUtilitiesAccessEgress) o; return this.toString().equals(other.toString()); } - + @Override public int hashCode() { return this.toString().hashCode(); diff --git a/src/main/java/net/bhl/matsim/uam/events/UAMUtilitiesData.java b/src/main/java/net/bhl/matsim/uam/events/UAMUtilitiesData.java index 8ff32657..f14f41dc 100644 --- a/src/main/java/net/bhl/matsim/uam/events/UAMUtilitiesData.java +++ b/src/main/java/net/bhl/matsim/uam/events/UAMUtilitiesData.java @@ -1,8 +1,14 @@ package net.bhl.matsim.uam.events; import java.util.HashSet; + import java.util.Set; +/** + * Class that stores utilities for trips and access legs. + * + * @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) + */ public class UAMUtilitiesData { public static Set accessEgressOptions = new HashSet(); public static Set tripOptions = new HashSet(); diff --git a/src/main/java/net/bhl/matsim/uam/events/UAMUtilitiesTrip.java b/src/main/java/net/bhl/matsim/uam/events/UAMUtilitiesTrip.java index 394e5796..417c8da8 100644 --- a/src/main/java/net/bhl/matsim/uam/events/UAMUtilitiesTrip.java +++ b/src/main/java/net/bhl/matsim/uam/events/UAMUtilitiesTrip.java @@ -6,6 +6,12 @@ import net.bhl.matsim.uam.infrastructure.UAMStation; +/** + * Class that stores information about a complete UAM trip, including access and + * egress legs. + * + * @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) + */ public class UAMUtilitiesTrip { public Id person; public Id originLink; @@ -38,7 +44,7 @@ public boolean equals(Object o) { UAMUtilitiesTrip other = (UAMUtilitiesTrip) o; return this.toString().equals(other.toString()); } - + @Override public int hashCode() { return this.toString().hashCode(); diff --git a/src/main/java/net/bhl/matsim/uam/events/WaitingData.java b/src/main/java/net/bhl/matsim/uam/events/WaitingData.java index d125f02d..d0d88476 100644 --- a/src/main/java/net/bhl/matsim/uam/events/WaitingData.java +++ b/src/main/java/net/bhl/matsim/uam/events/WaitingData.java @@ -1,30 +1,35 @@ package net.bhl.matsim.uam.events; +/** + * Class that store waiting times of a UAM station. + * + * @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) + */ public class WaitingData { - //30min bins - double[] cumWaitingTimes = new double[60]; - + // 30min bins + double[] cumWaitingTimes = new double[60]; + int[] count = new int[60]; - + private double defaultWaitTime = 0.0; - + public WaitingData(double defaultWaitTime) { this.defaultWaitTime = defaultWaitTime; } - - public void addWaitingTime (double waitingTime, double arrivalTime) { + + public void addWaitingTime(double waitingTime, double arrivalTime) { // TODO avoid literal (30 = 30:00:00 simulation end) if (arrivalTime < 30 * 3600.0) { - int index = (int)Math.floor(arrivalTime / 1800.0); - + int index = (int) Math.floor(arrivalTime / 1800.0); + cumWaitingTimes[index] += waitingTime; count[index]++; } } - + public double[] getWaitingTimes() { - + double[] waitingTimes = new double[60]; for (int i = 0; i < 60; i++) { if (count[i] != 0) @@ -32,9 +37,8 @@ public double[] getWaitingTimes() { else waitingTimes[i] = defaultWaitTime; } - - + return waitingTimes; } - + } diff --git a/src/main/java/net/bhl/matsim/uam/events/package-info.java b/src/main/java/net/bhl/matsim/uam/events/package-info.java index ab6aae44..dbabffa7 100644 --- a/src/main/java/net/bhl/matsim/uam/events/package-info.java +++ b/src/main/java/net/bhl/matsim/uam/events/package-info.java @@ -2,7 +2,7 @@ * */ /** - * @author balacm + * @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) * */ package net.bhl.matsim.uam.events; \ No newline at end of file diff --git a/src/main/java/net/bhl/matsim/uam/infrastructure/UAMStation.java b/src/main/java/net/bhl/matsim/uam/infrastructure/UAMStation.java index 5d4c8ab8..6cdf075c 100644 --- a/src/main/java/net/bhl/matsim/uam/infrastructure/UAMStation.java +++ b/src/main/java/net/bhl/matsim/uam/infrastructure/UAMStation.java @@ -4,45 +4,54 @@ import org.matsim.api.core.v01.network.Link; /** + * An interface to define UAM Stations methods. * - * @author balacm + * @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) * */ public interface UAMStation { - + Id getId(); - + /** - * This method is used to retrieve the maximum number of simultaneously landed VTOL vehicle on one landing stations - * at any given time. + * This method is used to retrieve the maximum number of simultaneously landed + * VTOL vehicle on one landing stations at any given time. + * * @return the landing station's capacity for landed VTOL vehicle */ int getLandingCapacity(); - + /** - * This method is used to retrieve the maximum number of simultaneously parked VTOL vehicle on one landing stations - * at any given time. + * This method is used to retrieve the maximum number of simultaneously parked + * VTOL vehicle on one landing stations at any given time. + * * @return the landing station's capacity for parked VTOL vehicle */ int getParkingCapacity(); - + /** - * This method is used to retrieve the time needed by the passenger to get from vertiport entry to his/her aircraft seat in seconds. + * This method is used to retrieve the time needed by the passenger to get from + * vertiport entry to his/her aircraft seat in seconds. + * * @return the time needed by the passenger before entering the aircraft */ double getPreFlightTime(); - + /** - * This method is used to retrieve the Time needed by the passenger after leaving the aircraft to leave the vertiport in seconds. - * @return the time needed by the passenger after the flight to start the next leg + * This method is used to retrieve the Time needed by the passenger after + * leaving the aircraft to leave the vertiport in seconds. + * + * @return the time needed by the passenger after the flight to start the next + * leg */ double getPostFlightTime(); - + /** * This method is used to retrieve the default waiting time + * * @return the default waiting time */ - double getDefaultWaitTime(); + double getDefaultWaitTime(); /** * TODO diff --git a/src/main/java/net/bhl/matsim/uam/infrastructure/UAMStationSimple.java b/src/main/java/net/bhl/matsim/uam/infrastructure/UAMStationSimple.java index 4e0b200b..02530f59 100644 --- a/src/main/java/net/bhl/matsim/uam/infrastructure/UAMStationSimple.java +++ b/src/main/java/net/bhl/matsim/uam/infrastructure/UAMStationSimple.java @@ -4,8 +4,9 @@ import org.matsim.api.core.v01.network.Link; /** + * This class defines the UAM Station and its properties. * - * @author balacm + * @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) * */ public class UAMStationSimple implements UAMStation { @@ -38,7 +39,7 @@ public UAMStationSimple(int landingCapacity, int parkingCapacity, double preFlig this.postFlightTime = postFlightTime; this.defaultWaitTime = defaultWaitTime; } - + @Override public String getName() { return name; diff --git a/src/main/java/net/bhl/matsim/uam/infrastructure/UAMStations.java b/src/main/java/net/bhl/matsim/uam/infrastructure/UAMStations.java index 460d01c5..5f15a565 100644 --- a/src/main/java/net/bhl/matsim/uam/infrastructure/UAMStations.java +++ b/src/main/java/net/bhl/matsim/uam/infrastructure/UAMStations.java @@ -8,12 +8,18 @@ import org.matsim.core.network.NetworkUtils; import org.matsim.core.utils.collections.QuadTree; +/** + * Class to map stations and its locations in the network. + * + * @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) + * + */ public class UAMStations { public Map, UAMStation> stations; // TODO can this be private public QuadTree spatialStations; // TODO can this be private - + public UAMStations(Map, UAMStation> stations, Network network) { - + this.stations = stations; double[] bounds = NetworkUtils.getBoundingBox(network.getNodes().values()); // minx, miny, maxx, maxy @@ -27,14 +33,14 @@ public UAMStations(Map, UAMStation> stations, Network network) { public Map, UAMStation> getUAMStations() { return stations; - } - + } + public UAMStation getNearestUAMStation(Link link) { return spatialStations.getClosest(link.getCoord().getX(), link.getCoord().getY()); } - + public UAMStation getNearesUAMStation(Coord coord) { return spatialStations.getClosest(coord.getX(), coord.getY()); } - + } diff --git a/src/main/java/net/bhl/matsim/uam/infrastructure/UAMVehicle.java b/src/main/java/net/bhl/matsim/uam/infrastructure/UAMVehicle.java index d7d8cc66..e6941826 100644 --- a/src/main/java/net/bhl/matsim/uam/infrastructure/UAMVehicle.java +++ b/src/main/java/net/bhl/matsim/uam/infrastructure/UAMVehicle.java @@ -7,10 +7,11 @@ /** * This class defines the VTOL vehicle and its properties. - * @author Milos Balac, Raoul Rothfeld + * + * @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) */ public class UAMVehicle extends VehicleImpl { - + // VTOL vehicle-specific properties private final double width; // [m] private final double length; // [m] @@ -18,27 +19,27 @@ public class UAMVehicle extends VehicleImpl { private final Id initialStationId; private final UAMVehicleType vehicleType; - - public UAMVehicle(Id id, Id stationId, Link startLink, - double capacity, double t0, double t1, double width, double length, double range, UAMVehicleType vehicleType) { - + public UAMVehicle(Id id, Id stationId, Link startLink, double capacity, double t0, double t1, + double width, double length, double range, UAMVehicleType vehicleType) { + super(id, startLink, capacity, t0, t1); this.initialStationId = stationId; this.width = width; this.length = length; this.range = range; - + this.vehicleType = vehicleType; } - - public UAMVehicle(Id id, Id stationId, Link startLink, double capacity, double t0, double t1, UAMVehicleType vehicleType) { - + + public UAMVehicle(Id id, Id stationId, Link startLink, double capacity, double t0, double t1, + UAMVehicleType vehicleType) { + super(id, startLink, capacity, t0, t1); this.initialStationId = stationId; this.width = 0; this.length = 0; this.range = 0; - + this.vehicleType = vehicleType; } @@ -54,13 +55,14 @@ public double getWidth() { public double getLength() { return length; } - + public double getRange() { return range; } - + /** - * This method is used to retrieve the vehicle cruise speed during level flight. + * This method is used to retrieve the vehicle cruise speed during level flight. + * * @return vehicle cruise speed in meter/second */ public double getCruiseSpeed() { @@ -68,15 +70,19 @@ public double getCruiseSpeed() { } /** - * This method is used to retrieve the vehicle vertical speed during take-off and landing. + * This method is used to retrieve the vehicle vertical speed during take-off + * and landing. + * * @return vehicle vertical speed in meter/second */ public double getVerticalSpeed() { return vehicleType.getVerticalSpeed(); } - + /** - * This method is used to retrieve the Time for the passenger to board in the aircraft in seconds. Used in the UAMPickUpTask. + * This method is used to retrieve the Time for the passenger to board in the + * aircraft in seconds. Used in the UAMPickUpTask. + * * @return the passenger boarding time in the aircraft */ public double getBoardingTime() { @@ -84,16 +90,22 @@ public double getBoardingTime() { } /** - * This method is used to retrieve the Time for the passenger to board off from the aircraft in seconds. Used in the UAMDropOffTask. + * This method is used to retrieve the Time for the passenger to board off from + * the aircraft in seconds. Used in the UAMDropOffTask. + * * @return the passenger deboarding time in from the aircraft */ public double getDeboardingTime() { return vehicleType.getDeboardingTime(); } - + /** - * This method is used to retrieve the Time needed for the UAM Vehicle to perform the TurnAroundTask (unavailable for other trips after landing) - * @return the UAM Vehicle turn around time (time unavailable for other trips after landing) + * This method is used to retrieve the Time needed for the UAM Vehicle to + * perform the TurnAroundTask (unavailable for other trips after + * landing) + * + * @return the UAM Vehicle turn around time (time unavailable for other trips + * after landing) */ public double getTurnAroundTime() { return vehicleType.getTurnAroundTime(); diff --git a/src/main/java/net/bhl/matsim/uam/infrastructure/UAMVehicleType.java b/src/main/java/net/bhl/matsim/uam/infrastructure/UAMVehicleType.java index e0d4b324..d25176ed 100644 --- a/src/main/java/net/bhl/matsim/uam/infrastructure/UAMVehicleType.java +++ b/src/main/java/net/bhl/matsim/uam/infrastructure/UAMVehicleType.java @@ -4,7 +4,8 @@ /** * This class defines the VTOL vehicle type and its properties. - * @author Aitan Militao + * + * @author Aitanm (Aitan Militão), RRothfeld (Raoul Rothfeld) */ public class UAMVehicleType { @@ -15,8 +16,9 @@ public class UAMVehicleType { private final double boardingTime; // [s] private final double deboardingTime; // [s] private final double turnAroundTime; // [s] - - public UAMVehicleType (Id id, int capacity, double cruiseSpeed, double verticalSpeed, double boardingTime, double deboardingTime, double turnAroundTime ) { + + public UAMVehicleType(Id id, int capacity, double cruiseSpeed, double verticalSpeed, + double boardingTime, double deboardingTime, double turnAroundTime) { this.id = id; this.capacity = capacity; this.cruiseSpeed = cruiseSpeed; @@ -25,11 +27,11 @@ public UAMVehicleType (Id id, int capacity, double cruiseSpeed, this.deboardingTime = deboardingTime; this.turnAroundTime = turnAroundTime; } - + public int getCapacity() { // used only in the reader, given that the UAMVehicle superclass already has it return this.capacity; } - + public double getCruiseSpeed() { return this.cruiseSpeed; } @@ -37,7 +39,7 @@ public double getCruiseSpeed() { public double getVerticalSpeed() { return this.verticalSpeed; } - + public double getboardingTime() { return this.boardingTime; } @@ -45,10 +47,8 @@ public double getboardingTime() { public double getDeboardingTime() { return this.deboardingTime; } - + public double getTurnAroundTime() { return this.turnAroundTime; } } - - diff --git a/src/main/java/net/bhl/matsim/uam/infrastructure/package-info.java b/src/main/java/net/bhl/matsim/uam/infrastructure/package-info.java index 87e142a4..239bc2ad 100644 --- a/src/main/java/net/bhl/matsim/uam/infrastructure/package-info.java +++ b/src/main/java/net/bhl/matsim/uam/infrastructure/package-info.java @@ -2,7 +2,7 @@ * */ /** - * @author balacm + * @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) * */ package net.bhl.matsim.uam.infrastructure; \ No newline at end of file diff --git a/src/main/java/net/bhl/matsim/uam/infrastructure/readers/UAMXMLReader.java b/src/main/java/net/bhl/matsim/uam/infrastructure/readers/UAMXMLReader.java index 7283a28f..b330ec05 100644 --- a/src/main/java/net/bhl/matsim/uam/infrastructure/readers/UAMXMLReader.java +++ b/src/main/java/net/bhl/matsim/uam/infrastructure/readers/UAMXMLReader.java @@ -22,8 +22,10 @@ import net.bhl.matsim.uam.infrastructure.UAMVehicleType; /** + * This class reads reads the UAM xml file containing the parameters for UAM + * simulation. * - * @author raoul.rothfeld + * @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) * */ public class UAMXMLReader extends MatsimXmlParser { diff --git a/src/main/java/net/bhl/matsim/uam/infrastructure/readers/package-info.java b/src/main/java/net/bhl/matsim/uam/infrastructure/readers/package-info.java index 7f19147f..29681555 100644 --- a/src/main/java/net/bhl/matsim/uam/infrastructure/readers/package-info.java +++ b/src/main/java/net/bhl/matsim/uam/infrastructure/readers/package-info.java @@ -2,9 +2,10 @@ * */ /** - * @author balacm + * @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) * - *This package contains the readers for the stations and vehiciles files. + * This package contains the readers for the stations and vehicles + * files. * */ package net.bhl.matsim.uam.infrastructure.readers; \ No newline at end of file diff --git a/src/main/java/net/bhl/matsim/uam/listeners/ParallelLeastCostPathCalculatorShutdownListener.java b/src/main/java/net/bhl/matsim/uam/listeners/ParallelLeastCostPathCalculatorShutdownListener.java index ad1e5f3c..99b56c90 100644 --- a/src/main/java/net/bhl/matsim/uam/listeners/ParallelLeastCostPathCalculatorShutdownListener.java +++ b/src/main/java/net/bhl/matsim/uam/listeners/ParallelLeastCostPathCalculatorShutdownListener.java @@ -6,6 +6,13 @@ import org.matsim.core.controler.events.ShutdownEvent; import org.matsim.core.controler.listener.ShutdownListener; +/** + * A parallel least cost path calculator shutdown listener for shutdown + * notification in the end of a simulation. + * + * @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) + * + */ public class ParallelLeastCostPathCalculatorShutdownListener implements ShutdownListener { final private Closeable resource; diff --git a/src/main/java/net/bhl/matsim/uam/listeners/UAMListener.java b/src/main/java/net/bhl/matsim/uam/listeners/UAMListener.java index 99788db3..55768f97 100644 --- a/src/main/java/net/bhl/matsim/uam/listeners/UAMListener.java +++ b/src/main/java/net/bhl/matsim/uam/listeners/UAMListener.java @@ -13,7 +13,6 @@ import com.google.inject.Inject; -import net.bhl.matsim.uam.data.UAMRoutes; import net.bhl.matsim.uam.events.UAMData; import net.bhl.matsim.uam.events.UAMDemand; import net.bhl.matsim.uam.events.UAMUtilitiesAccessEgress; @@ -23,7 +22,7 @@ /** * This class provides output for the uam usage. * - * @author balacm + * @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) * */ public class UAMListener implements IterationEndsListener{ diff --git a/src/main/java/net/bhl/matsim/uam/listeners/UAMShutdownListener.java b/src/main/java/net/bhl/matsim/uam/listeners/UAMShutdownListener.java index 00809a50..06598764 100644 --- a/src/main/java/net/bhl/matsim/uam/listeners/UAMShutdownListener.java +++ b/src/main/java/net/bhl/matsim/uam/listeners/UAMShutdownListener.java @@ -16,7 +16,7 @@ * This listener copies the input UAM Vehicle file into the output folder after * the simulation ends * - * @author Aitan Militao + * @author Aitanm (Aitan Militão), RRothfeld (Raoul Rothfeld) */ public class UAMShutdownListener implements ShutdownListener { diff --git a/src/main/java/net/bhl/matsim/uam/modechoice/constraints/AdvancedVehicleTripConstraint.java b/src/main/java/net/bhl/matsim/uam/modechoice/constraints/AdvancedVehicleTripConstraint.java index ecba1d0e..4fd820c0 100644 --- a/src/main/java/net/bhl/matsim/uam/modechoice/constraints/AdvancedVehicleTripConstraint.java +++ b/src/main/java/net/bhl/matsim/uam/modechoice/constraints/AdvancedVehicleTripConstraint.java @@ -21,8 +21,7 @@ * the first tour. This was done in order to have easier implementation. If this * has an effect on the results is not clear. * - * @author Milos Balac - * @author Sebastian Hörl + * @author balacmi (Milos Balac), sebhoerl (Sebastian Hörl) * */ public class AdvancedVehicleTripConstraint extends VehicleTripConstraint { @@ -30,13 +29,13 @@ public AdvancedVehicleTripConstraint(List trips, Collection homeLinkId) { super(trips, constrainedModes, homeLinkId); } - + private boolean modeWasEnforced; @Override public boolean validateBeforeEstimation(ModeChoiceTrip trip, String mode, List previousModes) { modeWasEnforced = false; - + if (super.validateBeforeEstimation(trip, mode, previousModes)) { for (String constrainedMode : constrainedModes) { Id currentVehicleLinkId = getCurrentVehicleLinkId(constrainedMode, previousModes); @@ -61,9 +60,15 @@ public boolean validateBeforeEstimation(ModeChoiceTrip trip, String mode, List currentDepartureLinkId, ModeChoiceTrip trip) { int indexOfTrip = this.trips.indexOf(trip); diff --git a/src/main/java/net/bhl/matsim/uam/modechoice/constraints/AvoidOnlyWalkConstraint.java b/src/main/java/net/bhl/matsim/uam/modechoice/constraints/AvoidOnlyWalkConstraint.java index 9569e3ba..22f01dfd 100644 --- a/src/main/java/net/bhl/matsim/uam/modechoice/constraints/AvoidOnlyWalkConstraint.java +++ b/src/main/java/net/bhl/matsim/uam/modechoice/constraints/AvoidOnlyWalkConstraint.java @@ -11,6 +11,12 @@ import ch.ethz.matsim.mode_choice.framework.trip_based.estimation.TripCandidate; import net.bhl.matsim.uam.modechoice.estimation.pt.CustomPublicTransportPrediction; +/** + * This class ensures that trips under OnlyWalk constraint are not selected for pt trips + * + * @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) + * + */ public class AvoidOnlyWalkConstraint extends AbstractTripConstraint { @Override public boolean validateAfterEstimation(ModeChoiceTrip trip, TripCandidate candidate, diff --git a/src/main/java/net/bhl/matsim/uam/modechoice/constraints/CarPassangerTripConstraint.java b/src/main/java/net/bhl/matsim/uam/modechoice/constraints/CarPassangerTripConstraint.java index c7372753..610f2bc4 100644 --- a/src/main/java/net/bhl/matsim/uam/modechoice/constraints/CarPassangerTripConstraint.java +++ b/src/main/java/net/bhl/matsim/uam/modechoice/constraints/CarPassangerTripConstraint.java @@ -8,6 +8,12 @@ import ch.ethz.matsim.mode_choice.framework.trip_based.constraints.TripConstraint; import ch.ethz.matsim.mode_choice.framework.trip_based.constraints.TripConstraintFactory; +/** + * This class ensures that a trip has car passenger as mode. + * + * @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) + * + */ public class CarPassangerTripConstraint extends AbstractTripConstraint { @Override public boolean validateBeforeEstimation(ModeChoiceTrip trip, String mode, List previousModes) { diff --git a/src/main/java/net/bhl/matsim/uam/modechoice/constraints/CustomHybridConstraint.java b/src/main/java/net/bhl/matsim/uam/modechoice/constraints/CustomHybridConstraint.java index b351ca82..1708ad8e 100644 --- a/src/main/java/net/bhl/matsim/uam/modechoice/constraints/CustomHybridConstraint.java +++ b/src/main/java/net/bhl/matsim/uam/modechoice/constraints/CustomHybridConstraint.java @@ -8,6 +8,13 @@ import ch.ethz.matsim.mode_choice.framework.trip_based.constraints.TripConstraint; import ch.ethz.matsim.mode_choice.framework.trip_based.constraints.TripConstraintFactory; +/** + * This class is a hybrid constraint including the + * {@link AdvancedVehicleTripConstraint} and {@link ShortDistanceConstraint}. + * + * @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) + * + */ public class CustomHybridConstraint extends AbstractTripConstraint { final private AdvancedVehicleTripConstraint vehicleConstraint; final private TripConstraint shortDistanceConstraint; diff --git a/src/main/java/net/bhl/matsim/uam/modechoice/constraints/ShortDistanceConstraint.java b/src/main/java/net/bhl/matsim/uam/modechoice/constraints/ShortDistanceConstraint.java index b180b578..7fac7a19 100644 --- a/src/main/java/net/bhl/matsim/uam/modechoice/constraints/ShortDistanceConstraint.java +++ b/src/main/java/net/bhl/matsim/uam/modechoice/constraints/ShortDistanceConstraint.java @@ -10,6 +10,13 @@ import ch.ethz.matsim.mode_choice.framework.ModeChoiceTrip; import ch.ethz.matsim.mode_choice.framework.trip_based.constraints.TripConstraintFactory; +/** + * This class ensures that the trip as a distance higher than a pre-defined + * short distance. + * + * @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) + * + */ public class ShortDistanceConstraint extends AbstractTripConstraint { final public static double DEFAULT_SHORT_DISTANCE = 0.0; final private double shortDistance; diff --git a/src/main/java/net/bhl/matsim/uam/modechoice/constraints/UAMTripConstraint.java b/src/main/java/net/bhl/matsim/uam/modechoice/constraints/UAMTripConstraint.java index 5c6f5ce6..b068cd2a 100644 --- a/src/main/java/net/bhl/matsim/uam/modechoice/constraints/UAMTripConstraint.java +++ b/src/main/java/net/bhl/matsim/uam/modechoice/constraints/UAMTripConstraint.java @@ -13,6 +13,12 @@ import net.bhl.matsim.uam.dispatcher.UAMManager; import net.bhl.matsim.uam.infrastructure.UAMStation; +/** + * This class defines the constraint for UAM trips and its properties. + * + * @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) + * + */ public class UAMTripConstraint extends AbstractTripConstraint { final private UAMManager manager; final private UAMConfigGroup uamConfig; diff --git a/src/main/java/net/bhl/matsim/uam/modechoice/constraints/VehicleTourConstraint.java b/src/main/java/net/bhl/matsim/uam/modechoice/constraints/VehicleTourConstraint.java index 78dd1d25..79947233 100644 --- a/src/main/java/net/bhl/matsim/uam/modechoice/constraints/VehicleTourConstraint.java +++ b/src/main/java/net/bhl/matsim/uam/modechoice/constraints/VehicleTourConstraint.java @@ -13,6 +13,12 @@ import ch.ethz.matsim.mode_choice.framework.tour_based.estimation.TourCandidate; import net.bhl.matsim.uam.modechoice.utils.VehicleLocationUtils; +/** + * This class defines the constraint for vehicle modes on tour based models. + * + * @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) + * + */ public class VehicleTourConstraint implements TourConstraint { final private Collection constrainedModes; final private List trips; diff --git a/src/main/java/net/bhl/matsim/uam/modechoice/constraints/VehicleTourConstraintAirport.java b/src/main/java/net/bhl/matsim/uam/modechoice/constraints/VehicleTourConstraintAirport.java index d194fe5a..9a8d54e0 100644 --- a/src/main/java/net/bhl/matsim/uam/modechoice/constraints/VehicleTourConstraintAirport.java +++ b/src/main/java/net/bhl/matsim/uam/modechoice/constraints/VehicleTourConstraintAirport.java @@ -13,6 +13,12 @@ import ch.ethz.matsim.mode_choice.framework.tour_based.estimation.TourCandidate; import net.bhl.matsim.uam.modechoice.utils.VehicleLocationUtils; +/** + * This class defines the constraint for airport tours and its properties. + * + * @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) + * + */ public class VehicleTourConstraintAirport implements TourConstraint { final private Collection constrainedModes; final private List trips; diff --git a/src/main/java/net/bhl/matsim/uam/modechoice/constraints/VehicleTripConstraint.java b/src/main/java/net/bhl/matsim/uam/modechoice/constraints/VehicleTripConstraint.java index 7fa16762..7498c682 100644 --- a/src/main/java/net/bhl/matsim/uam/modechoice/constraints/VehicleTripConstraint.java +++ b/src/main/java/net/bhl/matsim/uam/modechoice/constraints/VehicleTripConstraint.java @@ -12,6 +12,12 @@ import ch.ethz.matsim.mode_choice.framework.trip_based.constraints.TripConstraintFactory; import net.bhl.matsim.uam.modechoice.utils.VehicleLocationUtils; +/** + * This class defines the constraint for vehicle modes on trip based models. + * + * @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) + * + */ public class VehicleTripConstraint extends AbstractTripConstraint { final protected Collection constrainedModes; final protected List trips; diff --git a/src/main/java/net/bhl/matsim/uam/modechoice/estimation/CustomModeChoiceParameters.java b/src/main/java/net/bhl/matsim/uam/modechoice/estimation/CustomModeChoiceParameters.java index e3e81bdc..16de1c23 100644 --- a/src/main/java/net/bhl/matsim/uam/modechoice/estimation/CustomModeChoiceParameters.java +++ b/src/main/java/net/bhl/matsim/uam/modechoice/estimation/CustomModeChoiceParameters.java @@ -9,6 +9,12 @@ import net.bhl.matsim.uam.modechoice.estimation.pt.subscription.SubscriptionInformation; +/** + * This class stores and provides the parameters used by the mode choice models. + * + * @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) + * + */ public class CustomModeChoiceParameters { private static List MODES = Arrays.asList("car", "pt", "bike", "walk", "car_passenger", "uam"); private static List CACHED_MODES = Arrays.asList("car", "pt", "bike", "walk", "uam"); diff --git a/src/main/java/net/bhl/matsim/uam/modechoice/estimation/PublicTransportCostStructure.java b/src/main/java/net/bhl/matsim/uam/modechoice/estimation/PublicTransportCostStructure.java index 96ea46cd..03e36dd7 100644 --- a/src/main/java/net/bhl/matsim/uam/modechoice/estimation/PublicTransportCostStructure.java +++ b/src/main/java/net/bhl/matsim/uam/modechoice/estimation/PublicTransportCostStructure.java @@ -1,5 +1,11 @@ package net.bhl.matsim.uam.modechoice.estimation; +/** + * This class provides the costs for public transport. + * + * @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) + * + */ public class PublicTransportCostStructure { public double distanceCost_km(double crowflyDistance_km) { if (crowflyDistance_km <= 1.0) { diff --git a/src/main/java/net/bhl/matsim/uam/modechoice/estimation/car/CustomCarEstimator.java b/src/main/java/net/bhl/matsim/uam/modechoice/estimation/car/CustomCarEstimator.java index deb168f0..b1c5b839 100644 --- a/src/main/java/net/bhl/matsim/uam/modechoice/estimation/car/CustomCarEstimator.java +++ b/src/main/java/net/bhl/matsim/uam/modechoice/estimation/car/CustomCarEstimator.java @@ -10,6 +10,12 @@ import ch.ethz.matsim.mode_choice.framework.trip_based.estimation.TripCandidate; import net.bhl.matsim.uam.modechoice.estimation.CustomModeChoiceParameters; +/** + * This class defines the estimator for car trips. + * + * @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) + * + */ public class CustomCarEstimator implements ModalTripEstimator { final private CustomCarPredictor predictor; final private CustomModeChoiceParameters parameters; @@ -29,12 +35,12 @@ public CustomCarEstimator(CustomModeChoiceParameters parameters, CustomCarPredic @Override public TripCandidate estimateTrip(ModeChoiceTrip trip, List preceedingTrips) { CustomCarPrediction prediction = predictor.predict(trip); - - //In case of standard simulation, returns travel time instead of utility. + + // In case of standard simulation, returns travel time instead of utility. if (isMinTravelTime) { return new TripCandidateWithPrediction(prediction.travelTime, "car", prediction); } - + Person person = trip.getPerson(); double travelTime_min = prediction.travelTime / 60.0; double distance_km = prediction.distance * 1e-3; @@ -57,12 +63,12 @@ public TripCandidate estimateTrip(ModeChoiceTrip trip, List prece boolean innerParisOrigin = (boolean) (trip.getTripInformation().getOriginActivity().getAttributes() .getAttribute("innerParis")); boolean home = trip.getTripInformation().getDestinationActivity().getType().equals("home"); - + utility += parameters.alphaCar; utility += (parameters.betaTravelTimeCar_min + parameters.betaTravelTImeCarMale * (person.getAttributes().getAttribute("sex").equals("m") ? 1 : 0)) - * ( travelTime_min + parameters.parkingSearchTimeCar_min); + * (travelTime_min + parameters.parkingSearchTimeCar_min); utility += parameters.betaTravelTimeWalk_min * parameters.accessEgressWalkTimeCar_min; utility += parameters.betaShortCar * distance_short; if (!innerParisDes && !innerParisOrigin) { @@ -70,8 +76,7 @@ public TripCandidate estimateTrip(ModeChoiceTrip trip, List prece } if (!innerParisDes) { utility += parameters.betaParking; - } - else if (residence == 1 && home) + } else if (residence == 1 && home) utility += parameters.betaParking / 2.0; if (innerParisDes && !home) utility += parameters.betaParkingCity * (innerParisDes ? 1 : 0); diff --git a/src/main/java/net/bhl/matsim/uam/modechoice/estimation/car/CustomCarPrediction.java b/src/main/java/net/bhl/matsim/uam/modechoice/estimation/car/CustomCarPrediction.java index 38640baa..cd9959d5 100644 --- a/src/main/java/net/bhl/matsim/uam/modechoice/estimation/car/CustomCarPrediction.java +++ b/src/main/java/net/bhl/matsim/uam/modechoice/estimation/car/CustomCarPrediction.java @@ -2,6 +2,12 @@ import org.matsim.core.population.routes.NetworkRoute; +/** + * This class stores information about a car trip prediction. + * + * @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) + * + */ public class CustomCarPrediction { final public double distance; final public double travelTime; diff --git a/src/main/java/net/bhl/matsim/uam/modechoice/estimation/car/CustomCarPredictor.java b/src/main/java/net/bhl/matsim/uam/modechoice/estimation/car/CustomCarPredictor.java index f1d38f4b..923e872f 100644 --- a/src/main/java/net/bhl/matsim/uam/modechoice/estimation/car/CustomCarPredictor.java +++ b/src/main/java/net/bhl/matsim/uam/modechoice/estimation/car/CustomCarPredictor.java @@ -2,7 +2,6 @@ import java.util.List; -import org.matsim.api.core.v01.network.Link; import org.matsim.api.core.v01.network.Network; import org.matsim.api.core.v01.population.Leg; import org.matsim.api.core.v01.population.PlanElement; @@ -15,6 +14,12 @@ import ch.ethz.matsim.mode_choice.framework.ModeChoiceTrip; +/** + * This class defines the predictor for car trips. + * + * @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) + * + */ public class CustomCarPredictor { final private TripRouter router; final private TravelDisutility travelDisutility; diff --git a/src/main/java/net/bhl/matsim/uam/modechoice/estimation/motorcycle/CustomMCEstimator.java b/src/main/java/net/bhl/matsim/uam/modechoice/estimation/motorcycle/CustomMCEstimator.java index 9749f76e..85483b49 100644 --- a/src/main/java/net/bhl/matsim/uam/modechoice/estimation/motorcycle/CustomMCEstimator.java +++ b/src/main/java/net/bhl/matsim/uam/modechoice/estimation/motorcycle/CustomMCEstimator.java @@ -8,7 +8,12 @@ import ch.ethz.matsim.mode_choice.framework.trip_based.estimation.TripCandidate; import net.bhl.matsim.uam.modechoice.estimation.CustomModeChoiceParameters; - +/** + * This class defines the estimator for Motorcycle trips. + * + * @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) + * + */ public class CustomMCEstimator implements ModalTripEstimator { final private CustomMCPredictor predictor; final private CustomModeChoiceParameters parameters; @@ -26,13 +31,12 @@ public TripCandidate estimateTrip(ModeChoiceTrip trip, List prece double cost = parameters.distanceCostCar_km * distance_km; double income = 0.0; - + if (trip.getPerson().getAttributes().getAttribute("income") != null) income = (double) trip.getPerson().getAttributes().getAttribute("income"); else income = parameters.averageIncome; - double betaCost = parameters.betaCost(distance_km, - income); + double betaCost = parameters.betaCost(distance_km, income); double utility = 0.0; utility += parameters.alphaMC; diff --git a/src/main/java/net/bhl/matsim/uam/modechoice/estimation/motorcycle/CustomMCPrediction.java b/src/main/java/net/bhl/matsim/uam/modechoice/estimation/motorcycle/CustomMCPrediction.java index 47a3defb..38c53e71 100644 --- a/src/main/java/net/bhl/matsim/uam/modechoice/estimation/motorcycle/CustomMCPrediction.java +++ b/src/main/java/net/bhl/matsim/uam/modechoice/estimation/motorcycle/CustomMCPrediction.java @@ -2,6 +2,12 @@ import org.matsim.core.population.routes.NetworkRoute; +/** + * This class stores information about a motorcycle trip prediction. + * + * @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) + * + */ public class CustomMCPrediction { final public double distance; final public double travelTime; diff --git a/src/main/java/net/bhl/matsim/uam/modechoice/estimation/motorcycle/CustomMCPredictor.java b/src/main/java/net/bhl/matsim/uam/modechoice/estimation/motorcycle/CustomMCPredictor.java index de36639e..ede7bcaa 100644 --- a/src/main/java/net/bhl/matsim/uam/modechoice/estimation/motorcycle/CustomMCPredictor.java +++ b/src/main/java/net/bhl/matsim/uam/modechoice/estimation/motorcycle/CustomMCPredictor.java @@ -15,6 +15,12 @@ import ch.ethz.matsim.mode_choice.framework.ModeChoiceTrip; +/** + * This class defines the predictor for Motorcycle trips. + * + * @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) + * + */ public class CustomMCPredictor { final private TripRouter router; final private TravelDisutility travelDisutility; @@ -29,14 +35,14 @@ public CustomMCPredictor(TripRouter router, ActivityFacilities facilities, Trave public CustomMCPrediction predict(ModeChoiceTrip trip) { Trip tripInformation = trip.getTripInformation(); - - LinkWrapperFacility originFacility = - new LinkWrapperFacility(this.network.getLinks().get(tripInformation.getOriginActivity().getLinkId())); - LinkWrapperFacility destinationFacility = - new LinkWrapperFacility(this.network.getLinks().get(tripInformation.getDestinationActivity().getLinkId())); + + LinkWrapperFacility originFacility = new LinkWrapperFacility( + this.network.getLinks().get(tripInformation.getOriginActivity().getLinkId())); + LinkWrapperFacility destinationFacility = new LinkWrapperFacility( + this.network.getLinks().get(tripInformation.getDestinationActivity().getLinkId())); List result = router.calcRoute("mc", originFacility, destinationFacility, - tripInformation.getOriginActivity().getEndTime(), trip.getPerson()); + tripInformation.getOriginActivity().getEndTime(), trip.getPerson()); NetworkRoute route = (NetworkRoute) ((Leg) result.get(0)).getRoute(); @@ -48,10 +54,12 @@ public CustomMCPrediction predict(ModeChoiceTrip trip) { // Also, while the NetworkRoutingModule does not take the arrival link into // account, it is simulated in the Netsim. Hence, to arrive at the correct // estimate, we need to add the travel time for the arrival link. - //double arrivalAtLinkTime = trip.getTripInformation().getOriginActivity().getEndTime() + travelTime; - //Link arrivalLink = network.getLinks().get(route.getEndLinkId()); + // double arrivalAtLinkTime = + // trip.getTripInformation().getOriginActivity().getEndTime() + travelTime; + // Link arrivalLink = network.getLinks().get(route.getEndLinkId()); - //travelTime += travelDisutility.getLinkTravelDisutility(arrivalLink, arrivalAtLinkTime, trip.getPerson(), null); + // travelTime += travelDisutility.getLinkTravelDisutility(arrivalLink, + // arrivalAtLinkTime, trip.getPerson(), null); return new CustomMCPrediction(route.getDistance(), travelTime, route); } diff --git a/src/main/java/net/bhl/matsim/uam/modechoice/estimation/other/CustomBikeEstimator.java b/src/main/java/net/bhl/matsim/uam/modechoice/estimation/other/CustomBikeEstimator.java index 2c360f92..a7143ad1 100644 --- a/src/main/java/net/bhl/matsim/uam/modechoice/estimation/other/CustomBikeEstimator.java +++ b/src/main/java/net/bhl/matsim/uam/modechoice/estimation/other/CustomBikeEstimator.java @@ -13,20 +13,26 @@ import ch.ethz.matsim.mode_choice.prediction.TeleportationPredictor; import net.bhl.matsim.uam.modechoice.estimation.CustomModeChoiceParameters; +/** + * This class defines the estimator for Bike trips. + * + * @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) + * + */ public class CustomBikeEstimator implements ModalTripEstimator { final private TeleportationPredictor predictor; final private CustomModeChoiceParameters parameters; private static final Logger log = Logger.getLogger(CustomBikeEstimator.class); private static int counterWarning = 0; private boolean isMinTravelTime; - + public CustomBikeEstimator(CustomModeChoiceParameters parameters, TeleportationPredictor predictor) { this.predictor = predictor; this.parameters = parameters; } - public CustomBikeEstimator(CustomModeChoiceParameters parameters, - TeleportationPredictor predictor, boolean isMinTravelTime) { + public CustomBikeEstimator(CustomModeChoiceParameters parameters, TeleportationPredictor predictor, + boolean isMinTravelTime) { this(parameters, predictor); this.isMinTravelTime = isMinTravelTime; } @@ -34,28 +40,28 @@ public CustomBikeEstimator(CustomModeChoiceParameters parameters, @Override public TripCandidate estimateTrip(ModeChoiceTrip trip, List preceedingTrips) { TeleportationPrediction prediction = predictor.predict(trip); - - //In case of standard simulation, returns travel time instead of utility. + + // In case of standard simulation, returns travel time instead of utility. if (isMinTravelTime) { - return new TripCandidateWithPrediction(prediction.travelTime, "bike", prediction); + return new TripCandidateWithPrediction(prediction.travelTime, "bike", prediction); } double travelTime_min = prediction.travelTime / 60.0; - + double age = parameters.averageAge; try { age = PersonUtils.getAge(trip.getPerson()); } catch (NullPointerException e) { // use default age if (CustomBikeEstimator.counterWarning <= 10) { - log.warn("Age is missing for Person: " + trip.getPerson().getId() + ". Using default average age of " + age + "."); + log.warn("Age is missing for Person: " + trip.getPerson().getId() + ". Using default average age of " + + age + "."); if (CustomBikeEstimator.counterWarning == 10) log.warn("Additional warnings of this type will not be reported!"); CustomBikeEstimator.counterWarning++; } } - double utility = 0.0; utility += parameters.alphaBike; diff --git a/src/main/java/net/bhl/matsim/uam/modechoice/estimation/other/CustomCarPassengerEstimator.java b/src/main/java/net/bhl/matsim/uam/modechoice/estimation/other/CustomCarPassengerEstimator.java index f4a5a196..801ca9a9 100644 --- a/src/main/java/net/bhl/matsim/uam/modechoice/estimation/other/CustomCarPassengerEstimator.java +++ b/src/main/java/net/bhl/matsim/uam/modechoice/estimation/other/CustomCarPassengerEstimator.java @@ -1,4 +1,5 @@ package net.bhl.matsim.uam.modechoice.estimation.other; + import java.util.List; import ch.ethz.matsim.mode_choice.estimation.DefaultTripCandidate; @@ -6,6 +7,12 @@ import ch.ethz.matsim.mode_choice.framework.ModeChoiceTrip; import ch.ethz.matsim.mode_choice.framework.trip_based.estimation.TripCandidate; +/** + * This class defines the estimator for car passenger trips. + * + * @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) + * + */ public class CustomCarPassengerEstimator implements ModalTripEstimator { @Override public TripCandidate estimateTrip(ModeChoiceTrip trip, List preceedingTrips) { diff --git a/src/main/java/net/bhl/matsim/uam/modechoice/estimation/other/CustomWalkEstimator.java b/src/main/java/net/bhl/matsim/uam/modechoice/estimation/other/CustomWalkEstimator.java index ef818465..08981232 100644 --- a/src/main/java/net/bhl/matsim/uam/modechoice/estimation/other/CustomWalkEstimator.java +++ b/src/main/java/net/bhl/matsim/uam/modechoice/estimation/other/CustomWalkEstimator.java @@ -10,6 +10,12 @@ import ch.ethz.matsim.mode_choice.prediction.TeleportationPredictor; import net.bhl.matsim.uam.modechoice.estimation.CustomModeChoiceParameters; +/** + * This class defines the estimator for walk trips. + * + * @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) + * + */ public class CustomWalkEstimator implements ModalTripEstimator { final private TeleportationPredictor predictor; final private CustomModeChoiceParameters parameters; @@ -20,8 +26,8 @@ public CustomWalkEstimator(CustomModeChoiceParameters parameters, TeleportationP this.parameters = parameters; } - public CustomWalkEstimator(CustomModeChoiceParameters parameters, - TeleportationPredictor predictor, boolean isMinTravelTime) { + public CustomWalkEstimator(CustomModeChoiceParameters parameters, TeleportationPredictor predictor, + boolean isMinTravelTime) { this(parameters, predictor); this.isMinTravelTime = isMinTravelTime; } @@ -30,7 +36,10 @@ public CustomWalkEstimator(CustomModeChoiceParameters parameters, public TripCandidate estimateTrip(ModeChoiceTrip trip, List preceedingTrips) { TeleportationPrediction prediction = predictor.predict(trip); if (isMinTravelTime) { - return new TripCandidateWithPrediction(prediction.travelTime, "walk", prediction); //In case of standard simulation, returns travel time instead of utility. + return new TripCandidateWithPrediction(prediction.travelTime, "walk", prediction); // In case of standard + // simulation, returns + // travel time instead + // of utility. } double travelTime_min = prediction.travelTime / 60.0; @@ -38,7 +47,6 @@ public TripCandidate estimateTrip(ModeChoiceTrip trip, List prece double utility = parameters.alphaWalk; utility += parameters.betaTravelTimeWalk_min * travelTime_min; - return new TripCandidateWithPrediction(utility, "walk", prediction); } } diff --git a/src/main/java/net/bhl/matsim/uam/modechoice/estimation/pt/CustomPublicTransportEstimator.java b/src/main/java/net/bhl/matsim/uam/modechoice/estimation/pt/CustomPublicTransportEstimator.java index 70d9017e..a0b7d0e5 100644 --- a/src/main/java/net/bhl/matsim/uam/modechoice/estimation/pt/CustomPublicTransportEstimator.java +++ b/src/main/java/net/bhl/matsim/uam/modechoice/estimation/pt/CustomPublicTransportEstimator.java @@ -2,7 +2,6 @@ import java.util.List; -import org.matsim.api.core.v01.population.Leg; import org.matsim.api.core.v01.population.Person; import ch.ethz.matsim.mode_choice.estimation.ModalTripEstimator; @@ -13,6 +12,12 @@ import net.bhl.matsim.uam.modechoice.estimation.pt.subscription.SubscriptionFinder; import net.bhl.matsim.uam.modechoice.estimation.pt.subscription.SubscriptionInformation; +/** + * This class defines the estimator for Public Transport trips. + * + * @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) + * + */ public class CustomPublicTransportEstimator implements ModalTripEstimator { final private CustomPublicTransportPredictor predictor; final private CustomModeChoiceParameters parameters; diff --git a/src/main/java/net/bhl/matsim/uam/modechoice/estimation/pt/CustomPublicTransportPrediction.java b/src/main/java/net/bhl/matsim/uam/modechoice/estimation/pt/CustomPublicTransportPrediction.java index 257486e8..7245025c 100644 --- a/src/main/java/net/bhl/matsim/uam/modechoice/estimation/pt/CustomPublicTransportPrediction.java +++ b/src/main/java/net/bhl/matsim/uam/modechoice/estimation/pt/CustomPublicTransportPrediction.java @@ -4,6 +4,12 @@ import org.matsim.api.core.v01.population.Leg; +/** + * This class stores information about a Public transport trip prediction. + * + * @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) + * + */ public class CustomPublicTransportPrediction { final public int numberOfTransfers; final public boolean isOnlyWalk; diff --git a/src/main/java/net/bhl/matsim/uam/modechoice/estimation/pt/CustomPublicTransportPredictor.java b/src/main/java/net/bhl/matsim/uam/modechoice/estimation/pt/CustomPublicTransportPredictor.java index b8cc2d30..006959d8 100644 --- a/src/main/java/net/bhl/matsim/uam/modechoice/estimation/pt/CustomPublicTransportPredictor.java +++ b/src/main/java/net/bhl/matsim/uam/modechoice/estimation/pt/CustomPublicTransportPredictor.java @@ -17,11 +17,17 @@ import ch.ethz.matsim.baseline_scenario.transit.routing.EnrichedTransitRoute; import ch.ethz.matsim.mode_choice.framework.ModeChoiceTrip; +/** + * This class defines the predictor for Public transport trips. + * + * @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) + * + */ public class CustomPublicTransportPredictor { final private TripRouter router; final private Network network; private Scenario scenario; - + public CustomPublicTransportPredictor(TripRouter router, ActivityFacilities facilities, Scenario scenario) { this.router = router; this.scenario = scenario; @@ -29,7 +35,7 @@ public CustomPublicTransportPredictor(TripRouter router, ActivityFacilities faci } public CustomPublicTransportPrediction predict(ModeChoiceTrip trip) { - Trip tripInformation = trip.getTripInformation(); + Trip tripInformation = trip.getTripInformation(); LinkWrapperFacility newOriginFacility = new LinkWrapperFacility( network.getLinks().get(tripInformation.getOriginActivity().getLinkId())); @@ -56,7 +62,7 @@ public CustomPublicTransportPrediction predict(ModeChoiceTrip trip) { for (Leg leg : legs) { if (leg.getMode().equals("pt")) { - if(scenario.getConfig().transit().isUseTransit()) { + if (scenario.getConfig().transit().isUseTransit()) { numberOfTransfers++; EnrichedTransitRoute route = (EnrichedTransitRoute) leg.getRoute(); @@ -73,13 +79,16 @@ public CustomPublicTransportPrediction predict(ModeChoiceTrip trip) { isOnlyWalk = false; } else { // teleported pt - double distanceFactor = ((PlansCalcRouteConfigGroup) scenario.getConfig().getModules().get("planscalcroute")).getBeelineDistanceFactors().get(TransportMode.pt); - double distance = CoordUtils.calcEuclideanDistance((tripInformation.getOriginActivity().getCoord()), tripInformation.getDestinationActivity().getCoord()); + double distanceFactor = ((PlansCalcRouteConfigGroup) scenario.getConfig().getModules() + .get("planscalcroute")).getBeelineDistanceFactors().get(TransportMode.pt); + double distance = CoordUtils.calcEuclideanDistance((tripInformation.getOriginActivity().getCoord()), + tripInformation.getDestinationActivity().getCoord()); inVehicleDistance += distance * distanceFactor; - - double speed = ((PlansCalcRouteConfigGroup) scenario.getConfig().getModules().get("planscalcroute")).getTeleportedModeSpeeds().get(TransportMode.pt); - - inVehicleTime += inVehicleDistance / speed; + + double speed = ((PlansCalcRouteConfigGroup) scenario.getConfig().getModules().get("planscalcroute")) + .getTeleportedModeSpeeds().get(TransportMode.pt); + + inVehicleTime += inVehicleDistance / speed; isOnlyWalk = false; } diff --git a/src/main/java/net/bhl/matsim/uam/modechoice/estimation/pt/subscription/SubscriptionFinder.java b/src/main/java/net/bhl/matsim/uam/modechoice/estimation/pt/subscription/SubscriptionFinder.java index 0bdcad51..2f04bf6e 100644 --- a/src/main/java/net/bhl/matsim/uam/modechoice/estimation/pt/subscription/SubscriptionFinder.java +++ b/src/main/java/net/bhl/matsim/uam/modechoice/estimation/pt/subscription/SubscriptionFinder.java @@ -3,6 +3,13 @@ import org.matsim.api.core.v01.population.Person; import org.matsim.utils.objectattributes.ObjectAttributes; +/** + * This class is used to get public transport subscription information from the + * passengers. + * + * @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) + * + */ public class SubscriptionFinder { final private ObjectAttributes personAttributes; @@ -13,9 +20,8 @@ public SubscriptionFinder(ObjectAttributes personAttributes) { public SubscriptionInformation getSubscriptions(Person person) { boolean hasSubscription = false; if (person.getAttributes().getAttribute("ptSubscription") != null) - hasSubscription = (boolean) person.getAttributes().getAttribute("ptSubscription"); + hasSubscription = (boolean) person.getAttributes().getAttribute("ptSubscription"); - return new SubscriptionInformation(hasSubscription); } } diff --git a/src/main/java/net/bhl/matsim/uam/modechoice/estimation/pt/subscription/SubscriptionInformation.java b/src/main/java/net/bhl/matsim/uam/modechoice/estimation/pt/subscription/SubscriptionInformation.java index 85f2b9a2..5feb08ed 100644 --- a/src/main/java/net/bhl/matsim/uam/modechoice/estimation/pt/subscription/SubscriptionInformation.java +++ b/src/main/java/net/bhl/matsim/uam/modechoice/estimation/pt/subscription/SubscriptionInformation.java @@ -1,10 +1,17 @@ package net.bhl.matsim.uam.modechoice.estimation.pt.subscription; +/** + * This class stores the logical value of a passenger Public transport + * subscription. + * + * @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) + * + */ public class SubscriptionInformation { final public boolean hasSubscription; public SubscriptionInformation(boolean hasSubscription) { this.hasSubscription = hasSubscription; - + } } diff --git a/src/main/java/net/bhl/matsim/uam/modechoice/estimation/taxi/CustomTaxiEstimator.java b/src/main/java/net/bhl/matsim/uam/modechoice/estimation/taxi/CustomTaxiEstimator.java index 42f51c31..9a965909 100644 --- a/src/main/java/net/bhl/matsim/uam/modechoice/estimation/taxi/CustomTaxiEstimator.java +++ b/src/main/java/net/bhl/matsim/uam/modechoice/estimation/taxi/CustomTaxiEstimator.java @@ -10,6 +10,12 @@ import net.bhl.matsim.uam.modechoice.estimation.car.CustomCarPrediction; import net.bhl.matsim.uam.modechoice.estimation.car.CustomCarPredictor; +/** + * This class defines the estimator for Taxi mode. + * + * @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) + * + */ public class CustomTaxiEstimator implements ModalTripEstimator { final private CustomCarPredictor predictor; final private CustomModeChoiceParameters parameters; diff --git a/src/main/java/net/bhl/matsim/uam/modechoice/estimation/uam/CustomUAMEstimator.java b/src/main/java/net/bhl/matsim/uam/modechoice/estimation/uam/CustomUAMEstimator.java index 2f06ee7a..f7f9499d 100644 --- a/src/main/java/net/bhl/matsim/uam/modechoice/estimation/uam/CustomUAMEstimator.java +++ b/src/main/java/net/bhl/matsim/uam/modechoice/estimation/uam/CustomUAMEstimator.java @@ -8,7 +8,13 @@ import ch.ethz.matsim.mode_choice.framework.trip_based.estimation.TripCandidate; import net.bhl.matsim.uam.modechoice.estimation.CustomModeChoiceParameters; -public class CustomUAMEstimator implements ModalTripEstimator{ +/** + * This class defines the estimator for UAM trips. + * + * @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) + * + */ +public class CustomUAMEstimator implements ModalTripEstimator { final private CustomUAMPredictor predictor; final private CustomModeChoiceParameters parameters; private boolean isMinTravelTime; @@ -17,21 +23,23 @@ public CustomUAMEstimator(CustomModeChoiceParameters parameters, CustomUAMPredic this.predictor = predictor; this.parameters = parameters; } + public CustomUAMEstimator(CustomModeChoiceParameters parameters, CustomUAMPredictor predictor, boolean isMinTravelTime) { this(parameters, predictor); this.isMinTravelTime = isMinTravelTime; } + @Override public TripCandidate estimateTrip(ModeChoiceTrip trip, List preceedingTrips) { - + CustomUAMPrediction prediction = predictor.predictTrip(trip); - - //In case of standard simulation, returns travel time instead of utility. + + // In case of standard simulation, returns travel time instead of utility. if (isMinTravelTime) { return new TripCandidateWithPrediction(prediction.getTravelTime(), "uam", prediction); } - + return new TripCandidateWithPrediction(prediction.getUtility(), "uam", prediction); } diff --git a/src/main/java/net/bhl/matsim/uam/modechoice/estimation/uam/CustomUAMPrediction.java b/src/main/java/net/bhl/matsim/uam/modechoice/estimation/uam/CustomUAMPrediction.java index e83ca0f9..32e540be 100644 --- a/src/main/java/net/bhl/matsim/uam/modechoice/estimation/uam/CustomUAMPrediction.java +++ b/src/main/java/net/bhl/matsim/uam/modechoice/estimation/uam/CustomUAMPrediction.java @@ -1,20 +1,27 @@ package net.bhl.matsim.uam.modechoice.estimation.uam; +/** + * This class stores information about a UAM trip prediction. + * + * @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) + * + */ public class CustomUAMPrediction { - + private double utility; private double travelTime; - + public CustomUAMPrediction(double utility, double travelTime) { this.utility = utility; this.travelTime = travelTime; } + public double getUtility() { return utility; - } - + } + public double getTravelTime() { return travelTime; - } + } } diff --git a/src/main/java/net/bhl/matsim/uam/modechoice/estimation/uam/CustomUAMPredictor.java b/src/main/java/net/bhl/matsim/uam/modechoice/estimation/uam/CustomUAMPredictor.java index f7e50fca..ed134ab3 100644 --- a/src/main/java/net/bhl/matsim/uam/modechoice/estimation/uam/CustomUAMPredictor.java +++ b/src/main/java/net/bhl/matsim/uam/modechoice/estimation/uam/CustomUAMPredictor.java @@ -46,6 +46,12 @@ import net.bhl.matsim.uam.modechoice.estimation.pt.subscription.SubscriptionFinder; import net.bhl.matsim.uam.modechoice.estimation.pt.subscription.SubscriptionInformation; +/** + * This class defines the predictor for UAM trips. + * + * @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) + * + */ public class CustomUAMPredictor { public static final String UAM_INTERACTION = "uam_interaction"; public static final String TELEPORTATION_LEG_MODE = "uam"; @@ -82,6 +88,10 @@ public CustomUAMPredictor(UAMManager manager, Scenario scenario, WaitingStationD this.subscriptions = subscriptions; } + /** + * @param trip Mode choice trip + * @return A UAMPrediction of a trip containing its utility and travel time. + */ public CustomUAMPrediction predictTrip(ModeChoiceTrip trip) { Trip tripInformation = trip.getTripInformation(); @@ -94,6 +104,13 @@ public CustomUAMPrediction predictTrip(ModeChoiceTrip trip) { return new CustomUAMPrediction(UAMTrip.maxUtility, UAMTrip.minTravelTime); } + /** + * @param person Person to perform the trip + * @param fromLink Origin link + * @param toLink Destination link + * @param departureTime Trip departure time + * @return A UAMTripData containing travel time and utility for the given route. + */ private UAMTripData calcBestRoute(Person person, Link fromLink, Link toLink, double departureTime) { Set modes = new HashSet<>(); @@ -253,6 +270,15 @@ private UAMTripData calcBestRoute(Person person, Link fromLink, Link toLink, dou return new UAMTripData(maxUtility, minTravelTime); } + /** + * @param person Person to perform the trip + * @param access True if it is an access leg, false if it is an egress leg + * @param link Origin link + * @param time Trip departure time + * @param station UAM Station, leg destination if access, leg origin if egress + * @param mode Mode used + * @return The utility of an access or egress leg to a UAM Station + */ private double estimateUtilityWrapper(Person person, boolean access, Link link, double time, UAMStation station, String mode) { Coord destinationCoord; @@ -370,6 +396,15 @@ private double estiamteUtility(List legs, Person person, double crowflyDist return utility; } + /** + * @param mode Mode used in the trip + * @param traveltime Trip travel time + * @param distance Trip distance + * @param person Person to perform the trip + * @param croflyDistance_km Trip crowfly distance in km + * @param destinationCoord Coordinates of the destination + * @return The utility of a trip + */ private double estimateUtility(String mode, double traveltime, double distance, Person person, double croflyDistance_km, Coord destinationCoord) { if (mode.equals(TransportMode.walk)) { @@ -450,6 +485,16 @@ private double estimateUtility(String mode, double traveltime, double distance, return Double.NEGATIVE_INFINITY; } + /** + * @param fromLink Origin link + * @param toLink Destination link + * @param departureTime Trip departure time + * @param accessMode Mode used for access leg + * @param bestOriginStation Selected origin UAM Station + * @param egressMode Mode used for egress leg + * @param bestDestinationStation Selected destination UAM Station + * @return Travel time of a UAM trip including access and egress travel times. + */ private double calcTraveltime(Link fromLink, Link toLink, double departureTime, String accessMode, UAMStation bestOriginStation, String egressMode, UAMStation bestDestinationStation) { double minTravelTime = Double.POSITIVE_INFINITY; diff --git a/src/main/java/net/bhl/matsim/uam/passenger/UAMPassengerDropoffActivity.java b/src/main/java/net/bhl/matsim/uam/passenger/UAMPassengerDropoffActivity.java index 723a45e6..38064f9e 100644 --- a/src/main/java/net/bhl/matsim/uam/passenger/UAMPassengerDropoffActivity.java +++ b/src/main/java/net/bhl/matsim/uam/passenger/UAMPassengerDropoffActivity.java @@ -9,6 +9,12 @@ import org.matsim.contrib.dvrp.vrpagent.VrpActivity; import org.matsim.contrib.dynagent.DynAgent; +/** + * This class defines the drop off activity for the passenger and its properties. + * + * @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) + * + */ public class UAMPassengerDropoffActivity extends VrpActivity { private final PassengerEngine passengerEngine; private final DynAgent driver; diff --git a/src/main/java/net/bhl/matsim/uam/passenger/UAMPassengerPickupActivity.java b/src/main/java/net/bhl/matsim/uam/passenger/UAMPassengerPickupActivity.java index 140a7651..319fa9ea 100644 --- a/src/main/java/net/bhl/matsim/uam/passenger/UAMPassengerPickupActivity.java +++ b/src/main/java/net/bhl/matsim/uam/passenger/UAMPassengerPickupActivity.java @@ -11,6 +11,12 @@ import org.matsim.contrib.dynagent.DynAgent; import org.matsim.core.mobsim.framework.MobsimPassengerAgent; +/** + * This class defines the pick up activity for the passenger and its properties. + * + * @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) + * + */ public class UAMPassengerPickupActivity extends AbstractDynActivity implements PassengerPickupActivity { private final PassengerEngine passengerEngine; diff --git a/src/main/java/net/bhl/matsim/uam/passenger/UAMRequest.java b/src/main/java/net/bhl/matsim/uam/passenger/UAMRequest.java index ed11671e..a61cd6a8 100644 --- a/src/main/java/net/bhl/matsim/uam/passenger/UAMRequest.java +++ b/src/main/java/net/bhl/matsim/uam/passenger/UAMRequest.java @@ -11,6 +11,12 @@ import net.bhl.matsim.uam.schedule.UAMDropoffTask; import net.bhl.matsim.uam.schedule.UAMPickupTask; +/** + * This class defines the UAM Request and its properties. + * + * @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) + * + */ public class UAMRequest implements PassengerRequest { final private Link originLink; diff --git a/src/main/java/net/bhl/matsim/uam/passenger/UAMRequestCreator.java b/src/main/java/net/bhl/matsim/uam/passenger/UAMRequestCreator.java index 5aa88034..5a9a47d1 100644 --- a/src/main/java/net/bhl/matsim/uam/passenger/UAMRequestCreator.java +++ b/src/main/java/net/bhl/matsim/uam/passenger/UAMRequestCreator.java @@ -13,6 +13,12 @@ import net.bhl.matsim.uam.dispatcher.Dispatcher; +/** + * This class creates a UAM request. + * + * @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) + * + */ public class UAMRequestCreator implements PassengerRequestCreator{ @Inject List dispatchers; From de4acd61298357a71bfc2a9e6948b22f93e74c33 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aitan=20Medeiros=20Milit=C3=A3o?= Date: Mon, 23 Sep 2019 16:16:06 +0200 Subject: [PATCH 4/5] -Documentation and formating -Folders: qsim, router, run -under modechoice folder: model, tracking, utils and all java classes. --- .../uam/modechoice/CarMCModeAvailability.java | 7 + .../uam/modechoice/CarModeAvailability.java | 6 + .../uam/modechoice/CustomCarDisutility.java | 5 + .../modechoice/CustomModeChainGenerator.java | 6 + .../CustomModeChoiceModuleMinTravelTime.java | 39 ++--- .../modechoice/LicenseModeAvailability.java | 8 +- .../uam/modechoice/MultinomialSelector.java | 5 + .../modechoice/model/MinTravelTimeModel.java | 11 +- .../uam/modechoice/model/PlanBasedModel.java | 6 + .../uam/modechoice/model/TourBasedModel.java | 6 + .../tracking/FreeflowTravelTimeValidator.java | 6 + .../tracking/TrackedPrediction.java | 6 + .../tracking/TrackingModeChoiceModel.java | 6 + .../tracking/TravelTimeTracker.java | 6 + .../tracking/TravelTimeTrackerListener.java | 6 + .../uam/modechoice/utils/LongPlanFilter.java | 7 + .../uam/modechoice/utils/RemoveRoutes.java | 7 + .../uam/modechoice/utils/RevisionWriter.java | 6 + .../utils/VehicleLocationUtils.java | 6 + .../matsim/uam/qsim/UAMDepartureHandler.java | 44 ++++-- .../uam/qsim/UAMDepartureHandlerOld.java | 133 ++++++++++-------- .../uam/qsim/UAMLinkSpeedCalculator.java | 6 + .../matsim/uam/qsim/UAMPassengerEngine.java | 10 +- .../bhl/matsim/uam/qsim/UAMQSimPlugin.java | 6 + .../bhl/matsim/uam/qsim/UAMQsimModule.java | 7 +- .../bhl/matsim/uam/qsim/UAMSpeedModule.java | 7 + .../net/bhl/matsim/uam/qsim/package-info.java | 2 +- .../matsim/uam/router/TaxiRoutingModule.java | 7 +- .../uam/router/TaxiRoutingModuleProvider.java | 6 + .../router/UAMIntermodalRoutingModule.java | 12 +- .../uam/router/UAMMainModeIdentifier.java | 6 + .../uam/router/UAMRoutingModuleProvider.java | 6 + .../bhl/matsim/uam/router/package-info.java | 2 +- .../strategy/UAMMaxAccessUtilityStrategy.java | 48 ++++--- .../strategy/UAMMaxUtilityStrategy.java | 5 +- .../UAMMinAccessDistanceStrategy.java | 55 +++++--- .../UAMMinAccessTravelTimeStrategy.java | 11 +- .../strategy/UAMMinDistanceStrategy.java | 64 +++++---- .../strategy/UAMMinTravelTimeStrategy.java | 55 +++++--- .../strategy/UAMPredefinedStrategy.java | 37 ++--- .../uam/router/strategy/UAMStrategy.java | 7 +- .../router/strategy/UAMStrategyRouter.java | 51 +++---- .../uam/router/strategy/UAMStrategyUtils.java | 19 ++- .../net/bhl/matsim/uam/run/CustomModule.java | 8 +- .../bhl/matsim/uam/run/RunUAMScenario.java | 2 +- .../bhl/matsim/uam/run/RunUAMScenarioGUI.java | 4 +- .../net/bhl/matsim/uam/run/UAMModule.java | 6 + .../net/bhl/matsim/uam/run/package-info.java | 2 +- 48 files changed, 537 insertions(+), 246 deletions(-) diff --git a/src/main/java/net/bhl/matsim/uam/modechoice/CarMCModeAvailability.java b/src/main/java/net/bhl/matsim/uam/modechoice/CarMCModeAvailability.java index 98c1b418..4fe30725 100644 --- a/src/main/java/net/bhl/matsim/uam/modechoice/CarMCModeAvailability.java +++ b/src/main/java/net/bhl/matsim/uam/modechoice/CarMCModeAvailability.java @@ -9,6 +9,13 @@ import ch.ethz.matsim.mode_choice.framework.ModeChoiceTrip; import ch.ethz.matsim.mode_choice.mode_availability.DefaultModeAvailability; +/** + * This class is used to filter trips according to the person availability of + * car and motorcycle modes. + * + * @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) + * + */ public class CarMCModeAvailability extends DefaultModeAvailability { final private String CAR_MODE = "car"; final private String MC_MODE = "mc"; diff --git a/src/main/java/net/bhl/matsim/uam/modechoice/CarModeAvailability.java b/src/main/java/net/bhl/matsim/uam/modechoice/CarModeAvailability.java index 92bd2b5b..de37125c 100644 --- a/src/main/java/net/bhl/matsim/uam/modechoice/CarModeAvailability.java +++ b/src/main/java/net/bhl/matsim/uam/modechoice/CarModeAvailability.java @@ -10,6 +10,12 @@ import ch.ethz.matsim.mode_choice.framework.ModeChoiceTrip; import ch.ethz.matsim.mode_choice.mode_availability.DefaultModeAvailability; +/** + * This class is used to filter trips according to the person availability of + * car and bike modes. + * + * @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) + */ public class CarModeAvailability extends DefaultModeAvailability { public CarModeAvailability(Collection modes) { diff --git a/src/main/java/net/bhl/matsim/uam/modechoice/CustomCarDisutility.java b/src/main/java/net/bhl/matsim/uam/modechoice/CustomCarDisutility.java index d96aee18..a05f4bb5 100644 --- a/src/main/java/net/bhl/matsim/uam/modechoice/CustomCarDisutility.java +++ b/src/main/java/net/bhl/matsim/uam/modechoice/CustomCarDisutility.java @@ -12,6 +12,11 @@ import org.matsim.vehicles.VehicleImpl; import org.matsim.vehicles.VehicleUtils; +/** + * This class provides disutility to travel on links by mode car. + * + * @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) + */ public class CustomCarDisutility implements TravelDisutility { final private static QVehicle qVehicle = new QVehicle( new VehicleImpl(Id.createVehicleId("calculation"), VehicleUtils.getDefaultVehicleType())); diff --git a/src/main/java/net/bhl/matsim/uam/modechoice/CustomModeChainGenerator.java b/src/main/java/net/bhl/matsim/uam/modechoice/CustomModeChainGenerator.java index a7fd1ea6..768bb5af 100644 --- a/src/main/java/net/bhl/matsim/uam/modechoice/CustomModeChainGenerator.java +++ b/src/main/java/net/bhl/matsim/uam/modechoice/CustomModeChainGenerator.java @@ -13,6 +13,12 @@ import ch.ethz.matsim.mode_choice.framework.utils.ModeChainGenerator; import ch.ethz.matsim.mode_choice.framework.utils.ModeChainGeneratorFactory; +/** + * This class defines the mode chain generator that provides different mode + * options for trips + * + * @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) + */ public class CustomModeChainGenerator implements ModeChainGenerator { final private ModeChainGenerator delegate; final private List variableIndices; diff --git a/src/main/java/net/bhl/matsim/uam/modechoice/CustomModeChoiceModuleMinTravelTime.java b/src/main/java/net/bhl/matsim/uam/modechoice/CustomModeChoiceModuleMinTravelTime.java index 91872ffa..ef5739ec 100644 --- a/src/main/java/net/bhl/matsim/uam/modechoice/CustomModeChoiceModuleMinTravelTime.java +++ b/src/main/java/net/bhl/matsim/uam/modechoice/CustomModeChoiceModuleMinTravelTime.java @@ -81,11 +81,17 @@ import net.bhl.matsim.uam.modechoice.tracking.TravelTimeTrackerListener; import net.bhl.matsim.uam.qsim.UAMLinkSpeedCalculator; -public class CustomModeChoiceModuleMinTravelTime extends AbstractModule{ +/** + * A MATSim Abstract Module for the classes used by the + * {@link MinTravelTimeModel}. + * + * @author Aitanm (Aitan Militão), RRothfeld (Raoul Rothfeld) + */ +public class CustomModeChoiceModuleMinTravelTime extends AbstractModule { private final CommandLine cmd; private final List vehicleModes = new LinkedList<>(); private final boolean isMinTravelTime; - + public CustomModeChoiceModuleMinTravelTime(CommandLine cmd, boolean isMinTravelTime) { this.cmd = cmd; this.isMinTravelTime = isMinTravelTime; @@ -110,9 +116,9 @@ public void install() { // TODO: Probably can be completely kicked out soon // addEventHandlerBinding().to(FreeflowTravelTimeValidator.class); - + } - + @Provides @Singleton public CustomModeChoiceParameters provideCustomModeChoiceParameters() throws ConfigurationException { @@ -132,7 +138,7 @@ public CustomModeChoiceParameters provideCustomModeChoiceParameters() throws Con return parameters; } - + @Provides @Singleton public SubscriptionFinder provideSubscriptionFinder(Population population) { @@ -147,7 +153,7 @@ public Network provideRoadNetwork(Network fullNetwork) { new TransportModeNetworkFilter(fullNetwork).filter(roadNetwork, Collections.singleton("car")); return roadNetwork; } - + @Provides @Singleton public CustomCarDisutility.Factory provideCustomCarDisutilityFactory(UAMLinkSpeedCalculator speedCalculator) { @@ -160,17 +166,15 @@ public UAMStationConnectionGraph provideUAMStationConnectionGraph(UAMManager uam CustomModeChoiceParameters parameters, @Named("uam") ParallelLeastCostPathCalculator plcpc) { return new UAMStationConnectionGraph(uamManager, parameters, plcpc); } - - + @Provides public ModeChoiceModel provideModeChoiceModel(PlansCalcRouteConfigGroup routeConfig, CustomModeChoiceParameters parameters, TripRouter router, SubscriptionFinder subscriptionFinder, ActivityFacilities facilities, Network network, TravelTimeTracker travelTimeTracker, @Named("car") TravelTime carTravelTime, @Named("car") TravelDisutilityFactory carTravelDisutilityFactory, - UAMManager uamManager, Scenario scenario, - TransitConfigGroup transitConfig, - UAMConfigGroup uamConfig, Map travelDisutilityFactories, - Map travelTimes, LeastCostPathCalculatorFactory lcpcf, @Named("car") Network networkCar, + UAMManager uamManager, Scenario scenario, TransitConfigGroup transitConfig, UAMConfigGroup uamConfig, + Map travelDisutilityFactories, Map travelTimes, + LeastCostPathCalculatorFactory lcpcf, @Named("car") Network networkCar, @Named("uam") ParallelLeastCostPathCalculator plcpc, WaitingStationData waitingData, UAMStationConnectionGraph stationConnectionutilities) throws ConfigurationException { ModeAvailability modeAvailability = new CarModeAvailability(parameters.getModes()); @@ -180,14 +184,16 @@ public ModeChoiceModel provideModeChoiceModel(PlansCalcRouteConfigGroup routeCon TeleportationPredictor teleportationPredictorWalk = new TeleportationPredictor(crowflyDistanceFactorWalk, speedWalk); - CustomWalkEstimator walkEstimator = new CustomWalkEstimator(parameters, teleportationPredictorWalk, isMinTravelTime); + CustomWalkEstimator walkEstimator = new CustomWalkEstimator(parameters, teleportationPredictorWalk, + isMinTravelTime); double crowflyDistanceFactorBike = routeConfig.getModeRoutingParams().get("bike").getBeelineDistanceFactor(); double speedBike = routeConfig.getModeRoutingParams().get("bike").getTeleportedModeSpeed(); TeleportationPredictor teleportationPredictorBike = new TeleportationPredictor(crowflyDistanceFactorBike, speedBike); - CustomBikeEstimator bikeEstimator = new CustomBikeEstimator(parameters, teleportationPredictorBike, isMinTravelTime); + CustomBikeEstimator bikeEstimator = new CustomBikeEstimator(parameters, teleportationPredictorBike, + isMinTravelTime); CustomPublicTransportPredictor publicTransportPredictor = new CustomPublicTransportPredictor(router, facilities, scenario); @@ -238,8 +244,8 @@ public ModeChoiceModel provideModeChoiceModel(PlansCalcRouteConfigGroup routeCon tourConstraintFactory .addFactory(new TourConstraintFromTripConstraint.Factory(new CarPassangerTripConstraint.Factory())); - tourConstraintFactory - .addFactory(new TourConstraintFromTripConstraint.Factory(new UAMTripConstraint.Factory(uamManager, uamConfig))); + tourConstraintFactory.addFactory( + new TourConstraintFromTripConstraint.Factory(new UAMTripConstraint.Factory(uamManager, uamConfig))); CompositeTripConstraintFactory tripConstraintFactory = new CompositeTripConstraintFactory(); tripConstraintFactory.addFactory((new AvoidOnlyWalkConstraint.Factory())); @@ -271,7 +277,6 @@ public ModeChoiceModel provideModeChoiceModel(PlansCalcRouteConfigGroup routeCon model = new MinTravelTimeModel(tourEstimator, modeAvailability, tourConstraintFactory, tourFinder, tourSelectorFactory, modeChainGeneratorFactory, fallbackBehaviour); - if (cmd.hasOption("track-car-travel-times")) { model = new TrackingModeChoiceModel(model, travelTimeTracker); } diff --git a/src/main/java/net/bhl/matsim/uam/modechoice/LicenseModeAvailability.java b/src/main/java/net/bhl/matsim/uam/modechoice/LicenseModeAvailability.java index e119a599..ff51bc0c 100644 --- a/src/main/java/net/bhl/matsim/uam/modechoice/LicenseModeAvailability.java +++ b/src/main/java/net/bhl/matsim/uam/modechoice/LicenseModeAvailability.java @@ -10,6 +10,12 @@ import ch.ethz.matsim.mode_choice.framework.ModeChoiceTrip; import ch.ethz.matsim.mode_choice.mode_availability.DefaultModeAvailability; +/** + * This class is used to filter trips according to the person attribute of + * "having license" for the car mode. + * + * @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) + */ public class LicenseModeAvailability extends DefaultModeAvailability { final private String CAR_MODE = "car"; @@ -17,7 +23,7 @@ public LicenseModeAvailability(Collection modes) { super(modes); // TODO Auto-generated constructor stub } - + @Override public Collection getAvailableModes(List trips) { if (trips.size() > 0) { diff --git a/src/main/java/net/bhl/matsim/uam/modechoice/MultinomialSelector.java b/src/main/java/net/bhl/matsim/uam/modechoice/MultinomialSelector.java index ac35ca46..2334167e 100644 --- a/src/main/java/net/bhl/matsim/uam/modechoice/MultinomialSelector.java +++ b/src/main/java/net/bhl/matsim/uam/modechoice/MultinomialSelector.java @@ -11,6 +11,11 @@ import ch.ethz.matsim.mode_choice.framework.utilities.UtilitySelector; import ch.ethz.matsim.mode_choice.framework.utilities.UtilitySelectorFactory; +/** + * This class selects trip candidates for the mode choice models. + * + * @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) + */ public class MultinomialSelector implements UtilitySelector { final private List candidates = new LinkedList<>(); final private double utilityCutoff; diff --git a/src/main/java/net/bhl/matsim/uam/modechoice/model/MinTravelTimeModel.java b/src/main/java/net/bhl/matsim/uam/modechoice/model/MinTravelTimeModel.java index 471be063..e8284fbf 100644 --- a/src/main/java/net/bhl/matsim/uam/modechoice/model/MinTravelTimeModel.java +++ b/src/main/java/net/bhl/matsim/uam/modechoice/model/MinTravelTimeModel.java @@ -1,5 +1,11 @@ package net.bhl.matsim.uam.modechoice.model; +/** + * This class provides a mode choice model that selects trips based on their travel time. + * + * @author Aitanm (Aitan Militão), RRothfeld (Raoul Rothfeld) + * + */ import java.util.ArrayList; import java.util.LinkedList; import java.util.List; @@ -26,7 +32,7 @@ import ch.ethz.matsim.mode_choice.framework.utils.ModeChainGeneratorFactory; public class MinTravelTimeModel implements ModeChoiceModel { - final private static Logger logger = Logger.getLogger(TourBasedModel.class); + final private static Logger logger = Logger.getLogger(MinTravelTimeModel.class); final private TourFinder tourFinder; final private TourEstimator estimator; @@ -69,7 +75,8 @@ public ModeChoiceResult chooseModes(List trips, Random random) t continue; } - // Estimates the utility of a whole tour with given trips and modes with which they should be performed. + // Estimates the utility of a whole tour with given trips and modes with which + // they should be performed. // utility = travel time for this model TourCandidate candidate = estimator.estimateTour(tourModes, tourTrips, tourCandidates); diff --git a/src/main/java/net/bhl/matsim/uam/modechoice/model/PlanBasedModel.java b/src/main/java/net/bhl/matsim/uam/modechoice/model/PlanBasedModel.java index 1d4238f9..55e6951c 100644 --- a/src/main/java/net/bhl/matsim/uam/modechoice/model/PlanBasedModel.java +++ b/src/main/java/net/bhl/matsim/uam/modechoice/model/PlanBasedModel.java @@ -8,6 +8,12 @@ import ch.ethz.matsim.mode_choice.framework.utilities.UtilitySelectorFactory; import ch.ethz.matsim.mode_choice.framework.utils.ModeChainGeneratorFactory; +/** + * This class provides a PlanBasedModel. + * + * @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) + * + */ public class PlanBasedModel extends TourBasedModel { public PlanBasedModel(TourEstimator estimator, ModeAvailability modeAvailability, TourConstraintFactory constraintFactory, UtilitySelectorFactory selectorFactory, diff --git a/src/main/java/net/bhl/matsim/uam/modechoice/model/TourBasedModel.java b/src/main/java/net/bhl/matsim/uam/modechoice/model/TourBasedModel.java index 1ee9ef13..fd1ce1bf 100644 --- a/src/main/java/net/bhl/matsim/uam/modechoice/model/TourBasedModel.java +++ b/src/main/java/net/bhl/matsim/uam/modechoice/model/TourBasedModel.java @@ -25,6 +25,12 @@ import ch.ethz.matsim.mode_choice.framework.utils.ModeChainGenerator; import ch.ethz.matsim.mode_choice.framework.utils.ModeChainGeneratorFactory; +/** + * This class defines the TourBasedModel for mode choice based on utility. + * + * @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) + * + */ public class TourBasedModel implements ModeChoiceModel { final private static Logger logger = Logger.getLogger(TourBasedModel.class); diff --git a/src/main/java/net/bhl/matsim/uam/modechoice/tracking/FreeflowTravelTimeValidator.java b/src/main/java/net/bhl/matsim/uam/modechoice/tracking/FreeflowTravelTimeValidator.java index 4fd09efd..10035eaa 100644 --- a/src/main/java/net/bhl/matsim/uam/modechoice/tracking/FreeflowTravelTimeValidator.java +++ b/src/main/java/net/bhl/matsim/uam/modechoice/tracking/FreeflowTravelTimeValidator.java @@ -26,6 +26,12 @@ import ch.ethz.matsim.baseline_scenario.traffic.BaselineLinkSpeedCalculator; import net.bhl.matsim.uam.modechoice.CustomCarDisutility; +/** + * This class defines the handler for entering/leaving link events. + * + * @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) + * + */ @Singleton public class FreeflowTravelTimeValidator implements LinkEnterEventHandler, LinkLeaveEventHandler, VehicleLeavesTrafficEventHandler, VehicleEntersTrafficEventHandler { diff --git a/src/main/java/net/bhl/matsim/uam/modechoice/tracking/TrackedPrediction.java b/src/main/java/net/bhl/matsim/uam/modechoice/tracking/TrackedPrediction.java index 564bfdd7..6f854941 100644 --- a/src/main/java/net/bhl/matsim/uam/modechoice/tracking/TrackedPrediction.java +++ b/src/main/java/net/bhl/matsim/uam/modechoice/tracking/TrackedPrediction.java @@ -1,5 +1,11 @@ package net.bhl.matsim.uam.modechoice.tracking; +/** + * This class stores information about a tracked prediction for the {@link TrackingModeChoiceModel}. + * + * @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) + * + */ public class TrackedPrediction { public final double tripTravelTime; public final int numberOfLinks; diff --git a/src/main/java/net/bhl/matsim/uam/modechoice/tracking/TrackingModeChoiceModel.java b/src/main/java/net/bhl/matsim/uam/modechoice/tracking/TrackingModeChoiceModel.java index 349fa41b..7b1020b7 100644 --- a/src/main/java/net/bhl/matsim/uam/modechoice/tracking/TrackingModeChoiceModel.java +++ b/src/main/java/net/bhl/matsim/uam/modechoice/tracking/TrackingModeChoiceModel.java @@ -10,6 +10,12 @@ import ch.ethz.matsim.mode_choice.framework.trip_based.estimation.TripCandidate; import net.bhl.matsim.uam.modechoice.estimation.car.CustomCarPrediction; +/** + * This class provides a mode choice model that tracks car travel times. + * + * @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) + * + */ public class TrackingModeChoiceModel implements ModeChoiceModel { final private ModeChoiceModel delegate; final private TravelTimeTracker tracker; diff --git a/src/main/java/net/bhl/matsim/uam/modechoice/tracking/TravelTimeTracker.java b/src/main/java/net/bhl/matsim/uam/modechoice/tracking/TravelTimeTracker.java index 00d409bd..b7d5ec0d 100644 --- a/src/main/java/net/bhl/matsim/uam/modechoice/tracking/TravelTimeTracker.java +++ b/src/main/java/net/bhl/matsim/uam/modechoice/tracking/TravelTimeTracker.java @@ -16,6 +16,12 @@ import com.google.inject.Singleton; +/** + * This class tracks the predicted travel times for car trips in the {@link TrackingModeChoiceModel}. + * + * @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) + * + */ @Singleton public class TravelTimeTracker { final private Map, List> predictions = new HashMap<>(); diff --git a/src/main/java/net/bhl/matsim/uam/modechoice/tracking/TravelTimeTrackerListener.java b/src/main/java/net/bhl/matsim/uam/modechoice/tracking/TravelTimeTrackerListener.java index d29cf5d8..a8cc0c1e 100644 --- a/src/main/java/net/bhl/matsim/uam/modechoice/tracking/TravelTimeTrackerListener.java +++ b/src/main/java/net/bhl/matsim/uam/modechoice/tracking/TravelTimeTrackerListener.java @@ -18,6 +18,12 @@ import com.google.inject.Inject; import com.google.inject.Singleton; +/** + * This class provides output for the {@link TrackingModeChoiceModel} usage. + * + * @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) + * + */ @Singleton public class TravelTimeTrackerListener implements IterationEndsListener, PersonDepartureEventHandler, PersonArrivalEventHandler { diff --git a/src/main/java/net/bhl/matsim/uam/modechoice/utils/LongPlanFilter.java b/src/main/java/net/bhl/matsim/uam/modechoice/utils/LongPlanFilter.java index 120102be..97b91240 100644 --- a/src/main/java/net/bhl/matsim/uam/modechoice/utils/LongPlanFilter.java +++ b/src/main/java/net/bhl/matsim/uam/modechoice/utils/LongPlanFilter.java @@ -8,6 +8,13 @@ import org.matsim.core.router.StageActivityTypes; import org.matsim.core.router.TripStructureUtils; +/** + * This class filter the input plans based on the number of long trips that a + * person has. + * + * @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) + * + */ public class LongPlanFilter { final private Logger logger = Logger.getLogger(LongPlanFilter.class); final private long maximumNumberOfTrips; diff --git a/src/main/java/net/bhl/matsim/uam/modechoice/utils/RemoveRoutes.java b/src/main/java/net/bhl/matsim/uam/modechoice/utils/RemoveRoutes.java index 63358c1a..ef1cdd64 100644 --- a/src/main/java/net/bhl/matsim/uam/modechoice/utils/RemoveRoutes.java +++ b/src/main/java/net/bhl/matsim/uam/modechoice/utils/RemoveRoutes.java @@ -10,6 +10,13 @@ import org.matsim.core.router.StageActivityTypesImpl; import org.matsim.pt.PtConstants; +/** + * This class simplifies the population plans by using + * {@link TripsToLegsAlgorithm} class. + * + * @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) + * + */ public class RemoveRoutes { public void run(Population population) { StageActivityTypes stageActivityTypes = new StageActivityTypesImpl(PtConstants.TRANSIT_ACTIVITY_TYPE); diff --git a/src/main/java/net/bhl/matsim/uam/modechoice/utils/RevisionWriter.java b/src/main/java/net/bhl/matsim/uam/modechoice/utils/RevisionWriter.java index 40d74652..571b2ce3 100644 --- a/src/main/java/net/bhl/matsim/uam/modechoice/utils/RevisionWriter.java +++ b/src/main/java/net/bhl/matsim/uam/modechoice/utils/RevisionWriter.java @@ -17,6 +17,12 @@ import com.google.inject.Inject; import com.google.inject.Singleton; +/** + * This class searches for the current git revision being used and writes it down. + * + * @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) + * + */ @Singleton public class RevisionWriter implements StartupListener { final private static Logger logger = Logger.getLogger(RevisionWriter.class); diff --git a/src/main/java/net/bhl/matsim/uam/modechoice/utils/VehicleLocationUtils.java b/src/main/java/net/bhl/matsim/uam/modechoice/utils/VehicleLocationUtils.java index 3cfde1d6..fd880c06 100644 --- a/src/main/java/net/bhl/matsim/uam/modechoice/utils/VehicleLocationUtils.java +++ b/src/main/java/net/bhl/matsim/uam/modechoice/utils/VehicleLocationUtils.java @@ -8,6 +8,12 @@ import ch.ethz.matsim.mode_choice.framework.ModeChoiceTrip; +/** + * This class provides methods regarding vehicle location in a trip. + * + * @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) + * + */ public class VehicleLocationUtils { final private static Id outsideLinkId = Id.createLinkId("outside"); diff --git a/src/main/java/net/bhl/matsim/uam/qsim/UAMDepartureHandler.java b/src/main/java/net/bhl/matsim/uam/qsim/UAMDepartureHandler.java index 7fd8d9a1..3f57ba2b 100644 --- a/src/main/java/net/bhl/matsim/uam/qsim/UAMDepartureHandler.java +++ b/src/main/java/net/bhl/matsim/uam/qsim/UAMDepartureHandler.java @@ -19,8 +19,12 @@ import com.google.inject.Inject; -import net.bhl.matsim.uam.modechoice.estimation.CustomModeChoiceParameters; - +/** + * This class defines the departure handler for UAM simulation. + * + * @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) + * + */ public class UAMDepartureHandler implements DepartureHandler { @Inject @@ -38,11 +42,20 @@ public boolean handleDeparture(double now, MobsimAgent agent, Id linkId) { Plan plan = ((PlanAgent) agent).getCurrentPlan(); final Integer planElementsIndex = WithinDayAgentUtils.getCurrentPlanElementIndex(agent); final Leg accessLeg = (Leg) plan.getPlanElements().get(planElementsIndex); - final Leg leg = (Leg) plan.getPlanElements().get(planElementsIndex + 2); - Activity uav_interaction1 = (Activity) plan.getPlanElements().get(planElementsIndex + 1); //Gets the uav_interaction1 activity from the passenger plan (defined in the OptimizedUAMIntermodalRoutingModule) + final Leg leg = (Leg) plan.getPlanElements().get(planElementsIndex + 2); + Activity uav_interaction1 = (Activity) plan.getPlanElements().get(planElementsIndex + 1); // Gets the + // uav_interaction1 + // activity + // from the + // passenger + // plan + // (defined + // in the + // OptimizedUAMIntermodalRoutingModule) passengerEngine.prebookTrip(now, (MobsimPassengerAgent) agent, leg.getRoute().getStartLinkId(), - leg.getRoute().getEndLinkId(), - now + uav_interaction1.getMaximumDuration() + (accessLeg.getTravelTime() <= 0 ? 1 : accessLeg.getTravelTime())); // added uav_interaction1.getMaximumDuration() + leg.getRoute().getEndLinkId(), now + uav_interaction1.getMaximumDuration() + + (accessLeg.getTravelTime() <= 0 ? 1 : accessLeg.getTravelTime())); // added + // uav_interaction1.getMaximumDuration() } else if (agent.getMode().equals("transit_walk") || agent.getMode().equals("access_walk")) { Plan plan = ((PlanAgent) agent).getCurrentPlan(); final Integer planElementsIndex = WithinDayAgentUtils.getCurrentPlanElementIndex(agent); @@ -50,16 +63,27 @@ public boolean handleDeparture(double now, MobsimAgent agent, Id linkId) { if (!bookedTrips.contains(agent.getId())) { double travelTime = getTravelTime(plan, planElementsIndex); final Leg uamLeg = getUamLeg(plan, planElementsIndex); - Activity uav_interaction1 = (Activity) plan.getPlanElements().get(planElementsIndex + 1); //Gets the uav_interaction1 activity from the passenger plan (defined in the OptimizedUAMIntermodalRoutingModule) + Activity uav_interaction1 = (Activity) plan.getPlanElements().get(planElementsIndex + 1); // Gets + // the + // uav_interaction1 + // activity + // from + // the + // passenger + // plan + // (defined + // in + // the + // OptimizedUAMIntermodalRoutingModule) passengerEngine.prebookTrip(now, (MobsimPassengerAgent) agent, uamLeg.getRoute().getStartLinkId(), uamLeg.getRoute().getEndLinkId(), - now + uav_interaction1.getMaximumDuration() + (travelTime <= 0 ? 1 : travelTime)); // added uav_interaction1.getMaximumDuration() + now + uav_interaction1.getMaximumDuration() + (travelTime <= 0 ? 1 : travelTime)); // added + // uav_interaction1.getMaximumDuration() bookedTrips.add(agent.getId()); } } - } - else if (agent.getMode().equals("uam")) + } else if (agent.getMode().equals("uam")) bookedTrips.remove(agent.getId()); } diff --git a/src/main/java/net/bhl/matsim/uam/qsim/UAMDepartureHandlerOld.java b/src/main/java/net/bhl/matsim/uam/qsim/UAMDepartureHandlerOld.java index 4144fc69..301135e8 100644 --- a/src/main/java/net/bhl/matsim/uam/qsim/UAMDepartureHandlerOld.java +++ b/src/main/java/net/bhl/matsim/uam/qsim/UAMDepartureHandlerOld.java @@ -7,7 +7,6 @@ import org.matsim.api.core.v01.network.Network; import org.matsim.api.core.v01.population.Leg; import org.matsim.api.core.v01.population.Plan; -import org.matsim.contrib.dvrp.data.Vehicle; import org.matsim.core.api.experimental.events.EventsManager; import org.matsim.core.config.groups.PlansCalcRouteConfigGroup; import org.matsim.core.mobsim.framework.MobsimAgent; @@ -21,38 +20,46 @@ import net.bhl.matsim.uam.infrastructure.UAMStation; import net.bhl.matsim.uam.infrastructure.UAMVehicle; +/** + * This class defines the departure handler for UAM simulation. This is an + * obsolete version, not being used. + * + * @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) + * + */ public class UAMDepartureHandlerOld implements DepartureHandler { private final UAMManager uamManager; private Scenario scenario; private EventsManager eventsManager; - public UAMDepartureHandlerOld(UAMManager uamManager, - Scenario scenario, EventsManager eventsManager) { + + public UAMDepartureHandlerOld(UAMManager uamManager, Scenario scenario, EventsManager eventsManager) { this.uamManager = uamManager; this.scenario = scenario; this.eventsManager = eventsManager; } + @Override public boolean handleDeparture(double now, MobsimAgent agent, Id linkId) { Network network = scenario.getNetwork(); Link link = network.getLinks().get(linkId); Coord coord = link.getCoord(); - - Plan plan = WithinDayAgentUtils.getModifiablePlan( agent ) ; + + Plan plan = WithinDayAgentUtils.getModifiablePlan(agent); final Integer planElementsIndex = WithinDayAgentUtils.getCurrentPlanElementIndex(agent); final Leg leg = (Leg) plan.getPlanElements().get(planElementsIndex); - //if the current trip is a uam trip, adapt the travel time, destination/origin + // if the current trip is a uam trip, adapt the travel time, destination/origin String mode = agent.getMode(); switch (mode) { - case "access_uam" : + case "access_uam": UAMVehicle vehicle = this.uamManager.getClosestAvailableVehicle(coord); Coord destC = network.getLinks().get(leg.getRoute().getEndLinkId()).getCoord(); UAMStation destStation = this.uamManager.getClosestStationWithLandingSpace(destC); if (vehicle == null || destStation == null) { - + if (vehicle == null) this.eventsManager.processEvent(new NoUAMVehicleEvent(now, link, plan.getPerson().getId())); else { @@ -60,107 +67,111 @@ public boolean handleDeparture(double now, MobsimAgent agent, Id linkId) { this.eventsManager.processEvent(new NoUAMLandingSpaceEvent(now, dLink, plan.getPerson().getId())); } - plan.getPlanElements().remove(planElementsIndex + 1); plan.getPlanElements().remove(planElementsIndex + 1); Coord destinationCoord = network.getLinks().get(leg.getRoute().getEndLinkId()).getCoord(); double distance = CoordUtils.calcEuclideanDistance(coord, destinationCoord); - double walkSpeed = ((PlansCalcRouteConfigGroup)scenario.getConfig().getModules(). - get("planscalcroute")).getTeleportedModeSpeeds().get("walk"); - double beelineDistanceFactor = ((PlansCalcRouteConfigGroup)scenario.getConfig().getModules(). - get("planscalcroute")).getBeelineDistanceFactors().get("walk"); - double travelTime = distance * beelineDistanceFactor / walkSpeed; - + double walkSpeed = ((PlansCalcRouteConfigGroup) scenario.getConfig().getModules().get("planscalcroute")) + .getTeleportedModeSpeeds().get("walk"); + double beelineDistanceFactor = ((PlansCalcRouteConfigGroup) scenario.getConfig().getModules() + .get("planscalcroute")).getBeelineDistanceFactors().get("walk"); + double travelTime = distance * beelineDistanceFactor / walkSpeed; + leg.setTravelTime(travelTime); - + break; } UAMStation ls = this.uamManager.getLSWHereVehicleIs(vehicle); - + if (destStation.equals(ls)) { - //the agent wants to take off and land at the same station - //just make the agent walk + // the agent wants to take off and land at the same station + // just make the agent walk plan.getPlanElements().remove(planElementsIndex + 1); plan.getPlanElements().remove(planElementsIndex + 1); Coord destinationCoord = network.getLinks().get(leg.getRoute().getEndLinkId()).getCoord(); double distance = CoordUtils.calcEuclideanDistance(coord, destinationCoord); - double walkSpeed = ((PlansCalcRouteConfigGroup)scenario.getConfig().getModules(). - get("planscalcroute")).getTeleportedModeSpeeds().get("walk"); - double beelineDistanceFactor = ((PlansCalcRouteConfigGroup)scenario.getConfig().getModules(). - get("planscalcroute")).getBeelineDistanceFactors().get("walk"); - double travelTime = distance * beelineDistanceFactor / walkSpeed; - + double walkSpeed = ((PlansCalcRouteConfigGroup) scenario.getConfig().getModules().get("planscalcroute")) + .getTeleportedModeSpeeds().get("walk"); + double beelineDistanceFactor = ((PlansCalcRouteConfigGroup) scenario.getConfig().getModules() + .get("planscalcroute")).getBeelineDistanceFactors().get("walk"); + double travelTime = distance * beelineDistanceFactor / walkSpeed; + leg.setTravelTime(travelTime); - - break; - + + break; + } this.uamManager.reserveLandingSpot(plan.getPerson().getId(), destStation); this.uamManager.reserveVehicle(agent.getId(), vehicle); - leg.getRoute().setEndLinkId(ls.getLocationLink().getId()); - + leg.getRoute().setEndLinkId(ls.getLocationLink().getId()); + double distance = CoordUtils.calcEuclideanDistance(coord, ls.getLocationLink().getCoord()); - double walkSpeed = ((PlansCalcRouteConfigGroup)scenario.getConfig().getModules(). - get("planscalcroute")).getTeleportedModeSpeeds().get("walk"); - double beelineDistanceFactor = ((PlansCalcRouteConfigGroup)scenario.getConfig().getModules(). - get("planscalcroute")).getBeelineDistanceFactors().get("walk"); - double travelTime = distance * beelineDistanceFactor / walkSpeed != 0.0 ? distance * beelineDistanceFactor / walkSpeed : 1.0; - + double walkSpeed = ((PlansCalcRouteConfigGroup) scenario.getConfig().getModules().get("planscalcroute")) + .getTeleportedModeSpeeds().get("walk"); + double beelineDistanceFactor = ((PlansCalcRouteConfigGroup) scenario.getConfig().getModules() + .get("planscalcroute")).getBeelineDistanceFactors().get("walk"); + double travelTime = distance * beelineDistanceFactor / walkSpeed != 0.0 + ? distance * beelineDistanceFactor / walkSpeed + : 1.0; + leg.setTravelTime(travelTime); break; - case "uam" : + case "uam": - //Coord destCoord = network.getLinks().get(leg.getRoute().getEndLinkId()).getCoord(); + // Coord destCoord = + // network.getLinks().get(leg.getRoute().getEndLinkId()).getCoord(); UAMStation destLS = this.uamManager.getReservedStation(plan.getPerson().getId()); if (destLS == null) { - + throw new RuntimeException("The system is an incosistent state! \n " + "Trying to park a vehicle but there is not reserved ladning space!"); - + } leg.getRoute().setEndLinkId(destLS.getLocationLink().getId()); - + // Retrieve UAM Vehicle UAMVehicle vehicle2 = (UAMVehicle) uamManager.getReservedVehicle(agent.getId()); - + // Retrieve UAM route and distance - //UAMStation origin = uamManager.getLSWHereVehicleIs(vehicle2); - //UAMRoute route = uamManager.getRoutes().getRoute(origin , destLS); - + // UAMStation origin = uamManager.getLSWHereVehicleIs(vehicle2); + // UAMRoute route = uamManager.getRoutes().getRoute(origin , destLS); + double distance2 = CoordUtils.calcEuclideanDistance(coord, destLS.getLocationLink().getCoord()); - + // Time calculation double flightTime = distance2 / vehicle2.getCruiseSpeed(); - + double vtolTime = 500.0 / vehicle2.getVerticalSpeed(); - //double vtolTime = route.getHeight() / vehicle2.getVerticalSpeed(); + // double vtolTime = route.getHeight() / vehicle2.getVerticalSpeed(); double totalFlightTime = vtolTime + flightTime + vtolTime; // Take-off + Flight + Landing - + // Set distance and time for current leg leg.getRoute().setDistance(distance2); leg.setTravelTime(totalFlightTime); - + break; - case "egress_uam" : + case "egress_uam": Link destLink = network.getLinks().get(leg.getRoute().getEndLinkId()); - leg.getRoute().setStartLinkId(linkId); + leg.getRoute().setStartLinkId(linkId); double distanceEgress = CoordUtils.calcEuclideanDistance(coord, destLink.getCoord()); - double walkSpeedEgress = ((PlansCalcRouteConfigGroup)scenario.getConfig().getModules(). - get("planscalcroute")).getTeleportedModeSpeeds().get("walk"); - double beelineDistanceFactorEgress = ((PlansCalcRouteConfigGroup)scenario.getConfig().getModules(). - get("planscalcroute")).getBeelineDistanceFactors().get("walk"); - double travelTimeEgress = distanceEgress * beelineDistanceFactorEgress / walkSpeedEgress != 0.0 ? distanceEgress * beelineDistanceFactorEgress / walkSpeedEgress : 1.0; + double walkSpeedEgress = ((PlansCalcRouteConfigGroup) scenario.getConfig().getModules() + .get("planscalcroute")).getTeleportedModeSpeeds().get("walk"); + double beelineDistanceFactorEgress = ((PlansCalcRouteConfigGroup) scenario.getConfig().getModules() + .get("planscalcroute")).getBeelineDistanceFactors().get("walk"); + double travelTimeEgress = distanceEgress * beelineDistanceFactorEgress / walkSpeedEgress != 0.0 + ? distanceEgress * beelineDistanceFactorEgress / walkSpeedEgress + : 1.0; leg.setTravelTime(travelTimeEgress); - - + break; default: break; } - - //we did not handle the departure, we just addapt the plan, we will let the teleportationEngine to handle the departure + + // we did not handle the departure, we just addapt the plan, we will let the + // teleportationEngine to handle the departure return false; } diff --git a/src/main/java/net/bhl/matsim/uam/qsim/UAMLinkSpeedCalculator.java b/src/main/java/net/bhl/matsim/uam/qsim/UAMLinkSpeedCalculator.java index 379621e4..787d7ff1 100644 --- a/src/main/java/net/bhl/matsim/uam/qsim/UAMLinkSpeedCalculator.java +++ b/src/main/java/net/bhl/matsim/uam/qsim/UAMLinkSpeedCalculator.java @@ -6,6 +6,12 @@ import org.matsim.core.mobsim.qsim.qnetsimengine.QVehicle; import org.matsim.core.mobsim.qsim.qnetsimengine.linkspeedcalculator.LinkSpeedCalculator; +/** + * This class defines the LinkSpeedCalculator for UAM simulation. + * + * @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) + * + */ public class UAMLinkSpeedCalculator implements LinkSpeedCalculator { final private Map mapVehicleVerticalSpeeds; diff --git a/src/main/java/net/bhl/matsim/uam/qsim/UAMPassengerEngine.java b/src/main/java/net/bhl/matsim/uam/qsim/UAMPassengerEngine.java index a1db8be9..435a93b3 100644 --- a/src/main/java/net/bhl/matsim/uam/qsim/UAMPassengerEngine.java +++ b/src/main/java/net/bhl/matsim/uam/qsim/UAMPassengerEngine.java @@ -6,13 +6,17 @@ import org.matsim.contrib.dvrp.passenger.PassengerRequestCreator; import org.matsim.core.api.experimental.events.EventsManager; -public class UAMPassengerEngine extends PassengerEngine{ +/** + * This class a PassengerEngine for UAM simulation. + * + * @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) + * + */ +public class UAMPassengerEngine extends PassengerEngine { public UAMPassengerEngine(String mode, EventsManager eventsManager, PassengerRequestCreator requestCreator, VrpOptimizer optimizer, Network network) { super(mode, eventsManager, requestCreator, optimizer, network); } - - } \ No newline at end of file diff --git a/src/main/java/net/bhl/matsim/uam/qsim/UAMQSimPlugin.java b/src/main/java/net/bhl/matsim/uam/qsim/UAMQSimPlugin.java index 80453ae6..b8e09f05 100644 --- a/src/main/java/net/bhl/matsim/uam/qsim/UAMQSimPlugin.java +++ b/src/main/java/net/bhl/matsim/uam/qsim/UAMQSimPlugin.java @@ -18,6 +18,12 @@ import net.bhl.matsim.uam.dispatcher.UAMDispatcherListener; import net.bhl.matsim.uam.schedule.UAMOptimizer; +/** + * This class provides Qsim resources to the UAMModule. + * + * @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) + * + */ public class UAMQSimPlugin extends AbstractQSimPlugin { public UAMQSimPlugin(Config config) { diff --git a/src/main/java/net/bhl/matsim/uam/qsim/UAMQsimModule.java b/src/main/java/net/bhl/matsim/uam/qsim/UAMQsimModule.java index 023ae34c..79d66688 100644 --- a/src/main/java/net/bhl/matsim/uam/qsim/UAMQsimModule.java +++ b/src/main/java/net/bhl/matsim/uam/qsim/UAMQsimModule.java @@ -16,7 +16,6 @@ import com.google.inject.Singleton; import com.google.inject.name.Named; -import net.bhl.matsim.uam.config.UAMConfigGroup; import net.bhl.matsim.uam.data.UAMFleetData; import net.bhl.matsim.uam.dispatcher.Dispatcher; import net.bhl.matsim.uam.dispatcher.UAMDispatcherListener; @@ -27,6 +26,12 @@ import net.bhl.matsim.uam.schedule.UAMOptimizer; import net.bhl.matsim.uam.vrpagent.UAMActionCreator; +/** + * A MATSim Abstract Module for classes used by Qsim for UAM simulation. + * + * @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) + * + */ public class UAMQsimModule extends AbstractModule { // private final QSim qsim; diff --git a/src/main/java/net/bhl/matsim/uam/qsim/UAMSpeedModule.java b/src/main/java/net/bhl/matsim/uam/qsim/UAMSpeedModule.java index 4bfa5449..9f4e2e57 100644 --- a/src/main/java/net/bhl/matsim/uam/qsim/UAMSpeedModule.java +++ b/src/main/java/net/bhl/matsim/uam/qsim/UAMSpeedModule.java @@ -12,6 +12,13 @@ import com.google.inject.Provides; import com.google.inject.Singleton; +/** + * A MATSim Abstract Module for classes used by UAM simulation regarding link + * speeds in the simulation. + * + * @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) + * + */ public class UAMSpeedModule extends AbstractModule { final private Map mapVehicleVerticalSpeeds; diff --git a/src/main/java/net/bhl/matsim/uam/qsim/package-info.java b/src/main/java/net/bhl/matsim/uam/qsim/package-info.java index 72f73ddd..1643f649 100644 --- a/src/main/java/net/bhl/matsim/uam/qsim/package-info.java +++ b/src/main/java/net/bhl/matsim/uam/qsim/package-info.java @@ -2,7 +2,7 @@ * */ /** - * @author balacm + * @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) * */ package net.bhl.matsim.uam.qsim; \ No newline at end of file diff --git a/src/main/java/net/bhl/matsim/uam/router/TaxiRoutingModule.java b/src/main/java/net/bhl/matsim/uam/router/TaxiRoutingModule.java index 3ead88a4..1c42d45b 100644 --- a/src/main/java/net/bhl/matsim/uam/router/TaxiRoutingModule.java +++ b/src/main/java/net/bhl/matsim/uam/router/TaxiRoutingModule.java @@ -11,7 +11,6 @@ import org.matsim.api.core.v01.population.PlanElement; import org.matsim.api.core.v01.population.PopulationFactory; import org.matsim.api.core.v01.population.Route; -import org.matsim.core.population.routes.NetworkRoute; import org.matsim.core.population.routes.RouteFactories; import org.matsim.core.router.CompositeStageActivityTypes; import org.matsim.core.router.RoutingModule; @@ -20,6 +19,12 @@ import org.matsim.core.router.util.LeastCostPathCalculator.Path; import org.matsim.facilities.Facility; +/** + * This class provides the route legs for a trip using Taxi mode. + * + * @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) + * + */ public class TaxiRoutingModule implements RoutingModule { private LeastCostPathCalculator plcpccar; diff --git a/src/main/java/net/bhl/matsim/uam/router/TaxiRoutingModuleProvider.java b/src/main/java/net/bhl/matsim/uam/router/TaxiRoutingModuleProvider.java index 9b218ea3..f99a4586 100644 --- a/src/main/java/net/bhl/matsim/uam/router/TaxiRoutingModuleProvider.java +++ b/src/main/java/net/bhl/matsim/uam/router/TaxiRoutingModuleProvider.java @@ -18,6 +18,12 @@ import net.bhl.matsim.uam.modechoice.estimation.CustomModeChoiceParameters; +/** + * This class provides the routing module for Taxi mode. + * + * @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) + * + */ public class TaxiRoutingModuleProvider implements Provider { @Inject diff --git a/src/main/java/net/bhl/matsim/uam/router/UAMIntermodalRoutingModule.java b/src/main/java/net/bhl/matsim/uam/router/UAMIntermodalRoutingModule.java index 52d25efb..f66c3d0e 100644 --- a/src/main/java/net/bhl/matsim/uam/router/UAMIntermodalRoutingModule.java +++ b/src/main/java/net/bhl/matsim/uam/router/UAMIntermodalRoutingModule.java @@ -47,6 +47,12 @@ import net.bhl.matsim.uam.modechoice.estimation.pt.subscription.SubscriptionFinder; import net.bhl.matsim.uam.router.strategy.UAMStrategyRouter; +/** + * This class provides the route legs for a trip using UAM. + * + * @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) + * + */ public class UAMIntermodalRoutingModule implements RoutingModule { public static final String TELEPORTATION_UAM_LEG_MODE = "uam"; public static final String UAM_ACCESS_WALK = "access_uam_walk"; @@ -71,7 +77,8 @@ public UAMIntermodalRoutingModule(Scenario scenario, UAMStations landingStations ParallelLeastCostPathCalculator plcpc, LeastCostPathCalculator plcpccar, Network carNetwork, TransitRouter transitRouter, UAMConfigGroup uamConfig, TransitConfigGroup transitConfigGroup, BaselineTransitRoutingModule transitRouterDelegate, CustomModeChoiceParameters parameters, - WaitingStationData waitingData, UAMStationConnectionGraph stationConnectionutilities, SubscriptionFinder subscriptions) { + WaitingStationData waitingData, UAMStationConnectionGraph stationConnectionutilities, + SubscriptionFinder subscriptions) { this(scenario, landingStations, modes, plcpc, plcpccar, carNetwork, uamConfig, transitConfigGroup, parameters, waitingData, stationConnectionutilities, subscriptions); this.transitRouterDelegate = transitRouterDelegate; @@ -83,7 +90,8 @@ public UAMIntermodalRoutingModule(Scenario scenario, UAMStations landingStations public UAMIntermodalRoutingModule(Scenario scenario, UAMStations landingStations, Set modes, ParallelLeastCostPathCalculator plcpc, LeastCostPathCalculator plcpccar, Network carNetwork, UAMConfigGroup uamConfig, TransitConfigGroup transitConfigGroup, CustomModeChoiceParameters parameters, - WaitingStationData waitingData, UAMStationConnectionGraph stationConnectionutilities, SubscriptionFinder subscriptions) { + WaitingStationData waitingData, UAMStationConnectionGraph stationConnectionutilities, + SubscriptionFinder subscriptions) { this.scenario = scenario; this.plcpccar = plcpccar; this.carNetwork = carNetwork; diff --git a/src/main/java/net/bhl/matsim/uam/router/UAMMainModeIdentifier.java b/src/main/java/net/bhl/matsim/uam/router/UAMMainModeIdentifier.java index aaa7b0fe..dc320054 100644 --- a/src/main/java/net/bhl/matsim/uam/router/UAMMainModeIdentifier.java +++ b/src/main/java/net/bhl/matsim/uam/router/UAMMainModeIdentifier.java @@ -6,6 +6,12 @@ import org.matsim.api.core.v01.population.PlanElement; import org.matsim.core.router.MainModeIdentifier; +/** + * This class identifies if a trip is using UAM or not. + * + * @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) + * + */ public class UAMMainModeIdentifier implements MainModeIdentifier { private final MainModeIdentifier defaultModeIdentifier; diff --git a/src/main/java/net/bhl/matsim/uam/router/UAMRoutingModuleProvider.java b/src/main/java/net/bhl/matsim/uam/router/UAMRoutingModuleProvider.java index e517c54c..53cc81ba 100644 --- a/src/main/java/net/bhl/matsim/uam/router/UAMRoutingModuleProvider.java +++ b/src/main/java/net/bhl/matsim/uam/router/UAMRoutingModuleProvider.java @@ -28,6 +28,12 @@ import net.bhl.matsim.uam.modechoice.estimation.CustomModeChoiceParameters; import net.bhl.matsim.uam.modechoice.estimation.pt.subscription.SubscriptionFinder; +/** + * This class provides the routing module for UAM mode. + * + * @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) + * + */ public class UAMRoutingModuleProvider implements Provider { @Inject diff --git a/src/main/java/net/bhl/matsim/uam/router/package-info.java b/src/main/java/net/bhl/matsim/uam/router/package-info.java index 84b94283..306991c3 100644 --- a/src/main/java/net/bhl/matsim/uam/router/package-info.java +++ b/src/main/java/net/bhl/matsim/uam/router/package-info.java @@ -2,7 +2,7 @@ * */ /** - * @author balacm + * @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) * */ package net.bhl.matsim.uam.router; \ No newline at end of file diff --git a/src/main/java/net/bhl/matsim/uam/router/strategy/UAMMaxAccessUtilityStrategy.java b/src/main/java/net/bhl/matsim/uam/router/strategy/UAMMaxAccessUtilityStrategy.java index da3fb006..b3532a13 100644 --- a/src/main/java/net/bhl/matsim/uam/router/strategy/UAMMaxAccessUtilityStrategy.java +++ b/src/main/java/net/bhl/matsim/uam/router/strategy/UAMMaxAccessUtilityStrategy.java @@ -14,8 +14,13 @@ import net.bhl.matsim.uam.events.UAMUtilitiesData; import net.bhl.matsim.uam.infrastructure.UAMStation; - -public class UAMMaxAccessUtilityStrategy implements UAMStrategy{ +/** + * This strategy is used to assign to the passenger the UAMRoute based on the + * access and egress legs utilities to/from UAM Stations in a UAM trip. + * + * @author Aitanm (Aitan Militão), RRothfeld (Raoul Rothfeld) + */ +public class UAMMaxAccessUtilityStrategy implements UAMStrategy { private UAMStrategyUtils strategyUtils; public UAMMaxAccessUtilityStrategy(UAMStrategyUtils strategyUtils) { @@ -33,14 +38,15 @@ public UAMRoute getRoute(Person person, Facility fromFacility, Facility to Set modes = new HashSet<>(); modes = strategyUtils.getModes(); Collection stationsOrigin = strategyUtils.getPossibleStations(fromFacility); - Collection stationsDestination = strategyUtils.getPossibleStations(toFacility); - //Access utility + Collection stationsDestination = strategyUtils.getPossibleStations(toFacility); + // Access utility UAMStation bestStationOrigin = null; String bestModeAccess = TransportMode.walk; double bestUtilityAccess = Double.NEGATIVE_INFINITY; for (UAMStation stationOrigin : stationsOrigin) { for (String mode : modes) { - double accessUtility = strategyUtils.estimateUtilityWrapper(person, true, fromFacility, departureTime, stationOrigin, mode); + double accessUtility = strategyUtils.estimateUtilityWrapper(person, true, fromFacility, departureTime, + stationOrigin, mode); if (accessUtility > bestUtilityAccess) { bestUtilityAccess = accessUtility; bestModeAccess = mode; @@ -49,11 +55,12 @@ public UAMRoute getRoute(Person person, Facility fromFacility, Facility to if (strategyUtils.getParameters().storeUAMUtilities != 0) { UAMUtilitiesData.accessEgressOptions.add(new UAMUtilitiesAccessEgress(person.getId(), - stationOrigin.getId(), network.getLinks().get(fromFacility.getLinkId()).getId(), true, accessUtility, mode, departureTime)); + stationOrigin.getId(), network.getLinks().get(fromFacility.getLinkId()).getId(), true, + accessUtility, mode, departureTime)); } } } - //Egress utility + // Egress utility UAMStation bestStationDestination = null; String bestModeEgress = TransportMode.walk; double bestUtilityEgress = Double.NEGATIVE_INFINITY; @@ -62,10 +69,13 @@ public UAMRoute getRoute(Person person, Facility fromFacility, Facility to if (bestStationOrigin == stationDestination) continue; double flyTime = strategyUtils.getFlyTime(bestStationOrigin, stationDestination); - //updated departureTime - double currentDepartureTime = departureTime + strategyUtils.estimateTime(true, fromFacility, departureTime, bestStationOrigin, bestModeAccess)+flyTime; + // updated departureTime + double currentDepartureTime = departureTime + + strategyUtils.estimateTime(true, fromFacility, departureTime, bestStationOrigin, bestModeAccess) + + flyTime; for (String mode : modes) { - double egressUtility = strategyUtils.estimateUtilityWrapper(person, false, toFacility, currentDepartureTime, stationDestination, mode); + double egressUtility = strategyUtils.estimateUtilityWrapper(person, false, toFacility, + currentDepartureTime, stationDestination, mode); if (egressUtility > bestUtilityEgress) { bestUtilityEgress = egressUtility; bestModeEgress = mode; @@ -75,17 +85,21 @@ public UAMRoute getRoute(Person person, Facility fromFacility, Facility to if (strategyUtils.getParameters().storeUAMUtilities != 0) { UAMUtilitiesData.accessEgressOptions.add(new UAMUtilitiesAccessEgress(person.getId(), - stationDestination.getId(), network.getLinks().get(fromFacility.getLinkId()).getId(), false, egressUtility, mode, departureTime)); + stationDestination.getId(), network.getLinks().get(fromFacility.getLinkId()).getId(), false, + egressUtility, mode, departureTime)); } } - } - double accessDistance = strategyUtils.estimateDistance(true, fromFacility, departureTime, bestStationOrigin, bestModeAccess); - double egressDistance = strategyUtils.estimateDistance(false, toFacility, timeOfEgress, bestStationDestination,bestModeEgress); - //if the access/egress distance is less than walkDistance, then walk will be the uam access and egress mode + } + double accessDistance = strategyUtils.estimateDistance(true, fromFacility, departureTime, bestStationOrigin, + bestModeAccess); + double egressDistance = strategyUtils.estimateDistance(false, toFacility, timeOfEgress, bestStationDestination, + bestModeEgress); + // if the access/egress distance is less than walkDistance, then walk will be + // the uam access and egress mode bestModeAccess = strategyUtils.checkStationAccessDistance(true, bestModeAccess, bestStationOrigin, null, accessDistance, fromFacility, toFacility, departureTime, null, false); - bestModeEgress = strategyUtils.checkStationAccessDistance(false, bestModeEgress, bestStationDestination, bestStationOrigin, - egressDistance, toFacility, fromFacility, departureTime, bestModeAccess, false); + bestModeEgress = strategyUtils.checkStationAccessDistance(false, bestModeEgress, bestStationDestination, + bestStationOrigin, egressDistance, toFacility, fromFacility, departureTime, bestModeAccess, false); return new UAMRoute(bestModeAccess, bestStationOrigin, bestStationDestination, bestModeEgress); } diff --git a/src/main/java/net/bhl/matsim/uam/router/strategy/UAMMaxUtilityStrategy.java b/src/main/java/net/bhl/matsim/uam/router/strategy/UAMMaxUtilityStrategy.java index 84a25488..df06089c 100644 --- a/src/main/java/net/bhl/matsim/uam/router/strategy/UAMMaxUtilityStrategy.java +++ b/src/main/java/net/bhl/matsim/uam/router/strategy/UAMMaxUtilityStrategy.java @@ -20,9 +20,10 @@ import net.bhl.matsim.uam.infrastructure.UAMStation;; /** - * This strategy is used to assign to the passenger the UAMRoute based on the maximum total utility of the route. + * This strategy is used to assign to the passenger the UAMRoute based on the + * maximum total utility of the route. * - * @author Aitan Militao + * @author Aitanm (Aitan Militão), RRothfeld (Raoul Rothfeld) */ public class UAMMaxUtilityStrategy implements UAMStrategy{ private UAMStrategyUtils strategyUtils; diff --git a/src/main/java/net/bhl/matsim/uam/router/strategy/UAMMinAccessDistanceStrategy.java b/src/main/java/net/bhl/matsim/uam/router/strategy/UAMMinAccessDistanceStrategy.java index d5234ca2..cd667842 100644 --- a/src/main/java/net/bhl/matsim/uam/router/strategy/UAMMinAccessDistanceStrategy.java +++ b/src/main/java/net/bhl/matsim/uam/router/strategy/UAMMinAccessDistanceStrategy.java @@ -16,12 +16,14 @@ import net.bhl.matsim.uam.infrastructure.UAMStation; /** - * This strategy is used to assign to the passenger the UAMRoute based on the minimum travel distance of access to UAM Station and egress from UAM Station. + * This strategy is used to assign to the passenger a UAMRoute based on the + * minimum travel distance of access to UAM Station and egress from UAM Station. * - * @author Aitan Militao + * @author Aitanm (Aitan Militão), RRothfeld (Raoul Rothfeld) */ -public class UAMMinAccessDistanceStrategy implements UAMStrategy{ +public class UAMMinAccessDistanceStrategy implements UAMStrategy { private UAMStrategyUtils strategyUtils; + public UAMMinAccessDistanceStrategy(UAMStrategyUtils strategyUtils) { this.strategyUtils = strategyUtils; } @@ -38,7 +40,7 @@ public UAMRoute getRoute(Person person, Facility fromFacility, Facility to Collection stationsDestination = strategyUtils.getPossibleStations(toFacility); Map, UAMAccessRouteData> accessRoutesData = new HashMap<>(); accessRoutesData = strategyUtils.getAccessRouteData(true, stationsOrigin, fromFacility, departureTime); - //access trips + // access trips double minAccessDistance = Double.POSITIVE_INFINITY; for (UAMStation stationOrigin : stationsOrigin) { if (accessRoutesData.get(stationOrigin.getId()).getDistance() < minAccessDistance) { @@ -46,22 +48,24 @@ public UAMRoute getRoute(Person person, Facility fromFacility, Facility to minAccessDistance = accessRoutesData.get(stationOrigin.getId()).getDistance(); } } - //egress trips + // egress trips double timeOfEgress = departureTime; String bestModeEgress = TransportMode.walk; Set modes = new HashSet<>(); modes = strategyUtils.getModes(); double minEgressDistance = Double.POSITIVE_INFINITY; - for (UAMStation stationDestination : stationsDestination) { + for (UAMStation stationDestination : stationsDestination) { if (bestStationOrigin == stationDestination) continue; - //fly time between stations + // fly time between stations double flyTime = strategyUtils.getFlyTime(bestStationOrigin, stationDestination); - //updates departureTime - double currentDepartureTime = departureTime + accessRoutesData.get(bestStationOrigin.getId()).getAccessTravelTime()+flyTime; + // updates departureTime + double currentDepartureTime = departureTime + + accessRoutesData.get(bestStationOrigin.getId()).getAccessTravelTime() + flyTime; for (String mode : modes) { - //Calculates the distance for the egress routes using updated departureTime - double egressDistance = strategyUtils.estimateDistance(false, toFacility, currentDepartureTime, stationDestination, mode); + // Calculates the distance for the egress routes using updated departureTime + double egressDistance = strategyUtils.estimateDistance(false, toFacility, currentDepartureTime, + stationDestination, mode); if (egressDistance < minEgressDistance) { bestStationDestination = stationDestination; minEgressDistance = egressDistance; @@ -69,17 +73,22 @@ public UAMRoute getRoute(Person person, Facility fromFacility, Facility to timeOfEgress = currentDepartureTime; } } - } - - double egressDistance = strategyUtils.estimateDistance(false, toFacility, timeOfEgress, bestStationDestination, bestModeEgress); - - //if the access/egress distance is less than walkDistance, then walk will be the uam access and egress mode, otherwise time is used to select the mode access/egress - String bestModeAccess = strategyUtils.checkStationAccessDistance(true, accessRoutesData.get(bestStationOrigin.getId()).getAccessModeDistance() - ,bestStationOrigin, null, accessRoutesData.get(bestStationOrigin.getId()).getDistance(), fromFacility, toFacility, departureTime, null, true); - bestModeEgress = strategyUtils.checkStationAccessDistance(false, bestModeEgress, bestStationDestination, bestStationOrigin, - egressDistance, toFacility, fromFacility, departureTime, bestModeAccess, true); - - return new UAMRoute(bestModeAccess, bestStationOrigin, bestStationDestination, bestModeEgress); + } + + double egressDistance = strategyUtils.estimateDistance(false, toFacility, timeOfEgress, bestStationDestination, + bestModeEgress); + + // if the access/egress distance is less than walkDistance, then walk will be + // the uam access and egress mode, otherwise time is used to select the mode + // access/egress + String bestModeAccess = strategyUtils.checkStationAccessDistance(true, + accessRoutesData.get(bestStationOrigin.getId()).getAccessModeDistance(), bestStationOrigin, null, + accessRoutesData.get(bestStationOrigin.getId()).getDistance(), fromFacility, toFacility, departureTime, + null, true); + bestModeEgress = strategyUtils.checkStationAccessDistance(false, bestModeEgress, bestStationDestination, + bestStationOrigin, egressDistance, toFacility, fromFacility, departureTime, bestModeAccess, true); + + return new UAMRoute(bestModeAccess, bestStationOrigin, bestStationDestination, bestModeEgress); } - + } diff --git a/src/main/java/net/bhl/matsim/uam/router/strategy/UAMMinAccessTravelTimeStrategy.java b/src/main/java/net/bhl/matsim/uam/router/strategy/UAMMinAccessTravelTimeStrategy.java index ab8914cc..188b5f8e 100644 --- a/src/main/java/net/bhl/matsim/uam/router/strategy/UAMMinAccessTravelTimeStrategy.java +++ b/src/main/java/net/bhl/matsim/uam/router/strategy/UAMMinAccessTravelTimeStrategy.java @@ -17,13 +17,14 @@ /** * This strategy is used to assign to the passenger the UAMRoute based on the - * minimum travel travel to access to UAM Station and egress travel time from - * UAM Station. + * minimum travel time to access to UAM Station and egress travel time from UAM + * Station. * - * @author Aitan Militao + * @author Aitanm (Aitan Militão), RRothfeld (Raoul Rothfeld) */ public class UAMMinAccessTravelTimeStrategy implements UAMStrategy { private UAMStrategyUtils strategyUtils; + public UAMMinAccessTravelTimeStrategy(UAMStrategyUtils strategyUtils) { this.strategyUtils = strategyUtils; } @@ -41,7 +42,7 @@ public UAMRoute getRoute(Person person, Facility fromFacility, Facility to Map, UAMAccessRouteData> accessRoutesData = new HashMap<>(); accessRoutesData = strategyUtils.getAccessRouteData(true, stationsOrigin, fromFacility, departureTime); double minAccessTime = Double.POSITIVE_INFINITY; - + for (UAMStation stationOrigin : stationsOrigin) { if (accessRoutesData.get(stationOrigin.getId()).getAccessTravelTime() < minAccessTime) { bestStationOrigin = stationOrigin; @@ -82,7 +83,7 @@ public UAMRoute getRoute(Person person, Facility fromFacility, Facility to null, false); bestModeEgress = strategyUtils.checkStationAccessDistance(false, bestModeEgress, bestStationDestination, bestStationOrigin, egressDistance, toFacility, fromFacility, departureTime, bestModeAccess, false); - + return new UAMRoute(bestModeAccess, bestStationOrigin, bestStationDestination, bestModeEgress); } diff --git a/src/main/java/net/bhl/matsim/uam/router/strategy/UAMMinDistanceStrategy.java b/src/main/java/net/bhl/matsim/uam/router/strategy/UAMMinDistanceStrategy.java index 9383e6c8..510e143f 100644 --- a/src/main/java/net/bhl/matsim/uam/router/strategy/UAMMinDistanceStrategy.java +++ b/src/main/java/net/bhl/matsim/uam/router/strategy/UAMMinDistanceStrategy.java @@ -20,12 +20,14 @@ import net.bhl.matsim.uam.infrastructure.UAMStation; /** - * This strategy is used to assign to the passenger the UAMRoute based on the minimum travel distance of the route. + * This strategy is used to assign to the passenger a UAMRoute based on the + * minimum travel distance of the route. * - * @author Aitan Militao + * @author Aitanm (Aitan Militão), RRothfeld (Raoul Rothfeld) */ -public class UAMMinDistanceStrategy implements UAMStrategy{ +public class UAMMinDistanceStrategy implements UAMStrategy { private UAMStrategyUtils strategyUtils; + public UAMMinDistanceStrategy(UAMStrategyUtils strategyUtils) { this.strategyUtils = strategyUtils; } @@ -36,24 +38,24 @@ public UAMStrategyType getUAMStrategyType() { } @Override - public UAMRoute getRoute(Person person, Facility fromFacility, Facility toFacility, double departureTime) { + public UAMRoute getRoute(Person person, Facility fromFacility, Facility toFacility, double departureTime) { UAMStation bestStationOrigin = null, bestStationDestination = null; Collection stationsOrigin = strategyUtils.getPossibleStations(fromFacility); Collection stationsDestination = strategyUtils.getPossibleStations(toFacility); Map, UAMAccessRouteData> accessRoutesData = new HashMap<>(); accessRoutesData = strategyUtils.getAccessRouteData(true, stationsOrigin, fromFacility, departureTime); String bestModeEgress = TransportMode.walk; - + double timeOfEgress = departureTime; Set modes = new HashSet<>(); modes = strategyUtils.getModes(); - //UAM Flight Distance + access and egress distance + // UAM Flight Distance + access and egress distance double minTotalDistance = Double.POSITIVE_INFINITY; for (UAMStation stationOrigin : stationsOrigin) { for (UAMStation stationDestination : stationsDestination) { if (stationOrigin == stationDestination) continue; - //collects the distance between stations and stores it + // collects the distance between stations and stores it Future uavPath = strategyUtils.getFlyDistance(stationOrigin.getLocationLink().getFromNode(), stationDestination.getLocationLink().getToNode()); double flyDistance = 0; @@ -64,34 +66,42 @@ public UAMRoute getRoute(Person person, Facility fromFacility, Facility to } catch (InterruptedException | ExecutionException e) { e.printStackTrace(); } - //fly time between stations + // fly time between stations double flyTime = strategyUtils.getFlyTime(stationOrigin, stationDestination); - double accessTime = strategyUtils.estimateTime(true, fromFacility, departureTime, stationOrigin, accessRoutesData.get(stationOrigin.getId()).getAccessModeDistance()); - //updates departureTime - double currentDepartureTime = departureTime + accessTime+flyTime; - //Calculates the shortest path + double accessTime = strategyUtils.estimateTime(true, fromFacility, departureTime, stationOrigin, + accessRoutesData.get(stationOrigin.getId()).getAccessModeDistance()); + // updates departureTime + double currentDepartureTime = departureTime + accessTime + flyTime; + // Calculates the shortest path for (String mode : modes) { - //Calculates the distance for the egress routes using updated departureTime - double egressDistance = strategyUtils.estimateDistance(false, toFacility, currentDepartureTime, stationDestination, mode); - double totalDistance = accessRoutesData.get(stationOrigin.getId()).getDistance() + flyDistance + egressDistance; - if (totalDistance < minTotalDistance ) { + // Calculates the distance for the egress routes using updated departureTime + double egressDistance = strategyUtils.estimateDistance(false, toFacility, currentDepartureTime, + stationDestination, mode); + double totalDistance = accessRoutesData.get(stationOrigin.getId()).getDistance() + flyDistance + + egressDistance; + if (totalDistance < minTotalDistance) { minTotalDistance = totalDistance; bestStationOrigin = stationOrigin; bestStationDestination = stationDestination; bestModeEgress = mode; timeOfEgress = currentDepartureTime; - } - } + } + } } } - double egressDistance = strategyUtils.estimateDistance(false, toFacility, timeOfEgress, bestStationDestination, bestModeEgress); - //if the access/egress distance is less than walkDistance, then walk will be the uam access and egress mode, otherwise time is used to select the mode access/egress - String bestModeAccess = strategyUtils.checkStationAccessDistance(true, accessRoutesData.get(bestStationOrigin.getId()).getAccessModeDistance() - ,bestStationOrigin, null, accessRoutesData.get(bestStationOrigin.getId()).getDistance(), fromFacility, toFacility, departureTime, null, true); - bestModeEgress = strategyUtils.checkStationAccessDistance(false, bestModeEgress, bestStationDestination, bestStationOrigin, - egressDistance, toFacility, fromFacility, departureTime, bestModeAccess, true); - - return new UAMRoute(bestModeAccess, bestStationOrigin, bestStationDestination, bestModeEgress); + double egressDistance = strategyUtils.estimateDistance(false, toFacility, timeOfEgress, bestStationDestination, + bestModeEgress); + // if the access/egress distance is less than walkDistance, then walk will be + // the uam access and egress mode, otherwise time is used to select the mode + // access/egress + String bestModeAccess = strategyUtils.checkStationAccessDistance(true, + accessRoutesData.get(bestStationOrigin.getId()).getAccessModeDistance(), bestStationOrigin, null, + accessRoutesData.get(bestStationOrigin.getId()).getDistance(), fromFacility, toFacility, departureTime, + null, true); + bestModeEgress = strategyUtils.checkStationAccessDistance(false, bestModeEgress, bestStationDestination, + bestStationOrigin, egressDistance, toFacility, fromFacility, departureTime, bestModeAccess, true); + + return new UAMRoute(bestModeAccess, bestStationOrigin, bestStationDestination, bestModeEgress); } - + } diff --git a/src/main/java/net/bhl/matsim/uam/router/strategy/UAMMinTravelTimeStrategy.java b/src/main/java/net/bhl/matsim/uam/router/strategy/UAMMinTravelTimeStrategy.java index 0937ac30..4fe74b92 100644 --- a/src/main/java/net/bhl/matsim/uam/router/strategy/UAMMinTravelTimeStrategy.java +++ b/src/main/java/net/bhl/matsim/uam/router/strategy/UAMMinTravelTimeStrategy.java @@ -16,16 +16,18 @@ import net.bhl.matsim.uam.infrastructure.UAMStation; /** - * This strategy is used to assign to the passenger the UAMRoute based on the minimum total travel time of the route. + * This strategy is used to assign to the passenger a UAMRoute based on the + * minimum total travel time of the route. * - * @author Aitan Militao + * @author Aitanm (Aitan Militão), RRothfeld (Raoul Rothfeld) */ -public class UAMMinTravelTimeStrategy implements UAMStrategy{ +public class UAMMinTravelTimeStrategy implements UAMStrategy { private UAMStrategyUtils strategyUtils; + public UAMMinTravelTimeStrategy(UAMStrategyUtils strategyUtils) { this.strategyUtils = strategyUtils; } - + @Override public UAMStrategyType getUAMStrategyType() { return UAMStrategyType.MINTRAVELTIME; @@ -37,9 +39,9 @@ public UAMRoute getRoute(Person person, Facility fromFacility, Facility to Collection stationsOrigin = strategyUtils.getPossibleStations(fromFacility); Collection stationsDestination = strategyUtils.getPossibleStations(toFacility); Map, UAMAccessRouteData> accessRoutesData = new HashMap<>(); - - accessRoutesData = strategyUtils.getAccessRouteData(true, stationsOrigin, fromFacility, departureTime); - //UAM flight time + access and egress travel time + + accessRoutesData = strategyUtils.getAccessRouteData(true, stationsOrigin, fromFacility, departureTime); + // UAM flight time + access and egress travel time double minTotalTime = Double.POSITIVE_INFINITY; double timeOfEgress = departureTime; Set modes = new HashSet<>(); @@ -49,16 +51,19 @@ public UAMRoute getRoute(Person person, Facility fromFacility, Facility to for (UAMStation stationDestination : stationsDestination) { if (stationOrigin == stationDestination) continue; - //fly time between stations + // fly time between stations double flyTime = strategyUtils.getFlyTime(stationOrigin, stationDestination); - //updates departureTime - double currentDepartureTime = departureTime + accessRoutesData.get(stationOrigin.getId()).getAccessTravelTime()+flyTime; + // updates departureTime + double currentDepartureTime = departureTime + + accessRoutesData.get(stationOrigin.getId()).getAccessTravelTime() + flyTime; for (String mode : modes) { - //Calculates the time travel for the egress routes - double egressTravelTime = strategyUtils.estimateTime(false, toFacility, currentDepartureTime, stationDestination, mode); - //Calculates the minimum total time - double totalTime = accessRoutesData.get(stationOrigin.getId()).getAccessTravelTime()+ flyTime + egressTravelTime; - if (totalTime < minTotalTime ) { + // Calculates the time travel for the egress routes + double egressTravelTime = strategyUtils.estimateTime(false, toFacility, currentDepartureTime, + stationDestination, mode); + // Calculates the minimum total time + double totalTime = accessRoutesData.get(stationOrigin.getId()).getAccessTravelTime() + flyTime + + egressTravelTime; + if (totalTime < minTotalTime) { bestStationOrigin = stationOrigin; bestStationDestination = stationDestination; minTotalTime = totalTime; @@ -67,14 +72,18 @@ public UAMRoute getRoute(Person person, Facility fromFacility, Facility to } } } - } - double egressDistance = strategyUtils.estimateDistance(false, toFacility, timeOfEgress, bestStationDestination, bestModeEgress); - //if the access/egress distance is less than walkDistance, then walk will be the uam access and egress mode - String bestModeAccess = strategyUtils.checkStationAccessDistance(true, accessRoutesData.get(bestStationOrigin.getId()).getAccessModeTime() - ,bestStationOrigin, null, accessRoutesData.get(bestStationOrigin.getId()).getDistance(), fromFacility, toFacility, departureTime, null, false); - bestModeEgress = strategyUtils.checkStationAccessDistance(false, bestModeEgress, bestStationDestination, bestStationOrigin, - egressDistance, toFacility, fromFacility, departureTime, bestModeAccess, false); - + } + double egressDistance = strategyUtils.estimateDistance(false, toFacility, timeOfEgress, bestStationDestination, + bestModeEgress); + // if the access/egress distance is less than walkDistance, then walk will be + // the uam access and egress mode + String bestModeAccess = strategyUtils.checkStationAccessDistance(true, + accessRoutesData.get(bestStationOrigin.getId()).getAccessModeTime(), bestStationOrigin, null, + accessRoutesData.get(bestStationOrigin.getId()).getDistance(), fromFacility, toFacility, departureTime, + null, false); + bestModeEgress = strategyUtils.checkStationAccessDistance(false, bestModeEgress, bestStationDestination, + bestStationOrigin, egressDistance, toFacility, fromFacility, departureTime, bestModeAccess, false); + return new UAMRoute(bestModeAccess, bestStationOrigin, bestStationDestination, bestModeEgress); } diff --git a/src/main/java/net/bhl/matsim/uam/router/strategy/UAMPredefinedStrategy.java b/src/main/java/net/bhl/matsim/uam/router/strategy/UAMPredefinedStrategy.java index 5471f785..ae47b984 100644 --- a/src/main/java/net/bhl/matsim/uam/router/strategy/UAMPredefinedStrategy.java +++ b/src/main/java/net/bhl/matsim/uam/router/strategy/UAMPredefinedStrategy.java @@ -13,10 +13,16 @@ import net.bhl.matsim.uam.infrastructure.UAMStation; import net.bhl.matsim.uam.router.UAMIntermodalRoutingModule; -public class UAMPredefinedStrategy implements UAMStrategy{ +/** + * This strategy is used to assign to the passenger a UAMRoute based on a + * pre-defined route from the plans. + * + * @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) + */ +public class UAMPredefinedStrategy implements UAMStrategy { private UAMStrategyUtils strategyUtils; private static final Logger log = Logger.getLogger(UAMPredefinedStrategy.class); - + public static final String ACCESS_MODE = "accessMode"; public static final String ORIG_STATION = "originStation"; public static final String DEST_STATION = "destinationStation"; @@ -33,14 +39,14 @@ public UAMStrategyType getUAMStrategyType() { @Override public UAMRoute getRoute(Person person, Facility fromFacility, Facility toFacility, double departureTime) { - Leg l = null; + Leg l = null; List elements = person.getSelectedPlan().getPlanElements(); for (int i = 0; i < elements.size() - 2; i += 2) { Activity endingActivity = (Activity) elements.get(i); - + if (endingActivity.getType().equals(UAMIntermodalRoutingModule.UAM_INTERACTION)) continue; - + if (endingActivity.getEndTime() == departureTime) { l = (Leg) elements.get(i + 1); break; @@ -55,7 +61,7 @@ public UAMRoute getRoute(Person person, Facility fromFacility, Facility to if (accessMode == null || egressMode == null) reportMissingMode(person); - + String definedOriginStation = (String) l.getAttributes().getAttribute(ORIG_STATION); String definedDestinationStation = (String) l.getAttributes().getAttribute(DEST_STATION); UAMStation originStation = null, destinationStation = null; @@ -66,7 +72,7 @@ public UAMRoute getRoute(Person person, Facility fromFacility, Facility to break; } } - + Collection destinationStations = strategyUtils.getPossibleStations(toFacility); for (UAMStation station : destinationStations) { if (station.getId().toString().equals(definedDestinationStation)) { @@ -74,31 +80,30 @@ public UAMRoute getRoute(Person person, Facility fromFacility, Facility to break; } } - + if (originStation == null) reportMissingStation(person, definedOriginStation, originStations); - + if (destinationStation == null) reportMissingStation(person, definedDestinationStation, destinationStations); - return new UAMRoute(accessMode, originStation, destinationStation, egressMode); + return new UAMRoute(accessMode, originStation, destinationStation, egressMode); } private void reportMissingLeg(Person person) { - log.warn("For person " + person.getId().toString() + - ", predefined plan could not be parsed as UAM trip."); + log.warn("For person " + person.getId().toString() + ", predefined plan could not be parsed as UAM trip."); throw new NullPointerException(); } private void reportMissingMode(Person person) { - log.warn("For person " + person.getId().toString() + - ", predefined access and/or egress mode could not be found."); + log.warn("For person " + person.getId().toString() + + ", predefined access and/or egress mode could not be found."); throw new NullPointerException(); } private void reportMissingStation(Person person, String station, Collection stations) { - StringBuilder warning = new StringBuilder("For person " + person.getId().toString() + - ", predefined stations could not be found: " + station + " within possible stations: "); + StringBuilder warning = new StringBuilder("For person " + person.getId().toString() + + ", predefined stations could not be found: " + station + " within possible stations: "); for (UAMStation st : stations) warning.append(st.getId().toString()).append(" "); diff --git a/src/main/java/net/bhl/matsim/uam/router/strategy/UAMStrategy.java b/src/main/java/net/bhl/matsim/uam/router/strategy/UAMStrategy.java index c47bba7c..7eb914e1 100644 --- a/src/main/java/net/bhl/matsim/uam/router/strategy/UAMStrategy.java +++ b/src/main/java/net/bhl/matsim/uam/router/strategy/UAMStrategy.java @@ -6,8 +6,11 @@ import net.bhl.matsim.uam.data.UAMRoute; /** -* @author Aitan Militao -* */ + * Defines classes responsible to generate a UAMRoute based on a specific + * criteria (strategy). + * + * @author Aitanm (Aitan Militão), RRothfeld (Raoul Rothfeld) + */ public interface UAMStrategy { public static enum UAMStrategyType { MAXUTILITY, MAXACCESSUTILITY, MINTRAVELTIME, MINACCESSTRAVELTIME, MINDISTANCE, MINACCESSDISTANCE, PREDEFINED; diff --git a/src/main/java/net/bhl/matsim/uam/router/strategy/UAMStrategyRouter.java b/src/main/java/net/bhl/matsim/uam/router/strategy/UAMStrategyRouter.java index 0330f966..b1f32cc0 100644 --- a/src/main/java/net/bhl/matsim/uam/router/strategy/UAMStrategyRouter.java +++ b/src/main/java/net/bhl/matsim/uam/router/strategy/UAMStrategyRouter.java @@ -17,15 +17,16 @@ import net.bhl.matsim.uam.router.UAMIntermodalRoutingModule; import net.bhl.matsim.uam.router.strategy.UAMMinDistanceStrategy; import net.bhl.matsim.uam.router.strategy.UAMStrategy; -import net.bhl.matsim.uam.router.strategy.UAMStrategy.UAMStrategyType; import net.bhl.matsim.uam.router.strategy.UAMStrategyUtils; /** - * This class uses the strategy set in the config file to generate the routes for agents -* @author Aitan Militao -* */ + * This class uses the strategy selected in the config file to generate the + * routes for agents using UAM. + * + * @author Aitanm (Aitan Militão), RRothfeld (Raoul Rothfeld) + */ public class UAMStrategyRouter { - private final Scenario scenario; + private final Scenario scenario; private UAMConfigGroup uamConfig; private UAMStations landingStations; private ParallelLeastCostPathCalculator plcpc; @@ -36,31 +37,30 @@ public class UAMStrategyRouter { private CustomModeChoiceParameters parameters; private static final Logger log = Logger.getLogger(UAMIntermodalRoutingModule.class); private UAMStrategy strategy; - - public UAMStrategyRouter ( - Scenario scenario, UAMConfigGroup uamConfig, CustomModeChoiceParameters parameters, - ParallelLeastCostPathCalculator plcpc, LeastCostPathCalculator plcpccar, UAMStations landingStations, Network carNetwork, - UAMStationConnectionGraph stationConnectionutilities) { + + public UAMStrategyRouter(Scenario scenario, UAMConfigGroup uamConfig, CustomModeChoiceParameters parameters, + ParallelLeastCostPathCalculator plcpc, LeastCostPathCalculator plcpccar, UAMStations landingStations, + Network carNetwork, UAMStationConnectionGraph stationConnectionutilities) { this.scenario = scenario; - this.uamConfig = uamConfig; + this.uamConfig = uamConfig; this.parameters = parameters; this.plcpc = plcpc; this.plcpccar = plcpccar; this.landingStations = landingStations; this.carNetwork = carNetwork; - this.stationConnectionutilities = stationConnectionutilities; + this.stationConnectionutilities = stationConnectionutilities; } - - public UAMStrategyRouter ( - TransitRouter transitRouter, - Scenario scenario, UAMConfigGroup uamConfig, CustomModeChoiceParameters parameters, - ParallelLeastCostPathCalculator plcpc, LeastCostPathCalculator plcpccar, UAMStations landingStations, Network carNetwork, + + public UAMStrategyRouter(TransitRouter transitRouter, Scenario scenario, UAMConfigGroup uamConfig, + CustomModeChoiceParameters parameters, ParallelLeastCostPathCalculator plcpc, + LeastCostPathCalculator plcpccar, UAMStations landingStations, Network carNetwork, UAMStationConnectionGraph stationConnectionutilities) { this(scenario, uamConfig, parameters, plcpc, plcpccar, landingStations, carNetwork, stationConnectionutilities); this.transitRouter = transitRouter; } - - public boolean estimateUAMRoute(Person person, Facility fromFacility, Facility toFacility, double departureTime) { + + public boolean estimateUAMRoute(Person person, Facility fromFacility, Facility toFacility, + double departureTime) { try { if (strategy == null) this.setStrategy(); @@ -73,14 +73,17 @@ public boolean estimateUAMRoute(Person person, Facility fromFacility, Facilit return false; } } - + /** - * This method instantiate the strategy according to the parameter set in the Config file. Any new strategy class created has to be added here. - * @throws Exception + * This method instantiate the strategy according to the parameter set in the + * Config file. Any new strategy class created has to be added here. + * + * @throws Exception */ private void setStrategy() { - UAMStrategyUtils strategyUtils = new UAMStrategyUtils(this.landingStations, this.uamConfig, this.scenario, this.stationConnectionutilities, - this.carNetwork, this.transitRouter, this.plcpc, this.plcpccar, this.parameters); + UAMStrategyUtils strategyUtils = new UAMStrategyUtils(this.landingStations, this.uamConfig, this.scenario, + this.stationConnectionutilities, this.carNetwork, this.transitRouter, this.plcpc, this.plcpccar, + this.parameters); log.info("Setting UAM routing strategy to " + uamConfig.getUAMRoutingStrategy()); switch (uamConfig.getUAMRoutingStrategy()) { case MAXUTILITY: diff --git a/src/main/java/net/bhl/matsim/uam/router/strategy/UAMStrategyUtils.java b/src/main/java/net/bhl/matsim/uam/router/strategy/UAMStrategyUtils.java index 63cdd534..7153d804 100644 --- a/src/main/java/net/bhl/matsim/uam/router/strategy/UAMStrategyUtils.java +++ b/src/main/java/net/bhl/matsim/uam/router/strategy/UAMStrategyUtils.java @@ -39,9 +39,9 @@ import net.bhl.matsim.uam.router.UAMIntermodalRoutingModule; /** - * This class provides the methods used for different UAMStrategies + * This class provides the methods used for different UAMStrategies. * - * @author Aitan Militao + * @author Aitanm (Aitan Militão), RRothfeld (Raoul Rothfeld) */ public class UAMStrategyUtils { private final Scenario scenario; @@ -153,6 +153,12 @@ String checkStationAccessDistance(boolean access, String currentMode, UAMStation return bestMode; } + /** + * @param distance Access or egress distance to/from a UAM Station + * @param currentMode mode used for the leg + * @return The mode to be used for access/egress leg based on the minimum + * walking distance. + */ String checkStationAccessMinDistance(double distance, String currentMode) { if (distance <= uamConfig.getWalkDistance()) { return TransportMode.walk; @@ -161,6 +167,15 @@ String checkStationAccessMinDistance(double distance, String currentMode) { } } + /** + * @param access A boolean flag to check if it is an access leg to a UAM + * Station or an egress leg from a UAM Station + * @param facility Origin or Destination facility + * @param time Trip departure time + * @param station Origin or Destination UAM Station + * @param mode Mode used for the trip leg + * @return The trip leg distance + */ double estimateDistance(boolean access, Facility facility, double time, UAMStation station, String mode) { Network network = scenario.getNetwork(); Link from, to; diff --git a/src/main/java/net/bhl/matsim/uam/run/CustomModule.java b/src/main/java/net/bhl/matsim/uam/run/CustomModule.java index d60e7153..0bea29f8 100644 --- a/src/main/java/net/bhl/matsim/uam/run/CustomModule.java +++ b/src/main/java/net/bhl/matsim/uam/run/CustomModule.java @@ -4,10 +4,14 @@ import net.bhl.matsim.uam.router.TaxiRoutingModuleProvider; +/** + * A MATSim Abstract Module for the Taxi mode routing module. + * + * @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) + * + */ public class CustomModule extends AbstractModule { - - @Override public void install() { diff --git a/src/main/java/net/bhl/matsim/uam/run/RunUAMScenario.java b/src/main/java/net/bhl/matsim/uam/run/RunUAMScenario.java index b53bcf27..a5a5e2ac 100644 --- a/src/main/java/net/bhl/matsim/uam/run/RunUAMScenario.java +++ b/src/main/java/net/bhl/matsim/uam/run/RunUAMScenario.java @@ -37,7 +37,7 @@ * The RunUAMScenario program start a MATSim run including Urban Air Mobility * capabilities. * - * @author Milos Balac, Raoul Rothfeld + * @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) * @version 1.0 * @since 2019-01-15 */ diff --git a/src/main/java/net/bhl/matsim/uam/run/RunUAMScenarioGUI.java b/src/main/java/net/bhl/matsim/uam/run/RunUAMScenarioGUI.java index e2f4eb5d..748bd1ae 100644 --- a/src/main/java/net/bhl/matsim/uam/run/RunUAMScenarioGUI.java +++ b/src/main/java/net/bhl/matsim/uam/run/RunUAMScenarioGUI.java @@ -4,8 +4,10 @@ import org.matsim.run.gui.Gui; /** + * start a MATSim run including Urban Air Mobility capabilities using a + * Graphical user interface. * - * @author raoul.rothfeld + * @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) * */ @Deprecated diff --git a/src/main/java/net/bhl/matsim/uam/run/UAMModule.java b/src/main/java/net/bhl/matsim/uam/run/UAMModule.java index 6a3ade6e..626da71c 100644 --- a/src/main/java/net/bhl/matsim/uam/run/UAMModule.java +++ b/src/main/java/net/bhl/matsim/uam/run/UAMModule.java @@ -53,6 +53,12 @@ import net.bhl.matsim.uam.scoring.UAMScoringFunctionFactory; import net.bhl.matsim.uam.transit.simulation.UAMTransitPlugin; +/** + * A MATSim Abstract Module for the classes used by the UAM simulation. + * + * @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) + * + */ public class UAMModule extends AbstractModule { private UAMManager uamManager; diff --git a/src/main/java/net/bhl/matsim/uam/run/package-info.java b/src/main/java/net/bhl/matsim/uam/run/package-info.java index bf7bb0ff..d0322b7c 100644 --- a/src/main/java/net/bhl/matsim/uam/run/package-info.java +++ b/src/main/java/net/bhl/matsim/uam/run/package-info.java @@ -2,7 +2,7 @@ * */ /** - * @author balacm + * @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) * */ package net.bhl.matsim.uam.run; \ No newline at end of file From 3a7518054721a7b330a4914f6ec11ee3430aec18 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aitan=20Medeiros=20Milit=C3=A3o?= Date: Mon, 23 Sep 2019 17:59:39 +0200 Subject: [PATCH 5/5] -More documenting and formatting -Folders: scenario, schedule, scoring, transit, utils, vrpagent --- .../uam/scenario/RunCreateUAMScenario.java | 10 +- .../uam/scenario/RunSamplePopulation.java | 24 ++-- .../scenario/network/RunAddModeToNetwork.java | 13 +- .../uam/scenario/network/RunNetworkToSHP.java | 60 ++++----- .../RunAddPopulationAttributes.java | 34 ++++-- .../RunCreateAirportPassengers.java | 109 +++++++++-------- .../RunCreateUAMPersonAttributes.java | 47 ++++--- .../utils/ConfigAddUAMParameters.java | 67 +++++----- .../matsim/uam/schedule/UAMDropoffTask.java | 21 ++-- .../bhl/matsim/uam/schedule/UAMFlyTask.java | 15 ++- .../bhl/matsim/uam/schedule/UAMOptimizer.java | 16 ++- .../matsim/uam/schedule/UAMPickupTask.java | 32 ++--- .../uam/schedule/UAMSingleRideAppender.java | 115 +++++++++++------- .../bhl/matsim/uam/schedule/UAMStayTask.java | 49 ++++---- .../net/bhl/matsim/uam/schedule/UAMTask.java | 12 +- .../matsim/uam/schedule/UAMTransitEvent.java | 62 +++++----- .../uam/schedule/UAMTurnAroundTask.java | 27 ++-- .../uam/scoring/UAMScoringFunction.java | 8 +- .../scoring/UAMScoringFunctionFactory.java | 27 ++-- .../bhl/matsim/uam/scoring/package-info.java | 2 +- .../transit/simulation/UAMTransitEngine.java | 6 + .../transit/simulation/UAMTransitPlugin.java | 6 + .../uam/utils/RunConvertDeckGLBuildings.java | 55 +++++---- .../uam/utils/RunUAMVehicleFileHelper.java | 21 +++- .../matsim/uam/vrpagent/UAMActionCreator.java | 9 +- .../matsim/uam/vrpagent/UAMStayActivity.java | 11 +- .../uam/vrpagent/UAMTurnAroundActivity.java | 12 +- 27 files changed, 510 insertions(+), 360 deletions(-) diff --git a/src/main/java/net/bhl/matsim/uam/scenario/RunCreateUAMScenario.java b/src/main/java/net/bhl/matsim/uam/scenario/RunCreateUAMScenario.java index bbc0b967..989ee25b 100644 --- a/src/main/java/net/bhl/matsim/uam/scenario/RunCreateUAMScenario.java +++ b/src/main/java/net/bhl/matsim/uam/scenario/RunCreateUAMScenario.java @@ -36,6 +36,14 @@ import com.google.common.collect.Iterables; import ch.ethz.matsim.av.plcpc.DefaultParallelLeastCostPathCalculator; +/** + * This script creates UAM-including MATSim network and corresponding + * uam-vehicles file, which are prerequisites for running a UAM-enabled MATSim + * simulation. + * + * @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) + * + */ public class RunCreateUAMScenario { static boolean use_z_values = false; @@ -407,7 +415,7 @@ private static void calculateStationDistances(Network network, Set> sta for (Link link : path.get().links) { if (link.getId().toString().contains(name_uam_vertical_link)) vtoldistance += link.getLength(); - + else cruisedistance += link.getLength(); } diff --git a/src/main/java/net/bhl/matsim/uam/scenario/RunSamplePopulation.java b/src/main/java/net/bhl/matsim/uam/scenario/RunSamplePopulation.java index bae146f8..a99c8372 100644 --- a/src/main/java/net/bhl/matsim/uam/scenario/RunSamplePopulation.java +++ b/src/main/java/net/bhl/matsim/uam/scenario/RunSamplePopulation.java @@ -14,6 +14,14 @@ import ch.ethz.matsim.baseline_scenario.transit.routing.DefaultEnrichedTransitRoute; import ch.ethz.matsim.baseline_scenario.transit.routing.DefaultEnrichedTransitRouteFactory; +/** + * This script generates a new population file based on a given population file + * and a percentage. The new population file is a fraction of the original + * population file based on the percentage value provided. + * + * @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) + * + */ public class RunSamplePopulation { void run(final String[] args) { String inputPopFilename = null; @@ -28,7 +36,7 @@ void run(final String[] args) { inputPopFilename = args[0]; outputPopFilename = args[1]; percentage = Double.parseDouble(args[2]); - + if (args.length == 4) { netFilename = args[3]; } @@ -39,29 +47,29 @@ void run(final String[] args) { config.plans().setInputFile(inputPopFilename); if (args.length == 4) config.network().setInputFile(netFilename); - Scenario scenario = ScenarioUtils.createScenario(config); scenario.getPopulation().getFactory().getRouteFactories().setRouteFactory(DefaultEnrichedTransitRoute.class, - new DefaultEnrichedTransitRouteFactory()); + new DefaultEnrichedTransitRouteFactory()); ScenarioUtils.loadScenario(scenario); Population pop = scenario.getPopulation(); - + Scenario newScenario = ScenarioUtils.createScenario(ConfigUtils.createConfig()); newScenario.getPopulation().getFactory().getRouteFactories().setRouteFactory(DefaultEnrichedTransitRoute.class, - new DefaultEnrichedTransitRouteFactory()); + new DefaultEnrichedTransitRouteFactory()); ScenarioUtils.loadScenario(newScenario); Population newPop = newScenario.getPopulation(); - - // if input percentage is >0 (i.e. not a percentage but a defined number of agents to sub-sample) + + // if input percentage is >0 (i.e. not a percentage but a defined number of + // agents to sub-sample) if (percentage > 1) { double totalPop = pop.getPersons().values().size(); percentage = percentage / totalPop; System.err.println("Adjusting percentage to: " + percentage + System.lineSeparator()); } - + for (Person person : pop.getPersons().values()) { if (Math.random() < percentage) { newPop.addPerson(person); diff --git a/src/main/java/net/bhl/matsim/uam/scenario/network/RunAddModeToNetwork.java b/src/main/java/net/bhl/matsim/uam/scenario/network/RunAddModeToNetwork.java index 9373fbf6..07d0deba 100644 --- a/src/main/java/net/bhl/matsim/uam/scenario/network/RunAddModeToNetwork.java +++ b/src/main/java/net/bhl/matsim/uam/scenario/network/RunAddModeToNetwork.java @@ -14,12 +14,19 @@ import org.matsim.core.config.ConfigUtils; import org.matsim.core.scenario.ScenarioUtils; +/** + * This script adds specified mode(s) to an existing network if other specified + * mode(s) is (are) present. + * + * @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) + * + */ public class RunAddModeToNetwork { - + private static final String searchMode = "car"; private static final String addedMode = "car_passenger"; - public static void main(String[] args) throws Exception { + public static void main(String[] args) throws Exception { Config config = ConfigUtils.createConfig(); config.network().setInputFile(args[0]); Scenario scenario = ScenarioUtils.loadScenario(config); @@ -33,7 +40,7 @@ public static void main(String[] args) throws Exception { l.setAllowedModes(modes); } } - + new NetworkWriter(network).write(args[0]); System.out.println("done."); } diff --git a/src/main/java/net/bhl/matsim/uam/scenario/network/RunNetworkToSHP.java b/src/main/java/net/bhl/matsim/uam/scenario/network/RunNetworkToSHP.java index 8f618308..a8c14c5e 100644 --- a/src/main/java/net/bhl/matsim/uam/scenario/network/RunNetworkToSHP.java +++ b/src/main/java/net/bhl/matsim/uam/scenario/network/RunNetworkToSHP.java @@ -8,7 +8,6 @@ import java.util.HashSet; import java.util.Set; -import org.geotools.referencing.CRS; import org.matsim.api.core.v01.Scenario; import org.matsim.api.core.v01.network.Link; import org.matsim.api.core.v01.network.Network; @@ -27,13 +26,19 @@ import com.vividsolutions.jts.geom.Coordinate; +/** + * This script generates a shape file of a given network in MATSim format. + * + * @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) + * + */ public class RunNetworkToSHP { public static void main(String[] args) throws Exception { System.out.println("ARGS: input.xml EPSG:00000 allowed-modes*"); System.out.println("(* optional)"); - + Config config = ConfigUtils.createConfig(); config.network().setInputFile(args[0]); Scenario scenario = ScenarioUtils.loadScenario(config); @@ -57,51 +62,36 @@ public static void main(String[] args) throws Exception { e.printStackTrace(); System.exit(1); } - Collection features = new ArrayList(); - PolylineFeatureFactory linkFactory = new PolylineFeatureFactory.Builder(). - setCrs(crs). - setName("link"). - addAttribute("ID", String.class). - addAttribute("fromID", String.class). - addAttribute("toID", String.class). - addAttribute("length", Double.class). - addAttribute("type", String.class). - addAttribute("capacity", Double.class). - addAttribute("freespeed", Double.class). - addAttribute("modes", String.class). - create(); + PolylineFeatureFactory linkFactory = new PolylineFeatureFactory.Builder().setCrs(crs).setName("link") + .addAttribute("ID", String.class).addAttribute("fromID", String.class) + .addAttribute("toID", String.class).addAttribute("length", Double.class) + .addAttribute("type", String.class).addAttribute("capacity", Double.class) + .addAttribute("freespeed", Double.class).addAttribute("modes", String.class).create(); for (Link link : network.getLinks().values()) { - Coordinate fromNodeCoordinate = new Coordinate(link.getFromNode().getCoord().getX(), link.getFromNode().getCoord().getY()); - Coordinate toNodeCoordinate = new Coordinate(link.getToNode().getCoord().getX(), link.getToNode().getCoord().getY()); + Coordinate fromNodeCoordinate = new Coordinate(link.getFromNode().getCoord().getX(), + link.getFromNode().getCoord().getY()); + Coordinate toNodeCoordinate = new Coordinate(link.getToNode().getCoord().getX(), + link.getToNode().getCoord().getY()); Coordinate linkCoordinate = new Coordinate(link.getCoord().getX(), link.getCoord().getY()); - SimpleFeature ft = linkFactory.createPolyline(new Coordinate [] {fromNodeCoordinate, linkCoordinate, toNodeCoordinate}, - new Object [] {link.getId().toString(), - link.getFromNode().getId().toString(), - link.getToNode().getId().toString(), - link.getLength(), - NetworkUtils.getType(((Link)link)), - link.getCapacity(), - link.getFreespeed(), - link.getAllowedModes()}, + SimpleFeature ft = linkFactory.createPolyline( + new Coordinate[] { fromNodeCoordinate, linkCoordinate, toNodeCoordinate }, + new Object[] { link.getId().toString(), link.getFromNode().getId().toString(), + link.getToNode().getId().toString(), link.getLength(), NetworkUtils.getType(((Link) link)), + link.getCapacity(), link.getFreespeed(), link.getAllowedModes() }, null); features.add(ft); - } + } ShapeFileWriter.writeGeometries(features, args[0] + "_links.shp"); features = new ArrayList(); - PointFeatureFactory nodeFactory = new PointFeatureFactory.Builder(). - setCrs(crs). - setName("nodes"). - addAttribute("ID", String.class). - create(); + PointFeatureFactory nodeFactory = new PointFeatureFactory.Builder().setCrs(crs).setName("nodes") + .addAttribute("ID", String.class).create(); for (Node node : network.getNodes().values()) { - SimpleFeature ft = nodeFactory.createPoint(node.getCoord(), - new Object[] {node.getId().toString()}, - null); + SimpleFeature ft = nodeFactory.createPoint(node.getCoord(), new Object[] { node.getId().toString() }, null); features.add(ft); } ShapeFileWriter.writeGeometries(features, args[0] + "_nodes.shp"); diff --git a/src/main/java/net/bhl/matsim/uam/scenario/population/RunAddPopulationAttributes.java b/src/main/java/net/bhl/matsim/uam/scenario/population/RunAddPopulationAttributes.java index 2f906773..7acdbdcc 100644 --- a/src/main/java/net/bhl/matsim/uam/scenario/population/RunAddPopulationAttributes.java +++ b/src/main/java/net/bhl/matsim/uam/scenario/population/RunAddPopulationAttributes.java @@ -3,7 +3,6 @@ import java.util.Random; import org.matsim.api.core.v01.Scenario; - //Adjusted from RunPopulationDownsamplingExample.java by matsim-code-examples import org.matsim.api.core.v01.population.Person; @@ -15,13 +14,20 @@ import ch.ethz.matsim.baseline_scenario.transit.routing.DefaultEnrichedTransitRoute; import ch.ethz.matsim.baseline_scenario.transit.routing.DefaultEnrichedTransitRouteFactory; +/** + * This script adds socio-demographic attributes to each person object in an + * existing population (or plan) file. + * + * @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) + * + */ public class RunAddPopulationAttributes { - + private double carOwnsershipPercent = 0.75; private double ptSubscriptionOwnsershipPercent = 0.75; private double bikeOwnsershipPercent = 0.95; private double employedPercent = 0.95; - + void run(final String[] args) { // ARGS: population String inputPopFilename = args[0]; @@ -30,19 +36,25 @@ void run(final String[] args) { Scenario scenario = ScenarioUtils.createScenario(config); scenario.getPopulation().getFactory().getRouteFactories().setRouteFactory(DefaultEnrichedTransitRoute.class, - new DefaultEnrichedTransitRouteFactory()); + new DefaultEnrichedTransitRouteFactory()); ScenarioUtils.loadScenario(scenario); - + Population pop = scenario.getPopulation(); for (Person p : pop.getPersons().values()) { p.getAttributes().putAttribute("age", 30); - p.getAttributes().putAttribute("employed", new Random().nextDouble() < employedPercent ? true : false); - p.getAttributes().putAttribute("ptSubscription", new Random().nextDouble() < ptSubscriptionOwnsershipPercent ? true : false); + p.getAttributes().putAttribute("employed", new Random().nextDouble() < employedPercent ? true : false); + p.getAttributes().putAttribute("ptSubscription", + new Random().nextDouble() < ptSubscriptionOwnsershipPercent ? true : false); p.getAttributes().putAttribute("sex", new Random().nextBoolean() ? "m" : "f"); - p.getAttributes().putAttribute("bikeAvailability", new Random().nextDouble() < bikeOwnsershipPercent ? "always" : "never"); - + p.getAttributes().putAttribute("bikeAvailability", + new Random().nextDouble() < bikeOwnsershipPercent ? "always" : "never"); + Double rand = new Random().nextDouble(); - p.getAttributes().putAttribute("hasLicense", rand < carOwnsershipPercent ? "true" : "false"); //excepted as string instead of boolean + p.getAttributes().putAttribute("hasLicense", rand < carOwnsershipPercent ? "true" : "false"); // excepted as + // string + // instead + // of + // boolean p.getAttributes().putAttribute("carAvailability", rand < carOwnsershipPercent ? "always" : "never"); } @@ -50,7 +62,7 @@ void run(final String[] args) { PopulationWriter popwriter = new PopulationWriter(pop); String[] inputPop = inputPopFilename.split(".xml"); popwriter.write(inputPop[0] + "_added_attrs.xml" + inputPop[1]); - + System.out.println("done."); } diff --git a/src/main/java/net/bhl/matsim/uam/scenario/population/RunCreateAirportPassengers.java b/src/main/java/net/bhl/matsim/uam/scenario/population/RunCreateAirportPassengers.java index 2d9fffc1..52ac6072 100644 --- a/src/main/java/net/bhl/matsim/uam/scenario/population/RunCreateAirportPassengers.java +++ b/src/main/java/net/bhl/matsim/uam/scenario/population/RunCreateAirportPassengers.java @@ -35,29 +35,36 @@ import ch.ethz.matsim.baseline_scenario.transit.routing.DefaultEnrichedTransitRoute; import ch.ethz.matsim.baseline_scenario.transit.routing.DefaultEnrichedTransitRouteFactory; +/** + * This script creates a population file for Airport passengers. + * + * @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) + * + */ @Deprecated public class RunCreateAirportPassengers { private static double popPrct = 0.5; - + private static int earliestHour = 5; private static int latestHour = 22; private static int earliestAge = 23; private static int oldestAge = 75; - + private static String currency = "CHF"; - + void run(final String[] args) { // ARGS: population* households percent // * required - + if (args.length > 1) popPrct = Double.parseDouble(args[1]); System.out.println("Population Sample Size: " + popPrct); - + Set airports = new HashSet(); - - // Paris (DO NOT USE UAM LINK! USE NORMAL ROAD LINK, since if population is used on a different UAM + + // Paris (DO NOT USE UAM LINK! USE NORMAL ROAD LINK, since if population is used + // on a different UAM // network without said UAM link, the simulation will not run!) // airports.add(new Airport(Id.create("290668", Link.class), @@ -71,20 +78,16 @@ void run(final String[] args) { // "ORY", // (int) Math.max(1, Math.round(43784 * popPrct)), // departing // (int) Math.max(1, Math.round(43755 * popPrct)))); // arriving - + // Sao Paulo - airports.add(new Airport(Id.create("281285", Link.class), - new Coord(332618.0847, 7385146.449), - "CGH", - (int) Math.max(1, Math.round(29944 * popPrct)), // departing per day - (int) Math.max(1, Math.round(29944 * popPrct)))); // arriving per day - - airports.add(new Airport(Id.create("230341", Link.class), - new Coord(349128.3068, 7408896.666), - "GRU", - (int) Math.max(1, Math.round(51803 * popPrct)), // departing per day - (int) Math.max(1, Math.round(51803 * popPrct)))); // arriving per day - + airports.add(new Airport(Id.create("281285", Link.class), new Coord(332618.0847, 7385146.449), "CGH", + (int) Math.max(1, Math.round(29944 * popPrct)), // departing per day + (int) Math.max(1, Math.round(29944 * popPrct)))); // arriving per day + + airports.add(new Airport(Id.create("230341", Link.class), new Coord(349128.3068, 7408896.666), "GRU", + (int) Math.max(1, Math.round(51803 * popPrct)), // departing per day + (int) Math.max(1, Math.round(51803 * popPrct)))); // arriving per day + // Jakarta // airports.add(new Airport(Id.create("28318", Link.class), // new Coord(3528658.934, 223298.16), @@ -112,9 +115,9 @@ void run(final String[] args) { Scenario scenario = ScenarioUtils.createScenario(config); scenario.getPopulation().getFactory().getRouteFactories().setRouteFactory(DefaultEnrichedTransitRoute.class, - new DefaultEnrichedTransitRouteFactory()); + new DefaultEnrichedTransitRouteFactory()); ScenarioUtils.loadScenario(scenario); - + Population pop = scenario.getPopulation(); PopulationFactory factory = pop.getFactory(); @@ -130,38 +133,38 @@ void run(final String[] args) { } } Collections.shuffle(homes); - + Households households = null; double minIncome = 0; double maxIncome = 0; if (ifHouseholds) { households = scenario.getHouseholds(); - + for (Household h : households.getHouseholds().values()) { minIncome = Math.min(h.getIncome().getIncome(), minIncome); maxIncome = Math.max(h.getIncome().getIncome(), maxIncome); } } - + // create defined number of agents with new IDs, random attributes and for (Airport airport : airports) { for (int i = 0; i < airport.arrivingPax; i++) { - + String id = airport.code + "ARR" + i; Person p = createPerson(id, factory, homes.pop(), airport, false); pop.addPerson(p); - + if (ifHouseholds) { Household h = createHousehold(id, households, maxIncome, minIncome, p); households.getHouseholds().put(h.getId(), h); } } - + for (int i = 0; i < airport.departingPax; i++) { String id = airport.code + "DEP" + i; Person p = createPerson(id, factory, homes.pop(), airport, true); pop.addPerson(p); - + if (ifHouseholds) { Household h = createHousehold(id, households, maxIncome, minIncome, p); households.getHouseholds().put(h.getId(), h); @@ -173,40 +176,42 @@ void run(final String[] args) { PopulationWriter popwriter = new PopulationWriter(pop); String[] inputPop = inputPopFilename.split(".xml"); popwriter.write(inputPop[0] + "_pax.xml" + inputPop[1]); - + if (ifHouseholds) { String[] inputHh = inputHhFilename.split(".xml"); HouseholdsWriterV10 hhwriter = new HouseholdsWriterV10(households); hhwriter.writeFile(inputHh[0] + "_pax.xml" + inputHh[1]); } - + System.out.println("done."); } - + private static Household createHousehold(String id, Households households, double max, double min, Person p) { Household h = households.getFactory().createHousehold(Id.create(id + "HH", Household.class)); Income inc = households.getFactory().createIncome( - new Random().nextInt((int) ((max - (min + ((max - min) / 2)) + 1) + min)), - Income.IncomePeriod.month); + new Random().nextInt((int) ((max - (min + ((max - min) / 2)) + 1) + min)), Income.IncomePeriod.month); inc.setCurrency(currency); h.setIncome(inc); h.getMemberIds().add(p.getId()); - - h.getAttributes().putAttribute("numberOfCars", p.getAttributes().getAttribute("carAvailability") == "all" ? 1 : 0); + + h.getAttributes().putAttribute("numberOfCars", + p.getAttributes().getAttribute("carAvailability") == "all" ? 1 : 0); h.getAttributes().putAttribute("carAvailability", p.getAttributes().getAttribute("carAvailability")); h.getAttributes().putAttribute("bikeAvailability", p.getAttributes().getAttribute("bikeAvailability")); - h.getAttributes().putAttribute("residenceZoneCategory",2); // TODO + h.getAttributes().putAttribute("residenceZoneCategory", 2); // TODO return h; } - - private static Person createPerson(String id, PopulationFactory factory, Home home, Airport airport, Boolean departing) { + + private static Person createPerson(String id, PopulationFactory factory, Home home, Airport airport, + Boolean departing) { Person p = factory.createPerson(Id.createPersonId(id)); - + Plan plan = factory.createPlan(); - - double time = ((new Random().nextInt((latestHour - earliestHour) + 1) + earliestHour) * 3600) + (new Random().nextInt(3599)); - + + double time = ((new Random().nextInt((latestHour - earliestHour) + 1) + earliestHour) * 3600) + + (new Random().nextInt(3599)); + Activity firstAct; if (departing) { firstAct = factory.createActivityFromCoord("home", home.coord); @@ -228,38 +233,38 @@ private static Person createPerson(String id, PopulationFactory factory, Home ho scndAct.setLinkId(airport.link); scndAct.setStartTime(time + 3600); } - + Leg l = factory.createLeg("walk"); l.setDepartureTime(time); l.setTravelTime(3600); - + Route r = factory.getRouteFactories().createRoute(Route.class, firstAct.getLinkId(), scndAct.getLinkId()); r.setTravelTime(3600); r.setDistance(CoordUtils.calcEuclideanDistance(firstAct.getCoord(), scndAct.getCoord())); l.setRoute(r); - + plan.addActivity(firstAct); plan.addLeg(l); plan.addActivity(scndAct); p.addPlan(plan); p.setSelectedPlan(plan); - - // attributes + + // attributes p.getAttributes().putAttribute("age", new Random().nextInt((oldestAge - earliestAge) + 1) + earliestAge); - p.getAttributes().putAttribute("employed", new Random().nextBoolean()); + p.getAttributes().putAttribute("employed", new Random().nextBoolean()); p.getAttributes().putAttribute("ptSubscription", new Random().nextBoolean()); p.getAttributes().putAttribute("sex", new Random().nextBoolean() ? "m" : "f"); p.getAttributes().putAttribute("bikeAvailability", "none"); p.getAttributes().putAttribute("income", 4500.0); // TODO p.getAttributes().putAttribute("isPassenger", false); p.getAttributes().putAttribute("residence", 2); // TODO - + Double rand = new Random().nextDouble(); Double airportAccessCar = 0.3; p.getAttributes().putAttribute("hasLicense", rand < airportAccessCar ? "yes" : "no"); p.getAttributes().putAttribute("carAvailability", rand < airportAccessCar ? "all" : "none"); - - return p; + + return p; } public static void main(final String[] args) { diff --git a/src/main/java/net/bhl/matsim/uam/scenario/population/RunCreateUAMPersonAttributes.java b/src/main/java/net/bhl/matsim/uam/scenario/population/RunCreateUAMPersonAttributes.java index 51be526f..c44b4af0 100644 --- a/src/main/java/net/bhl/matsim/uam/scenario/population/RunCreateUAMPersonAttributes.java +++ b/src/main/java/net/bhl/matsim/uam/scenario/population/RunCreateUAMPersonAttributes.java @@ -11,7 +11,6 @@ import org.matsim.api.core.v01.population.Person; import org.matsim.api.core.v01.population.PlanElement; import org.matsim.api.core.v01.population.Population; -import org.matsim.api.core.v01.population.PopulationWriter; import org.matsim.contrib.dvrp.run.DvrpConfigGroup; import org.matsim.core.config.Config; import org.matsim.core.config.ConfigGroup; @@ -29,9 +28,18 @@ import net.bhl.matsim.uam.infrastructure.UAMStations; import net.bhl.matsim.uam.infrastructure.readers.UAMXMLReader; +/** + * This script generates a xml subpopulation attributes file containing the id + * of potential uam users based on a provided config file containing a search + * radius. If there is at least one station within reach, the user is considered + * a potential uam user. + * + * @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) + * + */ public class RunCreateUAMPersonAttributes { public static void main(final String[] args) { - //cmd-line input: input-config + // cmd-line input: input-config String inputConfig = args[0]; UAMConfigGroup uamConfigGroup = new UAMConfigGroup(); @@ -50,40 +58,39 @@ public static void main(final String[] args) { filter.filter(networkUAM, modes); UAMXMLReader uamReader = new UAMXMLReader(networkUAM); - uamReader.readFile(ConfigGroup.getInputFileURL(config.getContext(), uamConfigGroup.getUAM()).getPath().replace("%20", " ")); + uamReader.readFile(ConfigGroup.getInputFileURL(config.getContext(), uamConfigGroup.getUAM()).getPath() + .replace("%20", " ")); final UAMStations uamStations = new UAMStations(uamReader.getStations(), network); Population pop = scenario.getPopulation(); ObjectAttributes objattr = new ObjectAttributes(); // filter persons with activities outside the radius - personloop: - for (Person person : pop.getPersons().values()) { - for (PlanElement p : person.getSelectedPlan().getPlanElements()) { - if (p instanceof Activity) { + personloop: for (Person person : pop.getPersons().values()) { + for (PlanElement p : person.getSelectedPlan().getPlanElements()) { + if (p instanceof Activity) { - Coord originCoord = ((Activity) p).getCoord(); + Coord originCoord = ((Activity) p).getCoord(); - Collection stations = uamStations.spatialStations.getDisk(originCoord.getX(), - originCoord.getY(), uamConfigGroup.getSearchRadius()); + Collection stations = uamStations.spatialStations.getDisk(originCoord.getX(), + originCoord.getY(), uamConfigGroup.getSearchRadius()); - if (!stations.isEmpty()) { - // at least one station within reach - objattr.putAttribute(person.getId().toString(), "subpopulation", "potential-uam"); - continue personloop; - } + if (!stations.isEmpty()) { + // at least one station within reach + objattr.putAttribute(person.getId().toString(), "subpopulation", "potential-uam"); + continue personloop; } } - // no UAM stations in reach } + // no UAM stations in reach + } int radius = (int) uamConfigGroup.getSearchRadius(); - String rangeString = radius > 9999 ? "" + (radius/1000) + "km" : "" + radius + "m"; - + String rangeString = radius > 9999 ? "" + (radius / 1000) + "km" : "" + radius + "m"; + ObjectAttributesXmlWriter objwriter = new ObjectAttributesXmlWriter(objattr); objwriter.writeFile(inputConfig.substring(0, inputConfig.lastIndexOf("\\")) + "\\" - + config.plans().getInputFile().split(".xml")[0] - + "_attributes_uam-" + rangeString + ".xml.gz"); + + config.plans().getInputFile().split(".xml")[0] + "_attributes_uam-" + rangeString + ".xml.gz"); System.out.println("done."); } diff --git a/src/main/java/net/bhl/matsim/uam/scenario/utils/ConfigAddUAMParameters.java b/src/main/java/net/bhl/matsim/uam/scenario/utils/ConfigAddUAMParameters.java index 0377aeda..5ad0b436 100644 --- a/src/main/java/net/bhl/matsim/uam/scenario/utils/ConfigAddUAMParameters.java +++ b/src/main/java/net/bhl/matsim/uam/scenario/utils/ConfigAddUAMParameters.java @@ -4,38 +4,43 @@ import org.matsim.core.config.ConfigGroup; import org.matsim.core.config.Config; +/** + * This class adds UAM parameters to the Config file. + * + * @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) + * + */ public class ConfigAddUAMParameters { - public static void addUAMParameters(Config config, String inputUAMFile, String modes, int threads, int searchRadius, - int walkDistance, UAMStrategy.UAMStrategyType routingStrategy, boolean ptSimulation) { - config.getModules().get("uam").addParam("inputUAMFile", inputUAMFile); - config.getModules().get("uam").addParam("availableAccessModes", modes); - config.getModules().get("uam").addParam("parallelRouters", "" + threads); - config.getModules().get("uam").addParam("searchRadius", "" + searchRadius); - config.getModules().get("uam").addParam("walkDistance", "" + walkDistance); - // Possible strategies: MAXUTILITY, MAXACCESSUTILITY, MINTRAVELTIME, MINACCESSTRAVELTIME, MINDISTANCE, - // MINACCESSDISTANCE, PREDEFINED - config.getModules().get("uam").addParam("routingStrategy", routingStrategy.toString()); - config.getModules().get("uam").addParam("ptSimulation", String.valueOf(ptSimulation)); + public static void addUAMParameters(Config config, String inputUAMFile, String modes, int threads, int searchRadius, + int walkDistance, UAMStrategy.UAMStrategyType routingStrategy, boolean ptSimulation) { + config.getModules().get("uam").addParam("inputUAMFile", inputUAMFile); + config.getModules().get("uam").addParam("availableAccessModes", modes); + config.getModules().get("uam").addParam("parallelRouters", "" + threads); + config.getModules().get("uam").addParam("searchRadius", "" + searchRadius); + config.getModules().get("uam").addParam("walkDistance", "" + walkDistance); + // Possible strategies: MAXUTILITY, MAXACCESSUTILITY, MINTRAVELTIME, + // MINACCESSTRAVELTIME, MINDISTANCE, + // MINACCESSDISTANCE, PREDEFINED + config.getModules().get("uam").addParam("routingStrategy", routingStrategy.toString()); + config.getModules().get("uam").addParam("ptSimulation", String.valueOf(ptSimulation)); - // UAM planCalcScore activities - ConfigGroup uamInteractionParam = config.getModules().get("planCalcScore").createParameterSet("activityParams"); - uamInteractionParam.addParam("activityType", "uam_interaction"); - uamInteractionParam.addParam("scoringThisActivityAtAll", "false"); - config.getModules().get("planCalcScore").addParameterSet(uamInteractionParam); + // UAM planCalcScore activities + ConfigGroup uamInteractionParam = config.getModules().get("planCalcScore").createParameterSet("activityParams"); + uamInteractionParam.addParam("activityType", "uam_interaction"); + uamInteractionParam.addParam("scoringThisActivityAtAll", "false"); + config.getModules().get("planCalcScore").addParameterSet(uamInteractionParam); - // UAM planCalcScore modes - String[] modeScores = { "uam", - "access_uam_walk", "egress_uam_walk", - "access_uam_car", "egress_uam_car", - "access_uam_bike", "egress_uam_bike" }; - for (String modeScore : modeScores) { - ConfigGroup modeParam = config.getModules().get("planCalcScore").createParameterSet("modeParams"); - modeParam.addParam("mode", modeScore); - modeParam.addParam("constant", "0.0"); - modeParam.addParam("marginalUtilityOfDistance_util_m", "0.0"); - modeParam.addParam("marginalUtilityOfTraveling_util_hr", "0.0"); - modeParam.addParam("monetaryDistanceRate", "0.0"); - config.getModules().get("planCalcScore").addParameterSet(modeParam); - } - } + // UAM planCalcScore modes + String[] modeScores = { "uam", "access_uam_walk", "egress_uam_walk", "access_uam_car", "egress_uam_car", + "access_uam_bike", "egress_uam_bike" }; + for (String modeScore : modeScores) { + ConfigGroup modeParam = config.getModules().get("planCalcScore").createParameterSet("modeParams"); + modeParam.addParam("mode", modeScore); + modeParam.addParam("constant", "0.0"); + modeParam.addParam("marginalUtilityOfDistance_util_m", "0.0"); + modeParam.addParam("marginalUtilityOfTraveling_util_hr", "0.0"); + modeParam.addParam("monetaryDistanceRate", "0.0"); + config.getModules().get("planCalcScore").addParameterSet(modeParam); + } + } } diff --git a/src/main/java/net/bhl/matsim/uam/schedule/UAMDropoffTask.java b/src/main/java/net/bhl/matsim/uam/schedule/UAMDropoffTask.java index ab3cfe56..9ab1b768 100644 --- a/src/main/java/net/bhl/matsim/uam/schedule/UAMDropoffTask.java +++ b/src/main/java/net/bhl/matsim/uam/schedule/UAMDropoffTask.java @@ -9,10 +9,13 @@ import net.bhl.matsim.uam.passenger.UAMRequest; -/** - * This task represents the local drop-off of passenger at stations, it doesn't include the flying period. +/** + * This task represents the local drop-off of passenger at stations, it doesn't + * include the flying period. + * + * @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) + * */ - public class UAMDropoffTask extends StayTaskImpl implements UAMTask { private final Set requests = new HashSet<>(); private final double deboardingTime; @@ -21,13 +24,15 @@ public UAMDropoffTask(double beginTime, double endTime, Link link, double deboar super(beginTime, endTime, link); this.deboardingTime = deboardingTime; } - - public UAMDropoffTask(double beginTime, double endTime, Link link, double deboardingTime, Collection requests) { + + public UAMDropoffTask(double beginTime, double endTime, Link link, double deboardingTime, + Collection requests) { super(beginTime, endTime, link); this.requests.addAll(requests); - for (UAMRequest request : requests) request.setDropoffTask(this); - + for (UAMRequest request : requests) + request.setDropoffTask(this); + this.deboardingTime = deboardingTime; } @@ -46,7 +51,7 @@ public void addRequest(UAMRequest request) { this.requests.add(request); } - + public double getDeboardingTime() { return deboardingTime; } diff --git a/src/main/java/net/bhl/matsim/uam/schedule/UAMFlyTask.java b/src/main/java/net/bhl/matsim/uam/schedule/UAMFlyTask.java index 6affcaed..39d54d87 100644 --- a/src/main/java/net/bhl/matsim/uam/schedule/UAMFlyTask.java +++ b/src/main/java/net/bhl/matsim/uam/schedule/UAMFlyTask.java @@ -9,19 +9,24 @@ import net.bhl.matsim.uam.passenger.UAMRequest; -/** - * During this task the UAM vehicle is flying +/** + * During this task the UAM vehicle is flying. + * + * @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) + * */ - public class UAMFlyTask extends DriveTaskImpl implements UAMTask { private final Set requests = new HashSet<>(); + public UAMFlyTask(VrpPathWithTravelData path) { - super(path); + super(path); } + public UAMFlyTask(VrpPathWithTravelData path, Collection requests) { this(path); this.requests.addAll(requests); } + @Override public UAMTaskType getUAMTaskType() { return UAMTaskType.FLY; @@ -34,6 +39,6 @@ public Collection getRequests() { @Override public void addRequest(UAMRequest request) { - requests.add(request); + requests.add(request); } } diff --git a/src/main/java/net/bhl/matsim/uam/schedule/UAMOptimizer.java b/src/main/java/net/bhl/matsim/uam/schedule/UAMOptimizer.java index 610068c3..45e9219a 100644 --- a/src/main/java/net/bhl/matsim/uam/schedule/UAMOptimizer.java +++ b/src/main/java/net/bhl/matsim/uam/schedule/UAMOptimizer.java @@ -20,10 +20,16 @@ import net.bhl.matsim.uam.infrastructure.UAMVehicle; import net.bhl.matsim.uam.passenger.UAMRequest; +/** + * An optimizer for UAM vehicles schedule. + * + * @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) + * + */ @Singleton public class UAMOptimizer implements VrpOptimizerWithOnlineTracking, MobsimBeforeSimStepListener { private double now; - + private Dispatcher dispatcher; @Inject private EventsManager eventsManager; @@ -41,8 +47,8 @@ public void requestSubmitted(Request request) { @Override public void nextTask(Vehicle vehicle) { Schedule schedule = vehicle.getSchedule(); - //this happens at the start of the simulation since - //the schedule has not started yet + // this happens at the start of the simulation since + // the schedule has not started yet if (schedule.getStatus() != Schedule.ScheduleStatus.STARTED) { schedule.nextTask(); return; @@ -65,8 +71,8 @@ public void nextTask(Vehicle vehicle) { double startTime = now; UAMTask indexTask; - //we have to adapt the times of the rest of the tasks - //in order to take into account any delays vehicle has experienced so far + // we have to adapt the times of the rest of the tasks + // in order to take into account any delays vehicle has experienced so far while (index < tasks.size()) { indexTask = (UAMTask) tasks.get(index); diff --git a/src/main/java/net/bhl/matsim/uam/schedule/UAMPickupTask.java b/src/main/java/net/bhl/matsim/uam/schedule/UAMPickupTask.java index 4f013583..c3734c3f 100644 --- a/src/main/java/net/bhl/matsim/uam/schedule/UAMPickupTask.java +++ b/src/main/java/net/bhl/matsim/uam/schedule/UAMPickupTask.java @@ -9,26 +9,30 @@ import net.bhl.matsim.uam.passenger.UAMRequest; -/** - * This task represents the local pick up of passenger at stations, it doesn't include the flying period. +/** + * This task represents the local pick up of passenger at stations, it doesn't + * include the flying period. + * + * @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) + * */ - -public class UAMPickupTask extends StayTaskImpl implements UAMTask{ +public class UAMPickupTask extends StayTaskImpl implements UAMTask { private final Set requests = new HashSet<>(); private final double boardingTime; public UAMPickupTask(double beginTime, double endTime, Link link, double boardingTime) { - super(beginTime, endTime, link); - this.boardingTime = boardingTime; + super(beginTime, endTime, link); + this.boardingTime = boardingTime; } - public UAMPickupTask(double beginTime, double endTime, Link link, double boardingTime, Collection requests) { - this(beginTime, endTime, link, boardingTime); + public UAMPickupTask(double beginTime, double endTime, Link link, double boardingTime, + Collection requests) { + this(beginTime, endTime, link, boardingTime); - this.requests.addAll(requests); - for (UAMRequest request : requests) - request.setPickupTask(this); - } + this.requests.addAll(requests); + for (UAMRequest request : requests) + request.setPickupTask(this); + } @Override public UAMTaskType getUAMTaskType() { @@ -43,8 +47,8 @@ public Set getRequests() { @Override public void addRequest(UAMRequest request) { requests.add(request); - request.setPickupTask(this); - + request.setPickupTask(this); + } public double getBoardingTime() { diff --git a/src/main/java/net/bhl/matsim/uam/schedule/UAMSingleRideAppender.java b/src/main/java/net/bhl/matsim/uam/schedule/UAMSingleRideAppender.java index c8e23a55..001955e0 100644 --- a/src/main/java/net/bhl/matsim/uam/schedule/UAMSingleRideAppender.java +++ b/src/main/java/net/bhl/matsim/uam/schedule/UAMSingleRideAppender.java @@ -23,16 +23,17 @@ import net.bhl.matsim.uam.infrastructure.UAMVehicle; import net.bhl.matsim.uam.passenger.UAMRequest; -/** - * This class adds tasks for each vehicle schedule based on the requests +/** + * This class adds tasks for each vehicle schedule based on the requests + * + * @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) + * */ - - public class UAMSingleRideAppender { @Inject @Named("uam") private ParallelLeastCostPathCalculator router; - + @Inject @Named("uam") private TravelTime travelTime; @@ -40,7 +41,7 @@ public class UAMSingleRideAppender { private List tasks = new LinkedList<>(); private UAMStations landingStations; - private class AppendTask { + private class AppendTask { final public UAMRequest request; final public UAMVehicle vehicle; @@ -59,28 +60,48 @@ public AppendTask(UAMRequest request, UAMVehicle vehicle, double time, Future pickup = router.calcLeastCostPath(stayTask.getLink().getToNode(), // pickup path is from downstream node of stayTask Link to upstream node from request origin Link. + Future pickup = router.calcLeastCostPath(stayTask.getLink().getToNode(), // pickup path is from downstream + // node of stayTask Link to + // upstream node from request + // origin Link. request.getFromLink().getFromNode(), now, null, null); - Future dropoff = router.calcLeastCostPath(request.getFromLink().getToNode(), // dropoff path is from downstream node of request origin link to upstream node from request destination Link. + Future dropoff = router.calcLeastCostPath(request.getFromLink().getToNode(), // dropoff path is from + // downstream node of + // request origin link to + // upstream node from + // request destination Link. request.getToLink().getFromNode(), now, null, null); tasks.add(new AppendTask(request, vehicle, now, pickup, dropoff)); // adds the task to the tasks list } - // Uses the AppendTasks from the list containing the paths to generate the Tasks (Tasks that implements the Task interface) and add them in order to the vehicle schedule - public void schedule(AppendTask task, Path plainPickupPath, Path plainDropoffPath) { + // Uses the AppendTasks from the list containing the paths to generate the Tasks + // (Tasks that implements the Task interface) and add them in order to the + // vehicle schedule + public void schedule(AppendTask task, Path plainPickupPath, Path plainDropoffPath) { UAMRequest request = task.request; UAMVehicle vehicle = task.vehicle; double now = task.time; Schedule schedule = vehicle.getSchedule(); - UAMStayTask stayTask = (UAMStayTask) Schedules.getLastTask(schedule); //selects the last task in the schedule and create a stayTask with it + UAMStayTask stayTask = (UAMStayTask) Schedules.getLastTask(schedule); // selects the last task in the schedule + // and create a stayTask with it double startTime = 0.0; double scheduleEndTime = schedule.getEndTime(); @@ -90,55 +111,63 @@ public void schedule(AppendTask task, Path plainPickupPath, Path plainDropoffPat } else { startTime = stayTask.getBeginTime(); } - + UAMStation stationDestination = landingStations.getNearestUAMStation(request.getToLink()); - VrpPathWithTravelData pickupPath = VrpPaths.createPath(stayTask.getLink(), request.getFromLink(), - startTime, plainPickupPath, travelTime); + VrpPathWithTravelData pickupPath = VrpPaths.createPath(stayTask.getLink(), request.getFromLink(), startTime, + plainPickupPath, travelTime); VrpPathWithTravelData dropoffPath = VrpPaths.createPath(request.getFromLink(), request.getToLink(), - pickupPath.getArrivalTime() + vehicle.getBoardingTime(), plainDropoffPath, travelTime); //departure time = arrival time + boarding time + pickupPath.getArrivalTime() + vehicle.getBoardingTime(), plainDropoffPath, travelTime); // departure + // time = + // arrival time + // + boarding + // time UAMFlyTask pickupDriveTask = new UAMFlyTask(pickupPath); // Vehicle flies to pick up the passenger - UAMPickupTask pickupTask = new UAMPickupTask(pickupPath.getArrivalTime(), // Vehicle picks up the passenger at the station - pickupPath.getArrivalTime() + vehicle.getBoardingTime(), // end time = arrival time + boarding time - request.getFromLink(), vehicle.getBoardingTime(),Arrays.asList(request)); - - UAMFlyTask dropoffDriveTask = new UAMFlyTask(dropoffPath, Arrays.asList(request)); // Vehicle flies to drop off the passenger - UAMDropoffTask dropoffTask = new UAMDropoffTask(dropoffPath.getArrivalTime(), // Vehicle drops off the passenger at the station - dropoffPath.getArrivalTime() + vehicle.getDeboardingTime(), // Dropoff task lasts according to the Deboarding time selected. - request.getToLink(), vehicle.getDeboardingTime(),Arrays.asList(request)); - - UAMTurnAroundTask turnAroundTask = new UAMTurnAroundTask(dropoffPath.getArrivalTime() + vehicle.getDeboardingTime(), //Vehicle has a TurnAround time after DropOff task + UAMPickupTask pickupTask = new UAMPickupTask(pickupPath.getArrivalTime(), // Vehicle picks up the passenger at + // the station + pickupPath.getArrivalTime() + vehicle.getBoardingTime(), // end time = arrival time + boarding time + request.getFromLink(), vehicle.getBoardingTime(), Arrays.asList(request)); + + UAMFlyTask dropoffDriveTask = new UAMFlyTask(dropoffPath, Arrays.asList(request)); // Vehicle flies to drop off + // the passenger + UAMDropoffTask dropoffTask = new UAMDropoffTask(dropoffPath.getArrivalTime(), // Vehicle drops off the passenger + // at the station + dropoffPath.getArrivalTime() + vehicle.getDeboardingTime(), // Dropoff task lasts according to the + // Deboarding time selected. + request.getToLink(), vehicle.getDeboardingTime(), Arrays.asList(request)); + + UAMTurnAroundTask turnAroundTask = new UAMTurnAroundTask( + dropoffPath.getArrivalTime() + vehicle.getDeboardingTime(), // Vehicle has a TurnAround time after + // DropOff task dropoffPath.getArrivalTime() + vehicle.getDeboardingTime() + vehicle.getTurnAroundTime(), request.getToLink(), Arrays.asList(request)); - + if (stayTask.getStatus() == Task.TaskStatus.STARTED) { // Confused by this and the previous check on line 83 stayTask.setEndTime(startTime); } else { schedule.removeLastTask(); } - - //ADD HERE A CHECK IF THE VEHICLE IS TRAVELING FROM THE SAME STATION - schedule.addTask(pickupDriveTask); + + schedule.addTask(pickupDriveTask); schedule.addTask(pickupTask); schedule.addTask(dropoffDriveTask); schedule.addTask(dropoffTask); - schedule.addTask(turnAroundTask); - + schedule.addTask(turnAroundTask); - double distance = 0.0; + double distance = 0.0; for (int i = 0; i < dropoffPath.getLinkCount(); i++) { distance += dropoffPath.getLink(i).getLength(); } - request.setDistance(distance); - if (turnAroundTask.getEndTime() < scheduleEndTime) { - schedule.addTask(new UAMStayTask(turnAroundTask.getEndTime(), scheduleEndTime, turnAroundTask.getLink())); - /* - If TurnAround task ends before the scheduleEndTime, a new StayTask is created and added, beginning at the end of TurnAround Task and - ending at scheduleEndTime. Why(What is the case that this would happen?)?? - */ + if (turnAroundTask.getEndTime() < scheduleEndTime) { + schedule.addTask(new UAMStayTask(turnAroundTask.getEndTime(), scheduleEndTime, turnAroundTask.getLink())); + /* + * If TurnAround task ends before the scheduleEndTime, a new StayTask is created + * and added, beginning at the end of TurnAround Task and ending at + * scheduleEndTime. Why(What is the case that this would happen?)?? + */ } } diff --git a/src/main/java/net/bhl/matsim/uam/schedule/UAMStayTask.java b/src/main/java/net/bhl/matsim/uam/schedule/UAMStayTask.java index 856fb084..ab1edcc6 100644 --- a/src/main/java/net/bhl/matsim/uam/schedule/UAMStayTask.java +++ b/src/main/java/net/bhl/matsim/uam/schedule/UAMStayTask.java @@ -6,30 +6,31 @@ import org.matsim.contrib.dvrp.schedule.StayTaskImpl; import net.bhl.matsim.uam.passenger.UAMRequest; -/** - * During this task the UAM Vehicle is idle. + +/** + * During this task the UAM Vehicle is idle. + * + * @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) + * */ -public class UAMStayTask extends StayTaskImpl implements UAMTask{ - public UAMStayTask(double beginTime, double endTime, Link link, String name) - { - super(beginTime, endTime, link, name); - } - - public UAMStayTask(double beginTime, double endTime, Link link) - { - this(beginTime, endTime, link, "AVStay"); - } - - @Override - protected String commonToString() - { - return "[" + getUAMTaskType().toString() + "]" + super.commonToString(); - } - - @Override - public UAMTaskType getUAMTaskType() { - return UAMTaskType.STAY; - } +public class UAMStayTask extends StayTaskImpl implements UAMTask { + public UAMStayTask(double beginTime, double endTime, Link link, String name) { + super(beginTime, endTime, link, name); + } + + public UAMStayTask(double beginTime, double endTime, Link link) { + this(beginTime, endTime, link, "AVStay"); + } + + @Override + protected String commonToString() { + return "[" + getUAMTaskType().toString() + "]" + super.commonToString(); + } + + @Override + public UAMTaskType getUAMTaskType() { + return UAMTaskType.STAY; + } @Override public Collection getRequests() { @@ -38,6 +39,6 @@ public Collection getRequests() { @Override public void addRequest(UAMRequest request) { - + } } diff --git a/src/main/java/net/bhl/matsim/uam/schedule/UAMTask.java b/src/main/java/net/bhl/matsim/uam/schedule/UAMTask.java index 86e65b3d..90bfddf0 100644 --- a/src/main/java/net/bhl/matsim/uam/schedule/UAMTask.java +++ b/src/main/java/net/bhl/matsim/uam/schedule/UAMTask.java @@ -6,13 +6,21 @@ import net.bhl.matsim.uam.passenger.UAMRequest; +/** + * Defines the classes responsible for a given UAM vehicle task. + * + * @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) + * + */ public interface UAMTask extends Task { static enum UAMTaskType { - PICKUP, DROPOFF, FLY, STAY, PARK, TURNAROUND + PICKUP, DROPOFF, FLY, STAY, PARK, TURNAROUND } - + UAMTaskType getUAMTaskType(); + Collection getRequests(); + void addRequest(UAMRequest request); } diff --git a/src/main/java/net/bhl/matsim/uam/schedule/UAMTransitEvent.java b/src/main/java/net/bhl/matsim/uam/schedule/UAMTransitEvent.java index 22b75445..6f81ce3a 100644 --- a/src/main/java/net/bhl/matsim/uam/schedule/UAMTransitEvent.java +++ b/src/main/java/net/bhl/matsim/uam/schedule/UAMTransitEvent.java @@ -10,39 +10,39 @@ import java.util.Map; /** - * Event that is generated when the drop off occurs, - * in order to know which person was dropped off. + * Event that is generated when the drop off occurs, in order to know which + * person was dropped off. * - * @author balacm + * @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) * */ public class UAMTransitEvent extends Event implements HasPersonId { - final private UAMRequest request; - - public UAMTransitEvent(UAMRequest request, double time) { - super(time); - this.request = request; - } - - public UAMRequest getRequest() { - return request; - } - - @Override - public String getEventType() { - return "UAMTransit"; - } - - @Override - public Map getAttributes() { - Map attr = super.getAttributes(); - attr.put("person", request.getPassenger().getId().toString()); - // attr.put("distance", String.valueOf(request.getRoute().getDistance())); - return attr; - } - - @Override - public Id getPersonId() { - return request.getPassenger().getId(); - } + final private UAMRequest request; + + public UAMTransitEvent(UAMRequest request, double time) { + super(time); + this.request = request; + } + + public UAMRequest getRequest() { + return request; + } + + @Override + public String getEventType() { + return "UAMTransit"; + } + + @Override + public Map getAttributes() { + Map attr = super.getAttributes(); + attr.put("person", request.getPassenger().getId().toString()); + // attr.put("distance", String.valueOf(request.getRoute().getDistance())); + return attr; + } + + @Override + public Id getPersonId() { + return request.getPassenger().getId(); + } } diff --git a/src/main/java/net/bhl/matsim/uam/schedule/UAMTurnAroundTask.java b/src/main/java/net/bhl/matsim/uam/schedule/UAMTurnAroundTask.java index 2184f75b..f0f7c63f 100644 --- a/src/main/java/net/bhl/matsim/uam/schedule/UAMTurnAroundTask.java +++ b/src/main/java/net/bhl/matsim/uam/schedule/UAMTurnAroundTask.java @@ -8,27 +8,30 @@ import org.matsim.contrib.dvrp.schedule.StayTaskImpl; import net.bhl.matsim.uam.passenger.UAMRequest; -/** - * This task mirrors UAMStayTask in order to make the vehicle unavailable for other trips after landing. + +/** + * This task mirrors UAMStayTask in order to make the vehicle + * unavailable for other trips after landing. + * + * @author Aitanm (Aitan Militão), RRothfeld (Raoul Rothfeld) * */ -public class UAMTurnAroundTask extends StayTaskImpl implements UAMTask{ +public class UAMTurnAroundTask extends StayTaskImpl implements UAMTask { private final Set requests = new HashSet<>(); // does it need to store the request list ? public UAMTurnAroundTask(double beginTime, double endTime, Link link) { - super(beginTime, endTime, link, "TurnAround"); + super(beginTime, endTime, link, "TurnAround"); } - - public UAMTurnAroundTask(double beginTime, double endTime, Link link, Collection requests) { - this(beginTime, endTime, link); - this.requests.addAll(requests); - } + public UAMTurnAroundTask(double beginTime, double endTime, Link link, Collection requests) { + this(beginTime, endTime, link); + this.requests.addAll(requests); + } @Override public UAMTaskType getUAMTaskType() { - return UAMTaskType.TURNAROUND; + return UAMTaskType.TURNAROUND; } @Override @@ -38,9 +41,7 @@ public Collection getRequests() { @Override public void addRequest(UAMRequest request) { - requests.add(request); + requests.add(request); } - - } diff --git a/src/main/java/net/bhl/matsim/uam/scoring/UAMScoringFunction.java b/src/main/java/net/bhl/matsim/uam/scoring/UAMScoringFunction.java index 057dfc94..fd3a4017 100644 --- a/src/main/java/net/bhl/matsim/uam/scoring/UAMScoringFunction.java +++ b/src/main/java/net/bhl/matsim/uam/scoring/UAMScoringFunction.java @@ -8,6 +8,12 @@ import net.bhl.matsim.uam.passenger.UAMRequest; import net.bhl.matsim.uam.schedule.UAMTransitEvent; +/** + * Scoring function for UAM events. + * + * @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) + * + */ public class UAMScoringFunction implements SumScoringFunction.ArbitraryEventScoring { boolean uamTrip = false; @@ -45,7 +51,7 @@ public void handleEvent(Event event) { private void scoreUAMLeg(double distance) { this.score += distance * this.marginalDisutilityOfDistance; - + } } diff --git a/src/main/java/net/bhl/matsim/uam/scoring/UAMScoringFunctionFactory.java b/src/main/java/net/bhl/matsim/uam/scoring/UAMScoringFunctionFactory.java index 0c8e758c..001823e2 100644 --- a/src/main/java/net/bhl/matsim/uam/scoring/UAMScoringFunctionFactory.java +++ b/src/main/java/net/bhl/matsim/uam/scoring/UAMScoringFunctionFactory.java @@ -14,6 +14,12 @@ import com.google.inject.Singleton; import com.google.inject.name.Named; +/** + * Create new scoring functions for UAM mode. + * + * @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) + * + */ @Singleton public class UAMScoringFunctionFactory implements ScoringFunctionFactory { final private ScoringFunctionFactory standardFactory; @@ -31,17 +37,20 @@ public UAMScoringFunctionFactory(Scenario scenario, @Named("uam") Network networ public ScoringFunction createNewScoringFunction(Person person) { SumScoringFunction sf = (SumScoringFunction) standardFactory.createNewScoringFunction(person); - double marginalDisutilityOfDistance = 0.0; double marginalUtilityOfTraveling = 0.0; - - //double marginalDisutilityOfDistance = params.getScoringParameters(person).marginalUtilityOfMoney - // * params.getScoringParameters(person).modeParams.get("uam").monetaryDistanceCostRate; - //double marginalUtilityOfTraveling = params.getScoringParameters(person).modeParams - // .get("uam").marginalUtilityOfTraveling_s; - - //sf.addScoringFunction( - // new UAMScoringFunction(person, marginalDisutilityOfDistance, marginalUtilityOfTraveling, this.network)); + + // double marginalDisutilityOfDistance = + // params.getScoringParameters(person).marginalUtilityOfMoney + // * + // params.getScoringParameters(person).modeParams.get("uam").monetaryDistanceCostRate; + // double marginalUtilityOfTraveling = + // params.getScoringParameters(person).modeParams + // .get("uam").marginalUtilityOfTraveling_s; + + // sf.addScoringFunction( + // new UAMScoringFunction(person, marginalDisutilityOfDistance, + // marginalUtilityOfTraveling, this.network)); return sf; } diff --git a/src/main/java/net/bhl/matsim/uam/scoring/package-info.java b/src/main/java/net/bhl/matsim/uam/scoring/package-info.java index 1809795a..75032c4a 100644 --- a/src/main/java/net/bhl/matsim/uam/scoring/package-info.java +++ b/src/main/java/net/bhl/matsim/uam/scoring/package-info.java @@ -2,7 +2,7 @@ * */ /** - * @author balacm + * @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) * */ package net.bhl.matsim.uam.scoring; \ No newline at end of file diff --git a/src/main/java/net/bhl/matsim/uam/transit/simulation/UAMTransitEngine.java b/src/main/java/net/bhl/matsim/uam/transit/simulation/UAMTransitEngine.java index 004819b2..ca327529 100644 --- a/src/main/java/net/bhl/matsim/uam/transit/simulation/UAMTransitEngine.java +++ b/src/main/java/net/bhl/matsim/uam/transit/simulation/UAMTransitEngine.java @@ -28,6 +28,12 @@ import ch.ethz.matsim.baseline_scenario.transit.routing.EnrichedTransitRoute; import ch.ethz.matsim.baseline_scenario.zurich.cutter.utils.DepartureFinder; +/** + * Transit engine for UAM trips that uses pt for access or egress legs. + * + * @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) + * + */ @Singleton public class UAMTransitEngine implements DepartureHandler, MobsimEngine { final private TransitSchedule transitSchedule; diff --git a/src/main/java/net/bhl/matsim/uam/transit/simulation/UAMTransitPlugin.java b/src/main/java/net/bhl/matsim/uam/transit/simulation/UAMTransitPlugin.java index d2fa8aca..2f9e586a 100644 --- a/src/main/java/net/bhl/matsim/uam/transit/simulation/UAMTransitPlugin.java +++ b/src/main/java/net/bhl/matsim/uam/transit/simulation/UAMTransitPlugin.java @@ -18,6 +18,12 @@ import ch.ethz.matsim.baseline_scenario.zurich.cutter.utils.DepartureFinder; +/** + * This class provides Transit engine resources to the UAMModule. + * + * @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) + * + */ public class UAMTransitPlugin extends AbstractQSimPlugin { public UAMTransitPlugin(Config config) { super(config); diff --git a/src/main/java/net/bhl/matsim/uam/utils/RunConvertDeckGLBuildings.java b/src/main/java/net/bhl/matsim/uam/utils/RunConvertDeckGLBuildings.java index 5db70b91..ce475558 100644 --- a/src/main/java/net/bhl/matsim/uam/utils/RunConvertDeckGLBuildings.java +++ b/src/main/java/net/bhl/matsim/uam/utils/RunConvertDeckGLBuildings.java @@ -8,16 +8,17 @@ import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; -import java.util.Iterator; -import org.matsim.api.core.v01.Id; -import org.matsim.vehicles.Vehicle; - -import net.bhl.matsim.uam.analysis.trips.DeckGLTripItem; - -public class RunConvertDeckGLBuildings { +/** + * This script converts QGIS geojson file from OSM buildings to deck.gl-readable + * buildings input file. + * + * @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) + * + */ +public class RunConvertDeckGLBuildings { static public void main(String[] args) throws IOException { - // PROVIDE: GEOJSON-File + // PROVIDE: GEOJSON-File extract(args[0]); System.out.println("done."); } @@ -26,38 +27,38 @@ static public void extract(String geojson) throws IOException { BufferedReader br = null; BufferedWriter bw = null; try { - InputStream fis = new FileInputStream(geojson); - br = new BufferedReader(new InputStreamReader(fis)); - + InputStream fis = new FileInputStream(geojson); + br = new BufferedReader(new InputStreamReader(fis)); + File file = new File(geojson + ".json"); if (!file.exists()) { file.createNewFile(); } FileWriter fw = new FileWriter(file); bw = new BufferedWriter(fw); - + bw.write("[" + System.lineSeparator()); - + boolean first = true; - for (String line = br.readLine(); line != null; line = br.readLine()) { - if (!line.contains("coordinates")) - continue; - else { - if (!first) - bw.write("," + System.lineSeparator()); - - int index = line.indexOf("coordinates\": ") + "coordinates\": ".length(); - String linePart = line.substring(index); - linePart = linePart.substring(0,linePart.length() - 4); - linePart = linePart.replace("[ [ [ [ ", "[ [ [ "); - linePart = linePart.replace(" ] ] ] ]", "] ] ] "); - + for (String line = br.readLine(); line != null; line = br.readLine()) { + if (!line.contains("coordinates")) + continue; + else { + if (!first) + bw.write("," + System.lineSeparator()); + + int index = line.indexOf("coordinates\": ") + "coordinates\": ".length(); + String linePart = line.substring(index); + linePart = linePart.substring(0, linePart.length() - 4); + linePart = linePart.replace("[ [ [ [ ", "[ [ [ "); + linePart = linePart.replace(" ] ] ] ]", "] ] ] "); + bw.write("{\"height\": 100, "); bw.write("\"polygon\": "); bw.write(linePart); bw.write("}"); first = false; - } + } } bw.write(System.lineSeparator() + "]"); diff --git a/src/main/java/net/bhl/matsim/uam/utils/RunUAMVehicleFileHelper.java b/src/main/java/net/bhl/matsim/uam/utils/RunUAMVehicleFileHelper.java index 584f929c..94fc0fe9 100644 --- a/src/main/java/net/bhl/matsim/uam/utils/RunUAMVehicleFileHelper.java +++ b/src/main/java/net/bhl/matsim/uam/utils/RunUAMVehicleFileHelper.java @@ -5,26 +5,35 @@ import java.io.IOException; import java.io.OutputStreamWriter; +/** + * This script generates a text file containing UAM Station and UAM Vehicles + * information. + * + * @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) + * + */ @Deprecated public class RunUAMVehicleFileHelper { public static void main(final String[] args) throws IOException { File fout = new File("C:\\Users\\Raoul\\Downloads\\5000.txt"); int vehiclesPerStation = 5000; - String[] stations = {"11", "12", "13", "14", "15", "16", "21", "22", "23"}; + String[] stations = { "11", "12", "13", "14", "15", "16", "21", "22", "23" }; FileOutputStream fos = new FileOutputStream(fout); OutputStreamWriter osw = new OutputStreamWriter(fos); - + for (String station : stations) { for (int i = 0; i < vehiclesPerStation; i++) { - osw.write(" \n"); + osw.write(" \n"); } } - + osw.close(); - - System.out.println("done."); + + System.out.println("done."); } } diff --git a/src/main/java/net/bhl/matsim/uam/vrpagent/UAMActionCreator.java b/src/main/java/net/bhl/matsim/uam/vrpagent/UAMActionCreator.java index 909c3bff..2af4d5fc 100644 --- a/src/main/java/net/bhl/matsim/uam/vrpagent/UAMActionCreator.java +++ b/src/main/java/net/bhl/matsim/uam/vrpagent/UAMActionCreator.java @@ -10,7 +10,6 @@ import com.google.inject.Inject; -import net.bhl.matsim.uam.modechoice.estimation.CustomModeChoiceParameters; import net.bhl.matsim.uam.passenger.UAMPassengerDropoffActivity; import net.bhl.matsim.uam.passenger.UAMPassengerPickupActivity; import net.bhl.matsim.uam.schedule.UAMDropoffTask; @@ -18,12 +17,12 @@ import net.bhl.matsim.uam.schedule.UAMStayTask; import net.bhl.matsim.uam.schedule.UAMTask; import net.bhl.matsim.uam.schedule.UAMTurnAroundTask; + /** + * Class that is responsible for creating DynAction activities depending on the + * task of the vehicle. * - * Class that is responsible for creating DynAction activities - * depending on the task of the vehicle. - * - * @author balacm + * @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) * */ public class UAMActionCreator implements VrpAgentLogic.DynActionCreator { diff --git a/src/main/java/net/bhl/matsim/uam/vrpagent/UAMStayActivity.java b/src/main/java/net/bhl/matsim/uam/vrpagent/UAMStayActivity.java index 98c744bd..4cad9ee1 100644 --- a/src/main/java/net/bhl/matsim/uam/vrpagent/UAMStayActivity.java +++ b/src/main/java/net/bhl/matsim/uam/vrpagent/UAMStayActivity.java @@ -4,16 +4,23 @@ import net.bhl.matsim.uam.schedule.UAMStayTask; +/** + * An implementation of AbstractDynActivity for UAM DynAgents for the + * UAMStayTask. + * + * @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) + * + */ public class UAMStayActivity extends AbstractDynActivity { final private UAMStayTask stayTask; private double now; - + public UAMStayActivity(UAMStayTask stayTask) { super(stayTask.getName()); this.stayTask = stayTask; this.now = stayTask.getBeginTime(); } - + @Override public void doSimStep(double now) { this.now = now; diff --git a/src/main/java/net/bhl/matsim/uam/vrpagent/UAMTurnAroundActivity.java b/src/main/java/net/bhl/matsim/uam/vrpagent/UAMTurnAroundActivity.java index 61daed06..31e459c5 100644 --- a/src/main/java/net/bhl/matsim/uam/vrpagent/UAMTurnAroundActivity.java +++ b/src/main/java/net/bhl/matsim/uam/vrpagent/UAMTurnAroundActivity.java @@ -2,20 +2,26 @@ import org.matsim.contrib.dynagent.AbstractDynActivity; - import net.bhl.matsim.uam.schedule.UAMTurnAroundTask; +/** + * An implementation of AbstractDynActivity for UAM DynAgents for the + * UAMTurnAroundTask. + * + * @author balacmi (Milos Balac), RRothfeld (Raoul Rothfeld) + * + */ public class UAMTurnAroundActivity extends AbstractDynActivity { final private UAMTurnAroundTask turnAroundTask; private double now; - + public UAMTurnAroundActivity(UAMTurnAroundTask turnAroundTask) { super(turnAroundTask.getName()); this.turnAroundTask = turnAroundTask; this.now = turnAroundTask.getBeginTime(); } - + @Override public void doSimStep(double now) { this.now = now;