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_sepastore.h 17 * @ingroup INTERNALAPI 18 * @brief datastructures for storing conflicts 19 * @author Jakob Witzig 20 */ 21 22 /*---+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2*/ 23 24 #ifndef __SCIP_STRUCT_CONFLICTSTORE_H__ 25 #define __SCIP_STRUCT_CONFLICTSTORE_H__ 26 27 28 #include "scip/def.h" 29 #include "scip/type_conflictstore.h" 30 31 #ifdef __cplusplus 32 extern "C" { 33 #endif 34 35 /** storage for conflicts */ 36 struct SCIP_ConflictStore 37 { 38 SCIP_EVENTHDLR* eventhdlr; /**< event handler to catch improving solutions */ 39 SCIP_CONS** conflicts; /**< array with conflicts */ 40 SCIP_CONS** dualrayconfs; /**< array with proofs based on dual rays */ 41 SCIP_CONS** dualsolconfs; /**< array with proofs based on dual solutions */ 42 SCIP_CONS** origconfs; /**< array of original conflicts added in stage SCIP_STAGE_PROBLEM */ 43 SCIP_Real* confprimalbnds; /**< array of primal bounds valid at the time the corresponding bound exceeding 44 * conflict was found (-infinity if the conflict based on an infeasible LP) */ 45 SCIP_Real* dualprimalbnds; /**< array of primal bounds valid at the time the corresponding dual proof 46 * based on a dual solution was found */ 47 SCIP_Real* scalefactors; /**< scaling factor that needs to be considered when updating the side */ 48 SCIP_Bool* updateside; /**< array to store whether the side should be updated whenever a new incumbent is found */ 49 SCIP_Bool* drayrelaxonly; /**< array to store whether the dual proof is valid for the current relaxation only */ 50 SCIP_Bool* dsolrelaxonly; /**< array to store whether the dual proof is valid for the current relaxation only */ 51 SCIP_Real avgswitchlength; /**< average length of switched paths */ 52 SCIP_Real lastcutoffbound; /**< last cutoff bound for which the conflict store was cleaned */ 53 SCIP_Longint lastnodenum; /**< number of the last seen node */ 54 SCIP_Longint ncleanups; /**< number of storage cleanups */ 55 SCIP_Longint nnzdualrays; /**< number of non-zeros in all stored proofs based on dual rays */ 56 SCIP_Longint nnzdualsols; /**< number of non-zeros in all stored proofs based on dual solutions */ 57 int conflictsize; /**< size of conflict array (bounded by conflict->maxpoolsize) */ 58 int origconflictsize; /**< size of origconfs array */ 59 int nconflicts; /**< number of stored conflicts */ 60 int ndualrayconfs; /**< number of stored proofs based on dual rays */ 61 int ndualsolconfs; /**< number of stored proofs based on dual solutions */ 62 int norigconfs; /**< number of original conflicts */ 63 int ncbconflicts; /**< number of conflicts depending on cutoff bound */ 64 int nconflictsfound; /**< total number of conflicts found so far */ 65 int cleanupfreq; /**< frequency to cleanup the storage if the storage is not full */ 66 int nswitches; /**< number of path switches */ 67 int initstoresize; /**< initial size of the storage (different to maxstoresize iff dynamic) */ 68 int storesize; /**< current size of the storage (different to maxstoresize iff dynamic) */ 69 int maxstoresize; /**< maximal size of the storage */ 70 }; 71 72 #ifdef __cplusplus 73 } 74 #endif 75 76 #endif 77