From 940336aa73030b892d1793089bfa731fb3520be6 Mon Sep 17 00:00:00 2001 From: Vladislav Chumak Date: Tue, 26 Feb 2019 07:15:15 +0100 Subject: [PATCH] Improved model training, adjusted mongodb compound index for distance --- .../ManeuverAndWindImporter.launch | 13 --------- ...RaceWithWindSourcesPersistenceManager.java | 29 ++++--------------- .../WindSourcesPersistenceManager.java | 7 +++-- .../model/SimpleModelsTrainingPart1.java | 10 +++++-- 4 files changed, 19 insertions(+), 40 deletions(-) delete mode 100644 java/com.sap.sailing.windestimation.lab/ManeuverAndWindImporter.launch diff --git a/java/com.sap.sailing.windestimation.lab/ManeuverAndWindImporter.launch b/java/com.sap.sailing.windestimation.lab/ManeuverAndWindImporter.launch deleted file mode 100644 index 49c1b7115d1..00000000000 --- a/java/com.sap.sailing.windestimation.lab/ManeuverAndWindImporter.launch +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - diff --git a/java/com.sap.sailing.windestimation.lab/src/com/sap/sailing/windestimation/data/persistence/twdtransition/RaceWithWindSourcesPersistenceManager.java b/java/com.sap.sailing.windestimation.lab/src/com/sap/sailing/windestimation/data/persistence/twdtransition/RaceWithWindSourcesPersistenceManager.java index 297e09ca2de..724c9f3472a 100644 --- a/java/com.sap.sailing.windestimation.lab/src/com/sap/sailing/windestimation/data/persistence/twdtransition/RaceWithWindSourcesPersistenceManager.java +++ b/java/com.sap.sailing.windestimation.lab/src/com/sap/sailing/windestimation/data/persistence/twdtransition/RaceWithWindSourcesPersistenceManager.java @@ -17,20 +17,16 @@ import com.sap.sailing.server.gateway.deserialization.JsonDeserializer; import com.sap.sailing.server.gateway.serialization.impl.RaceWindJsonSerializer; import com.sap.sailing.windestimation.data.RaceWithWindSources; import com.sap.sailing.windestimation.data.persistence.maneuver.AbstractPersistenceManager; -import com.sap.sailing.windestimation.data.persistence.maneuver.PersistedElementsIterator; import com.sap.sailing.windestimation.data.serialization.RaceWithEstimationDataDeserializer; import com.sap.sailing.windestimation.data.serialization.RaceWithWindSourcesDeserializer; -import com.sap.sse.common.TimePoint; public class RaceWithWindSourcesPersistenceManager extends AbstractPersistenceManager { - private static final String COLLECTION_NAME = "racesWithWind"; - private static final String WIND_SOURCES_COLLECTION_NAME = "windSources"; + static final String COLLECTION_NAME = "racesWithWind"; + private final WindSourcesPersistenceManager windSourcesPersistenceManager; public RaceWithWindSourcesPersistenceManager() throws UnknownHostException { - Document indexes = new Document(RaceWindJsonSerializer.START_TIME_POINT, 1); - indexes.put(RaceWindJsonSerializer.END_TIME_POINT, -1); - getDb().getCollection(getWindSourcesCollectionName()).createIndex(indexes); + windSourcesPersistenceManager = new WindSourcesPersistenceManager(); } @Override @@ -41,7 +37,7 @@ public class RaceWithWindSourcesPersistenceManager extends AbstractPersistenceMa @Override public void dropCollection() { super.dropCollection(); - getDb().getCollection(getWindSourcesCollectionName()).drop(); + windSourcesPersistenceManager.dropCollection(); } @Override @@ -52,7 +48,7 @@ public class RaceWithWindSourcesPersistenceManager extends AbstractPersistenceMa JSONArray windSourceIdsJson = (JSONArray) raceJson .get(RaceWithEstimationDataDeserializer.COMPETITOR_TRACKS); JSONArray windSourcesJson = new JSONArray(); - MongoCollection windSourcesCollection = getDb().getCollection(getWindSourcesCollectionName()); + MongoCollection windSourcesCollection = windSourcesPersistenceManager.getCollection(); for (Object idObject : windSourceIdsJson) { Document dbWindSource = windSourcesCollection .find(new Document(FIELD_DB_ID, new ObjectId((String) idObject))).first(); @@ -69,10 +65,6 @@ public class RaceWithWindSourcesPersistenceManager extends AbstractPersistenceMa }; } - public static String getWindSourcesCollectionName() { - return COLLECTION_NAME + "." + WIND_SOURCES_COLLECTION_NAME; - } - public void add(String regattaName, String raceName, JSONObject raceWithWindSourcesJson) { JSONArray windSourcesJson = (JSONArray) raceWithWindSourcesJson.get(RaceWindJsonSerializer.WIND_SOURCES); @@ -81,7 +73,7 @@ public class RaceWithWindSourcesPersistenceManager extends AbstractPersistenceMa Document entry = parseJsonString(windSourceObj.toString()); dbWindSources.add(entry); } - MongoCollection windSourcesCollection = getDb().getCollection(getWindSourcesCollectionName()); + MongoCollection windSourcesCollection = windSourcesPersistenceManager.getCollection(); windSourcesCollection.insertMany(dbWindSources); BasicDBList dbWindSourceIds = new BasicDBList(); for (Document dbWindSource : dbWindSources) { @@ -96,13 +88,4 @@ public class RaceWithWindSourcesPersistenceManager extends AbstractPersistenceMa races.insertOne(dbObject); } - public PersistedElementsIterator getIteratorForEntriesIntersectingPeriod( - TimePoint startTimePoint, TimePoint endTimePoint, double toleranceInSeconds) { - double maxStartTime = endTimePoint.asMillis() + toleranceInSeconds * 1000; - double maxEndTime = startTimePoint.asMillis() - toleranceInSeconds * 1000; - String query = "{$and: [{'" + RaceWindJsonSerializer.START_TIME_POINT + "': {$lte: " + maxStartTime + "}}, {'" - + RaceWindJsonSerializer.END_TIME_POINT + "': {$gte: " + maxEndTime + "}}]}"; - return getIterator(query); - } - } diff --git a/java/com.sap.sailing.windestimation.lab/src/com/sap/sailing/windestimation/data/persistence/twdtransition/WindSourcesPersistenceManager.java b/java/com.sap.sailing.windestimation.lab/src/com/sap/sailing/windestimation/data/persistence/twdtransition/WindSourcesPersistenceManager.java index d80c152d635..a49d93227b8 100644 --- a/java/com.sap.sailing.windestimation.lab/src/com/sap/sailing/windestimation/data/persistence/twdtransition/WindSourcesPersistenceManager.java +++ b/java/com.sap.sailing.windestimation.lab/src/com/sap/sailing/windestimation/data/persistence/twdtransition/WindSourcesPersistenceManager.java @@ -21,15 +21,18 @@ import com.sap.sse.common.TimePoint; public class WindSourcesPersistenceManager extends AbstractPersistenceManager { + private static final String WIND_SOURCES_COLLECTION_NAME = "windSources"; + public WindSourcesPersistenceManager() throws UnknownHostException { - BasicDBObject indexes = new BasicDBObject(RaceWindJsonSerializer.START_TIME_POINT, 1); + BasicDBObject indexes = new BasicDBObject("_id", 1); + indexes.put(RaceWindJsonSerializer.START_TIME_POINT, 1); indexes.put(RaceWindJsonSerializer.END_TIME_POINT, -1); getCollection().createIndex(indexes); } @Override public String getCollectionName() { - return RaceWithWindSourcesPersistenceManager.getWindSourcesCollectionName(); + return RaceWithWindSourcesPersistenceManager.COLLECTION_NAME + "." + WIND_SOURCES_COLLECTION_NAME; } @Override diff --git a/java/com.sap.sailing.windestimation.lab/src/com/sap/sailing/windestimation/model/SimpleModelsTrainingPart1.java b/java/com.sap.sailing.windestimation.lab/src/com/sap/sailing/windestimation/model/SimpleModelsTrainingPart1.java index fc0f0801f4e..f5e9eca6722 100644 --- a/java/com.sap.sailing.windestimation.lab/src/com/sap/sailing/windestimation/model/SimpleModelsTrainingPart1.java +++ b/java/com.sap.sailing.windestimation.lab/src/com/sap/sailing/windestimation/model/SimpleModelsTrainingPart1.java @@ -48,10 +48,10 @@ public class SimpleModelsTrainingPart1 { PersistedManeuverClassifiersScorePrinter.main(args); }); executeInThreadPool(() -> { - DurationBasedTwdTransitionImporter.main(args); + DistanceBasedTwdTransitionImporter.main(args); }); executeInThreadPool(() -> { - DistanceBasedTwdTransitionImporter.main(args); + DurationBasedTwdTransitionImporter.main(args); }); awaitThreadPoolCompletion(); AggregatedDurationBasedTwdTransitionImporter.createPersistenceManagerAndEnsureIndex(); @@ -77,6 +77,7 @@ public class SimpleModelsTrainingPart1 { } while (JOptionPane.YES_OPTION != askDataCleaningFinished(AggregatedSingleDimensionType.DISTANCE)); showInfoAboutIntervalAdjustments(DistanceBasedTwdTransitionRegressorModelContext.class, DistanceValueRange.class); + showInfoAboutRunPart2(); } private static int askDataCleaningFinished(AggregatedSingleDimensionType dimension) { @@ -94,6 +95,11 @@ public class SimpleModelsTrainingPart1 { return JOptionPane.CLOSED_OPTION; } + private static void showInfoAboutRunPart2() { + JOptionPane.showMessageDialog(null, "Now, run the class \"" + SimpleModelsTrainingPart2.class.getName() + + "\".\nThis will complete the training process."); + } + private static void showInfoAboutDataCleaning(AggregatedSingleDimensionType dimension) { JOptionPane.showMessageDialog(null, "Now, clean the data for the " + dimension + " dimension.\nRemove instances from MongoDB collection \"" + dimension.getCollectioName()