| Title: | Interface to the SCIP Optimization Suite |
|---|---|
| Description: | Provides an R interface to SCIP (Solving Constraint Integer Programs), a framework for mixed-integer programming (MIP), mixed-integer nonlinear programming (MINLP), and constraint integer programming (2025, <doi:10.48550/arXiv.2511.18580>). Supports linear, quadratic, SOS, indicator, and knapsack constraints with continuous, binary, and integer variables. Includes a one-shot solver interface and a model-building API for incremental problem construction. |
| Authors: | Balasubramanian Narasimhan [aut, cre] (ORCID: <https://orcid.org/0000-0001-5852-7639>), SCIP Optimization Suite Authors [cph] (SCIP, SoPlex, PaPILO libraries) |
| Maintainer: | Balasubramanian Narasimhan <[email protected]> |
| License: | Apache License (>= 2) |
| Version: | 1.10.0-3 |
| Built: | 2026-05-08 09:15:02 UTC |
| Source: | https://github.com/bnaras/scip |
Print method for scip_control objects
## S3 method for class 'scip_control' print(x, ...)## S3 method for class 'scip_control' print(x, ...)
x |
A |
... |
Ignored. |
Invisible x.
If binvar = 1 then sum(coefs * x[vars]) <= rhs.
scip_add_indicator_cons(model, binvar, vars, coefs, rhs, name = NULL)scip_add_indicator_cons(model, binvar, vars, coefs, rhs, name = NULL)
model |
A SCIP model. |
binvar |
Integer; 1-based index of the binary indicator variable. |
vars |
Integer vector; 1-based variable indices. |
coefs |
Numeric vector; coefficients. |
rhs |
Numeric; right-hand side. |
name |
Character; constraint name. |
Integer; 1-based constraint index.
Adds lhs <= sum(coefs * x[vars]) <= rhs.
scip_add_linear_cons(model, vars, coefs, lhs = -Inf, rhs = Inf, name = NULL)scip_add_linear_cons(model, vars, coefs, lhs = -Inf, rhs = Inf, name = NULL)
model |
A SCIP model. |
vars |
Integer vector; 1-based variable indices. |
coefs |
Numeric vector; coefficients (same length as |
lhs |
Numeric; left-hand side. Default |
rhs |
Numeric; right-hand side. Default |
name |
Character; constraint name. Default auto-generated. |
Integer; 1-based constraint index.
Adds lhs <= linexpr + quadexpr <= rhs where
quadexpr = sum(quadcoefs[k] * x[quadvars1[k]] * x[quadvars2[k]]).
scip_add_quadratic_cons( model, linvars = integer(0), lincoefs = double(0), quadvars1 = integer(0), quadvars2 = integer(0), quadcoefs = double(0), lhs = -Inf, rhs = Inf, name = NULL )scip_add_quadratic_cons( model, linvars = integer(0), lincoefs = double(0), quadvars1 = integer(0), quadvars2 = integer(0), quadcoefs = double(0), lhs = -Inf, rhs = Inf, name = NULL )
model |
A SCIP model. |
linvars |
Integer vector; 1-based variable indices for linear part. |
lincoefs |
Numeric vector; linear coefficients. |
quadvars1, quadvars2
|
Integer vectors; 1-based variable indices for quadratic terms. |
quadcoefs |
Numeric vector; quadratic coefficients. |
lhs, rhs
|
Numeric; constraint bounds. |
name |
Character; constraint name. |
Integer; 1-based constraint index.
At most one variable in the set can be nonzero.
scip_add_sos1_cons(model, vars, weights = NULL, name = NULL)scip_add_sos1_cons(model, vars, weights = NULL, name = NULL)
model |
A SCIP model. |
vars |
Integer vector; 1-based variable indices. |
weights |
Numeric vector; weights determining branching order. |
name |
Character; constraint name. |
Integer; 1-based constraint index.
At most two adjacent variables in the set can be nonzero.
scip_add_sos2_cons(model, vars, weights = NULL, name = NULL)scip_add_sos2_cons(model, vars, weights = NULL, name = NULL)
model |
A SCIP model. |
vars |
Integer vector; 1-based variable indices. |
weights |
Numeric vector; weights determining adjacency order. |
name |
Character; constraint name. |
Integer; 1-based constraint index.
Add a variable to a SCIP model
scip_add_var(model, obj, lb = 0, ub = Inf, vtype = "C", name = NULL)scip_add_var(model, obj, lb = 0, ub = Inf, vtype = "C", name = NULL)
model |
A SCIP model (external pointer from |
obj |
Numeric; objective coefficient. |
lb |
Numeric; lower bound. Default |
ub |
Numeric; upper bound. Default |
vtype |
Character; variable type: |
name |
Character; variable name. Default auto-generated. |
Integer; 1-based variable index.
Add multiple variables to a SCIP model
scip_add_vars(model, obj, lb = 0, ub = Inf, vtype = "C", names = NULL)scip_add_vars(model, obj, lb = 0, ub = Inf, vtype = "C", names = NULL)
model |
A SCIP model. |
obj |
Numeric vector; objective coefficients. |
lb |
Numeric; lower bounds (scalar or vector). Default |
ub |
Numeric; upper bounds (scalar or vector). Default |
vtype |
Character; variable types (scalar or vector). Default |
names |
Character vector; variable names. Default auto-generated. |
Integer; 1-based index of first variable added.
Create a list of control parameters for the SCIP solver. Parameters are
organized into logical groups: output, limits, tolerances, presolving,
LP, branching, and heuristics. Any SCIP parameter can also be set directly
using its native path via ....
scip_control( verbose = TRUE, verbosity_level = 3L, display_freq = 100L, time_limit = Inf, node_limit = -1L, stall_node_limit = -1L, sol_limit = -1L, best_sol_limit = -1L, mem_limit = Inf, restart_limit = -1L, gap_limit = 0, abs_gap_limit = 0, feastol = 1e-06, dualfeastol = 1e-07, epsilon = 1e-09, presolving = TRUE, presolve_rounds = -1L, lp_threads = 1L, lp_iteration_limit = -1L, lp_scaling = TRUE, branching_score = "p", heuristics_emphasis = "default", threads = 1L, ... )scip_control( verbose = TRUE, verbosity_level = 3L, display_freq = 100L, time_limit = Inf, node_limit = -1L, stall_node_limit = -1L, sol_limit = -1L, best_sol_limit = -1L, mem_limit = Inf, restart_limit = -1L, gap_limit = 0, abs_gap_limit = 0, feastol = 1e-06, dualfeastol = 1e-07, epsilon = 1e-09, presolving = TRUE, presolve_rounds = -1L, lp_threads = 1L, lp_iteration_limit = -1L, lp_scaling = TRUE, branching_score = "p", heuristics_emphasis = "default", threads = 1L, ... )
verbose |
Logical; print solver output. Default |
verbosity_level |
Integer 0–5; verbosity detail. Default |
display_freq |
Integer; node display frequency. Default |
time_limit |
Numeric; time limit in seconds. Default |
node_limit |
Integer; max nodes. Default |
stall_node_limit |
Integer; stall nodes. Default |
sol_limit |
Integer; solution limit. Default |
best_sol_limit |
Integer; improving solution limit. Default |
mem_limit |
Numeric; memory limit in MB. Default |
restart_limit |
Integer; restart limit. Default |
gap_limit |
Numeric; relative MIP gap. Default |
abs_gap_limit |
Numeric; absolute gap. Default |
feastol |
Numeric; feasibility tolerance. Default |
dualfeastol |
Numeric; dual feasibility tolerance. Default |
epsilon |
Numeric; zero tolerance. Default |
presolving |
Logical; enable presolving. Default |
presolve_rounds |
Integer; presolve rounds. Default |
lp_threads |
Integer; LP solver threads. Default |
lp_iteration_limit |
Integer; LP iteration limit. Default |
lp_scaling |
Logical; LP scaling. Default |
branching_score |
Character; score function. Default |
heuristics_emphasis |
Character; heuristic emphasis. Default |
threads |
Integer; parallel solving threads. Default |
... |
Additional SCIP parameters as name-value pairs, using SCIP's
native hierarchical parameter paths (e.g., |
A named list of class "scip_control" with components:
verboseLogical; verbosity flag.
scip_paramsNamed list; all parameters as SCIP native paths.
verboseLogical; print solver output. Default TRUE.
verbosity_levelInteger 0–5; verbosity detail (0 = none,
3 = normal, 5 = full). Default 3. Ignored if verbose = FALSE.
display_freqInteger; display a status line every this many nodes
(-1 = never). Default 100.
time_limitNumeric; maximum solving time in seconds.
Default Inf (no limit).
node_limitInteger; maximum number of branch-and-bound nodes.
Default -1L (no limit).
stall_node_limitInteger; nodes without improvement before stopping.
Default -1L (no limit).
sol_limitInteger; stop after finding this many feasible solutions.
Default -1L (no limit).
best_sol_limitInteger; stop after this many improving solutions.
Default -1L (no limit).
mem_limitNumeric; memory limit in MB. Default Inf
(no limit).
restart_limitInteger; maximum restarts. Default -1L
(no limit).
gap_limitNumeric; relative MIP gap tolerance; solver stops
when the gap falls below this value. Default 0 (prove optimality).
abs_gap_limitNumeric; absolute gap between primal and dual
bound. Default 0.
feastolNumeric; feasibility tolerance for LP constraints.
Default 1e-6.
dualfeastolNumeric; dual feasibility tolerance.
Default 1e-7.
epsilonNumeric; absolute values below this are treated as zero.
Default 1e-9.
presolvingLogical; enable presolving. Default TRUE.
presolve_roundsInteger; maximum presolving rounds
(-1 = unlimited). Default -1L.
lp_threadsInteger; number of threads for LP solver.
Default 1L.
lp_iteration_limitInteger; LP iteration limit per solve
(-1 = no limit). Default -1L.
lp_scalingLogical; enable LP scaling. Default TRUE.
branching_scoreCharacter; branching score function:
"s" (sum), "p" (product), "q" (quotient).
Default "p".
heuristics_emphasisCharacter; heuristic emphasis setting:
"default", "aggressive", "fast", or "off".
Default "default".
threadsInteger; number of threads for concurrent solving.
Default 1L. Note: concurrent solving may require a SCIP build
compiled with parallel support (e.g., PARASCIP=true); not all
installations provide this.
## Quick solve with 60-second time limit ctrl <- scip_control(time_limit = 60) ## Quiet solve with 1% gap tolerance ctrl <- scip_control(verbose = FALSE, gap_limit = 0.01) ## Aggressive heuristics, no presolving ctrl <- scip_control(heuristics_emphasis = "aggressive", presolving = FALSE) ## Pass a native SCIP parameter directly ctrl <- scip_control("conflict/enable" = FALSE, "separating/maxrounds" = 5L)## Quick solve with 60-second time limit ctrl <- scip_control(time_limit = 60) ## Quiet solve with 1% gap tolerance ctrl <- scip_control(verbose = FALSE, gap_limit = 0.01) ## Aggressive heuristics, no presolving ctrl <- scip_control(heuristics_emphasis = "aggressive", presolving = FALSE) ## Pass a native SCIP parameter directly ctrl <- scip_control("conflict/enable" = FALSE, "separating/maxrounds" = 5L)
Get solver information
scip_get_info(model)scip_get_info(model)
model |
A SCIP model (after |
A list with solve_time, nodes, iterations,
gap, sol_count.
Get number of solutions found
scip_get_nsols(model)scip_get_nsols(model)
model |
A SCIP model (after |
Integer.
Get objective value of best solution
scip_get_objval(model)scip_get_objval(model)
model |
A SCIP model (after |
Numeric; objective value, or NA if no solution.
Get the k-th solution from the solution pool
scip_get_sol(model, k)scip_get_sol(model, k)
model |
A SCIP model. |
k |
Integer; 1-based solution index (1 = best). |
A list with objval and x.
Get the best solution
scip_get_solution(model)scip_get_solution(model)
model |
A SCIP model (after |
A list with objval and x.
Get solver status
scip_get_status(model)scip_get_status(model)
model |
A SCIP model (after |
Character; status string (e.g., "optimal", "infeasible").
Creates a new SCIP optimization model for incremental problem construction.
scip_model(name = "scip_model")scip_model(name = "scip_model")
name |
Character; problem name. Default |
An external pointer representing the SCIP model.
Explicitly frees the SCIP model and all associated memory. The model is also freed automatically when garbage collected.
scip_model_free(model)scip_model_free(model)
model |
A SCIP model. |
Invisible NULL.
Solve a SCIP model
scip_optimize(model)scip_optimize(model)
model |
A SCIP model. |
Invisible NULL. Use scip_get_status and
scip_get_solution to retrieve results.
Set objective sense
scip_set_objective_sense(model, sense = "minimize")scip_set_objective_sense(model, sense = "minimize")
model |
A SCIP model. |
sense |
Character; |
Invisible NULL.
Set a SCIP parameter
scip_set_param(model, name, value)scip_set_param(model, name, value)
model |
A SCIP model. |
name |
Character; SCIP parameter name (e.g., |
value |
The parameter value (type is auto-detected by SCIP). |
Invisible NULL.
One-shot interface to the SCIP solver. Formulates and solves:
subject to constraint rows defined by A, b, sense,
with variable types vtype and bounds lb, ub.
scip_solve(obj, A, b, sense, vtype = "C", lb = 0, ub = Inf, control = list())scip_solve(obj, A, b, sense, vtype = "C", lb = 0, ub = Inf, control = list())
obj |
Numeric vector of length |
A |
Constraint matrix ( |
b |
Numeric vector of length |
sense |
Character vector of length |
vtype |
Character; variable types. Either a single value applied to all
variables, or a vector of length |
lb |
Numeric; lower bounds for variables. Single value or vector of
length |
ub |
Numeric; upper bounds for variables. Single value or vector of
length |
control |
A list of solver parameters, typically from |
A named list with components:
Character; solver status (e.g., "optimal", "infeasible", "unbounded").
Numeric; optimal objective value (or NA if no solution).
Numeric vector; primal solution (or NULL if no solution).
Integer; number of solutions found.
Numeric; relative optimality gap.
List with additional solver information (solve_time, iterations, nodes).