⚡️ Speed up method PolymatrixGame.range_of_payoffs
by 1,749%
#25
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.
📄 1,749% (17.49x) speedup for
PolymatrixGame.range_of_payoffs
inquantecon/game_theory/polymatrix_game.py
⏱️ Runtime :
3.83 seconds
→207 milliseconds
(best of5
runs)📝 Explanation and details
The optimization replaces the inefficient double-pass approach in
range_of_payoffs()
with a single-pass vectorized operation using NumPy.Key changes:
min([np.min(M) for M in ...])
andmax([np.max(M) for M in ...])
, which iterate through all matrices twice and involve Python's built-inmin
/max
functions on a list of scalar values.np.concatenate([M.ravel() for M in ...])
, then applyingnp.min()
andnp.max()
directly on the combined array.Why this is faster:
min
andmax
functions are highly optimized C implementations that operate on contiguous memory, compared to Python's built-in functions working on lists.np.min()
once per matrix, while the optimized version calls it once total.Performance characteristics:
The optimization shows dramatic speedup especially for larger games - achieving 651% to 2010% improvements on large-scale test cases with many players/matchups, while maintaining 9-30% improvements on smaller cases. The single-pass approach scales much better as the number of matrices increases.
✅ Correctness verification report:
🌀 Generated Regression Tests and Runtime
To edit these changes
git checkout codeflash/optimize-PolymatrixGame.range_of_payoffs-mgh46ign
and push.