Raw File
```@meta
CurrentModule = DataEnvelopmentAnalysis
DocTestSetup = quote
    using DataEnvelopmentAnalysis
end
```

# Configuring the optimizer

DataEnvelopmentAnalysis.jl will use a default optimizer/solver for each DEA model, as shown in the next table.

| Function       | Specific Options | Problem type | Default Optimizer |
| ---------------|--------:|------------:|------------------:| 
| `dea`          |         | LP           | GLPK              |
| `deabigdata`   |         | LP           | GLPK              |
| `deaddf`       |         | LP           | GLPK              |
| `deaadd`       |         | LP           | GLPK              |
| `deagdf`       |         | NLP          | Ipopt             |
| `dearussell`   | `:Input` or `:Output`        | LP           | GLPK              |
| `dearussell`   | `:Graph`        | NLP     | Ipopt      |
| `deaerg`       |         | LP           | GLPK              |
| `deamddf`      |         | LP           | GLPK              |
| `deaholder`    | `l = 1` | LP           | GLPK              |
| `deaholder`    | `l = 2` | QP           |                   |
| `deaholder`    |`l = Inf`| LP           | GLPK              |
| `dearddf`      | `:ERG`  | LP           | GLPK              |
| `dearddf`      | `:MDDF` | LP           | GLPK              |
| `deacost`      |         | LP           | GLPK              |
| `dearevenue`   |         | LP           | GLPK              |
| `deaprofit`    |         | LP           | GLPK              |
| `deaprofitability` |         | NLP          | Ipopt         |
| `malmquist`    |          |LP           | GLPK              |


Where:
- LP = Linear programming.
- NLP = Nonlinear programming.
- QP = Quadratic programming.

Models can be solved using a different optimizer by passing a `DEAOptimizer` object to the `optimizer` optional argument. See [JuMP documentation](https://jump.dev/JuMP.jl/v0.21.6/installation/#Installing-a-solver) for a list of all available solvers.

!!! warning "Choose a valid optimizer"
    The optimizer must support the problem type of the DEA model.

    For example, you cannot solve a Generalized Distance Function DEA model using the GLPK solver because it is a linear programming solver and `deagdf` requires a nonlinear programming solver.

The following is an example of solving the radial DEA model using the `Ipopt` sovler:
```jldoctest
julia> using Ipopt

julia> using DataEnvelopmentAnalysis

julia> X = [5 13; 16 12; 16 26; 17 15; 18 14; 23 6; 25 10; 27 22; 37 14; 42 25; 5 17];

julia> Y = [12; 14; 25; 26; 8; 9; 27; 30; 31; 26; 12];

julia> myoptimizer = DEAOptimizer(Ipopt.Optimizer, time_limit = 10, silent = true);

julia> dea(X, Y, slack = false, optimizer = myoptimizer)
Radial DEA Model 
DMUs = 11; Inputs = 2; Outputs = 1
Orientation = Input; Returns to Scale = CRS
──────────────
    efficiency
──────────────
1     1.0
2     0.62229
3     0.819856
4     1.0
5     0.310371
6     0.555555
7     1.0
8     0.757669
9     0.820106
10    0.490566
11    1.0
──────────────
```

### Optimizer API

```@docs
DEAOptimizer
newdeamodel
```
back to top