1 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ 2 /* */ 3 /* This file is part of the program and library */ 4 /* SCIP --- Solving Constraint Integer Programs */ 5 /* */ 6 /* Copyright (c) 2002-2023 Zuse Institute Berlin (ZIB) */ 7 /* */ 8 /* Licensed under the Apache License, Version 2.0 (the "License"); */ 9 /* you may not use this file except in compliance with the License. */ 10 /* You may obtain a copy of the License at */ 11 /* */ 12 /* http://www.apache.org/licenses/LICENSE-2.0 */ 13 /* */ 14 /* Unless required by applicable law or agreed to in writing, software */ 15 /* distributed under the License is distributed on an "AS IS" BASIS, */ 16 /* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. */ 17 /* See the License for the specific language governing permissions and */ 18 /* limitations under the License. */ 19 /* */ 20 /* You should have received a copy of the Apache-2.0 license */ 21 /* along with SCIP; see the file LICENSE. If not visit scipopt.org. */ 22 /* */ 23 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ 24 25 /**@file struct_nlhdlr.h 26 * @ingroup INTERNALAPI 27 * @brief structure definitions related to nonlinear handlers of nonlinear constraints 28 * @author Ksenia Bestuzheva 29 * @author Benjamin Mueller 30 * @author Felipe Serrano 31 * @author Stefan Vigerske 32 */ 33 34 #ifndef SCIP_STRUCT_NLHLDR_H_ 35 #define SCIP_STRUCT_NLHLDR_H_ 36 37 #include "scip/def.h" 38 #include "scip/type_scip.h" 39 #include "scip/type_nlhdlr.h" 40 #include "scip/type_clock.h" 41 42 /** generic data and callback methods of a nonlinear handler */ 43 struct SCIP_Nlhdlr 44 { 45 char* name; /**< nonlinear handler name */ 46 char* desc; /**< nonlinear handler description (can be NULL) */ 47 SCIP_NLHDLRDATA* data; /**< data of handler */ 48 49 int detectpriority; /**< detection priority of nonlinear handler */ 50 int enfopriority; /**< enforcement priority of nonlinear handler */ 51 SCIP_Bool enabled; /**< whether the nonlinear handler should be used */ 52 53 /* callbacks */ 54 SCIP_DECL_NLHDLRFREEHDLRDATA((*freehdlrdata)); /**< callback to free data of handler (can be NULL) */ 55 SCIP_DECL_NLHDLRFREEEXPRDATA((*freeexprdata)); /**< callback to free expression specific data (can be NULL) */ 56 SCIP_DECL_NLHDLRCOPYHDLR((*copyhdlr)); /**< callback to copy nonlinear handler (can be NULL) */ 57 SCIP_DECL_NLHDLRINIT((*init)); /**< initialization callback (can be NULL) */ 58 SCIP_DECL_NLHDLREXIT((*exit)); /**< deinitialization callback (can be NULL) */ 59 SCIP_DECL_NLHDLRDETECT((*detect)); /**< structure detection callback */ 60 SCIP_DECL_NLHDLREVALAUX((*evalaux)); /**< auxiliary evaluation callback */ 61 SCIP_DECL_NLHDLRINITSEPA((*initsepa)); /**< separation initialization callback (can be NULL) */ 62 SCIP_DECL_NLHDLRENFO((*enfo)); /**< enforcement callback (can be NULL) */ 63 SCIP_DECL_NLHDLRESTIMATE((*estimate)); /**< estimator callback (can be NULL) */ 64 SCIP_DECL_NLHDLREXITSEPA((*exitsepa)); /**< separation deinitialization callback (can be NULL) */ 65 SCIP_DECL_NLHDLRINTEVAL((*inteval)); /**< interval evaluation callback (can be NULL) */ 66 SCIP_DECL_NLHDLRREVERSEPROP((*reverseprop)); /**< reverse propagation callback (can be NULL) */ 67 SCIP_DECL_NLHDLRSOLLINEARIZE((*sollinearize)); /**< solution linearization callback (can be NULL) */ 68 69 /* statistics */ 70 SCIP_Longint nenfocalls; /**< number of times, the enforcement or estimation callback was called */ 71 SCIP_Longint nintevalcalls; /**< number of times, the interval evaluation callback was called */ 72 SCIP_Longint npropcalls; /**< number of times, the propagation callback was called */ 73 SCIP_Longint nseparated; /**< number of times, the nonlinear handler enforced by separation */ 74 SCIP_Longint ncutoffs; /**< number of cutoffs found so far by this nonlinear handler */ 75 SCIP_Longint ndomreds; /**< number of domain reductions found so far by this nonlinear handler */ 76 SCIP_Longint ndetections; /**< number of detect calls in which structure was detected (success returned by detect call) (over all runs) */ 77 SCIP_Longint ndetectionslast; /**< number of detect calls in which structure was detected (success returned by detect call) (in last round) */ 78 SCIP_Longint nbranchscores; /**< number of times, branching scores were added by this nonlinear handler */ 79 80 SCIP_CLOCK* detecttime; /**< time used for detection */ 81 SCIP_CLOCK* enfotime; /**< time used for enforcement or estimation */ 82 SCIP_CLOCK* proptime; /**< time used for reverse propagation */ 83 SCIP_CLOCK* intevaltime; /**< time used for interval evaluation */ 84 }; 85 86 #endif /* SCIP_STRUCT_NLHLDR_H_ */ 87