ompr Fundamentals

This document is prepared as both a quick introduction and future reference (or cheat sheet) for the ompr package. Full documentation can be found in here.

Model building

In ompr, we start by defining the model with MIPModel(). Then we will append a combination of the below commands with either one of the pipes %>% or |> (for the sake of consistency we will use only one pipe type in a single code block).

  • add_variable is used to add the variables. Its properties are type (“continuous”,“binary” or “integer”), ub (upper bound), lb (lower bound). It is possible to add index to the variable. (see reference)

    • For instance, add_variable(x[i],i=1:10) will create a set of 10 decision variables.
    • It is also possible to have multiple dimensions. add_variable(x[i,j],i=1:10, j=1:3) will create a set of 30 decision variables.
  • add_constraint is used to add constraints. It is possible to add expressions directly (e.g., 2x + y <= 5). It is also possible to add indices for repetitions of the constraint. (see reference)

  • set_objective is used to set the objective function and its direction (or sense). Objective function can be directly written as an expression. Sense should be either "max" or "min". (see reference)

Solving

After defining the model we solve the model with solve_model() command. We can define a solver. In this document, we will use HiGHS solver. Therefore command will be solve_model(with_ROI(solver = "highs",verbose=TRUE)) most of the time.

Getting results

If the model is run successfully we will get a response. Let’s assume we store model response in model_obj variable. Then we will be able to query the model for results.

  • model_obj |> solver_status() will return “infeasible”, “optimal/success”, “unbounded”, “userlimit” or “error” (see reference)

  • model_obj |> get_solution(x1) will get the value of x1. (see reference)

  • model_obj |> objective_value() will get the objective function value. (see reference)