# DiffOpt.jl

DiffOpt.jl is a package for differentiating convex optimization program (JuMP.jl or MathOptInterface.jl models) with respect to program parameters. Note that this package does not contain any solver. This package has two major backends, available via backward and forward methods, to differentiate models (quadratic or conic) with optimal solutions.

Note

Currently supports linear programs (LP), convex quadratic programs (QP) and convex conic programs (SDP, SOCP constraints only).

## Installation

DiffOpt can be installed through the Julia package manager:

(v1.3) pkg> add https://github.com/jump-dev/DiffOpt.jl

## Why are Differentiable optimization problems important?

Differentiable optimization is a promising field of convex optimization and has many potential applications in game theory, control theory and machine learning (specifically deep learning - refer this video for more). Recent work has shown how to differentiate specific subclasses of convex optimization problems. But several applications remain unexplored (refer section 8 of this really good thesis). With the help of automatic differentiation, differentiable optimization can have a significant impact on creating end-to-end differentiable systems to model neural networks, stochastic processes, or a game.

## Contributing

Contributions to this package are more than welcome, if you find a bug or have any suggestions for the documentation please post it on the github issue tracker.

When contributing please note that the package follows the JuMP style guide