Scippy

SCIP

Solving Constraint Integer Programs

Detailed Description

helper functions for concurrent SCIP solvers

Author
Leona Gottwald

Definition in file concurrent.c.

#include "scip/concurrent.h"
#include "scip/concsolver.h"
#include "scip/event.h"
#include "scip/stat.h"
#include "scip/struct_concurrent.h"
#include "scip/struct_scip.h"
#include "scip/struct_set.h"
#include "scip/struct_tree.h"
#include "scip/struct_primal.h"
#include "scip/struct_sol.h"
#include "scip/struct_prop.h"
#include "scip/struct_heur.h"
#include "scip/struct_sepa.h"
#include "scip/struct_presol.h"
#include "scip/prob.h"
#include "scip/prop_sync.h"
#include "scip/heur_sync.h"
#include "scip/event_globalbnd.h"
#include "scip/scip.h"
#include "scip/syncstore.h"
#include "scip/set.h"
#include "tpi/tpi.h"
#include "tpi/def_openmp.h"

Go to the source code of this file.

Functions

SCIP_RETCODE SCIPcreateConcurrent (SCIP *scip, SCIP_CONCSOLVER *concsolver, int *varperm)
 
int SCIPgetNConcurrentSolvers (SCIP *scip)
 
SCIP_CONCSOLVER ** SCIPgetConcurrentSolvers (SCIP *scip)
 
SCIP_RETCODE SCIPaddConcurrentSolver (SCIP *scip, SCIP_CONCSOLVER *concsolver)
 
SCIP_RETCODE SCIPfreeConcurrent (SCIP *scip)
 
SCIP_RETCODE SCIPincrementConcurrentTime (SCIP *scip, SCIP_Real val)
 
SCIP_RETCODE SCIPsynchronize (SCIP *scip)
 
void SCIPdisableConcurrentBoundStorage (SCIP *scip)
 
void SCIPenableConcurrentBoundStorage (SCIP *scip)
 
SCIP_Longint SCIPgetConcurrentMemTotal (SCIP *scip)
 
SCIP_Real SCIPgetConcurrentDualbound (SCIP *scip)
 
SCIP_Real SCIPgetConcurrentPrimalbound (SCIP *scip)
 
SCIP_Real SCIPgetConcurrentGap (SCIP *scip)
 
SCIP_Longint SCIPgetConcurrentNTightenedBnds (SCIP *scip)
 
SCIP_Longint SCIPgetConcurrentNTightenedIntBnds (SCIP *scip)
 
SCIP_RETCODE SCIPaddConcurrentSol (SCIP *scip, SCIP_SOL *sol)
 
SCIP_RETCODE SCIPaddConcurrentBndchg (SCIP *scip, SCIP_VAR *var, SCIP_Real val, SCIP_BOUNDTYPE bndtype)
 
SCIP_RETCODE SCIPcopySolStats (SCIP_SOL *source, SCIP_SOL *target)
 
int SCIPgetConcurrentVaridx (SCIP *scip, SCIP_VAR *var)
 
SCIP_Bool SCIPIsConcurrentSolNew (SCIP *scip, SCIP_SOL *sol)
 
SCIP_BOUNDSTORESCIPgetConcurrentGlobalBoundChanges (SCIP *scip)
 
static SCIP_RETCODE execConcsolver (void *args)
 
SCIP_RETCODE SCIPconcurrentSolve (SCIP *scip)
 
SCIP_RETCODE SCIPcopyConcurrentSolvingStats (SCIP *source, SCIP *target)
 

Function Documentation

◆ SCIPcreateConcurrent()

SCIP_RETCODE SCIPcreateConcurrent ( SCIP scip,
SCIP_CONCSOLVER concsolver,
int *  varperm 
)

create concurrent data

Parameters
scipSCIP datastructure
concsolverconcurrent solver of given SCIP instance
varpermpermutation of variables for communication

Definition at line 58 of file concurrent.c.

References NULL, SCIP_CALL, SCIP_OKAY, SCIP_PARA_DETERMINISTIC, SCIPallocBlockMemory, SCIPcreateWallClock(), SCIPduplicateBlockMemoryArray, SCIPfindEventhdlr(), SCIPfindHeur(), SCIPfindProp(), SCIPgetNOrigVars(), SCIPincludeEventHdlrGlobalbnd(), SCIPincludeHeurSync(), SCIPincludePropSync(), and SCIPstartClock().

Referenced by initConcsolver().

◆ SCIPgetNConcurrentSolvers()

int SCIPgetNConcurrentSolvers ( SCIP scip)

get number of initialized concurrent solvers

Parameters
scipSCIP datastructure

Definition at line 117 of file concurrent.c.

References NULL.

Referenced by SCIPconcsolverCreateInstance(), SCIPprintConcsolverStatistics(), SCIPsolveConcurrent(), SCIPsolveIsStopped(), and SCIPsyncstoreInit().

◆ SCIPgetConcurrentSolvers()

SCIP_CONCSOLVER ** SCIPgetConcurrentSolvers ( SCIP scip)

gets the initialized concurrent solvers

Parameters
scipSCIP datastructure

Definition at line 128 of file concurrent.c.

References NULL.

Referenced by SCIPprintConcsolverStatistics().

◆ SCIPaddConcurrentSolver()

SCIP_RETCODE SCIPaddConcurrentSolver ( SCIP scip,
SCIP_CONCSOLVER concsolver 
)

adds an initialized concurrent solver

Parameters
scipSCIP datastructure
concsolverconcurrent solver of given SCIP instance

Definition at line 139 of file concurrent.c.

References NULL, SCIP_CALL, SCIP_OKAY, and SCIPsetIncludeConcsolver().

Referenced by SCIPconcsolverCreateInstance().

◆ SCIPfreeConcurrent()

SCIP_RETCODE SCIPfreeConcurrent ( SCIP scip)

frees concurrent data

Parameters
scipSCIP datastructure

Definition at line 152 of file concurrent.c.

References NULL, SCIP_CALL, SCIP_OKAY, SCIPfreeBlockMemory, SCIPfreeBlockMemoryArray, SCIPfreeClock(), and SCIPgetNOrigVars().

Referenced by SCIPfreeProb(), and SCIPsolveConcurrent().

◆ SCIPincrementConcurrentTime()

SCIP_RETCODE SCIPincrementConcurrentTime ( SCIP scip,
SCIP_Real  val 
)

increments the time counter for synchronization

Parameters
scipSCIP datastructure
valvalue by which the time counter for synchronization is incremented

Definition at line 190 of file concurrent.c.

References Scip::eventfilter, Scip::eventqueue, NULL, SCIP_CALL, SCIP_OKAY, SCIP_Real, SCIPblkmem(), SCIPconcsolverGetSyncFreq(), SCIPconcsolverSetTimeSinceLastSync(), SCIPeventCreateSync(), SCIPeventqueueAdd(), SCIPgetClockTime(), SCIPresetClock(), SCIPstartClock(), and Scip::set.

◆ SCIPsynchronize()

SCIP_RETCODE SCIPsynchronize ( SCIP scip)

synchronize with other concurrent solvers

Parameters
scipSCIP datastructure

Definition at line 246 of file concurrent.c.

References NULL, SCIP_CALL, SCIP_OKAY, SCIPconcsolverSync(), and SCIPeventGlobalbndClearBoundChanges().

Referenced by SCIP_DECL_EVENTEXEC().

◆ SCIPdisableConcurrentBoundStorage()

void SCIPdisableConcurrentBoundStorage ( SCIP scip)

disables storing global bound changes

Parameters
scipSCIP data structure

Definition at line 264 of file concurrent.c.

References NULL, and SCIPeventGlobalbndDisableBoundStorage().

Referenced by applyBoundChanges().

◆ SCIPenableConcurrentBoundStorage()

void SCIPenableConcurrentBoundStorage ( SCIP scip)

enables storing global bound changes

Parameters
scipSCIP data structure

Definition at line 276 of file concurrent.c.

References NULL, and SCIPeventGlobalbndEnableBoundStorage().

Referenced by applyBoundChanges().

◆ SCIPgetConcurrentMemTotal()

SCIP_Longint SCIPgetConcurrentMemTotal ( SCIP scip)

gets total memory usage of all concurrent solvers together

Parameters
scipSCIP data structure

Definition at line 288 of file concurrent.c.

References MAX, NULL, SCIP_Longint, SCIPconcsolverGetMemTotal(), and SCIPgetMemTotal().

Referenced by SCIPsolveIsStopped().

◆ SCIPgetConcurrentDualbound()

SCIP_Real SCIPgetConcurrentDualbound ( SCIP scip)

gets the dualbound in the last synchronization

Parameters
scipSCIP data structure

Definition at line 306 of file concurrent.c.

References NULL, SCIPgetSyncstore(), SCIPprobExternObjval(), and SCIPsyncstoreGetLastLowerbound().

Referenced by SCIP_DECL_DISPOUTPUT(), SCIPgetConcurrentGap(), and SCIPsyncstoreFinishSync().

◆ SCIPgetConcurrentPrimalbound()

SCIP_Real SCIPgetConcurrentPrimalbound ( SCIP scip)

gets the primalbound in the last synchronization

Parameters
scipSCIP data structure

Definition at line 321 of file concurrent.c.

References NULL, SCIPgetSyncstore(), SCIPprobExternObjval(), and SCIPsyncstoreGetLastUpperbound().

Referenced by SCIP_DECL_DISPOUTPUT(), SCIPgetConcurrentGap(), and SCIPsyncstoreFinishSync().

◆ SCIPgetConcurrentGap()

SCIP_Real SCIPgetConcurrentGap ( SCIP scip)

gets the gap in the last synchronization

Parameters
scipSCIP data structure

Definition at line 336 of file concurrent.c.

References SCIP_Real, SCIPcomputeGap(), SCIPepsilon(), SCIPgetConcurrentDualbound(), SCIPgetConcurrentPrimalbound(), and SCIPinfinity().

Referenced by SCIP_DECL_DISPOUTPUT(), and SCIPsyncstoreFinishSync().

◆ SCIPgetConcurrentNTightenedBnds()

SCIP_Longint SCIPgetConcurrentNTightenedBnds ( SCIP scip)

gives the total number of tightened bounds received from other concurrent solvers

Parameters
scipSCIP data structure

Definition at line 350 of file concurrent.c.

References NULL, and SCIPpropSyncGetNTightenedBnds().

◆ SCIPgetConcurrentNTightenedIntBnds()

SCIP_Longint SCIPgetConcurrentNTightenedIntBnds ( SCIP scip)

gives the total number of tightened bounds for integer variables received from other concurrent solvers

Parameters
scipSCIP data structure

Definition at line 361 of file concurrent.c.

References NULL, and SCIPpropSyncGetNTightenedIntBnds().

◆ SCIPaddConcurrentSol()

SCIP_RETCODE SCIPaddConcurrentSol ( SCIP scip,
SCIP_SOL sol 
)

pass a solution to the given SCIP instance using that was received via synchronization by using the sync heuristic

Parameters
scipSCIP datastructure
solsolution

Definition at line 372 of file concurrent.c.

References NULL, SCIP_CALL, SCIP_OKAY, and SCIPheurSyncPassSol().

Referenced by SCIP_DECL_CONCSOLVERSYNCREAD().

◆ SCIPaddConcurrentBndchg()

SCIP_RETCODE SCIPaddConcurrentBndchg ( SCIP scip,
SCIP_VAR var,
SCIP_Real  val,
SCIP_BOUNDTYPE  bndtype 
)

adds a global boundchange to the given SCIP, by passing it to the sync propagator

Parameters
scipSCIP data structure
varvariable for bound
valvalue of bound
bndtypetype of bound

Definition at line 387 of file concurrent.c.

References NULL, SCIP_CALL, SCIP_OKAY, and SCIPpropSyncAddBndchg().

Referenced by SCIP_DECL_CONCSOLVERSYNCREAD().

◆ SCIPcopySolStats()

SCIP_RETCODE SCIPcopySolStats ( SCIP_SOL source,
SCIP_SOL target 
)

copy the nodenumber, depth, time, and runnumber of one solution to another one

Parameters
sourcesource for solution statistics
targettarget for solution statistics

Definition at line 405 of file concurrent.c.

References SCIP_Sol::depth, SCIP_Sol::nodenum, NULL, SCIP_Sol::runnum, SCIP_OKAY, and SCIP_Sol::time.

Referenced by SCIP_DECL_CONCSOLVERCOPYSOLVINGDATA().

◆ SCIPgetConcurrentVaridx()

int SCIPgetConcurrentVaridx ( SCIP scip,
SCIP_VAR var 
)

get variable index of original variable that is the same between concurrent solvers

Parameters
scipSCIP data structure
varvariable

Definition at line 423 of file concurrent.c.

References NULL, SCIPgetNOrigVars(), SCIPvarGetIndex(), and SCIPvarIsOriginal().

Referenced by SCIP_DECL_EVENTEXEC().

◆ SCIPIsConcurrentSolNew()

SCIP_Bool SCIPIsConcurrentSolNew ( SCIP scip,
SCIP_SOL sol 
)

is the solution new since the last synchronization point

Parameters
scipSCIP data structure
solthe solution

Definition at line 439 of file concurrent.c.

References NULL, and SCIPsolGetIndex().

Referenced by SCIP_DECL_CONCSOLVERSYNCWRITE().

◆ SCIPgetConcurrentGlobalBoundChanges()

SCIP_BOUNDSTORE * SCIPgetConcurrentGlobalBoundChanges ( SCIP scip)

gets the global lower bound changes since the last synchronization point

Parameters
scipSCIP data structure

Definition at line 452 of file concurrent.c.

References NULL, and SCIPeventGlobalbndGetBoundChanges().

Referenced by SCIP_DECL_CONCSOLVERSYNCWRITE().

◆ execConcsolver()

static SCIP_RETCODE execConcsolver ( void *  args)
static

executes the concurrent solver corresponding to the current thread

Parameters
argsSCIP data structure passed in as a void pointer

Definition at line 467 of file concurrent.c.

References NULL, SCIP_CALL, SCIP_OKAY, SCIPconcsolverExec(), SCIPconcsolverSync(), and SCIPtpiGetThreadNum().

Referenced by SCIPconcurrentSolve().

◆ SCIPconcurrentSolve()

◆ SCIPcopyConcurrentSolvingStats()

SCIP_RETCODE SCIPcopyConcurrentSolvingStats ( SCIP source,
SCIP target 
)

copy solving statistics

Parameters
sourceSCIP data structure
targettarget SCIP data structure

Definition at line 540 of file concurrent.c.

References SCIP_Stat::barrierlptime, SCIP_Stat::barrierzeroittime, SCIP_Stat::bestsolnode, SCIP_Stat::conflictlptime, SCIP_Stat::divinglptime, SCIP_Stat::domchgcount, SCIP_Stat::duallptime, SCIP_Stat::dualrefintegral, SCIP_Stat::dualzeroittime, SCIP_Node::estimate, SCIP_Stat::firstlpdualbound, SCIP_Stat::firstlptime, SCIP_Stat::firstprimalbound, SCIP_Stat::firstprimaldepth, SCIP_Stat::firstprimalheur, SCIP_Stat::firstprimaltime, SCIP_Stat::firstsolgap, SCIP_Heur::heurclock, SCIP_Stat::lastbranchdir, SCIP_Stat::lastbranchvalue, SCIP_Stat::lastconflictnode, SCIP_Stat::lastdispnode, SCIP_Stat::lastdivenode, SCIP_Stat::lastdualbound, SCIP_Stat::lastlowerbound, SCIP_Stat::lastprimalbound, SCIP_Stat::lastsblpsolstats, SCIP_Sepa::lastsepanode, SCIP_Stat::lastsolgap, SCIP_Stat::lastupperbound, SCIP_Stat::lexduallptime, SCIP_Node::lowerbound, SCIP_Stat::lpcount, SCIP_Stat::lpsoltime, MAX, SCIP_Sepa::maxbounddist, SCIP_Stat::maxcopytime, SCIP_Stat::maxdepth, SCIP_Stat::maxtotaldepth, MIN, SCIP_Stat::mincopytime, SCIP_Stat::nactivatednodes, SCIP_Presol::naddconss, SCIP_Presol::naddholes, SCIP_Presol::naggrvars, SCIP_Stat::nbacktracks, SCIP_Stat::nbarrierlpiterations, SCIP_Stat::nbarrierlps, SCIP_Stat::nbarrierzeroitlps, SCIP_Heur::nbestsolsfound, SCIP_Primal::nbestsolsfound, SCIP_Stat::nboundchgs, SCIP_Heur::ncalls, SCIP_Presol::ncalls, SCIP_Prop::ncalls, SCIP_Sepa::ncalls, SCIP_Presol::nchgbds, SCIP_Presol::nchgcoefs, SCIP_Presol::nchgsides, SCIP_Presol::nchgvartypes, SCIP_Stat::nconflictlpiterations, SCIP_Stat::nconflictlps, SCIP_Stat::nconfrestarts, SCIP_Sepa::nconssfound, SCIP_Stat::ncopies, SCIP_Stat::ncreatednodes, SCIP_Stat::ncreatednodesrun, SCIP_Prop::ncutoffs, SCIP_Sepa::ncutoffs, SCIP_Sepa::ncutsaddeddirect, SCIP_Sepa::ncutsaddedviapool, SCIP_Sepa::ncutsapplieddirect, SCIP_Sepa::ncutsappliedviapool, SCIP_Sepa::ncutsfound, SCIP_Stat::ndeactivatednodes, SCIP_Stat::ndelayedcutoffs, SCIP_Presol::ndelconss, SCIP_Stat::ndivesetcalls, SCIP_Stat::ndivesetlpiterations, SCIP_Stat::ndivesetlps, SCIP_Stat::ndivinglpiterations, SCIP_Stat::ndivinglps, SCIP_Prop::ndomredsfound, SCIP_Sepa::ndomredsfound, SCIP_Stat::nduallpiterations, SCIP_Stat::nduallps, SCIP_Stat::ndualresolvelpiterations, SCIP_Stat::ndualresolvelps, SCIP_Stat::ndualzeroitlps, SCIP_Stat::nearlybacktracks, SCIP_Stat::nexternalsolsfound, SCIP_Stat::nfeasleaves, SCIP_Presol::nfixedvars, SCIP_Stat::nholechgs, SCIP_Stat::ninfeasleaves, SCIP_Stat::ninitconssadded, SCIP_Stat::ninitlpiterations, SCIP_Stat::ninitlps, SCIP_Stat::ninternalnodes, SCIP_Stat::nisstoppedcalls, SCIP_Stat::nlexduallpiterations, SCIP_Stat::nlexduallps, SCIP_Stat::nlexdualresolvelpiterations, SCIP_Stat::nlexdualresolvelps, SCIP_Primal::nlimsolsfound, SCIP_Stat::nlpbestsolsfound, SCIP_Stat::nlpiterations, SCIP_Stat::nlps, SCIP_Stat::nlpsolsfound, SCIP_Stat::nlpsoltime, SCIP_Stat::nnlps, SCIP_Stat::nnodelpiterations, SCIP_Stat::nnodelps, SCIP_Stat::nnodes, SCIP_Stat::nnodesaboverefbound, SCIP_Stat::nnodesbeforefirst, SCIP_Stat::nnz, SCIP_Stat::nobjleaves, SCIP_Stat::nodeactivationtime, SCIP_Stat::npresoladdconss, SCIP_Stat::npresoladdholes, SCIP_Stat::npresolaggrvars, SCIP_Stat::npresolchgbds, SCIP_Stat::npresolchgcoefs, SCIP_Stat::npresolchgsides, SCIP_Stat::npresolchgvartypes, SCIP_Stat::npresoldelconss, SCIP_Stat::npresolfixedvars, SCIP_Stat::npresolrounds, SCIP_Stat::npresolroundsext, SCIP_Stat::npresolroundsfast, SCIP_Stat::npresolroundsmed, SCIP_Stat::npresolupgdconss, SCIP_Stat::npricerounds, SCIP_Stat::nprimallpiterations, SCIP_Stat::nprimallps, SCIP_Stat::nprimalresolvelpiterations, SCIP_Stat::nprimalresolvelps, SCIP_Stat::nprimalzeroitlps, SCIP_Stat::nprobboundchgs, SCIP_Stat::nprobholechgs, SCIP_Stat::npsbestsolsfound, SCIP_Stat::npssolsfound, SCIP_Stat::nreoptruns, SCIP_Stat::nrepropboundchgs, SCIP_Stat::nrepropcutoffs, SCIP_Stat::nreprops, SCIP_Prop::nrespropcalls, SCIP_Stat::nrootboundchgs, SCIP_Stat::nrootboundchgsrun, SCIP_Sepa::nrootcalls, SCIP_Stat::nrootfirstlpiterations, SCIP_Stat::nrootintfixings, SCIP_Stat::nrootintfixingsrun, SCIP_Stat::nrootlpiterations, SCIP_Stat::nrootlps, SCIP_Stat::nrootsblpiterations, SCIP_Stat::nrootstrongbranchs, SCIP_Stat::nruns, SCIP_Stat::nrunsbeforefirst, SCIP_Stat::nsbbestsolsfound, SCIP_Stat::nsbdivinglpiterations, SCIP_Stat::nsbdivinglps, SCIP_Stat::nsbdowndomchgs, SCIP_Stat::nsblpiterations, SCIP_Stat::nsbsolsfound, SCIP_Stat::nsbtimesiterlimhit, SCIP_Stat::nsbupdomchgs, SCIP_Stat::nseparounds, SCIP_Heur::nsolsfound, SCIP_Primal::nsolsfound, SCIP_Stat::nstrongbranchs, SCIP_Stat::ntotalinternalnodes, SCIP_Stat::ntotalnodes, NULL, SCIP_Presol::nupgdconss, Scip::origprob, SCIP_Stat::plungedepth, SCIP_Presol::presolclock, SCIP_Prop::presoltime, SCIP_Stat::presolvingtime, SCIP_Stat::presolvingtimeoverall, SCIP_Stat::previntegralevaltime, SCIP_Stat::previousdualrefgap, SCIP_Stat::previousgap, SCIP_Stat::previousprimalrefgap, SCIP_Stat::prevrunnvars, Scip::primal, SCIP_Stat::primaldualintegral, SCIP_Stat::primallptime, SCIP_Stat::primalrefintegral, SCIP_Stat::primalzeroittime, SCIP_Prop::proptime, SCIP_Stat::pseudosoltime, SCIP_Stat::referencebound, SCIP_Stat::reoptupdatetime, SCIP_Prop::resproptime, SCIP_Stat::rootlowerbound, SCIP_Stat::rootlpbestestimate, SCIP_Prop::sbproptime, SCIP_Stat::sbsoltime, SCIP_CALL, SCIP_OKAY, SCIP_Real, SCIPfindHeur(), SCIPfindPresol(), SCIPfindProp(), SCIPfindSepa(), SCIPgetClockTime(), SCIPgetDualbound(), SCIPgetHeurs(), SCIPgetNHeurs(), SCIPgetNPresols(), SCIPgetNProps(), SCIPgetNSepas(), SCIPgetPresols(), SCIPgetProps(), SCIPgetRootNode(), SCIPgetSepas(), SCIPheurGetName(), SCIPpresolGetName(), SCIPprobExternObjval(), SCIPprobSetDualbound(), SCIPpropGetName(), SCIPsepaGetName(), SCIPsetClockTime(), SCIP_Sepa::sepaclock, Scip::set, SCIP_Heur::setuptime, SCIP_Presol::setuptime, SCIP_Prop::setuptime, SCIP_Sepa::setuptime, SCIP_Stat::solvingtimeoverall, SCIP_Set::stage, Scip::stat, SCIP_Stat::status, SCIP_Stat::strongbranchtime, SCIP_Stat::strongpropclock, SCIP_Stat::totaldivesetdepth, Scip::transprob, and SCIP_Stat::vsidsweight.

Referenced by SCIP_DECL_CONCSOLVERCOPYSOLVINGDATA().