Crate grb[−][src]
This crate provides Rust bindings for Gurobi Optimizer. It currently requires Gurobi 9.0 or higher.
Installing
-
Before using this crate, you should install Gurobi and obtain a license.
-
Make sure that the environment variable
GUROBI_HOME
is set to the installation path of Gurobi (likeC:\gurobi652\win64
or/opt/gurobi652/linux64
). If you are using the Conda package from the Gurobi channel, the build script will fall back toGUROBI_HOME=${CONDA_PREFIX}
, so you should not setGUROBI_HOME
.
Quick Start
The example below sets up and solves a MIP. Additional examples covering the more specific aspects of this crate's API can be found here.
The documention for Model
contains most of the details for defining, solving and querying models.
use grb::prelude::*; let mut model = Model::new("model1")?; // add decision variables with no bounds let x1 = add_ctsvar!(model, name: "x1", bounds: ..)?; let x2 = add_intvar!(model, name: "x2", bounds: ..)?; // add linear constraints let c0 = model.add_constr("c0", c!(x1 + 2*x2 >= -14))?; let c1 = model.add_constr("c1", c!(-4 * x1 - x2 <= -33))?; let c2 = model.add_constr("c2", c!(2* x1 <= 20 - x2))?; // model is lazily updated by default assert_eq!(model.get_obj_attr(attr::VarName, &x1).unwrap_err(), grb::Error::ModelObjectPending); assert_eq!(model.get_attr(attr::IsMIP)?, 0); // set the objective function, which updates the model objects (variables and constraints). // One could also call `model.update()` model.set_objective(8*x1 + x2, Minimize)?; assert_eq!(model.get_obj_attr(attr::VarName, &x1)?, "x1"); assert_eq!(model.get_attr(attr::IsMIP)?, 1); // write model to the file. model.write("model.lp")?; // optimize the model model.optimize()?; assert_eq!(model.status()?, Status::Optimal); // Querying a model attribute assert_eq!(model.get_attr(attr::ObjVal)? , 59.0); // Querying a model object attributes assert_eq!(model.get_obj_attr(attr::Slack, &c0)?, -34.5); let x1_name = model.get_obj_attr(attr::VarName, &x1)?; // Querying an attribute for multiple model objects let val = model.get_obj_attr_batch(attr::X, vec![x1, x2])?; assert_eq!(val, [6.5, 7.0]); // Querying variables by name assert_eq!(model.get_var_by_name(&x1_name)?, Some(x1));
Errors
Due to the nature of C APIs, almost every Gurobi routine can return an error. Unless otherwise stated,
if a method or function returns a Result
, the error will be Error::FromAPI
.
Re-exports
pub use attribute::attr; |
pub use expr::Expr; |
pub use parameter::param; |
Modules
attribute | Gurobi Attributes for models, constraints and variables. |
callback | Interface to Gurobi's callback API |
constr | This module contains the structs passed to the |
expr | Algebraic expressions involving variables used to construct constraints and a helper trait for pretty-printing. |
parameter | Gurobi parameters for |
prelude | Most commonly used items from this crate bundled for convenient import. |
Macros
add_binvar | Equivalent to calling |
add_ctsvar | Equivalent to calling |
add_intvar | Equivalent to calling |
add_var | Convienence wrapper around |
c | A proc-macro for creating constraint objects. |
Structs
AsyncHandle | A handle to an |
AsyncModel | A wrapper around |
Constr | A linear constraint added to a |
EmptyEnv | Gurobi environment object (see the Gurobi manual)
A Gurobi environment which hasn't been started yet. Some Gurobi parameters,
such as |
Env | A Gurobi Environment object. |
Model | Gurobi Model object. |
QConstr | A quadratic constraint added to a |
SOS | An SOS constraint added to a |
Var | A Gurobi variable. |
Enums
ConstrSense | Sense for new linear/quadratic constraint |
Error | The error type for operations in Gurobi Rust API |
ModelSense | Sense of objective function, aka direction of optimisation. |
RelaxType | Type of cost function at feasibility relaxation |
SOSType | Type of SOS constraint |
Status | Status of a model |
VarType | Gurobi variable types (see manual) |
Constants
INFINITY | A large constant used by Gurobi to represent numeric infinity. |
Traits
ModelObject | This trait encompasses all Gurobi model objects: |
Functions
version | Returns the version number of Gurobi |
Type Definitions
Result | A specialized |