Python/JAX-based numerical solvers for dynamic/differential game equilibria
Project description
PYDGENS: Python/JAX Differential Game Equilibria Numerical Solvers
Documentation · Examples · API · Solvers · GitHub
PYDGENS provides numerical solvers for approximating equilibrium solutions in multi-player, general-sum dynamic and differential games. The package currently focuses on linear-quadratic feedback Nash games, iterative linear-quadratic methods for nonlinear games, and augmented-Lagrangian workflows for constrained games.
|
|
Multi-car intersection
Naive collisions compared to an iLQ feedback solution. Source · Docs |
|
|
Satellite Lady-Bandit-Guard
One LQ feedback Nash strategy rolled out from many initial states. Source · Docs · spacegym-kspdg |
Installation
pip install pydgens
PYDGENS requires Python 3.12 or newer.
Solvers
PYDGENS currently supports three main solver paths. See the solver notes for a sparse theory map and references.
| Solver | Use case | Equilibrium style |
|---|---|---|
LQ |
Linear dynamics with quadratic costs | feedback Nash |
iLQ |
Nonlinear unconstrained games | local feedback Nash |
AL |
Constrained nonlinear games | local open-loop Nash (pre-release, beta) |
Usage Example
Define and solve for the local Nash equilibrium of a nonlinear game by combining a time grid, dynamics, player costs, and player-owned control slices:
import jax.numpy as jnp
import pydgens as pdg
x0 = jnp.array([4.0, 4.0, 0.0, 0.0]) # px, py, heading, speed
game = pdg.game(
tg=pdg.time_grid(nt=34, dt=0.1),
dynamics=pdg.nonlinear_dynamics(
nx=4,
nu=2,
dynamics=lambda t, x, u: jnp.array([
x[3] * jnp.cos(x[2]),
x[3] * jnp.sin(x[2]),
u[0],
u[1],
]),
),
players=[
pdg.player(
name="turn",
joint_ctrl_slice=slice(0, 1),
cost=pdg.player_cost(
running=lambda t, x, u: x[0] ** 2 + x[1] ** 2 + u[0] ** 2,
),
),
pdg.player(
name="speed",
joint_ctrl_slice=slice(1, 2),
cost=pdg.player_cost(
running=lambda t, x, u: (x[3] - 1.0) ** 2 + u[1] ** 2,
),
),
],
)
solution = pdg.solve(game, x0=x0, method="ilq")
print(solution)
Further examples of solving for equilibria in differential games can be run directly with:
python -m pydgens.examples.tug_o_war # minimal linear-quadratic (LQ) game
python -m pydgens.examples.unicycle # nonlinear game solved with iterative method
python -m pydgens.examples.constrained_integrators # constrained game solved Lagrangian method
A comprehensive list of examples is included in the examples documentation.
Disclaimer
DISTRIBUTION STATEMENT A. Approved for public release. Distribution is unlimited.
This material is based upon work supported by the Under Secretary of War for Research and Engineering under Air Force Contract No. FA8702-15-D-0001 or FA8702-25-D-B002. Any opinions, findings, conclusions or recommendations expressed in this material are those of the author(s) and do not necessarily reflect the views of the Under Secretary of War for Research and Engineering.
© 2026 Massachusetts Institute of Technology.
Subject to FAR52.227-11 Patent Rights - Ownership by the contractor (May 2014)
SPDX-License-Identifier: MIT
The software/firmware is provided to you on an As-Is basis.
Delivered to the U.S. Government with Unlimited Rights, as defined in DFARS Part 252.227-7013 or 7014 (Feb 2014). Notwithstanding any copyright notice, U.S. Government rights in this work are defined by DFARS 252.227-7013 or DFARS 252.227-7014 as detailed above. Use of this work other than as specifically authorized by the U.S. Government may violate any copyrights that exist in this work.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file pydgens-1.0.0.tar.gz.
File metadata
- Download URL: pydgens-1.0.0.tar.gz
- Upload date:
- Size: 212.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d0982fe329c4177d5ef6823680bd131328650377877800ad15c4fdd21c6f1818
|
|
| MD5 |
6d25659041c38ec4487a4a9a1bd2cd98
|
|
| BLAKE2b-256 |
874ccbba8b463453d9792c5c6dda6c66fbffc2f19d7ed1bac6f8b70ed7bf77c0
|
Provenance
The following attestation bundles were made for pydgens-1.0.0.tar.gz:
Publisher:
publish.yml on mit-ll/pydgens
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
pydgens-1.0.0.tar.gz -
Subject digest:
d0982fe329c4177d5ef6823680bd131328650377877800ad15c4fdd21c6f1818 - Sigstore transparency entry: 1931990129
- Sigstore integration time:
-
Permalink:
mit-ll/pydgens@e7fb3a79a7f23363c0221b5d061f27ab7c08d6d1 -
Branch / Tag:
refs/tags/v1.0.0 - Owner: https://github.com/mit-ll
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@e7fb3a79a7f23363c0221b5d061f27ab7c08d6d1 -
Trigger Event:
release
-
Statement type:
File details
Details for the file pydgens-1.0.0-py3-none-any.whl.
File metadata
- Download URL: pydgens-1.0.0-py3-none-any.whl
- Upload date:
- Size: 152.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
dc306b7255414058468d0160951bd0dd89e437ab33de9fbaa2d78924391a1cb4
|
|
| MD5 |
544158ee8643b3e429d19c4734b60ee0
|
|
| BLAKE2b-256 |
1ce18aaa42be8c25d27205f6b8a6baaff24f0f186ba13f42f3bdbc58971626f7
|
Provenance
The following attestation bundles were made for pydgens-1.0.0-py3-none-any.whl:
Publisher:
publish.yml on mit-ll/pydgens
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
pydgens-1.0.0-py3-none-any.whl -
Subject digest:
dc306b7255414058468d0160951bd0dd89e437ab33de9fbaa2d78924391a1cb4 - Sigstore transparency entry: 1931990263
- Sigstore integration time:
-
Permalink:
mit-ll/pydgens@e7fb3a79a7f23363c0221b5d061f27ab7c08d6d1 -
Branch / Tag:
refs/tags/v1.0.0 - Owner: https://github.com/mit-ll
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@e7fb3a79a7f23363c0221b5d061f27ab7c08d6d1 -
Trigger Event:
release
-
Statement type: