63 return 2 * (maxnsyncdelay + 1);
78 (*syncstore)->initialized =
FALSE;
79 (*syncstore)->syncdata =
NULL;
80 (*syncstore)->stopped =
FALSE;
81 (*syncstore)->nuses = 1;
96 if( *syncstore ==
NULL )
100 (*syncstore)->nuses -= 1;
101 references = (*syncstore)->nuses;
104 if( references == 0 )
106 if( (*syncstore)->initialized )
111 assert(!(*syncstore)->initialized);
130 ++(syncstore->
nuses);
171 for( j = 0; j < syncstore->
maxnsols; ++j )
222 for( j = 0; j < syncstore->
maxnsols; ++j )
349 j = (int) syncnum % syncstore->
nsyncdata;
363 SCIP_Longint writenum,
368 SCIP_Longint nextsyncnum;
374 if( syncdata ==
NULL )
383 nextsyncnum = syncdata->syncnum + 1;
386 if( nextsyncnum == writenum )
389 newdelay = *delay - syncfreq;
396 if( newdelay < syncstore->minsyncdelay && nextsyncnum >= writenum - syncstore->
maxnsyncdelay )
419 while( syncdata->syncedcount < syncstore->
nsolvers )
438 SCIP_Longint syncnum,
461 if( (*syncdata)->syncnum != syncnum )
464 (*syncdata)->nsols = 0;
466 (*syncdata)->syncedcount = 0;
468 (*syncdata)->bestlowerbound = -(*syncdata)->bestupperbound;
470 (*syncdata)->winner = 0;
471 (*syncdata)->syncnum = syncnum;
472 (*syncdata)->syncfreq = 0.0;
484 SCIP_Bool printline =
FALSE;
491 ++(*syncdata)->syncedcount;
493 if( (*syncdata)->syncedcount == syncstore->
nsolvers )
523 return syncdata->status;
547 return syncdata->syncedcount;
568 return syncdata->memtotal;
578 return syncdata->syncfreq;
588 return syncdata->bestupperbound;
598 return syncdata->bestlowerbound;
604 SCIP_Real*** solvalues,
614 *solvalues = syncdata->sols;
615 *solowner = syncdata->solsource;
616 *nsols = syncdata->nsols;
626 return syncdata->boundstore;
658 if( status > syncdata->status || (status == syncdata->status && solverid < syncdata->winner) )
660 syncdata->status = status;
661 syncdata->winner = solverid;
666 if( status < syncdata->status || (status == syncdata->status && solverid < syncdata->winner) )
668 syncdata->status = status;
669 syncdata->winner = solverid;
672 else if( syncdata->winner < 0 )
674 syncdata->status = status;
675 syncdata->winner = solverid;
682 SCIP_Longint memtotal
687 syncdata->memtotal += memtotal;
698 syncdata->bestupperbound =
MIN(syncdata->bestupperbound, upperbound);
709 syncdata->bestlowerbound =
MAX(syncdata->bestlowerbound, lowerbound);
732 for( pos = 0; pos < syncdata->nsols; ++pos )
734 if( syncdata->solobj[pos] < solobj || (syncdata->solobj[pos] == solobj && ownerid < syncdata->solsource[pos]) )
738 if( syncdata->nsols < syncstore->
maxnsols )
740 for(
i = syncdata->nsols;
i > pos; --
i )
742 syncdata->solobj[
i] = syncdata->solobj[
i - 1];
743 syncdata->solsource[
i] = syncdata->solsource[
i - 1];
753 for(
i = 0;
i < pos; ++
i )
755 syncdata->solobj[
i] = syncdata->solobj[
i + 1];
756 syncdata->solsource[
i] = syncdata->solsource[
i + 1];
763 syncdata->solobj[pos] = solobj;
764 syncdata->solsource[pos] = ownerid;
765 *buffer = syncdata->sols[pos];
807 return syncstore->
mode;
SCIP_RETCODE SCIPboundstoreMerge(SCIP *scip, SCIP_BOUNDSTORE *target, SCIP_BOUNDSTORE *source)
void SCIPboundstoreFree(SCIP *scip, SCIP_BOUNDSTORE **boundstore)
SCIP_RETCODE SCIPboundstoreCreate(SCIP *scip, SCIP_BOUNDSTORE **boundstore, int nvars)
void SCIPboundstoreClear(SCIP_BOUNDSTORE *boundstore)
int SCIPboundstoreGetNChgs(SCIP_BOUNDSTORE *boundstore)
the interface of the boundstore structure
datastructures for concurrent solvers
int SCIPgetNConcurrentSolvers(SCIP *scip)
helper functions for concurrent scip solvers
common defines and data types used in all packages of SCIP
#define SCIP_CALL_ABORT(x)
int SCIPgetNVars(SCIP *scip)
SCIP_RETCODE SCIPgetRealParam(SCIP *scip, const char *name, SCIP_Real *value)
SCIP_RETCODE SCIPgetIntParam(SCIP *scip, const char *name, int *value)
void SCIPswapPointers(void **pointer1, void **pointer2)
SCIP_RETCODE SCIPautoselectDisps(SCIP *scip)
#define SCIPfreeBlockMemoryArray(scip, ptr, num)
#define SCIPallocBlockMemoryArray(scip, ptr, num)
SCIP_Longint SCIPgetMemTotal(SCIP *scip)
SCIP_SYNCSTORE * SCIPgetSyncstore(SCIP *scip)
SCIP_RETCODE SCIPprintDisplayLine(SCIP *scip, FILE *file, SCIP_VERBLEVEL verblevel, SCIP_Bool endline)
SCIP_Longint SCIPgetNNZs(SCIP *scip)
SCIP_Real SCIPinfinity(SCIP *scip)
assert(minobj< SCIPgetCutoffbound(scip))
memory allocation routines
#define BMSfreeMemory(ptr)
#define BMSallocMemory(ptr)
internal methods for storing and manipulating the main problem
public methods for message output
datastructures for concurrent solvers
the struct definitions for the synchronization store
SCIP_Bool SCIPsyncstoreSolveIsStopped(SCIP_SYNCSTORE *syncstore)
SCIP_Real SCIPsyncdataGetSyncFreq(SCIP_SYNCDATA *syncdata)
SCIP_Longint SCIPsyncdataGetMemTotal(SCIP_SYNCDATA *syncdata)
SCIP_BOUNDSTORE * SCIPsyncdataGetBoundChgs(SCIP_SYNCDATA *syncdata)
SCIP_Real SCIPsyncstoreGetLastUpperbound(SCIP_SYNCSTORE *syncstore)
SCIP_RETCODE SCIPsyncstoreFinishSync(SCIP_SYNCSTORE *syncstore, SCIP_SYNCDATA **syncdata)
SCIP_Real SCIPsyncstoreGetLastLowerbound(SCIP_SYNCSTORE *syncstore)
SCIP_Real SCIPsyncdataGetUpperbound(SCIP_SYNCDATA *syncdata)
void SCIPsyncdataSetUpperbound(SCIP_SYNCDATA *syncdata, SCIP_Real upperbound)
SCIP_RETCODE SCIPsyncdataAddBoundChanges(SCIP_SYNCSTORE *syncstore, SCIP_SYNCDATA *syncdata, SCIP_BOUNDSTORE *boundstore)
int SCIPsyncstoreGetWinner(SCIP_SYNCSTORE *syncstore)
SCIP_RETCODE SCIPsyncstoreEnsureAllSynced(SCIP_SYNCSTORE *syncstore, SCIP_SYNCDATA *syncdata)
void SCIPsyncdataSetSyncFreq(SCIP_SYNCSTORE *syncstore, SCIP_SYNCDATA *syncdata, SCIP_Real syncfreq)
SCIP_Real SCIPsyncstoreGetLastSyncfreq(SCIP_SYNCSTORE *syncstore)
void SCIPsyncdataGetSolutions(SCIP_SYNCDATA *syncdata, SCIP_Real ***solvalues, int **solowner, int *nsols)
void SCIPsyncdataSetStatus(SCIP_SYNCDATA *syncdata, SCIP_STATUS status, int solverid)
void SCIPsyncstoreSetSolveIsStopped(SCIP_SYNCSTORE *syncstore, SCIP_Bool stopped)
SCIP_RETCODE SCIPsyncstoreRelease(SCIP_SYNCSTORE **syncstore)
SCIP_Longint SCIPsyncstoreGetLastMemTotal(SCIP_SYNCSTORE *syncstore)
SCIP_RETCODE SCIPsyncstoreExit(SCIP_SYNCSTORE *syncstore)
void SCIPsyncdataSetLowerbound(SCIP_SYNCDATA *syncdata, SCIP_Real lowerbound)
SCIP_RETCODE SCIPsyncstoreCapture(SCIP_SYNCSTORE *syncstore)
int SCIPsyncstoreGetLastNBounds(SCIP_SYNCSTORE *syncstore)
static int getNSyncdata(SCIP *scip)
int SCIPsyncstoreGetLastNSols(SCIP_SYNCSTORE *syncstore)
SCIP_RETCODE SCIPsyncstoreStartSync(SCIP_SYNCSTORE *syncstore, SCIP_Longint syncnum, SCIP_SYNCDATA **syncdata)
void SCIPsyncdataGetSolutionBuffer(SCIP_SYNCSTORE *syncstore, SCIP_SYNCDATA *syncdata, SCIP_Real solobj, int ownerid, SCIP_Real **buffer)
SCIP_Real SCIPsyncdataGetLowerbound(SCIP_SYNCDATA *syncdata)
SCIP_PARALLELMODE SCIPsyncstoreGetMode(SCIP_SYNCSTORE *syncstore)
SCIP_RETCODE SCIPsyncstoreCreate(SCIP_SYNCSTORE **syncstore)
int SCIPsyncdataGetNSynced(SCIP_SYNCDATA *syncdata)
SCIP_SYNCDATA * SCIPsyncstoreGetSyncdata(SCIP_SYNCSTORE *syncstore, SCIP_Longint syncnum)
SCIP_Bool SCIPsyncstoreIsInitialized(SCIP_SYNCSTORE *syncstore)
SCIP_SYNCDATA * SCIPsyncstoreGetNextSyncdata(SCIP_SYNCSTORE *syncstore, SCIP_SYNCDATA *syncdata, SCIP_Real syncfreq, SCIP_Longint writenum, SCIP_Real *delay)
void SCIPsyncdataAddMemTotal(SCIP_SYNCDATA *syncdata, SCIP_Longint memtotal)
int SCIPsyncstoreGetNSolvers(SCIP_SYNCSTORE *syncstore)
SCIP_STATUS SCIPsyncdataGetStatus(SCIP_SYNCDATA *syncdata)
SCIP_RETCODE SCIPsyncstoreInit(SCIP *scip)
the function declarations for the synchronization store
the type definitions for the SCIP parallel interface
SCIP_RETCODE SCIPtpiWaitCondition(SCIP_CONDITION *condition, SCIP_LOCK *lock)
SCIP_RETCODE SCIPtpiAcquireLock(SCIP_LOCK *lock)
SCIP_RETCODE SCIPtpiExit(void)
SCIP_RETCODE SCIPtpiBroadcastCondition(SCIP_CONDITION *condition)
void SCIPtpiDestroyLock(SCIP_LOCK **lock)
void SCIPtpiDestroyCondition(SCIP_CONDITION **condition)
SCIP_RETCODE SCIPtpiInitLock(SCIP_LOCK **lock)
SCIP_RETCODE SCIPtpiReleaseLock(SCIP_LOCK *lock)
SCIP_RETCODE SCIPtpiInitCondition(SCIP_CONDITION **condition)
SCIP_RETCODE SCIPtpiInit(int nthreads, int queuesize, SCIP_Bool blockwhenfull)
enum SCIP_Retcode SCIP_RETCODE
enum SCIP_Status SCIP_STATUS
enum SCIP_Parallelmode SCIP_PARALLELMODE
@ SCIP_PARA_DETERMINISTIC
struct SCIP_SyncData SCIP_SYNCDATA