diff --git a/src/main/java/fr/u_paris/gla/project/idfm/CSVSchedulesProvider.java b/src/main/java/fr/u_paris/gla/project/idfm/CSVSchedulesProvider.java index 52835d3..4f993ce 100644 --- a/src/main/java/fr/u_paris/gla/project/idfm/CSVSchedulesProvider.java +++ b/src/main/java/fr/u_paris/gla/project/idfm/CSVSchedulesProvider.java @@ -21,6 +21,8 @@ public class CSVSchedulesProvider { put("Subway", new int[]{4, 2, 6,3,3,4}); }}; + + // Time between 2 passages for the transports with a new type we don't know yet private static int DEFAULT_TIMING = 6; private static final NumberFormat MINUTES_SECOND_FORMATTER = NumberFormat diff --git a/src/main/java/fr/u_paris/gla/project/idfm/CSVStreamProvider.java b/src/main/java/fr/u_paris/gla/project/idfm/CSVStreamProvider.java index d09754f..5163011 100644 --- a/src/main/java/fr/u_paris/gla/project/idfm/CSVStreamProvider.java +++ b/src/main/java/fr/u_paris/gla/project/idfm/CSVStreamProvider.java @@ -23,6 +23,23 @@ import fr.u_paris.gla.project.utils.GPS; * CSV Stream Provider class */ public final class CSVStreamProvider { + + private static final HashMap two_acceleration_distance_by_type = new HashMap(){{ + put("Bus", 0.1); + put("Funicular", 0.1); + put("Tram", 0.1); + put("Rail", 0.2); + put("Subway", 0.1); + }}; + + private static final HashMap max_speed_by_type = new HashMap(){{ + put("Bus", 10.0); + put("Funicular", 5.0); + put("Tram", 20.0); + put("Rail", 50.0); + put("Subway", 30.0); + }}; + /** * Formatter from numbers into GPS Coordinates */ @@ -201,7 +218,7 @@ public final class CSVStreamProvider { this.line[NetworkFormat.DISTANCE_INDEX] = NumberFormat.getInstance(Locale.ENGLISH) .format(distance); this.line[NetworkFormat.DURATION_INDEX] = formatTime( - (long) Math.ceil(distanceToTime(distance) * SECONDS_IN_HOURS)); + (long) Math.ceil(distanceToTime(distance,this.traceType) * SECONDS_IN_HOURS)); int bifurcation = this.lineSegments.get(this.start).size() - 1; this.line[NetworkFormat.VARIANT_INDEX] = Integer .toString(bifurcation); @@ -231,6 +248,18 @@ public final class CSVStreamProvider { MINUTES_SECOND_FORMATTER.format(time / SECONDS_IN_MINUTES), MINUTES_SECOND_FORMATTER.format(time % SECONDS_IN_MINUTES)); } + // /** A tool method to give a delay to go through a certain distance. + // *

+ // * This is a model with an linear acceleration and deceleration periods and a + // * constant speed in between. + // * + // * @param distance the distance (in km) + // * @return the duration of the trip (in hours) */ + // private static double distanceToTime(double distance) { + // return Math.max(0, distance - TWO_ACCELERATION_DISTANCE) / MAX_SPEED + // + Math.pow(Math.min(distance, TWO_ACCELERATION_DISTANCE) / MAX_SPEED, 2); + // } + /** A tool method to give a delay to go through a certain distance. *

* This is a model with an linear acceleration and deceleration periods and a @@ -238,9 +267,11 @@ public final class CSVStreamProvider { * * @param distance the distance (in km) * @return the duration of the trip (in hours) */ - private static double distanceToTime(double distance) { - return Math.max(0, distance - TWO_ACCELERATION_DISTANCE) / MAX_SPEED - + Math.pow(Math.min(distance, TWO_ACCELERATION_DISTANCE) / MAX_SPEED, 2); + private static double distanceToTime(double distance, String type) { + Double max_speed = max_speed_by_type.get(type); + Double two_acc_distance = two_acceleration_distance_by_type.get(type); + return Math.max(0, distance - two_acc_distance) / max_speed + + Math.pow(Math.min(distance, two_acc_distance) / max_speed, 2); } private void fillTransports(int bif) { diff --git a/src/main/java/fr/u_paris/gla/project/idfm/IDFMNetworkExtractor.java b/src/main/java/fr/u_paris/gla/project/idfm/IDFMNetworkExtractor.java index 2e4db84..e323f42 100644 --- a/src/main/java/fr/u_paris/gla/project/idfm/IDFMNetworkExtractor.java +++ b/src/main/java/fr/u_paris/gla/project/idfm/IDFMNetworkExtractor.java @@ -245,7 +245,7 @@ public class IDFMNetworkExtractor { } } - public static void builFiles() { + public static void buildFiles() { if (checkFileExistence("./"+HOURS_FILE_NAME) && checkFileExistence("./"+TRACE_FILE_NAME)) { LOGGER.severe("Files already exists."); diff --git a/src/main/java/fr/u_paris/gla/project/itinerary/ItineraryCalculator.java b/src/main/java/fr/u_paris/gla/project/itinerary/ItineraryCalculator.java index d272b77..666dbf3 100644 --- a/src/main/java/fr/u_paris/gla/project/itinerary/ItineraryCalculator.java +++ b/src/main/java/fr/u_paris/gla/project/itinerary/ItineraryCalculator.java @@ -209,7 +209,7 @@ public class ItineraryCalculator { LOGGER.severe("Invalid command line. Target file names are in the main file for now."); return; } - //IDFMNetworkExtractor.builFiles(); + IDFMNetworkExtractor.buildFiles(); try { HashSet nodes = new HashSet<>(); @@ -244,7 +244,7 @@ public class ItineraryCalculator { //System.out.println(graph.getConnections(porteivry)); Finder finder = new Finder(graph); - List res = finder.findPath(porteivry, chatelet, 43200); + List res = finder.findPath(chatelet, garenord, 43200); for (Path element : res) { System.out.println(element.getCurrentStop()); }