January 15, 2024
17 min read
optimizationpackagescomparison
List of Optimization Packages in Python
A detailed overview of various optimization packages available for Python categorized by their capabilities.
By Keivan Tafakkori
Source: images.unsplash.com
Introduction
This article serves as a comprehensive reference for academics and experts in the following fields to get familiar with what is available for optimization in Python:
- Industrial engineering (IE)
- Supply chain management (SCM)
- Operations research (OR)
- Computer science (CS)
- Machine learning (ML)
- Simulation (SM)
- Decision science (DS)
- Data science (DS)
Guide
| Package capability | Description |
|---|---|
DWP | Decision-centric workflow programming (DecisionOps) |
GPP | General purpose programming |
IP | Integer programming |
LP | Linear programming |
MILP | Mixed integer linear programming |
MINLP | Mixed integer nonlinear programming |
MIQP | Mixed integer quadratic programming |
MOP | Multi-criteria/objective programming |
NLP | Nonlinear programming |
PSP | Problem-specific programming |
QPP | Quantum-powered programming |
UP | Uncertainty programming |
MINLP+MIQP+MILP+NLP+IP+LP Packages
Note: Some packages might not accept a mixed group of discrete and continuous variables.
| Package | Link | Version | License | Last commit |
|---|---|---|---|---|
amplpy | Official | v0.15.2 | BSD-3 | july |
casadi | Official | v3.7.2 | OSI Approved | november |
feloopy | Official | v0.3.9 | MIT | November 27 |
gamspy | Official | v1.17.2 | MIT | November 29 |
gekko | Official | v1.3.0 | MIT | november |
gurobipy | Official | v13.0.0 | Proprietary | - |
hexaly | Official | - | - | - |
insideopt-seeker | Official | v0.1.24 | - | - |
knitro | Official | - | - | - |
lindo | Official | v16.0.68 | - | march |
midaco | Official | – | - | - |
naginterfaces | Official | - | - | - |
octeract | Official | – | - | - |
omlt | Official | v1.2.2 | - | april |
optalg | Official | v1.1.8rc1 | BSD 2-Clause License | november 2019 |
optmod | Official | v0.0.1rc1 | BSD 2-Clause License | january 2020 |
pydrake | Official | v1.47.0 | - | December 1 |
pyepo | Official | v1.0.2 | - | august |
pyomo | Official | v6.9.5 | - | November 30 |
pyscipopt | Official | v6.0.0 | MIT | December 1 |
science-optimization | Official | v9.0.3 | - | - |
xpress | Official | v9.8.0 | Other/Proprietary | - |
MIQP+MILP+IP+LP Packages
Note: Some packages might not accept a mixed group of discrete and continuous variables.
| Package | Link | Version | License | Last commit |
|---|---|---|---|---|
coptpy | Official | v8.0.2 | - | - |
cplex | Official | v22.1.2.0 | Proprietary | - |
docplex | Official | v2.30.251 | Apache 2.0 | july |
doopl | Official | v12.10.0.26 | v12.10.0.26 | june 2022 |
highspy | Official | v1.12.0 | MIT | october |
miosqp | Official | - | - | january 2020 |
mosek | Official | v11.0.30 | - | - |
optlang | Official | v1.8.3 | Apache-2.0 | january |
pyoframe | Official | v1.0.1 | MIT | november |
pyoptinterface | Official | v0.5.1 | MPL 2.0 | november |
qiskit-optimization | Official | v0.7.0 | Apache-2.0 | november |
qpsolvers | Official | v4.8.2 | LGPLV3 | November 25 |
rsome | Official | v1.3.1 | GPL-3.0 | november 2024 |
sasoptpy | Official | v1.0.5 | Apache v2.0 | october |
MILP+IP+LP Packages
Note: Some packages might not accept a mixed group of discrete and continuous variables.
| Package | Link | Version | License | Last commit |
|---|---|---|---|---|
cuopt | Official | – | – | November 25 |
cupdlpx | Official | – | – | november |
cvxopt | Official | v1.3.2 | GNU GPL version 3 | october |
cvxpy | Official | v1.7.4 | Apache License, Version 2.0 | November 30 |
cylp | Official | v0.93.1 | EPL-2.0 | july |
flowty | Official | - | - | - |
linopy | Official | v0.5.8 | MIT | november |
lpsolve55 | Official | – | – | february 2019 |
mathopt | Official | – | – | November 25 |
mindoptpy | Official | v2.2.0 | - | - |
mip | Official | v1.15.0 | EPL-2.0 | august |
ortools | Official | v9.14.6206 | Apache 2.0 | November 25 |
picos | Official | v2.6.2 | GPLV3 | october |
pulp | Official | v3.3.0 | MIT | november |
pymprog | Official | v1.1.2 | GPL | november 2023 |
swiglpk | Official | v5.0.12 | GPL v3 | november |
NLP+LP Packages
| Package | Link | Version | License | Last commit |
|---|---|---|---|---|
acadopy | Official | - | - | june 2019 |
acados | Official | - | - | December 1 |
bioptim | Official | - | - | November 25 |
cyipopt | Official | v1.0.3 | EPL-1.0 | november |
dymos | Official | v1.15.0 | Apache-2.0 | september |
gpkit | Official | v1.1.1 | The MIT License (MIT) | january 2024 |
iminuit | Official | v2.32.0 | MIT+LGPL | november |
lpsolvers | Official | v2.1.0 | LGPLV3 | april |
nlopt | Official | v2.9.1 | MIT | september |
nlpy | Official | - | LGPL | - |
openmdao | Official | v3.41.0 | Apache-2.0 | november |
openopt | Official | v0.5629 | BSD | may 2018 |
optimagic | Official | - | MIT | November 27 |
optimistix | Official | v0.0.11 | Apache-2.0 | November 29 |
polyopt | Official | - | - | january 2018 |
pyipm | Official | - | - | november 2021 |
pyipopt | Official | v0.7 | New BSD License | april 2018 |
pyopt | Official | v0.84 | - | january |
scipy | Official | v1.16.3 | BSD | December 1 |
theseus | Official | v0.2.3 | - | january |
trustregion | Official | - | - | November 30 |
worhp | Official | - | - | - |
CP Packages
| Package | Link | Version | License | Last commit |
|---|---|---|---|---|
choco | Official | v0.2.4 | BSD-4 | september |
cplex | Official | v22.1.2.0 | Proprietary | – |
cpmpy | Official | v0.9.28 | Apache 2.0 | December 1 |
feloopy | Official | v0.3.9 | MIT | November 27 |
gecode-python | Official | v0.27 | - | – |
hexaly | Official | – | – | – |
kalis | Official | – | – | – |
minizinc | Official | v0.10.0 | MPL-2.0 | october |
optapy | Official | v9.37.0b0 | Apache License Version 2.0 | july 2023 |
ortools | Official | v9.14.6206 | Apache 2.0 | November 25 |
picat | Official | - | - | - |
pycsp3 | Official | v2.5.1 | MIT | november |
python-constraint | Official | v1.4.0 | BSD | july |
z3-solver | Official | v4.15.4.0 | MIT License | November 30 |
GPP Packages
| Package | Link | Version | License | Last commit |
|---|---|---|---|---|
arm-mango | Official | v1.5.1 | Apache-2.0 | february |
ax | Official | v0.52.0 | COMMERCIAL | November 27 |
balans | Official | v2.1.3 | Apache-2.0 | november |
bayesian-optimization | Official | v3.1.0 | MIT | september |
bayesianevolution | Official | - | - | december 2020 |
bayeso | Official | v0.6.0 | MIT | march 2024 |
bayesopt | Official | v0.3 | AGPL>=3.0 | march 2023 |
black-box | Official | v1.0.2 | MIT | october |
bolib | Official | – | – | september 2021 |
botorch | Official | v0.16.1 | MIT | November 29 |
cbx | Official | v1.0.1 | MIT | october |
cma | Official | v4.4.1 | - | september |
cmaes | Official | v0.12.0 | MIT | November 27 |
cobyqa | Official | v1.1.3 | BSD | December 1 |
deap | Official | v1.4.3 | LGPL | april |
dfoalgos | Official | v0.6 | BSD | – |
dfogn | Official | v1.0.2 | GNU GPL | – |
didppy | Official | v0.10.0 | - | august |
dlib | Official | v20.0.0 | Boost Software License | November 28 |
egobox | Official | v0.34.0 | Apache-2.0 | november |
evolopy | Official | v4.0.6 | MIT | april |
evoopt | Official | v0.14 | BSD 2-Clause | june 2022 |
evostra | Official | v2.5.2 | MIT | may 2018 |
feloopy | Official | v0.3.9 | MIT | November 27 |
freelunch | Official | v0.0.15 | MIT | – |
gaft | Official | v0.5.7 | LICENSE | december 2018 |
gemseo | Official | v6.3.1 | LGPL-3.0 | November 28 |
geneticalgorithm | Official | v1.0.2 | MIT | december 2020 |
goptpy | Official | - | - | november 2018 |
gradient-free-optimizers | Official | v1.7.2 | MIT | september |
gyopt | Official | v1.2.6 | - | january 2023 |
hebo | Official | v0.3.6 | MIT | November 27 |
heuristic_optimization | Official | v0.4.3 | MIT | september 2017 |
hexaly | Official | – | – | – |
hpbandster | Official | v0.7.4 | BSD 3-Clause License | april 2022 |
hyperopt-sklearn | Official | v1.1.1 | BSD | march |
hyperopt | Official | v0.2.7 | BSD | september 2024 |
inspyred | Official | v1.0.3 | MIT | october 2024 |
jmetalpy | Official | v1.9.0 | MIT | november |
mealpy | Official | v3.0.3 | MIT | september |
mipego | Official | v2.0.0 | MIT | november 2021 |
moptipy | Official | v0.9.155 | GPL 3.0 | November 28 |
mystic | Official | v0.4.4 | BSD-3-Clause | november |
nevergrad | Official | v1.0.12 | MIT | april |
niapy | Official | v2.6.1 | MIT | november |
oasis | Official | v0.1.3 | MIT | december 2024 |
opro | Official | v0.2.15 | MIT | december 2024 |
optimus | Official | v2.1.0 | MIT | november |
optuna | Official | v4.6.0 | MIT | November 28 |
optuner | Official | v0.8.8 | MIT | – |
opytimizer | Official | v3.1.4 | Apache 2.0 | august 2024 |
orion | Official | v0.2.7 | BSD-3-Clause | november |
orlm | Official | - | - | september |
pagmo | Official | v2.19.5 | MPL-2.0 | october |
pdfo | Official | v2.2.0 | BSD | february |
platypus | Official | v1.4.1 | - | august |
poppy | Official | v0.2.1 | BSD-3-Clause | february 2024 |
prodyn | Official | - | - | march 2018 |
proxmin | Official | v0.6.12 | MIT | june 2022 |
psopt | Official | v0.1.2 | MIT | – |
psopy | Official | v0.2.4 | BSD | april 2020 |
py-bobyqa | Official | v1.5.0 | GPL-3.0-or-later | November 30 |
pydogs | Official | v0.1.5 | - | – |
pygad | Official | v3.5.0 | BSD | july |
pygmo | Official | v2.19.5 | MPL-2.0 | august 2024 |
pygpgo | Official | v0.5.1 | MIT | march 2022 |
pymetaheuristic | Official | v1.9.5 | GNU | april 2024 |
pymoo | Official | v0.6.1.6 | Apache-2.0 | November 26 |
pyopus | Official | v0.9 | GPL V3 | – |
pypesto | Official | v0.5.7 | BSD-3-Clause | november |
pyriad | Official | v0.1.2 | MIT | – |
pysmac | Official | v0.8 | - | march 2018 |
pysot | Official | v0.3.3 | LICENSE.rst | september 2021 |
pyswarms | Official | v1.3.0 | MIT license | june 2023 |
qiskit-optimization | Official | v0.7.0 | Apache-2.0 | november |
rapids-NeurIPS | Official | – | – | december 2020 |
ray | Official | v2.52.1 | Apache 2.0 | December 1 |
rbfopt | Official | v4.3.0 | BSD | march |
rl4co | Official | v0.6.0 | MIT | November 28 |
robo | Official | v0.5.6 | BSD | april 2019 |
safeopt | Official | v0.16 | MIT | april 2020 |
sb-arch-opt | Official | v1.5.5 | MIT | December 1 |
scikit-opt | Official | v0.6.6 | MIT | august |
scikit-optimize | Official | v0.10.2 | BSD 3-clause | october 2021 |
simanneal | Official | v0.5.0 | BSD | november 2020 |
simple | Official | v0.1.1 | GPL | january 2018 |
smt | Official | v2.10.0 | BSD-3 | November 27 |
solidpy | Official | v0.1 | - | september 2017 |
spearmint | Official | v0.0.2 | - | april 2019 |
spotpy | Official | v1.6.6 | MIT | may |
ssb-optimize | Official | v0.1.3 | BSD | october 2019 |
swarm-cg | Official | v1.2.5 | MIT | february 2021 |
swarmlib | Official | v0.14.1 | BSD 3-Clause License | – |
swarmpackagepy | Official | v1.0.0a5 | none | – |
tgo | Official | v0.1 | MIT | november 2017 |
timefold | Official | v1.24.0b0 | Apache License Version 2.0 | December 1 |
turbo-NeurIPS | Official | – | – | january 2021 |
turbo | Official | v0.5.1 | Apache-2.0 | february 2020 |
ultraopt | Official | v0.1.1 | BSD | january 2021 |
yabox | Official | v1.1.0 | Apache License 2.0 | december 2022 |
zoofs | Official | v0.1.26 | Apache License 2.0 | february 2023 |
zoopt | Official | v0.4.2 | MIT License | june 2022 |
MOP Packages
| Package | Link | Version | License | Last commit |
|---|---|---|---|---|
feloopy | Official | v0.3.9 | MIT | November 27 |
hexaly | Official | – | – | – |
moocore | Official | v0.1.10 | LGPL-2.1-or-later | December 1 |
optuna | Official | v4.6.0 | MIT | November 28 |
parmoo | Official | v0.4.1 | BSD 3-clause | august 2024 |
pyaugmecon | Official | v1.0.8 | MIT | february 2024 |
pydecision | Official | v4.8.7 | GNU | november |
pymoo | Official | v0.6.1.6 | Apache-2.0 | November 26 |
pymultiobjective | Official | v1.5.7 | GNU | may |
timefold | Official | v1.24.0b0 | Apache License Version 2.0 | December 1 |
QPP Packages
| Package | Link | Version | License | Last commit |
|---|---|---|---|---|
dwave-optimization | Official | v0.6.9 | Apache-2.0 | November 28 |
qiskit-optimization | Official | v0.0.1 | - | september 2024 |
qiskit-optimization | Official | v0.7.0 | Apache-2.0 | november |
PSP Packages
| Package | Link | Version | License | Last commit |
|---|---|---|---|---|
feloopy | Official | v0.3.9 | MIT | November 27 |
gurobi-optimods | Official | v3.0.0 | Apache-2.0 | November 25 |
idinn | Official | v0.2.0.post1 | MIT | september |
optimization-algorithms | Official | – | – | july 2021 |
pyvroom | Official | v1.14.0 | BSD 2-Clause License | march |
pyvrp | Official | – | – | November 28 |
qubots | Official | – | – | august |
routeopt | Official | - | - | october |
spopt | Official | v0.7.0 | BSD 3-Clause | November 28 |
DWP Packages
| Benchmark | Link | Version | License | Last commit |
|---|---|---|---|---|
feloopy | Official | v0.3.9 | MIT | November 27 |
nextmv-py | Official | - | - | November 26 |
nextpipe | Official | v0.4.0 | - | november |
UP Packages
| Benchmark | Link | Version | License | Last commit |
|---|---|---|---|---|
feloopy | Official | v0.3.9 | MIT | November 27 |
insideopt-seeker | Official | v0.1.24 | - | - |
ropy | Official | - | - | march 2022 |
rsome | Official | v1.3.1 | GPL-3.0 | november 2024 |
Benchmarking Packages
| Benchmark | Link | Version | License | Last commit |
|---|---|---|---|---|
benchopt | Official | v1.7.0 | BSD (3-clause) | november |
feloopy | Official | v0.3.9 | MIT | November 27 |
humpday | Official | v0.7.1 | MIT | february |
pycutest | Official | v1.7.2 | GPL-3.0-or-later | july |
qubots | Official | v1.1.6 | Apache-2.0 | august |
| Mittelmann | Official | – | – | – |
Short replies get read more often.