Skip to main content

Inverse Optimization with Python

Project description

InvOpt: Inverse Optimization with Python

InvOpt is an open-source Python package for solving Inverse Optimization (IO) problems. In IO problems, our goal is to model the behavior of an expert agent, which given an exogenous signal, returns a response action. The underlying assumption of IO is that to compute its response, the expert agent solves an optimization problem parametric in an exogenous signal. We assume to know the constraints imposed on the expert, but not its cost function. Therefore, using examples of exogenous signals and corresponding expert response actions, our goal is to model the cost function being optimized by the expert. More concretely, given a dataset $\mathcal{D} = \{(\hat{s}_ i, \hat{x}_ i)\}_ {i=1}^N$ of exogenous signals $\hat{s}_ i$ and the respective expert's response $\hat{x}_ i$, feature mapping $\phi$, our goal is to find a cost vector $\theta \in \mathbb{R}^p$ such that a minimizer $x_ i$ of the Forward Optimization Problem (FOP)

$$ x_i \in \arg\min_ {x \in \mathbb{X}(\hat{s}_ i)} \ \langle \theta,\phi(\hat{s}_ i,x) \rangle $$

reproduces (or in some sense approximates) the expert's action $\hat{x}_ i$. For a more detailed description of IO problems and their modeling, please refer to Zattoni Scroccaro et al. (2023) and the references therein.

Installation

pip install invopt

InvOpt depends on numpy. Moreover, some of its functions also depend on gurobipy or cvxpy. You can get a free academic license for Gurobi here.

Usage and examples

The following functions are available in the InvOpt package:

  • discrete_consistent: for FOPs with discrete decision spaces (e.g., binary), and when the dataset is consistent with some cost vector. Can be used to check if the data is consistent.
  • discrete: for FOPs with dicrete decision spaces (e.g., binary).
  • continuous_linear: for continuous, linear FOPs.
  • continuous_quadratic: for continuous, quadratic FOPs.
  • mixed_integer_linear: for FOPs with mixed-integer decision spaces and cost functions linear w.r.t. the continuous part of the decision variable.
  • mixed_integer_quadratic: for FOPs with mixed-integer decision spaces and cost functions quadratic w.r.t. the continuous part of the decision variable.
  • FOM: for general FOPs. Solves IO problem approximately using first-order methods.

Contributing

Contributions, pull requests and suggestions are very much welcome. The TODO file contains some ideas to possibly improve the InvOpt package.

Citing

If you use InvOpt for research, please cite our accompanying paper:

@article{zattoniscroccaro2023learning,
  title={Learning in Inverse Optimization: Incenter Cost, Augmented Suboptimality Loss, and Algorithms},
  author={Zattoni Scroccaro, Pedro and Atasoy, Bilge and Mohajerin Esfahani, Peyman},
  journal={https://arxiv.org/abs/2305.07730},
  year={2023}
}

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

invopt-0.0.6.tar.gz (15.5 kB view details)

Uploaded Source

Built Distribution

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

invopt-0.0.6-py3-none-any.whl (13.8 kB view details)

Uploaded Python 3

File details

Details for the file invopt-0.0.6.tar.gz.

File metadata

  • Download URL: invopt-0.0.6.tar.gz
  • Upload date:
  • Size: 15.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.12.1

File hashes

Hashes for invopt-0.0.6.tar.gz
Algorithm Hash digest
SHA256 2efdca121822bd4017a62067d20ad06ed9927c8c4c3191255f38fc1292767c96
MD5 fb28376c92b5d1543f78840edc5b6a48
BLAKE2b-256 c8950aaac7c50f01728daacf71e13983c8143c6e77840a929b162f5d15cefef3

See more details on using hashes here.

File details

Details for the file invopt-0.0.6-py3-none-any.whl.

File metadata

  • Download URL: invopt-0.0.6-py3-none-any.whl
  • Upload date:
  • Size: 13.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.12.1

File hashes

Hashes for invopt-0.0.6-py3-none-any.whl
Algorithm Hash digest
SHA256 b4a6a2abf7f0c08520d57f8d6d91b035de5b1674e5235ecb81f8a25131f43535
MD5 bfb3652aa2bd7a7a01dfcac9dcf6537f
BLAKE2b-256 05085edf43a1292a9c8fc8efdef043b9c783f0950707fea5546eca715b363863

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