Add normalized CheapJPDAF with linear-cost soft association - #5475
Draft
FlorianPfaff wants to merge 3 commits into
Draft
FlorianPfaff wants to merge 3 commits into
FlorianPfaff wants to merge 3 commits into
Conversation
Contributor
✅MegaLinter analysis: Success
Notices
See detailed reports in MegaLinter artifacts Your project could benefit from a custom flavor, which would allow you to run only the linters you need, and thus improve runtime performances. (Skip this info by defining
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.

Summary
Implement
CheapJointProbabilisticDataAssociationFilter, exported asCheapJPDAFandCJPDAF, for NumPy linear-Gaussian multitarget tracking.docs/cheap-jpdaf.md.Normalization convention
For gated likelihoods L and clutter intensity kappa, define w_ij = P_D L_ij / ((1-P_D) kappa_j), r_i = sum_j w_ij, and c_j = sum_i w_ij. Detection weights are
The missed-detection mass is 1 - sum_j beta_ij, evaluated through an equivalent sum of positive terms to retain tiny miss probabilities. The original separate Fitzgerald miss expression 1/(1+r_i) generally does not normalize under track competition; this deliberate complementary-mass convention is documented rather than silently returning invalid mixture weights.
The approximation has normalized per-track mixtures and measurement-column allocation at most one. It agrees with the current exact JPDAF model for a single track, a single measurement, and disjoint single-track validation components; it is not exact in general ambiguous scenes.
Diagnostic contract
The optional hard diagnostic is a feasible track-order greedy likelihood-ratio assignment, not a joint MAP event. It is returned by
find_associationand stored aslatest_greedy_association;latest_map_associationremainsNone. The diagnostic never drives the soft update.max_enumerated_eventsis ignored by the cheap subclass and remains enforced by exact JPDAF.Verified validation
GitHub-hosted Ubuntu / Python 3.12 validation completed successfully:
https://github.com/FlorianPfaff/PyRecEst/actions/runs/34966924288
The validated integrated source was pushed as
cb1abef77903d79c54289ce3ab427c4ccf186f43. Temporary integration workflow/script files were removed from the final branch. The broader repository CI matrix has not yet been confirmed; this PR remains draft pending those checks. No merge or release is performed.