Skip to content

Hungarian Algorithm Optimizations - #3602

Closed
Andrewyx wants to merge 5 commits into
UBC-Thunderbots:masterfrom
Andrewyx:Andrewyx/LAPJV
Closed

Hungarian Algorithm Optimizations#3602
Andrewyx wants to merge 5 commits into
UBC-Thunderbots:masterfrom
Andrewyx:Andrewyx/LAPJV

Conversation

@Andrewyx

Copy link
Copy Markdown
Contributor

Description

Currently, the Tactics are assigned to robots using the Hungarian Algorithm which optimizes the results of the cost function matrix which dictates the potential cost of each robot using each tactic. This algorithm is unfortunately very expensive, with asymptotic runtime of $O(n^4)$ and with some modifications $O(n^3)$. Hence, an alternative algorithm could provide more efficient execution.

The Jonker-Volgenant algorithm presents itself as an $O(n^3)$ linear assignment problem algorithm, which on average runs much faster than $O(n^3)$. This PR tries to apply this algorithm in replacement for the current Hungarian algorithm

Jonker, R., Volgenant, A. A shortest augmenting path algorithm for dense and sparse linear assignment problems. Computing 38, 325–340 (1987). https://doi.org/10.1007/BF02278710

Testing Done

Resolved Issues

Length Justification and Key Files to Review

Review Checklist

It is the reviewers responsibility to also make sure every item here has been covered

  • Function & Class comments: All function definitions (usually in the .h file) should have a javadoc style comment at the start of them. For examples, see the functions defined in thunderbots/software/geom. Similarly, all classes should have an associated Javadoc comment explaining the purpose of the class.
  • Remove all commented out code
  • Remove extra print statements: for example, those just used for testing
  • Resolve all TODO's: All TODO (or similar) statements should either be completed or associated with a github issue

@Andrewyx

Andrewyx commented Apr 2, 2026

Copy link
Copy Markdown
Contributor Author

Findings

Using a highly optimized algorithm, namely the JV solution for the linear assignment problem (my implementation is found here), I was not able to find performance improvements significant enough to warrant a change. This is despite the algorithmic improvements provided by the optimized algorithm. Hence, to improve performance, we should focus on optimizations within our codebase, as the management of the solver resources affects performance much more than the library's implementation.

@Andrewyx Andrewyx closed this Apr 2, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant