1 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ 2 /* */ 3 /* This file is part of the program and library */ 4 /* SCIP --- Solving Constraint Integer Programs */ 5 /* */ 6 /* Copyright (C) 2002-2021 Konrad-Zuse-Zentrum */ 7 /* fuer Informationstechnik Berlin */ 8 /* */ 9 /* SCIP is distributed under the terms of the ZIB Academic License. */ 10 /* */ 11 /* You should have received a copy of the ZIB Academic License */ 12 /* along with SCIP; see the file COPYING. If not visit scipopt.org. */ 13 /* */ 14 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ 15 16 /**@file struct_concsolver.h 17 * @ingroup INTERNALAPI 18 * @brief datastructures for concurrent solvers 19 * @author Leona Gottwald 20 */ 21 22 /*---+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2*/ 23 24 #ifndef __SCIP_STRUCT_CONCSOLVER_H__ 25 #define __SCIP_STRUCT_CONCSOLVER_H__ 26 27 28 #include "scip/def.h" 29 #include "scip/type_concsolver.h" 30 #include "scip/type_clock.h" 31 32 #ifdef __cplusplus 33 extern "C" { 34 #endif 35 36 /** concurrent solver data structure */ 37 struct SCIP_ConcSolverType 38 { 39 int ninstances; /**< number of instances created from this concurrent solver type */ 40 SCIP_Real prefprio; /**< the weight of the concurrent */ 41 char* name; /**< name of concurrent solver */ 42 SCIP_CONCSOLVERTYPEDATA* data; /**< user data of concurrent solver type */ 43 SCIP_DECL_CONCSOLVERCREATEINST ((*concsolvercreateinst)); /**< creates an instance of the concurrent solver */ 44 SCIP_DECL_CONCSOLVERDESTROYINST ((*concsolverdestroyinst)); /**< destroys an instance of the concurrent solver */ 45 SCIP_DECL_CONCSOLVERINITSEEDS ((*concsolverinitseeds)); /**< initialize random seeds of concurrent solver */ 46 SCIP_DECL_CONCSOLVEREXEC ((*concsolverexec)); /**< execution method of concurrent solver */ 47 SCIP_DECL_CONCSOLVERCOPYSOLVINGDATA ((*concsolvercopysolvdata));/**< copies the solving data */ 48 SCIP_DECL_CONCSOLVERSTOP ((*concsolverstop)); /**< terminate solving in concurrent solver */ 49 SCIP_DECL_CONCSOLVERSYNCWRITE ((*concsolversyncwrite)); /**< synchronization method of concurrent solver for sharing it's data */ 50 SCIP_DECL_CONCSOLVERSYNCREAD ((*concsolversyncread)); /**< synchronization method of concurrent solver for reading shared data */ 51 SCIP_DECL_CONCSOLVERTYPEFREEDATA ((*concsolvertypefreedata));/**< frees user data of concurrent solver type */ 52 }; 53 54 /** concurrent solver data structure */ 55 struct SCIP_ConcSolver 56 { 57 SCIP_CONCSOLVERTYPE* type; /**< type of this concurrent solver */ 58 int idx; /**< index of initialized exernal solver */ 59 char* name; /**< name of concurrent solver */ 60 SCIP_CONCSOLVERDATA* data; /**< user data of concurrent solver */ 61 SCIP_SYNCDATA* syncdata; /**< most recent synchronization data that has been read */ 62 SCIP_Longint nsyncs; /**< total number of synchronizations */ 63 SCIP_Real timesincelastsync; /**< time since the last synchronization */ 64 SCIP_Real syncdelay; /**< current delay of synchronization data */ 65 SCIP_Real syncfreq; /**< current synchronization frequency of the concurrent solver */ 66 SCIP_Real solvingtime; /**< solving time with wall clock */ 67 SCIP_Bool stopped; /**< flag to store if the concurrent solver has been stopped 68 * through the SCIPconcsolverStop function */ 69 SCIP_Longint nlpiterations; /**< number of lp iterations the concurrent solver used */ 70 SCIP_Longint nnodes; /**< number of nodes the concurrent solver used */ 71 SCIP_Longint nsolsrecvd; /**< number of solutions the concurrent solver received */ 72 SCIP_Longint nsolsshared; /**< number of solutions the concurrent solver found */ 73 SCIP_Longint ntighterbnds; /**< number of tighter global variable bounds the concurrent solver received */ 74 SCIP_Longint ntighterintbnds; /**< number of tighter global variable bounds the concurrent solver received 75 * on integer variables */ 76 SCIP_CLOCK* totalsynctime; /**< total time used for synchronization, including idle time */ 77 }; 78 79 #ifdef __cplusplus 80 } 81 #endif 82 83 #endif 84