Improved model training, adjusted mongodb compound index for distance

This commit is contained in:
Vladislav Chumak
2019-02-26 07:15:15 +01:00
parent 3b29f34b22
commit 940336aa73
4 changed files with 19 additions and 40 deletions
@@ -1,13 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<launchConfiguration type="org.eclipse.jdt.launching.localJavaApplication">
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
<listEntry value="/com.sap.sailing.windestimation.lab/src/com/sap/sailing/windestimation/data/importer/ManeuverAndWindImporter.java"/>
</listAttribute>
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
<listEntry value="1"/>
</listAttribute>
<booleanAttribute key="org.eclipse.jdt.launching.ATTR_EXCLUDE_TEST_CODE" value="true"/>
<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="com.sap.sailing.windestimation.data.importer.ManeuverAndWindImporter"/>
<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="com.sap.sailing.windestimation.lab"/>
<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Xmx16G"/>
</launchConfiguration>
@@ -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<RaceWithWindSources> {
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<Document> windSourcesCollection = getDb().getCollection(getWindSourcesCollectionName());
MongoCollection<Document> 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<Document> windSourcesCollection = getDb().getCollection(getWindSourcesCollectionName());
MongoCollection<Document> 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<RaceWithWindSources> 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);
}
}
@@ -21,15 +21,18 @@ import com.sap.sse.common.TimePoint;
public class WindSourcesPersistenceManager extends AbstractPersistenceManager<WindSourceWithFixes> {
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
@@ -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()