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 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

ez_optimize-0.1.1.tar.gz (13.3 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.1.1-py3-none-any.whl (11.8 kB view details)

Uploaded Python 3

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

Hashes for ez_optimize-0.1.1.tar.gz
Algorithm Hash digest
SHA256 4de3470e12109bc36218b6e41e550b1780e8afbde956962fce571e2aa4c6c5d5
MD5 82155e4f4e0fd60aaef795aa5f2587d2
BLAKE2b-256 fbba152f9ad0a901a14a64ee2f699daade490b9bb46597eab90a5b0c8f6e56ba

See more details on using hashes here.

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

Hashes for ez_optimize-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 fc3389427f2a084d8f27c61df3157ec4d32733aecd91c2d70a63b25fe86ece22
MD5 510edc26d33364ce2ff55b60b95dcc58
BLAKE2b-256 e13dde0420ae8eba4a8322ad40082a69dfbce61788523cb9866466e1edb1bfda

See more details on using hashes here.

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