mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-10-16 09:11:02 +00:00
do a first basic speed comparison for the tack and jibe cluster; multiply instead of add likelihoods of tack / jibe cluster (see bug 1562 comment #6)
This commit is contained in:
1 parent
f5e48920b8
commit
393d2d1246
1 file changed
+9
-7
+9
-7
@@ -347,21 +347,22 @@ public class ManeuverBasedWindEstimationTrackImpl extends WindTrackImpl {
|
||||
*/
|
||||
private double getLikelihoodIsTackCluster(Cluster<ManeuverClassification, DoublePair, Bearing, ScalableBearing> tackClusterCandidate,
|
||||
Set<Cluster<ManeuverClassification, DoublePair, Bearing, ScalableBearing>> clusters) {
|
||||
double likelihoodSum = 0;
|
||||
double tackClusterLikelihood = 0;
|
||||
for (ManeuverClassification mc : tackClusterCandidate) {
|
||||
likelihoodSum += mc.getLikelihoodAndTWSBasedOnSpeedAndAngle(ManeuverType.TACK).getA();
|
||||
tackClusterLikelihood += mc.getLikelihoodAndTWSBasedOnSpeedAndAngle(ManeuverType.TACK).getA();
|
||||
}
|
||||
Cluster<ManeuverClassification, DoublePair, Bearing, ScalableBearing> jibeClusterCandidate = getOppositeCluster(tackClusterCandidate, clusters);
|
||||
final double speedMatchFactor;
|
||||
double jibeClusterLikelihood = 0;
|
||||
if (jibeClusterCandidate != null) {
|
||||
for (ManeuverClassification mc : jibeClusterCandidate) {
|
||||
likelihoodSum += mc.getLikelihoodAndTWSBasedOnSpeedAndAngle(ManeuverType.JIBE).getA();
|
||||
jibeClusterLikelihood += mc.getLikelihoodAndTWSBasedOnSpeedAndAngle(ManeuverType.JIBE).getA();
|
||||
}
|
||||
speedMatchFactor = getLikelihoodTackJibeSpeedRatio(tackClusterCandidate, jibeClusterCandidate);
|
||||
} else {
|
||||
speedMatchFactor = .5; // no jibe cluster found; penalize for not being able to compare average speeds between tacks and jibes
|
||||
}
|
||||
return speedMatchFactor * likelihoodSum;
|
||||
return speedMatchFactor * tackClusterLikelihood * jibeClusterLikelihood;
|
||||
}
|
||||
|
||||
private Cluster<ManeuverClassification, DoublePair, Bearing, ScalableBearing> getOppositeCluster(
|
||||
@@ -399,15 +400,16 @@ public class ManeuverBasedWindEstimationTrackImpl extends WindTrackImpl {
|
||||
Speed tackClusterWeightedAverageSpeed = getWeightedAverageSpeed(tackClusterCandidate, ManeuverType.TACK);
|
||||
Speed jibeClusterWeightedAverageSpeed = getWeightedAverageSpeed(jibeClusterCandidate, ManeuverType.JIBE);
|
||||
// TODO ask polarService how likely the ratio we found actually is
|
||||
return .5;
|
||||
return Math.min(1., jibeClusterWeightedAverageSpeed.getKnots()/tackClusterWeightedAverageSpeed.getKnots());
|
||||
}
|
||||
|
||||
private Speed getWeightedAverageSpeed(Cluster<ManeuverClassification, DoublePair, Bearing, ScalableBearing> cluster, ManeuverType maneuverType) {
|
||||
double weightSum = 0;
|
||||
ScalableSpeed scalableSpeed = new ScalableSpeed(Speed.NULL);
|
||||
for (ManeuverClassification mc : cluster) {
|
||||
weightSum += mc.getLikelihoodAndTWSBasedOnSpeedAndAngle(maneuverType).getA();
|
||||
scalableSpeed = scalableSpeed.add(new ScalableSpeed(mc.getSpeedAtManeuverStart()));
|
||||
final Double weight = mc.getLikelihoodAndTWSBasedOnSpeedAndAngle(maneuverType).getA();
|
||||
weightSum += weight;
|
||||
scalableSpeed = scalableSpeed.add(new ScalableSpeed(mc.getSpeedAtManeuverStart()).multiply(weight));
|
||||
}
|
||||
return scalableSpeed.divide(weightSum);
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user