# Gurobi¶

Gurobi is a powerful commercial suite of optimization products, which includes simplex and parallel barrier solvers to handle linear programming (LP) and quadratic programming (QP), also quadratically constrained (QCP, SOCP) and the mixed-integer variations thereof (MIP, MIQP, MIQCP, MISOCP). It also supports some types of general constraints, this addressing MINLP. The framework used by the driver supports automatic reformulation for many expression types; the modeling guide can be found here.

[Read More] [Modeling guide] [Options] [Changes] [Download Gurobi]

Our enhanced Gurobi driver (previously know as x-gurobi) is now the default Gurobi driver. The new driver provides significantly extended modeling support for logical and nonlinear operators natively through Gurobi’s built-in “general constraints” and through linearizations performed by the MP library. There are two binaries in this package: `gurobi`

[options] is the new version, `gurobiasl`

[options] is the legacy version. If you are upgrading an existing installation and encounter any issues with the new version please report them to support@ampl.com.

## How to use it¶

```
ampl: option solver gurobi; # change the solver
ampl: option gurobi_options 'option1=value1 option2=value2'; # specify options
ampl: solve; # solve the problem
```

How to install using amplpy:

```
# Install Python API for AMPL:
$ python -m pip install amplpy --upgrade
# Install AMPL & solver modules:
$ python -m amplpy.modules install gurobi # install Gurobi
# Activate your license (e.g., free ampl.com/ce or ampl.com/courses licenses):
$ python -m amplpy.modules activate <your-license-uuid>
```

How to use:

```
from amplpy import AMPL
ampl = AMPL()
...
ampl.solve(solver="gurobi", gurobi_options="option1=value1 option2=value2")
```

Learn more about what we have to offer to implement and deploy Optimization in Python.

## At a glance¶

### Resources¶

### Features¶

Problem types:

LP, QP, QCP, SOCP

MIP, MIQP, MIQCP, MISOCP, MINLP

## General constraints

log / exp

min / max

and / or

abs

sin/cos/tan

norm

Features for all models:

Problem input

Model investigation

Dealing with infeasibility/unboundedness

Features for MIP models:

Model investigation

Solution process:

## Solver options¶

Full list of solver options:

Many solver parameters can be changed directly from AMPL, by specifying them as a space separated string in the option `gurobi_options`

.
A list of all supported options is available here or can be obtained by executing the solver driver with the `-=`

command line parameter:

```
gurobi -=
```

or from AMPL:

```
shell "gurobi -=";
```

Solver options can have multiple aliases, to accomodate for different user types.
The main numenclature is given first in the -= output, then followed by aliases in brackets,
see for example the listing for `lim:iter`

:

```
lim:iter (iterlim, iterlimit)
Iteration limit (default: no limit).
```

The main numenclature contains a prefix (`lim:`

in this case) to help categorize and find the
options relevant to a context. To list only the options with a specific prefix (`lim:`

for this example),
run:

```
gurobi -=lim:
```

More details on solver options: Features guide.

## Specifying solver options and solving a model¶

After formulating the model in AMPL, execute the following to select gurobi as solver and pass the two options:
`return_mipgap=3`

and `outlev=1`

.

```
option solver gurobi;
option gurobi_options "retmipgap=3 outlev=1";
solve;
```

## Retrieving solutions¶

The outcome of the last optimization is stored in the AMPL parameter `solve_result_num`

and the relative message in
`solve_result`

.

```
display solve_result_num, solve_result;
```

Gurobi solve result codes can be obtained by running `gurobi -!`

or `ampl: shell "gurobi -!";`

:

```
0- 99 solved: optimal for an optimization problem, feasible for a satisfaction problem
100-199 solved? solution candidate returned but error likely
150 solved? MP solution check failed (option sol:chk:fail)
200-299 infeasible
300-349 unbounded, feasible solution returned
350-399 unbounded, no feasible solution returned
400-449 limit, feasible: stopped, e.g., on iterations or Ctrl-C
401 interrupted, feasible solution
402 time limit, feasible solution
403 iteration limit, feasible solution
404 node limit, feasible solution
405 bestobjstop or bestbndstop reached, feasible solution
408 solution limit
409 work limit, feasible solution
410 soft memory limit, feasible solution
450-469 limit, problem is either infeasible or unbounded
470-499 limit, no solution returned
471 interrupted, without a feasible solution
472 time limit, without a feasible solution
473 iteration limit, without a feasible soluton
474 node limit, without a feasible soluton
475 objective cutoff
477 bestbndstop reached, without a feasible solution
479 work limit, without a feasible solution
480 soft memory limit, without a feasible solution
500-999 failure, no solution returned
550 failure: numeric issue, no feasible solution
601 Could not talk to Gurobi Instant Cloud or Gurobi Server.
602 Job rejected by Gurobi Instant Cloud or Gurobi Server.
603 No license for specified Gurobi Instant Cloud or Gurobi Server.
604 Surprise failure while starting the cloud/server environment.
605 Bad value for cloudid or cloudkey, or Gurobi Cloud out of reach.
```

For general information, see MP result codes guide.

## Handling infeasibility¶

### IIS¶

When a model is unfeasible, one usedful information is finding the irreducible inconsistent sets, which are subsets of constraints that are incompatible. This is supported by the framework, see the description here.

### Feasibility Relaxation¶

Another approach to tackle infeasibilities is to use feasibility relaxation to find a solution which only penalizes infeasibilities. This is supported via the framework, see the description here.

## Gurobi compute server and Gurobi cloud¶

Gurobi supports solving your model on other machines in two alternative ways:

Compute server - where a computer (or a cluster) can be configured to the specific task of solving models via gurobi

Gurobi cloud - where the compute server is by Gurobi itself

To use a compute server, the option `tech:server`

must be set, together with appropriate values for the `tech:server_*`

options.
For gurobi instant cloud, the options `tech:cloudid`

and `tech:cloudkey`

must be set, and optionally the other options `tech:cloud*`

, for example:

```
# Solve with compute server
option gurobi_options "tech:server=192.168.1.55";
solve;
# Solve with gurobi instant cloud
option gurobi_options "tech:cloudid=mygurobiid tech:cloudkey=myprivatekey";
solve;
```

## Changelog¶

- GUROBI Changelog
- 20240327
- 20240320
- 20240311
- 20240310
- 20240115
- 20231208
- 20231206
- 20231117
- 20231103
- 20231017
- 20230920
- 20230919
- 20230831
- 20230817
- 20230728
- 20230726
- 20230724
- 20230625
- 20230621
- 20230616
- 20230531
- 20230522
- 20230426
- 20230330
- 20230321
- 20230207
- 20230206
- 20221228
- 20221222
- 20221211
- 20221113
- 20221012
- 20220928
- 20220802
- 20220725
- 20220720
- 20220706
- 20220511
- 20220408
- 20220303
- 20220217
- 20220202
- 20220128