| 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.1-1 |
| Built: | 2026-10-05 02:00:43 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, heuristics, separating, and emphasis. 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, presolve_emphasis = "default", lp_threads = 1L, lp_iteration_limit = -1L, lp_scaling = TRUE, branching_score = "p", heuristics_emphasis = "default", separating_emphasis = "default", 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, presolve_emphasis = "default", lp_threads = 1L, lp_iteration_limit = -1L, lp_scaling = TRUE, branching_score = "p", heuristics_emphasis = "default", separating_emphasis = "default", 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 |
presolve_emphasis |
Character; presolving emphasis. 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 |
separating_emphasis |
Character; separating emphasis. Default
|
emphasis |
Character; global solver emphasis. Default
|
threads |
Integer; parallel solving threads. Default |
... |
Additional SCIP parameters as name-value pairs, using SCIP's
native hierarchical parameter paths (e.g., |
The four emphasis arguments (emphasis, presolve_emphasis,
heuristics_emphasis, separating_emphasis) are SCIP
meta-settings: each one adjusts a whole family of native parameters at
once, the same way SCIP's interactive shell commands set emphasis,
set presolving emphasis, set heuristics emphasis and
set separating emphasis do. They are applied before any individual
parameter, in that order, so a native parameter given via ...
always overrides whatever the emphasis chose for it.
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.
presolve_emphasisCharacter; presolving emphasis setting:
"default", "aggressive", "fast", or "off".
Default "default".
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".
separating_emphasisCharacter; cutting-plane separation
emphasis setting: "default", "aggressive", "fast",
or "off". Default "default".
emphasisCharacter; global solver emphasis, choosing a
predefined parameter profile for a problem class or solving goal.
One of "default", "cpsolver" (constraint-programming
style search, no LP relaxation), "easycip" (solve easy
problems fast), "feasibility" (find a feasible solution fast),
"hardlp" (cope with hard LP relaxations), "optimality"
(prove optimality fast), "counter" (solution counting),
"phasefeas", "phaseimprove", "phaseproof"
(the three phases of SCIP's three-phase approach), "numerics"
(increased numerical safety), or "benchmark" (do not try to
avoid the memory limit). 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) ## Aggressive presolving and separation, as for hard combinatorial MIPs ctrl <- scip_control(presolve_emphasis = "aggressive", separating_emphasis = "aggressive") ## Global profile: find a feasible solution quickly ctrl <- scip_control(emphasis = "feasibility") ## 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) ## Aggressive presolving and separation, as for hard combinatorial MIPs ctrl <- scip_control(presolve_emphasis = "aggressive", separating_emphasis = "aggressive") ## Global profile: find a feasible solution quickly ctrl <- scip_control(emphasis = "feasibility") ## 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).