A more intuitive front-end for scipy.optimize with keyword params x0={'x': 1, 'y': 2} and more
Project description
ez-optimize
Author: Quinn Marsh
GitHub: https://github.com/qthedoc/ez-optimize/
PyPI: https://pypi.org/project/ez-optimize/
ez-optimize is a more intuitive front-end for scipy.optimize that simplifies optimization with features like:
- keyword-based parameter definitions (e.g.,
x0={'x': 1, 'y': 2}) - easy switching between minimization and maximization (
direction='max')
ez-optimize is the Ironman suit for optimization.
Why ez-optimize?
1. Keyword-Based Optimization (e.g.: x0={'x': 1, 'y': 2})
By default, optimization uses arrays x0=[1, 2]. However sometimes it's more intuitive to use named parameters x0={'x': 1, 'y': 2}. ez-optimize allows you to define parameters as dictionaries. Then under the hood, ez-optimize automatically flattens parameters (and wraps your function) for SciPy while restoring the original structure in results. Keyword-based optimization is especially useful in complex systems like aerospace or energy models where parameters have meaningful names representing physical quantities.
2. Switch to Maximize with direction='max'
By default, optimization minimizes the objective function. To maximize, you typically need to write a negated version of your function. With ez-optimize, simply set direction='max' and the library will automatically negates your function under the hood.
Quick Start
Install:
pip install ez-optimize
Full set of examples: examples.ipynb*
*This is currently the main form of documentation.
Example 1: Minimizing with Keyword-Based Parameters
import numpy as np
from ez_optimize import minimize
def rosenbrock_2d(x, y, a, b):
return (a - x)**2 + b * (y - x**2)**2
x0 = {'x': 1.3, 'y': 0.7}
result = minimize(rosenbrock_2d, x0, method='BFGS')
print(f"Optimal x: {result.x}")
print(f"Optimal value: {result.fun}")
Optimal x: {'x': 1.0, 'y': 1.0}
Optimal value: 0.0
Example 2: Using OptimizationProblem for Advanced Manual Control
For more control, use the OptimizationProblem class directly. This also serves as a look under the hood for how minimize works.:
from ez_optimize import OptimizationProblem
from scipy.optimize import minimize as scipy_minimize
def objective(a, b, c):
return a**2 + b**2 + c**2
x0 = {'a': 1.0, 'b': 2.0, 'c': 3.0}
bounds = {'a': (0, 5), 'b': (0, 5), 'c': (0, 5)}
# Define the optimization problem
problem = OptimizationProblem(objective, x0, method='SLSQP', bounds=bounds)
# Run SciPy method directly, passing in the arguments prepared by the OptimizationProblem
scipy_result = scipy_minimize(**problem.scipy.get_minimize_args())
# Use the OptimizationProblem to interpret the result back into our structured format
result = problem.scipy.interpret_result(scipy_result)
print(f"Optimal parameters: {result.x}")
print(f"Optimal value: {result.fun}")
Optimal parameters: {'a': 0.0, 'b': 0.0, 'c': 0.0}
Optimal value: 0.0
Fundumentally Why?
Lets be honest, there is good reason optimization typically uses arrays and always minimizes... it makes the math simple and efficient. For example, optimizing in a vector space allows the hessian to be represented as a matrix. However, this level of optimization isn't always necessary like with black-box functions that have no gradient or hessian. In those cases, the convenience of defining keyword-based parameters and easy switching between min/max can outweigh the mathematical perfection of array-based optimization.
Acknowledgments
Inspired by better_optimize by Jesse Grabowski, licensed under MIT.
Contributing
Contributions Welcome! Report bugs, request features, or improve documentation via GitHub issues or pull requests.
Project details
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 ez_optimize-0.1.1.tar.gz.
File metadata
- Download URL: ez_optimize-0.1.1.tar.gz
- Upload date:
- Size: 13.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4de3470e12109bc36218b6e41e550b1780e8afbde956962fce571e2aa4c6c5d5
|
|
| MD5 |
82155e4f4e0fd60aaef795aa5f2587d2
|
|
| BLAKE2b-256 |
fbba152f9ad0a901a14a64ee2f699daade490b9bb46597eab90a5b0c8f6e56ba
|
File details
Details for the file ez_optimize-0.1.1-py3-none-any.whl.
File metadata
- Download URL: ez_optimize-0.1.1-py3-none-any.whl
- Upload date:
- Size: 11.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
fc3389427f2a084d8f27c61df3157ec4d32733aecd91c2d70a63b25fe86ece22
|
|
| MD5 |
510edc26d33364ce2ff55b60b95dcc58
|
|
| BLAKE2b-256 |
e13dde0420ae8eba4a8322ad40082a69dfbce61788523cb9866466e1edb1bfda
|