doc/theses/Master Thesis - Vladislav Chumak - Wind inference from GPS tracks of sailboats.pdf
... ...
Binary files a/doc/theses/Master Thesis - Vladislav Chumak - Wind inference from GPS tracks of sailboats.pdf and /dev/null differ
doc/theses/Master_Thesis_-_Vladislav_Chumak_-_Wind_inference_from_GPS_tracks_of_sailboats.pdf
... ...
Binary files /dev/null and b/doc/theses/Master_Thesis_-_Vladislav_Chumak_-_Wind_inference_from_GPS_tracks_of_sailboats.pdf differ
home.md
... ...
@@ -92,7 +92,6 @@ SAP is at the center of today’s technology revolution, developing innovations
92 92
* [[Onboarding|wiki/howto/onboarding]]
93 93
* [[Importing Sessions from Expedition|wiki/howto/expeditionimport]]
94 94
* [[Checking our DBs for a user record by e-mail|wiki/howto/privacy]]
95
-* [[Training of internal Wind Estimation models|wiki/howto/windestimation]]
96 95
97 96
### Development
98 97
... ...
@@ -108,6 +107,7 @@ SAP is at the center of today’s technology revolution, developing innovations
108 107
* [[UI Tests with Selenium|wiki/howto/development/selenium-ui-tests]]
109 108
* [[Profiling|wiki/howto/development/profiling]]
110 109
* [[Working with GWT Super Dev Mode|wiki/howto/development/super-dev-mode]]
110
+* [[Training of internal Wind Estimation models|wiki/howto/windestimation]]
111 111
112 112
### For Event Managers
113 113
... ...
@@ -129,6 +129,7 @@ SAP is at the center of today’s technology revolution, developing innovations
129 129
130 130
* [[Cook Book|wiki/howto/misc/cook-book]]
131 131
* [[Polars|wiki/howto/misc/polars]]
132
+* [[Wind Estimation - Core concepts|wiki/misc/windestimation-core-concepts]]
132 133
* [[Server Replication|wiki/howto/misc/server-replication]]
133 134
* [[TracTrac|wiki/howto/misc/tractrac-lifecycle]]
134 135
* [[UI Tests|wiki/howto/misc/ui-tests-tutorial]]
wiki/howto/windestimation.md
... ...
@@ -3,7 +3,9 @@
3 3
This document describes the generation process of Machine Learning (ML) models which are used internally by wind estimation. It is highly recommended to proceed this howto step by step considering the order of sections. At the end of this howto, you will generate a file containing the representation of internal models used by ``com.sap.sailing.windestimation`` bundle. You can use this file to update the wind estimation models of a running server instance. If you are interested in a more advanced tutorial which requires all the execution steps contained in ``SimpleModelsTrainingPart...`` classes to be executed manually, then you might be interested in [Advanced Guide for training of internal Wind Estimation models](./windestimationAdvanced.md)
4 4
5 5
## Prerequisites
6
+
6 7
To complete the training process successfully, you need to make sure that you have the following stuff:
8
+
7 9
* A complete onboarding setup for SAP Sailing Analytics development
8 10
* MongoDB (**3.4 or higher!**) is up and running (can be the same MongoDB instance as required in onboarding howto)
9 11
* At least 100 GB free space on the partition, where MongoDB is operating
... ...
@@ -12,6 +14,7 @@ To complete the training process successfully, you need to make sure that you ha
12 14
* 24+ operating hours of your computer
13 15
14 16
## Model training process
17
+
15 18
1. Run ``com.sap.sailing.windestimation.model.SimpleModelsTrainingPart1`` as a normal Java Application. After this, all the necessary maneuver and wind data will be downloaded, pre-processed and maneuver classifiers get trained.
16 19
2. Make sure that the launched program does not get terminated by an uncaught exception. Wait until graphical info dialog shows up which requests you to perform data cleansing for duration dimension.
17 20
![Screenshot of graphical info dialog requesting to perform data cleansing for duration dimension](../images/windestimation/dialogRequestingDataCleansingForDurationDimension.jpg "Screenshot of graphical info dialog requesting to perform data cleansing for duration dimension")
wiki/howto/windestimationAdvanced.md
... ...
@@ -3,16 +3,18 @@
3 3
This document describes the generation process of Machine Learning (ML) models which are used internally by wind estimation. It is highly recommended to proceed this howto step by step considering the order of sections. At the end of this howto, you will generate a file containing the representation of internal models used by ``com.sap.sailing.windestimation`` bundle. You can use this file to update the wind estimation models of a running server instance. If you are interested in a simpler tutorial with less execution steps thanks to automation, then check out [Simple Guide for training of internal Wind Estimation models](./windestimation.md)
4 4
5 5
## Overview
6
+
6 7
In total, there are the following three categories of ML models used by wind estimation:
8
+
7 9
1. **Maneuver Classifiers**
8 10
2. **Regressors** of TWD delta standard deviation for the dimension **duration**
9 11
3. **Regressors** of TWD delta standard deviation for the dimension **distance**
10 12
11 13
Each of the model categories are composed of multiple models where each model targets a specific context. A context for a maneuver classifier is determined by the following attributes:
12 14
* Maneuver features
13
- * Polar features enabled: yes/no
14
- * Mark features enabled: yes/no
15
- * Scaled speed features enabled: yes/no
15
+ * Polar features enabled: yes/no
16
+ * Mark features enabled: yes/no
17
+ * Scaled speed features enabled: yes/no
16 18
* Boat class filtering for the data on which the classifier is trained, such as a specific boat class, or with all boat classes included
17 19
18 20
The context of regressor models is represented by its assigned input interval responsibility, e.g. [0 seconds; 62 seconds) for duration, or [80 meters; 1368 meters) for distance.
... ...
@@ -27,18 +29,23 @@ For each of the steps, appropriate Java classes must be executed per *Run with..
27 29
The details of the training process for each model category are described in the following sections.
28 30
29 31
## Prerequisites
32
+
30 33
To complete the training process successfully, you need to make sure that you have the following stuff:
34
+
31 35
* A complete onboarding setup for SAP Sailing Analytics development
32 36
* MongoDB (**3.4 or higher!**) is up and running
33 37
* At least 100 GB free space on the partition, where MongoDB is operating
34 38
* Installed graphical MongoDB client such as MongoDB Compass (Community version)
35 39
36 40
## Get the training data from sapsailing.com
41
+
37 42
The following steps import all the data required from sapsailing.com into the local MongoDB. These steps constitute a preprequisite for training of all ML model categories:
43
+
38 44
1. Run *com.sap.sailing.windestimation.data.importer.ManeuverAndWindImporter*
39 45
2. Run *com.sap.sailing.windestimation.data.importer.PolarDataImporter*
40 46
41 47
## Maneuver classifiers training
48
+
42 49
1. Run *com.sap.sailing.windestimation.model.classifier.maneuver.ManeuverClassifierTrainer*. Within this step, the maneuver data is preprocessed and all maneuver classifiers are trained for each supported context.
43 50
2. Optionally run *com.sap.sailing.windestimation.model.classifier.maneuver.ManeuverClassifierScoring* to print the performance of the trained classifiers. After this step, a list with macro-averaged F2-score of each trained classifier will be stored in *./maneuverClassifierScores.csv*
44 51
wiki/images/windestimation/gpsTrackVisualizationForTwdGuessing.png
... ...
Binary files /dev/null and b/wiki/images/windestimation/gpsTrackVisualizationForTwdGuessing.png differ
wiki/images/windestimation/gpsTrackVisualizationWithAdditionalFeaturesAndGuessedTwd.png
... ...
Binary files /dev/null and b/wiki/images/windestimation/gpsTrackVisualizationWithAdditionalFeaturesAndGuessedTwd.png differ
wiki/images/windestimation/mainPartsOfWindEstimation.png
... ...
Binary files /dev/null and b/wiki/images/windestimation/mainPartsOfWindEstimation.png differ
wiki/misc/windestimation-core-concepts.md
... ...
@@ -0,0 +1,222 @@
1
+# GPS track based Wind estimation - Core concepts
2
+
3
+This document describes concisely all the core concepts of the GPS track based wind estimation. If you are interested in details of emergence of wind estimation component, consider to read the corresponding [master thesis](../../doc/theses/Master_Thesis_-_Vladislav_Chumak_-_Wind_inference_from_GPS_tracks_of_sailboats.pdf). The master thesis provides also all the sailing theory and machine learning foundations required for understanding of wind estimation. However, be aware that with respect to the current state of development, the thesis might be outdated.
4
+
5
+## Table of Contents
6
+
7
+1. [Introduction](#introduction)
8
+ 1. [Basic Idea](#introductionBasicIdea)
9
+ 2. [Purpose](#introductionPurpose)
10
+ 3. [Wind estimation component](#introductionWindEstimationComponent)
11
+2. [Main parts](#mainParts)
12
+ 1. [Overview](#mainPartsOverview)
13
+ 2. [Maneuver detection](#mainPartsManeuverDetection)
14
+ 3. [Preprocessing](#mainPartsPreprocessing)
15
+ 4. [Maneuver classification](#mainPartsManeuverClassification)
16
+ 5. [Maneuver classifications aggregation](#mainPartsManeuverClassificationsAggregation)
17
+ 6. [Wind track inference](#mainPartsWindTrackInference)
18
+3. [Custom Hidden Markov Model](#customHmm)
19
+ 1. [Context mapping](#customHmmContextMapping)
20
+ 2. [Transition probabilities](#customHmmTransitionProbabilities)
21
+ 3. [Minimum Spanning Tree](#customHmmMst)
22
+ 4. [Inference of most probable maneuver types](#customHmmInference)
23
+ 5. [Trainable ML models](#customHmmTrainableModels)
24
+4. [Operation in SAP Sailing Analytics](#operation)
25
+ 1. [ML models initialization](#operationModelsInitialization)
26
+ 2. [OSGI Bundles](#operationOsgiBundles)
27
+ 3. [Wind source](#operationWindSource)
28
+ 4. [Replication](#operationReplication)
29
+ 5. [ML models update via REST](#operationModelsUpdateRest)
30
+ 6. [ML models initialization via URL](#operationModelsInitializationUrl)
31
+
32
+## Introduction <a name="introduction"></a>
33
+
34
+### Basic Idea <a name="introductionBasicIdea"></a>
35
+
36
+The basic idea behind the wind estimation comes from the ability of sailing experts to guess the true wind direction (TWD) by taking a look on the visual representation of a sailed GPS track.
37
+
38
+![Example of a visualized GPS track of a sailboat for TWD guessing](../images/windestimation/gpsTrackVisualizationForTwdGuessing.png "Example of a visualized GPS track of a sailboat for TWD guessing")
39
+
40
+Considering the GPS track depicted above, it is possible to conclude that the most probable TWD is north west. To conclude this, the following assumption can be made:
41
+* Tacks and jibes are sailed in a symmetrical manner so that the absolute TWA before maneuver equals to the absolute TWA after maneuver
42
+* Angle of tacks wider than of jibes and is approximately 90°
43
+
44
+This is a very basic example. Considering further features, such as speed over ground (SOG), waypoint coordinates, boat class polars and fine-grained SOG and course over ground (COG) trends within maneuvers, the estimated TWD gets even more plausible.
45
+
46
+![Example of a visualized GPS track of a sailboat with additonal features and guessed TWD](../images/windestimation/gpsTrackVisualizationWithAdditionalFeaturesAndGuessedTwd.png "Example of a visualized GPS track of a sailboat with additonal features and guessed TWD")
47
+
48
+The wind estimation makes use of maneuver type dependent patterns contained in maneuvers. Furthermore, boat polars, race course and meteorological characteristics of wind with its positional and temporal dependencies are considered. It incorporates various statistical and Machine Learning (ML) methods to estimate a plausible wind track by analyzing all the known patterns and information and aggregating all the partial conclusions in one piece.
49
+
50
+### Purpose <a name="introductionPurpose"></a>
51
+
52
+The SAP Sailing Analytics platform requires wind information within the sailing area in order to provide its full functional spectrum. If the wind information is not available, the platform will not be capable of estimating optimal sailing courses, showing performed maneuver types and computing important measures for performance analytics.
53
+The main goal of the wind estimation is to prevent the limited operation of SAP Sailing Analytics by introducing estimated wind data which appears credible for sail races. The estimated wind data is meant to be used in cases, when there is no wind data provided by external measurement systems. This will be usually the case, when SAP Sailing Analytics will provide a self-service for sailors, who just want to track themselves by a simple push of a button and receive all the important information concerning their sailing performance at the end of sailing session.
54
+
55
+### Wind estimation component <a name="introductionWindEstimationComponent"></a>
56
+
57
+The wind estimation is a technical component which is capable of estimating true wind direction (TWD) and true wind speed (TWS) by analyzing GPS tracks of competing sailboats within a regatta race.
58
+
59
+Its **input** looks as follows:
60
+* GPS-tracks of competitors of a race (mandatory)
61
+* Waypoint coordinates (optional)
62
+* Boat class polars (optional)
63
+
64
+The **output** is:
65
+* Wind track which is a sequence of wind fixes where each wind fix contains TWS, TWD, time point, position and confidence
66
+
67
+The more input data and the better the quality of the input data gets provided to the wind estimation, the better the accuracy of estimated wind track is to expect. The component can be used in a stand-alone manner by means of the Java class ``com.sap.sailing.windestimation.SimpleConfigurableManeuverBasedWindEstimationComponentImpl``. To provide efficient integration with SAP Sailing Analytics, the assembly of internal parts of the component has been customized in order to reuse the maneuver detection of ``com.sap.sailing.domain.tracking.impl.TrackedRaceImpl`` and to support incremental computation of estimated wind track in live races. The SAP Sailing Analytics integrated wind estimation component has been implemented within ``com.sap.sailing.windestimation.integration.IncrementalMstHmmWindEstimationForTrackedRace`` class.
68
+
69
+## Main parts <a name="mainParts"></a>
70
+
71
+### Overview <a name="mainPartsOverview"></a>
72
+
73
+The following figure depicts the main parts of the wind estimation with its data flow.
74
+
75
+![Main parts of wind estimation](../images/windestimation/mainPartsOfWindEstimation.png "Main parts of wind estimation")
76
+
77
+### Maneuver detection <a name="mainPartsManeuverDetection"></a>
78
+
79
+The first step of the wind estimation is to transform each provided GPS track into a maneuver sequence. For this, a custom algorithm has been developed and implemented in ``com.sap.sailing.domain.maneuverdetection.impl.ManeuverDetectorImpl``. The concept of maneuver detection is described in detail in [master thesis](../../doc/theses/Master_Thesis_-_Vladislav_Chumak_-_Wind_inference_from_GPS_tracks_of_sailboats.pdf) in section 4.1.
80
+
81
+A maneuver is a section with unstable course and speed occurring due to rearrangement of sailboat to a new course. Thus, it starts already when the sailing crew is preparing to maneuvering because the preparation phase might already affect the speed. A maneuver ends when the boat reaches its new target course at target speed. For wind estimation, a maneuver instance is represented as ``com.sap.sailing.domain.tracking.CompleteManeuverCurve``. It provides various features, such as SOG and COG before maneuver, SOG and COG after maneuver, course change within maneuver (maneuver angle), lowest speed within maneuver and more.
82
+
83
+### Preprocessing <a name="mainPartsPreprocessing"></a>
84
+
85
+In the second step, maneuver instances get converted into ``com.sap.sailing.windestimation.data.ManeuverForEstimation``. Additionally, the maneuvers which do not provide any valuable information for the wind estimation get sorted out (see ``com.sap.sailing.windestimation.data.ManeuverForEstimation#isClean()``). Useful maneuvers have course changes between 30 and 120 degrees and are not affected by low quality GPS sampling. There is a comprehensive list of criteria which must be fulfilled by a maneuver instance in order to be eligible for further processing. The criteria is defined in ``com.sap.sailing.windestimation.data.transformer.ManeuverForEstimationTransformer`` and described more in detail in [master thesis](../../doc/theses/Master_Thesis_-_Vladislav_Chumak_-_Wind_inference_from_GPS_tracks_of_sailboats.pdf) in section 4.6.
86
+
87
+### Maneuver classification <a name="mainPartsManeuverClassification"></a>
88
+
89
+In the third step, each maneuver instance gets classified regarding its maneuver type using Neural Networks. For classification, the following maneuver features are used as input for Neural Networks:
90
+
91
+* Absolute maneuver angle (mandatory)
92
+* Speed loss (mandatory)
93
+* Speed gain (mandatory)
94
+* Lowest speed vs. maneuver exiting speed ratio (mandatory)
95
+* Maximal turning rate (mandatory)
96
+* Scaled speed before (optional)
97
+* Scaled speed after (optional)
98
+* Mark passing (optional)
99
+* Deviation of maneuver angle from optimal tack angle (optional)
100
+* Deviation of maneuver angle from optimal jibe angle (optional)
101
+
102
+See [master thesis](../../doc/theses/Master_Thesis_-_Vladislav_Chumak_-_Wind_inference_from_GPS_tracks_of_sailboats.pdf) section 4.5 for detailed information about each feature. The feature set can be adjusted in ``com.sap.sailing.windestimation.model.classifier.maneuver.ManeuverClassifierModelContext#getX()`` and ``#getNumberOfInputFeatures()``. The feature selection and evaluation of ML classification algorithms has been leveraged using Python with its scientific packages pandas, scikit-learn and matplotlib. The whole analysis is documented in thesis, as well as in Jupyter Notebook Script located in ``../../java/com.sap.sailing.windestimation.lab/python/Maneuver data analysis.ipynb``.
103
+
104
+The output of maneuver classification step consists of maneuver instances with its classification results. Each classification result contains likelihoods for corresponding maneuver instance being of a particular type. The set of possible maneuver types is the following:
105
+* Tack
106
+* Jibe
107
+* Head up
108
+* Bear away
109
+
110
+### Maneuver classifications aggregation <a name="mainPartsManeuverClassificationsAggregation"></a>
111
+
112
+In the fourth step, the maneuver classifications are considered all together and aggregated accordingly so that the inferred TWD sequence from maneuver classifications represents a plausible wind track with smooth TWD changes. It can be regarded as a regularization component which is meant to eliminate the impact of wrong classifications by introducing penalties for abrupt TWD changes. The TWD inference strategy is maneuver type dependent. For tack maneuvers, the TWD is the middle COG between COG before and COG after maneuver. For jibes, the TWD is determined analogously as for tacks, with additional inversion of middle COG. For instance, for a tack maneuver with COG before at 90° and COG after at 180°, the corresponding TWD will be determined as 135°.
113
+
114
+There were 5 approaches evaluated for maneuver classifications aggregation task:
115
+* Custom Hidden Markov Model (HMM)
116
+* K-Means Clustering
117
+* Mean based outlier removal
118
+* Neighbor based ourlier removal
119
+* Curve fitting of polars
120
+
121
+Custom HMM approach was the most advanced and most accurate approach. In comparison to other aggregation strategies, the merit of custom HMM is its capability for adaption to continuous and smooth TWD changes and consideration of all known features/patterns from the sailing domain and meteorology. It is used in wind estimation as the default maneuver classifications aggregation strategy.
122
+
123
+The output of maneuver classifications aggregation is a sequence of maneuvers, each with estimated maneuver type.
124
+
125
+### Wind track inference <a name="mainPartsWindTrackInference"></a>
126
+
127
+In the last step, the wind track is inferred from the maneuvers with its estimated maneuver types. For this, only tack and jibe maneuvers are considered. For each tack and jibe, a wind fix is constructed as follows:
128
+* TWD is the middle course of maneuver (inverted if jibe)
129
+* TWS is determined by means of ``PolarDataService`` and TWA/SOG tuples before and after maneuver
130
+* Position and time point is taken from the corresponding maneuver
131
+* Confidence is provided from maneuver classifications aggregation strategy (Custom HMM)
132
+
133
+## Custom Hidden Markov Model <a name="customHmm"></a>
134
+
135
+### Context mapping <a name="customHmmContextMapping"></a>
136
+
137
+The contextual mapping between HMM components and wind estimation is the following:
138
+* Subjects to observe: maneuver instances of all competitors within a single race
139
+* Observation: features of a maneuver instance
140
+* Hidden states: sequence of maneuver types.
141
+* Set of possible hidden state values: Tack, Jibe, Bear away, Head up
142
+* Initial probabilities: *P(S)=1/4* where *S* represents a maneuver type and *4* represents the number of possible maneuver types
143
+* Transition probabilities: custom
144
+* Emission probabilities: likelihoods for each maneuver being of specific maneuver type (classification result from Neural Networks)
145
+
146
+For the purpose of wind estimation, the HMM concept was customized. The customization details are explained in the following sections.
147
+
148
+### Transition probabilities <a name="customHmmTransitionProbabilities"></a>
149
+
150
+The transition probabilities are calculated using a gaussian model which shapes the distribution of TWD shifts/deltas considering the spatial and temporal distance between two maneuvers. The gaussian model is parametrized with zero as mean, and a standard deviation/sigma which is approximated by using additional ML/regressor models. The final transition probability is sampled from the gaussian model at TWD delta, which is calculated between two maneuvers and its assumed maneuver types. The implementation of transition probabilities calculation is located in ``com.sap.sailing.windestimation.aggregator.msthmm.DistanceAndDurationAwareWindTransitionProbabilitiesCalculator``.
151
+
152
+### Minimum Spanning Tree <a name="customHmmMst"></a>
153
+
154
+Within the custom HMM, observations/maneuvers are processed as directed acyclic graph (DAG) rather than chronologically ordered sequence. The DAG is the Minimum Spanning Tree (MST). The MST generation is implemented in an incremental manner within ``com.sap.sailing.windestimation.aggregator.msthmm.MstManeuverGraphGenerator``. The nearest neighbor of a maneuver is determined considering temporal and spatial distance from the maneuver to other maneuvers.
155
+
156
+### Inference of most probable maneuver types <a name="customHmmInference"></a>
157
+
158
+To infer the most probable maneuver types for each maneuver, a customized version of Viterbi algorithm is used which is implemented in ``com.sap.sailing.windestimation.aggregator.msthmm.MstBestPathsCalculatorImpl``. The Viterbi algorithm is comparable to Dijstra algorithm. Its purpose is to find the path with the highest product of maneuver type likelihoods through all maneuvers. The customization of Viterbi algorithm is its compatibility with HMM customizations described in previous sections.
159
+
160
+### Trainable ML models <a name="customHmmTrainableModels"></a>
161
+
162
+In total, there are the following three categories of ML models used by wind estimation:
163
+1. **Maneuver Classifiers**
164
+2. **Regressors** of TWD delta standard deviation for the dimension **duration**
165
+3. **Regressors** of TWD delta standard deviation for the dimension **distance**
166
+
167
+Each of the model categories are composed of multiple models where each model targets a specific context. A context for a maneuver classifier is determined by the following attributes:
168
+* Maneuver features
169
+ * Polar features enabled: yes/no
170
+ * Mark features enabled: yes/no
171
+ * Scaled speed features enabled: yes/no
172
+* Boat class filtering for the data on which the classifier is trained, such as a specific boat class, or with all boat classes included
173
+
174
+The context of regressor models is represented by its assigned input interval responsibility, e.g. [0 seconds; 62 seconds) for duration, or [80 meters; 1368 meters) for distance.
175
+
176
+Each of the ML model categories must be trained individually. The common workflow looks as follows:
177
+1. Get the training data from REST API of sapsailing.com
178
+2. Preprocess the data
179
+3. Train the models of the category
180
+
181
+A complete guide for training of these internal ML models can be found here:
182
+* [Simple Guide for training of internal Wind Estimation models](../howto/windestimation.md)
183
+* [Advanced Guide for training of internal Wind Estimation models](../howto/windestimationAdvanced.md)
184
+
185
+## Operation in SAP Sailing Analytics <a name="operation"></a>
186
+
187
+### ML models initialization <a name="operationModelsInitialization"></a>
188
+
189
+Since the wind estimation relies on multiple stateful ML models, the state of the trained ML models must be provided to the wind estimation component. There are three ways to accomplish this:
190
+
191
+* [Provide trained ML models via REST](#operationModelsUpdateRest)
192
+* [Import the ML models from URL of another server instance](#operationModelsInitializationUrl)
193
+* Run the server instance as replica to automatically import the ML models from master
194
+
195
+After initialization of ML models, the ML models will be persisted in the MongoDB of the server instance. The models will be available after reboot of the server instance.
196
+
197
+
198
+### OSGI Bundles <a name="operationOsgiBundles"></a>
199
+
200
+The wind estimation is composed of the following three OSGI bundles:
201
+
202
+* ``com.sap.sailing.windestimation`` - Contains all the code for production use in SAP Sailing Analytics
203
+* ``com.sap.sailing.windestimation.lab`` - Contains all the code which is used for training of internal ML models, data visualization, evaluation of wind estimation performance and experimental code.
204
+* ``com.sap.sailing.windestimation.test`` - Contains unit tests for wind estimation parts
205
+
206
+The only bundle required for SAP Sailing Analytics operation with wind estimation is ``com.sap.sailing.windestimation``. When the bundle starts, an instance of ``com.sap.sailing.domain.windestimation.WindEstimationFactoryService`` gets registered in OSGI service registry. Since the bundle ``com.sap.sailing.server`` is listening to registrations of that service, it will be notified. When the ML models of the wind estimation are initialized, a new instance of ``com.sap.sailing.windestimation.integration.IncrementalMstHmmWindEstimationForTrackedRace`` will be assigned to all ``TrackedRace``-instances which automatically **causes recalculation of all maneuvers and wind caches with estimated wind**. The recalculation will be also caused on update of ML models and detaching of ``com.sap.sailing.windestimation`` bundle.
207
+
208
+### Wind source <a name="operationWindSource"></a>
209
+
210
+Each tracked race instance will get a new wind track for estimated wind if wind estimation component gets initialized sucessfully. The wind track is managed as a wind source of type ``MANEUVER_BASED_ESTIMATION``. It is available in the wind chart of RaceBoard.
211
+
212
+### Replication <a name="operationReplication"></a>
213
+
214
+The wind estimation supports automatic replication of ML models. Both, initial replication and automatic replication of ML models on models update is supported.
215
+
216
+### ML models update via REST <a name="operationModelsUpdateRest"></a>
217
+
218
+ML models can be provided to wind estimation by uploading the file with [trained/serialized models](../howto/windestimation.md) via HTTP POST to http://sapsailing.com/windestimation/api/windestimation_data (see ``com.sap.sailing.windestimation.jaxrs.api.WindEstimationDataResource``). The REST interface is secured and requires the user to have ``WIND_ESTIMATION_MODELS`` permission for successful models update. Be aware that each models update via REST will cause a recalculation of maneuvers and wind caches with estimated wind for all tracked races of the server instance and its replicas.
219
+
220
+### ML models initialization via URL <a name="operationModelsInitializationUrl"></a>
221
+
222
+The wind estimation bundle is capable of importing ML models via URL from another server instance. For this, provide the following VM argument to the server startup script/command: ``windestimation.source.url``. The Run Config ``SailingServer (Proxy, Jetty on 8889, Polar & Wind estimation Import from 8888)`` already includes this argument as follows: ``-Dwindestimation.source.url=http://127.0.0.1:8888``.
... ...
\ No newline at end of file