Gurobi Optimizer

Gurobi Optimizer is a commercial optimizing library.

License

Aalto University has a site-wide floating license for Gurobi.

Important notes

As of writing of this Guide, Aalto only has a valid license for Gurobi 9.X and older. Therefore Gurobi 10 cannot be run on triton unless you bring your own license.

Gurobi with Python

Package names

Unfortunately the python gurobi packages installed via pip and via conda come with two distinct package names gurobi for the anaconda package and gurobipy for the pip package. Normally, we install the guobi package in the anaconda environment, but there are some anaconda modules which have the gurobipy package. So you might need to select the correct package.

License Files for older Anaconda modules

Older anaconda modules on Triton might not have the GRB_LICENSE_FILE environment variable set properly, so you might need to point to it manually. To do so, you need to create a gurobi.lic file in your home folder. The file should contain the following single line:

TOKENSERVER=lic-gurobi.aalto.fi

You can create this license file with the following command on the login node:

echo "TOKENSERVER=lic-gurobi.aalto.fi" > ~/gurobi.lic

The license is an Educational Institution Site License:

Free Academic License Requirements, Gurobi Academic Licenses: Can only be used by faculty, students, or staff of a recognized degree-granting academic institution. Can be used for: Research or educational purposes. Consulting projects with industry – provided that approval from Gurobi has been granted.

After setting the license, one can run, for example:

module load anaconda
python

And then run the following script

import gurobipy as gp
# Depending on your anaconda version you
# might need gurobi instead of gurobipy

# Create a new model
m = gp.Model()

# Create variables
x = m.addVar(vtype='B', name="x")
y = m.addVar(vtype='B', name="y")
z = m.addVar(vtype='B', name="z")

# Set objective function
m.setObjective(x + y + 2 * z, gp.GRB.MAXIMIZE)

# Add constraints
m.addConstr(x + 2 * y + 3 * z <= 4)
m.addConstr(x + y >= 1)

# Solve it!
m.optimize()

print(f"Optimal objective value: {m.objVal}")
print(f"Solution values: x={x.X}, y={y.X}, z={z.X}")

Gurobi with Julia

For Julia there exists a package called Gurobi.jl that provides an interface to Gurobi. This package needs Gurobi C libraries so that it can run. The easiest way of obtaining these libraries is to load the anaconda-module and use the same libraries that the Python API uses.

To install Gurobi.jl, one can use the following commands:

module load gurobi/9.5.2
module load julia
julia

After this, in the julia-shell, install Gurobi.jl with:

using Pkg
Pkg.add("Gurobi")
Pkg.build("Gurobi")

# Test installation
using Gurobi
Gurobi.Optimizer()

Before using the package do note the recommendations from Gurobi.jl’ GitHub-page regarding the use of JuMP.jl and the reuse of environments.

Gurobi with any other language supported by gurobi

For other languages supported by gurobi (like MATLAB, R or C/C++) use

module load gurobi/9.5.2

to load gurobi version 9.5.2 and then follow the instructions from the gurobi web-page. All global variables necessary for gurobi are already set, so you don’t need any further configuration