Skip to main content

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 your 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 physical systems like aerospace or energy simulations 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 negate 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

from ez_optimize import minimize

def rosenbrock_2d(x, y, a=1, b=100):
    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 wrapper for Manual Control

For more control, use the OptimizationProblem class directly. This also serves as a look under the hood for how ez-optimize 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

Fundamentals?

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 curvature to be represented in a Hessian matrix. However, this 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

ez_optimize-0.2.0.tar.gz (20.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

ez_optimize-0.2.0-py3-none-any.whl (12.6 kB view details)

Uploaded Python 3

File details

Details for the file ez_optimize-0.2.0.tar.gz.

File metadata

  • Download URL: ez_optimize-0.2.0.tar.gz
  • Upload date:
  • Size: 20.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for ez_optimize-0.2.0.tar.gz
Algorithm Hash digest
SHA256 dedb98aff6927c0269a335f8b4b86faf0670c97e11e8ba48d5cdc20c57d301d9
MD5 7fd014ba3bfe14d4effaa29fe9bb7597
BLAKE2b-256 e03e6d6a7831202c4a2b29ca8a0490817f78fa7e80e62971251fd03b26be381d

See more details on using hashes here.

Provenance

The following attestation bundles were made for ez_optimize-0.2.0.tar.gz:

Publisher: release-please.yml on qthedoc/ez-optimize

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file ez_optimize-0.2.0-py3-none-any.whl.

File metadata

  • Download URL: ez_optimize-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 12.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for ez_optimize-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 387d7387f31609b5836f4b601daa533c684db0534cccb2e19c22d614be0fdd4a
MD5 d4e813d82aeb6b904c33882b110eadc4
BLAKE2b-256 b536d2a73f97aadd6ace8496a63260736aefdf9db009d9dc8f75f50e72fde5a2

See more details on using hashes here.

Provenance

The following attestation bundles were made for ez_optimize-0.2.0-py3-none-any.whl:

Publisher: release-please.yml on qthedoc/ez-optimize

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page