% Generated by roxygen2: do not edit by hand
% Please edit documentation in R/controls.R
\name{scip_control}
\alias{scip_control}
\title{SCIP solver control parameters}
\usage{
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,
  ...
)
}
\arguments{
\item{verbose}{Logical; print solver output. Default \code{TRUE}.}

\item{verbosity_level}{Integer 0--5; verbosity detail. Default \code{3}.}

\item{display_freq}{Integer; node display frequency. Default \code{100}.}

\item{time_limit}{Numeric; time limit in seconds. Default \code{Inf}.}

\item{node_limit}{Integer; max nodes. Default \code{-1L}.}

\item{stall_node_limit}{Integer; stall nodes. Default \code{-1L}.}

\item{sol_limit}{Integer; solution limit. Default \code{-1L}.}

\item{best_sol_limit}{Integer; improving solution limit. Default \code{-1L}.}

\item{mem_limit}{Numeric; memory limit in MB. Default \code{Inf}.}

\item{restart_limit}{Integer; restart limit. Default \code{-1L}.}

\item{gap_limit}{Numeric; relative MIP gap. Default \code{0}.}

\item{abs_gap_limit}{Numeric; absolute gap. Default \code{0}.}

\item{feastol}{Numeric; feasibility tolerance. Default \code{1e-6}.}

\item{dualfeastol}{Numeric; dual feasibility tolerance. Default \code{1e-7}.}

\item{epsilon}{Numeric; zero tolerance. Default \code{1e-9}.}

\item{presolving}{Logical; enable presolving. Default \code{TRUE}.}

\item{presolve_rounds}{Integer; presolve rounds. Default \code{-1L}.}

\item{lp_threads}{Integer; LP solver threads. Default \code{1L}.}

\item{lp_iteration_limit}{Integer; LP iteration limit. Default \code{-1L}.}

\item{lp_scaling}{Logical; LP scaling. Default \code{TRUE}.}

\item{branching_score}{Character; score function. Default \code{"p"}.}

\item{heuristics_emphasis}{Character; heuristic emphasis. Default \code{"default"}.}

\item{threads}{Integer; parallel solving threads. Default \code{1L}. See
Parallel section for caveats.}

\item{...}{Additional SCIP parameters as name-value pairs, using SCIP's
native hierarchical parameter paths (e.g., \code{"lp/fastmip" = 1},
\code{"conflict/enable" = FALSE}). See the
\href{https://www.scipopt.org/doc/html/PARAMETERS.php}{SCIP parameter documentation}
for the full list.}
}
\value{
A named list of class \code{"scip_control"} with components:
\describe{
\item{\code{verbose}}{Logical; verbosity flag.}
\item{\code{scip_params}}{Named list; all parameters as SCIP native paths.}
}
}
\description{
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 \code{...}.
}
\section{Output}{

\describe{
\item{\code{verbose}}{Logical; print solver output. Default \code{TRUE}.}
\item{\code{verbosity_level}}{Integer 0--5; verbosity detail (0 = none,
3 = normal, 5 = full). Default \code{3}. Ignored if \code{verbose = FALSE}.}
\item{\code{display_freq}}{Integer; display a status line every this many nodes
(\code{-1} = never). Default \code{100}.}
}
}

\section{Termination Limits}{

\describe{
\item{\code{time_limit}}{Numeric; maximum solving time in seconds.
Default \code{Inf} (no limit).}
\item{\code{node_limit}}{Integer; maximum number of branch-and-bound nodes.
Default \code{-1L} (no limit).}
\item{\code{stall_node_limit}}{Integer; nodes without improvement before stopping.
Default \code{-1L} (no limit).}
\item{\code{sol_limit}}{Integer; stop after finding this many feasible solutions.
Default \code{-1L} (no limit).}
\item{\code{best_sol_limit}}{Integer; stop after this many improving solutions.
Default \code{-1L} (no limit).}
\item{\code{mem_limit}}{Numeric; memory limit in MB. Default \code{Inf}
(no limit).}
\item{\code{restart_limit}}{Integer; maximum restarts. Default \code{-1L}
(no limit).}
}
}

\section{Tolerances}{

\describe{
\item{\code{gap_limit}}{Numeric; relative MIP gap tolerance; solver stops
when the gap falls below this value. Default \code{0} (prove optimality).}
\item{\code{abs_gap_limit}}{Numeric; absolute gap between primal and dual
bound. Default \code{0}.}
\item{\code{feastol}}{Numeric; feasibility tolerance for LP constraints.
Default \code{1e-6}.}
\item{\code{dualfeastol}}{Numeric; dual feasibility tolerance.
Default \code{1e-7}.}
\item{\code{epsilon}}{Numeric; absolute values below this are treated as zero.
Default \code{1e-9}.}
}
}

\section{Presolving}{

\describe{
\item{\code{presolving}}{Logical; enable presolving. Default \code{TRUE}.}
\item{\code{presolve_rounds}}{Integer; maximum presolving rounds
(\code{-1} = unlimited). Default \code{-1L}.}
}
}

\section{LP}{

\describe{
\item{\code{lp_threads}}{Integer; number of threads for LP solver.
Default \code{1L}.}
\item{\code{lp_iteration_limit}}{Integer; LP iteration limit per solve
(\code{-1} = no limit). Default \code{-1L}.}
\item{\code{lp_scaling}}{Logical; enable LP scaling. Default \code{TRUE}.}
}
}

\section{Branching}{

\describe{
\item{\code{branching_score}}{Character; branching score function:
\code{"s"} (sum), \code{"p"} (product), \code{"q"} (quotient).
Default \code{"p"}.}
}
}

\section{Heuristics}{

\describe{
\item{\code{heuristics_emphasis}}{Character; heuristic emphasis setting:
\code{"default"}, \code{"aggressive"}, \code{"fast"}, or \code{"off"}.
Default \code{"default"}.}
}
}

\section{Parallel}{

\describe{
\item{\code{threads}}{Integer; number of threads for concurrent solving.
Default \code{1L}. Note: concurrent solving may require a SCIP build
compiled with parallel support (e.g., \code{PARASCIP=true}); not all
installations provide this.}
}
}

\examples{
## 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)
}
\seealso{
\code{\link{scip_solve}}, \code{\link{scip_set_param}}
}
