Scippy

SCIP

Solving Constraint Integer Programs

mincut.c File Reference

Detailed Description

Minimum cut routines for Steiner problems.

Author
Daniel Rehfeldt

This file encompasses minimum cut routines for Steiner tree problems.

Definition in file mincut.c.

#include "mincut.h"
#include "probdata_stp.h"
#include "misc_stp.h"
#include "stpvector.h"
#include "reduce.h"
#include "portab.h"

Go to the source code of this file.

Data Structures

struct  minimum_cut_helper
 
struct  terminal_separator
 
struct  terminal_separator_storage
 

Macros

#define Q_NULL   -1 /* NULL element of queue/list */
 
#define ADDCUTSTOPOOL   FALSE
 
#define TERMSEPA_SPARSE_MAXRATIO   4
 
#define TERMSEPA_MAXCUTSIZE_DEFAULT   5
 
#define TERMSEPA_MAXNCUTS_DEFAULT   100
 
#define TERMSEPA_NROOTCANDS   3
 
#define FLOW_FACTOR   1000000
 
#define CREEP_VALUE   10
 

Typedefs

typedef struct minimum_cut_helper MINCUT
 
typedef struct terminal_separator TSEPA
 

Functions

static SCIP_Bool csrFlipedgesAreValid (const GRAPH *g, const MINCUT *mincut)
 
static SCIP_Bool termsepaCutIsCorrect (SCIP *scip, const GRAPH *g, int ncutterms, const int *cutterms, int sinkterm, const MINCUT *mincut)
 
static int termsepaGetCapaInf (const GRAPH *g, const MINCUT *mincut)
 
static void updateTerminalSource (SCIP *scip, int rootcand, const GRAPH *g, int *root, int *rootcompsize)
 
static int termsepaFindTerminalSource (SCIP *scip, const GRAPH *g, const MINCUT *mincut)
 
static void termsepaCollectCutNodes (const GRAPH *g, const TERMSEPAS *termsepas, const MINCUT *mincut, int sinkterm, int *cutterms, int *ncutterms, SCIP_Bool *cutIsGood)
 
static SCIP_RETCODE termsepaTraverseSinkComp (SCIP *scip, const GRAPH *g, SCIP_Bool removeTerms, SCIP_Bool updateVisitedTerms, int ncutterms, const int *cutterms, int sinkterm, MINCUT *mincut, int *ncompnodes)
 
static SCIP_RETCODE termsepaRemoveCutTerminals (SCIP *scip, const GRAPH *g, int ncutterms, const int *cutterms, int sinkterm, MINCUT *mincut)
 
static SCIP_RETCODE termsepaGetCompNnodes (SCIP *scip, const GRAPH *g, int ncutterms, const int *cutterms, int sinkterm, MINCUT *mincut, int *ncompnodes)
 
static SCIP_RETCODE termsepaStoreCutFinalize (SCIP *scip, const GRAPH *g, int sinkterm, MINCUT *mincut, int ncutterms, const int *cutterms, TERMSEPAS *termsepas, SCIP_Bool *success)
 
static SCIP_RETCODE termsepaStoreCutTry (SCIP *scip, const GRAPH *g, int sinkterm, MINCUT *mincut, TERMSEPAS *termsepas)
 
static SCIP_RETCODE termsepaCsrInit (const GRAPH *g, MINCUT *mincut)
 
static void termsepaCsrAddTermCopies (const GRAPH *g, MINCUT *mincut)
 
static void termsepaCsrAddEdges (const GRAPH *g, MINCUT *mincut)
 
static void termsepaCsrAddReverseEdges (const GRAPH *g, MINCUT *mincut)
 
static int termsepaCsrGetMaxNnodes (const GRAPH *g)
 
static int termsepaCsrGetMaxNedges (int root, const GRAPH *g)
 
static void termsepaBuildRootcomp (const GRAPH *g, MINCUT *mincut)
 
static SCIP_RETCODE termsepaBuildCsr (const GRAPH *g, MINCUT *mincut)
 
static SCIP_RETCODE mincutInitForLp (SCIP *scip, const GRAPH *g, MINCUT *mincut)
 
static SCIP_RETCODE mincutInitForTermSepa (SCIP *scip, GRAPH *g, MINCUT *mincut)
 
static SCIP_RETCODE mincutInit (SCIP *scip, SCIP_RANDNUMGEN *randnumgen, SCIP_Bool isLpcut, GRAPH *g, MINCUT **mincut)
 
static SCIP_RETCODE mincutPrepareForLp (SCIP *scip, const GRAPH *g, MINCUT *mincut)
 
static SCIP_RETCODE mincutPrepareForTermSepa (SCIP *scip, GRAPH *g, MINCUT *mincut)
 
static int mincutGetNextSinkTerm (const GRAPH *g, SCIP_Bool firstrun, MINCUT *mincut)
 
static void mincutExec (const GRAPH *g, int sinkterm, SCIP_Bool wasRerun, MINCUT *mincut)
 
static void mincutFree (SCIP *scip, MINCUT **mincut)
 
static SCIP_RETCODE lpcutAdd (SCIP *scip, SCIP_CONSHDLR *conshdlr, const GRAPH *g, const int *nodes_inRootComp, const STP_Bool *edges_isRemoved, const SCIP_Real *xvals, int *capa, const int updatecapa, SCIP_Bool local, SCIP_Bool *success)
 
static void lpcutSetEdgeCapacity (const GRAPH *g, const SCIP_Real *xval, SCIP_Bool creep_flow, SCIP_Bool flip, int *RESTRICT capa)
 
SCIP_RETCODE mincut_termsepasInit (SCIP *scip, const GRAPH *g, int maxnsepas, int maxsepasize, TERMSEPAS **termsepas)
 
void mincut_termsepasFree (SCIP *scip, TERMSEPAS **termsepas)
 
int mincut_termsepasGetNall (const TERMSEPAS *termsepas)
 
int mincut_termsepasGetN (const TERMSEPAS *termsepas, int sepasize)
 
const int * mincut_termsepasGetFirst (int sepasize, TERMSEPAS *termsepas, int *sinkterm, int *nsinknodes)
 
const int * mincut_termsepasGetNext (int sepasize, TERMSEPAS *termsepas, int *sinkterm, int *nsinknodes)
 
int mincut_termsepasGetSource (const TERMSEPAS *termsepas)
 
SCIP_Bool mincut_findTerminalSeparatorsIsPromising (const GRAPH *g)
 
SCIP_RETCODE mincut_findTerminalSeparators (SCIP *scip, SCIP_RANDNUMGEN *randnumgen, GRAPH *g, TERMSEPAS *termsepas)
 
SCIP_RETCODE mincut_separateLp (SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_RANDNUMGEN *randnumgen, const int *termorg, GRAPH *g, int maxncuts, int *ncuts)
 

Macro Definition Documentation

◆ Q_NULL

#define Q_NULL   -1 /* NULL element of queue/list */

Definition at line 37 of file mincut.c.

◆ ADDCUTSTOPOOL

#define ADDCUTSTOPOOL   FALSE

Definition at line 38 of file mincut.c.

◆ TERMSEPA_SPARSE_MAXRATIO

#define TERMSEPA_SPARSE_MAXRATIO   4

Definition at line 39 of file mincut.c.

Referenced by mincut_findTerminalSeparatorsIsPromising().

◆ TERMSEPA_MAXCUTSIZE_DEFAULT

#define TERMSEPA_MAXCUTSIZE_DEFAULT   5

Definition at line 40 of file mincut.c.

◆ TERMSEPA_MAXNCUTS_DEFAULT

#define TERMSEPA_MAXNCUTS_DEFAULT   100

Definition at line 41 of file mincut.c.

◆ TERMSEPA_NROOTCANDS

#define TERMSEPA_NROOTCANDS   3

Definition at line 42 of file mincut.c.

Referenced by termsepaFindTerminalSource().

◆ FLOW_FACTOR

#define FLOW_FACTOR   1000000

Definition at line 49 of file mincut.c.

Referenced by lpcutAdd(), lpcutSetEdgeCapacity(), mincut_separateLp(), and mincutPrepareForLp().

◆ CREEP_VALUE

#define CREEP_VALUE   10

Definition at line 50 of file mincut.c.

Referenced by lpcutSetEdgeCapacity(), and mincutPrepareForLp().

Typedef Documentation

◆ MINCUT

typedef struct minimum_cut_helper MINCUT

minimum cut helper

◆ TSEPA

typedef struct terminal_separator TSEPA

single separator info

Function Documentation

◆ csrFlipedgesAreValid()

static SCIP_Bool csrFlipedgesAreValid ( const GRAPH g,
const MINCUT mincut 
)
inlinestatic

◆ termsepaCutIsCorrect()

static SCIP_Bool termsepaCutIsCorrect ( SCIP scip,
const GRAPH g,
int  ncutterms,
const int *  cutterms,
int  sinkterm,
const MINCUT mincut 
)
static

checks cut

Parameters
scipSCIP data structure
gthe graph
ncuttermsnumber of cut terminals
cuttermsstores cut terminals
sinktermsink terminal
mincutminimum cut

Definition at line 310 of file mincut.c.

References EAT_LAST, FALSE, graph_get_nNodes(), graph_knot_isInRange(), GRAPH::head, nnodes, minimum_cut_helper::nodes_wakeState, NULL, GRAPH::oeat, GRAPH::outbeg, minimum_cut_helper::root, SCIP_Bool, SCIP_CALL_ABORT, SCIPallocMemoryArray, SCIPerrorMessage, SCIPfreeMemoryArray, STP_Vectype, StpVecFree, StpVecGetSize, StpVecPopBack, StpVecPushBack, StpVecReserve, and TRUE.

Referenced by termsepaStoreCutTry().

◆ termsepaGetCapaInf()

static int termsepaGetCapaInf ( const GRAPH g,
const MINCUT mincut 
)
static

gets infinity

Parameters
gthe graph
mincutminimum cut

Definition at line 408 of file mincut.c.

References GRAPH::terms.

Referenced by termsepaCollectCutNodes(), and termsepaCsrAddEdges().

◆ updateTerminalSource()

static void updateTerminalSource ( SCIP scip,
int  rootcand,
const GRAPH g,
int *  root,
int *  rootcompsize 
)
static

updates; takes root candidate if greater than current

Parameters
scipSCIP data structure
rootcandnew root candidate
gthe graph
rootincumbent (IN/OUT)
rootcompsizesize of component (IN/OUT)

Definition at line 419 of file mincut.c.

References FALSE, graph_get_nNodes(), graph_knot_isInRange(), GRAPH::head, Is_term, nnodes, NULL, GRAPH::oeat, GRAPH::outbeg, SCIP_Bool, SCIP_CALL_ABORT, SCIPallocCleanBufferArray, SCIPfreeCleanBufferArray, STP_Vectype, StpVecFree, StpVecGetSize, StpVecPushBack, StpVecReserve, GRAPH::term, and TRUE.

Referenced by termsepaFindTerminalSource().

◆ termsepaFindTerminalSource()

static int termsepaFindTerminalSource ( SCIP scip,
const GRAPH g,
const MINCUT mincut 
)
static

finds a root terminal

Parameters
scipSCIP data structure
gthe graph
mincutminimum cut

Definition at line 489 of file mincut.c.

References graph_getTerms(), Is_term, minimum_cut_helper::randnumgen, SCIP_CALL_ABORT, SCIPallocMemoryArray, SCIPfreeMemoryArray, SCIPrandomGetInt(), GRAPH::source, GRAPH::term, minimum_cut_helper::terms, GRAPH::terms, TERMSEPA_NROOTCANDS, and updateTerminalSource().

Referenced by mincutInitForTermSepa().

◆ termsepaCollectCutNodes()

static void termsepaCollectCutNodes ( const GRAPH g,
const TERMSEPAS termsepas,
const MINCUT mincut,
int  sinkterm,
int *  cutterms,
int *  ncutterms,
SCIP_Bool cutIsGood 
)
static

collect cut nodes

Parameters
gthe graph
termsepasterminal separator storage
mincutminimum cut
sinktermsink terminal
cuttermsterminals
ncuttermsnumber of terminals
cutIsGoodis cut nodes

Definition at line 533 of file mincut.c.

References minimum_cut_helper::csr_headarr, minimum_cut_helper::csr_start, minimum_cut_helper::edges_capa, FALSE, Is_term, terminal_separator_storage::maxsepasize, minimum_cut_helper::nodes_wakeState, SCIP_Bool, GRAPH::term, minimum_cut_helper::termsepa_nnodes, termsepaGetCapaInf(), and TRUE.

Referenced by termsepaStoreCutTry().

◆ termsepaTraverseSinkComp()

static SCIP_RETCODE termsepaTraverseSinkComp ( SCIP scip,
const GRAPH g,
SCIP_Bool  removeTerms,
SCIP_Bool  updateVisitedTerms,
int  ncutterms,
const int *  cutterms,
int  sinkterm,
MINCUT mincut,
int *  ncompnodes 
)
static

helper; traverses and does additional optional stuff

Parameters
scipSCIP data structure
gthe graph
removeTermsremove terminals reachable from sink via non-terminal paths?
updateVisitedTermsdo update?
ncuttermssize of the separator
cuttermsthe separator nodes (all terminals)
sinktermsink terminal of current cut
mincutminimum cut
ncompnodesnumber of nodes in component (OUT)

Definition at line 590 of file mincut.c.

References FALSE, graph_get_nNodes(), graph_knot_isInRange(), GRAPH::head, Is_term, nnodes, minimum_cut_helper::nodes_wakeState, minimum_cut_helper::ntermcands, NULL, GRAPH::oeat, GRAPH::outbeg, minimum_cut_helper::root, SCIP_Bool, SCIP_CALL, SCIP_OKAY, SCIPallocCleanBufferArray, SCIPfreeCleanBufferArray, STP_Vectype, StpVecFree, StpVecGetSize, StpVecPushBack, StpVecReserve, SWAP_INTS, GRAPH::term, minimum_cut_helper::terms, minimum_cut_helper::terms_mincompsize, minimum_cut_helper::terms_minsepasize, and TRUE.

Referenced by termsepaGetCompNnodes(), and termsepaRemoveCutTerminals().

◆ termsepaRemoveCutTerminals()

static SCIP_RETCODE termsepaRemoveCutTerminals ( SCIP scip,
const GRAPH g,
int  ncutterms,
const int *  cutterms,
int  sinkterm,
MINCUT mincut 
)
static

removes terminals in current cut

Parameters
scipSCIP data structure
gthe graph
ncuttermssize of the separator
cuttermsthe separator nodes (all terminals)
sinktermsink terminal of current cut
mincutminimum cut

Definition at line 710 of file mincut.c.

References FALSE, NULL, SCIP_Bool, SCIP_CALL, SCIP_OKAY, termsepaTraverseSinkComp(), and TRUE.

Referenced by termsepaStoreCutTry().

◆ termsepaGetCompNnodes()

static SCIP_RETCODE termsepaGetCompNnodes ( SCIP scip,
const GRAPH g,
int  ncutterms,
const int *  cutterms,
int  sinkterm,
MINCUT mincut,
int *  ncompnodes 
)
static

gets number of nodes

Parameters
scipSCIP data structure
gthe graph
ncuttermssize of the separator
cuttermsthe separator nodes (all terminals)
sinktermsink terminal of current cut
mincutminimum cut
ncompnodesnumber of nodes in component

Definition at line 730 of file mincut.c.

References FALSE, SCIP_Bool, SCIP_CALL, SCIP_OKAY, termsepaTraverseSinkComp(), and TRUE.

Referenced by termsepaStoreCutFinalize().

◆ termsepaStoreCutFinalize()

static SCIP_RETCODE termsepaStoreCutFinalize ( SCIP scip,
const GRAPH g,
int  sinkterm,
MINCUT mincut,
int  ncutterms,
const int *  cutterms,
TERMSEPAS termsepas,
SCIP_Bool success 
)
static

stores cut NOTE: this methods is call once the cut vertices are already stored in the CSR array

Parameters
scipSCIP data structure
gthe graph
sinktermsink terminal
mincutminimum cut
ncuttermsnumber of cut terminals
cuttermscut terminals
termsepasterminal separator storage
successsuccess?

Definition at line 752 of file mincut.c.

References FALSE, graph_get_nNodes(), terminal_separator_storage::maxsepasize, nnodes, minimum_cut_helper::nodes_wakeState, terminal_separator_storage::nsepas, terminal_separator_storage::nsepas_all, terminal_separator_storage::nsepaterms_csr, terminal_separator::nsinknodes, SCIP_CALL, SCIP_OKAY, SCIPdebugMessage, terminal_separator_storage::sepas, terminal_separator_storage::sepastarts_csr, terminal_separator::sinkterm, minimum_cut_helper::terms_mincompsize, minimum_cut_helper::terms_minsepasize, termsepaGetCompNnodes(), and TRUE.

Referenced by termsepaStoreCutTry().

◆ termsepaStoreCutTry()

static SCIP_RETCODE termsepaStoreCutTry ( SCIP scip,
const GRAPH g,
int  sinkterm,
MINCUT mincut,
TERMSEPAS termsepas 
)
static

◆ termsepaCsrInit()

static SCIP_RETCODE termsepaCsrInit ( const GRAPH g,
MINCUT mincut 
)
static

initializes

Parameters
gthe graph
mincutminimum cut

Definition at line 865 of file mincut.c.

References minimum_cut_helper::csr_edgeDefaultToCsr, graph_get_nEdges(), and SCIP_OKAY.

Referenced by termsepaBuildCsr().

◆ termsepaCsrAddTermCopies()

◆ termsepaCsrAddEdges()

◆ termsepaCsrAddReverseEdges()

static void termsepaCsrAddReverseEdges ( const GRAPH g,
MINCUT mincut 
)
static

◆ termsepaCsrGetMaxNnodes()

static int termsepaCsrGetMaxNnodes ( const GRAPH g)
static

gets maximum number of nodes for extended terminal separation graph

Parameters
gthe graph

Definition at line 1186 of file mincut.c.

References graph_get_nNodes(), graph_get_nTerms(), nnodes, and nterms.

Referenced by mincutInitForTermSepa().

◆ termsepaCsrGetMaxNedges()

static int termsepaCsrGetMaxNedges ( int  root,
const GRAPH g 
)
static

gets maximum number of edges for extended terminal separation graph

Parameters
rootroot of enlarged graph
gthe graph

Definition at line 1201 of file mincut.c.

References GRAPH::grad, graph_get_nEdges(), graph_get_nNodes(), graph_knot_isInRange(), Is_term, nnodes, and GRAPH::term.

Referenced by mincutInitForTermSepa().

◆ termsepaBuildRootcomp()

static void termsepaBuildRootcomp ( const GRAPH g,
MINCUT mincut 
)
static

builds and marks root component (nodes reachable from root via non-terminal paths)

Parameters
gthe graph
mincutminimum cut

Definition at line 1229 of file mincut.c.

References EAT_LAST, GRAPH::head, Is_term, minimum_cut_helper::nodes_wakeState, GRAPH::oeat, GRAPH::outbeg, minimum_cut_helper::root, minimum_cut_helper::rootcut, minimum_cut_helper::rootcutsize, SCIPdebugMessage, and GRAPH::term.

Referenced by mincutPrepareForTermSepa().

◆ termsepaBuildCsr()

static SCIP_RETCODE termsepaBuildCsr ( const GRAPH g,
MINCUT mincut 
)
static

builds CSR representation of enlarged graph; also build terminal candidates

Parameters
gthe graph
mincutminimum cut

Definition at line 1275 of file mincut.c.

References SCIP_CALL, SCIP_OKAY, termsepaCsrAddEdges(), termsepaCsrAddReverseEdges(), termsepaCsrAddTermCopies(), and termsepaCsrInit().

Referenced by mincutPrepareForTermSepa().

◆ mincutInitForLp()

◆ mincutInitForTermSepa()

◆ mincutInit()

◆ mincutPrepareForLp()

◆ mincutPrepareForTermSepa()

static SCIP_RETCODE mincutPrepareForTermSepa ( SCIP scip,
GRAPH g,
MINCUT mincut 
)
static

prepares for terminal separator comptation

Parameters
scipSCIP data structure
gthe graph
mincutminimum cut

Definition at line 1678 of file mincut.c.

References minimum_cut_helper::isLpcut, SCIP_CALL, SCIP_OKAY, termsepaBuildCsr(), and termsepaBuildRootcomp().

Referenced by mincut_findTerminalSeparators().

◆ mincutGetNextSinkTerm()

static int mincutGetNextSinkTerm ( const GRAPH g,
SCIP_Bool  firstrun,
MINCUT mincut 
)
static

returns next promising terminal for computing cut

Parameters
ggraph data structure
firstrunfirst run?
mincutminimum cut

Definition at line 1697 of file mincut.c.

References GRAPH::knots, GRAPH::mincut_dist, minimum_cut_helper::nodes_wakeState, minimum_cut_helper::ntermcands, NULL, minimum_cut_helper::randnumgen, SCIPrandomGetInt(), SWAP_INTS, minimum_cut_helper::terms, and w.

Referenced by mincut_findTerminalSeparators(), and mincut_separateLp().

◆ mincutExec()

◆ mincutFree()

◆ lpcutAdd()

static SCIP_RETCODE lpcutAdd ( SCIP scip,
SCIP_CONSHDLR conshdlr,
const GRAPH g,
const int *  nodes_inRootComp,
const STP_Bool edges_isRemoved,
const SCIP_Real xvals,
int *  capa,
const int  updatecapa,
SCIP_Bool  local,
SCIP_Bool success 
)
static

add a cut

Parameters
scipSCIP data structure
conshdlrconstraint handler
ggraph data structure
nodes_inRootCompfor each node: in root component?
edges_isRemovedfor each edge: removed?
xvalsedge values
capaedges capacities (scaled)
updatecapaupdate capacities?
localis the cut local?
successpointer to store whether add cut be added

Definition at line 1929 of file mincut.c.

References EQ, FALSE, FLOW_FACTOR, graph_get_nEdges(), GRAPH::head, GRAPH::knots, NULL, SCIP_Bool, SCIP_CALL, SCIP_OKAY, SCIP_Real, SCIPaddPoolCut(), SCIPaddRow(), SCIPaddVarToRow(), SCIPcacheRowExtensions(), SCIPcreateEmptyRowConshdlr(), SCIPdebug, SCIPflushRowExtensions(), SCIPinfinity(), SCIPisCutEfficacious(), SCIPisFeasGE(), SCIPprintRow(), SCIPprobdataGetVars(), SCIPreleaseRow(), GRAPH::source, GRAPH::tail, and TRUE.

Referenced by mincut_separateLp().

◆ lpcutSetEdgeCapacity()

static void lpcutSetEdgeCapacity ( const GRAPH g,
const SCIP_Real xval,
SCIP_Bool  creep_flow,
SCIP_Bool  flip,
int *RESTRICT  capa 
)
static

sets (integer) capacity for edges

Parameters
ggraph data structure
xvaledge values
creep_flowcreep flow?
flipreverse the flow?
capaedges capacities (scaled)

Definition at line 2030 of file mincut.c.

References CREEP_VALUE, GRAPH::edges, FLOW_FACTOR, and NULL.

Referenced by mincut_separateLp().

◆ mincut_termsepasInit()

◆ mincut_termsepasFree()

◆ mincut_termsepasGetNall()

int mincut_termsepasGetNall ( const TERMSEPAS termsepas)

returns number of all separators

Parameters
termsepasterminal separators

Definition at line 2135 of file mincut.c.

References terminal_separator_storage::nsepas_all.

Referenced by mincut_findTerminalSeparators(), reduce_termsepaFull(), and testTerminalSeparatorsAreFound().

◆ mincut_termsepasGetN()

int mincut_termsepasGetN ( const TERMSEPAS termsepas,
int  sepasize 
)

returns number of separators per given size

Parameters
termsepasterminal separators
sepasizesize

Definition at line 2147 of file mincut.c.

References terminal_separator_storage::maxnsepas, and terminal_separator_storage::nsepas.

◆ mincut_termsepasGetFirst()

const int* mincut_termsepasGetFirst ( int  sepasize,
TERMSEPAS termsepas,
int *  sinkterm,
int *  nsinknodes 
)

Returns first separator of given size. Returns NULL if none is available.

Parameters
sepasizesize
termsepasterminal separators
sinktermthe sink
nsinknodesnumber of sink-side nodes

Definition at line 2162 of file mincut.c.

References terminal_separator_storage::currsepa_n, and mincut_termsepasGetNext().

Referenced by testTerminalSeparatorsAreFound(), and testTerminalSeparatorsAreFound2().

◆ mincut_termsepasGetNext()

const int* mincut_termsepasGetNext ( int  sepasize,
TERMSEPAS termsepas,
int *  sinkterm,
int *  nsinknodes 
)

◆ mincut_termsepasGetSource()

int mincut_termsepasGetSource ( const TERMSEPAS termsepas)

gets terminal separator source

Parameters
termsepasterminal separators

Definition at line 2232 of file mincut.c.

References terminal_separator_storage::root.

Referenced by reduce_termsepaGetNextComp().

◆ mincut_findTerminalSeparatorsIsPromising()

SCIP_Bool mincut_findTerminalSeparatorsIsPromising ( const GRAPH g)

is it promising to look for terminal separators?

Parameters
ggraph data structure

Definition at line 2243 of file mincut.c.

References FALSE, graph_get_nVET(), nnodes, NULL, GRAPH::terms, and TERMSEPA_SPARSE_MAXRATIO.

◆ mincut_findTerminalSeparators()

◆ mincut_separateLp()

SCIP_RETCODE mincut_separateLp ( SCIP scip,
SCIP_CONSHDLR conshdlr,
SCIP_RANDNUMGEN randnumgen,
const int *  termorg,
GRAPH g,
int  maxncuts,
int *  ncuts 
)