/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /* */ /* This file is part of the program and library */ /* SCIP --- Solving Constraint Integer Programs */ /* */ /* Copyright 2002-2022 Zuse Institute Berlin */ /* */ /* Licensed under the Apache License, Version 2.0 (the "License"); */ /* you may not use this file except in compliance with the License. */ /* You may obtain a copy of the License at */ /* */ /* http://www.apache.org/licenses/LICENSE-2.0 */ /* */ /* Unless required by applicable law or agreed to in writing, software */ /* distributed under the License is distributed on an "AS IS" BASIS, */ /* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. */ /* See the License for the specific language governing permissions and */ /* limitations under the License. */ /* */ /* You should have received a copy of the Apache-2.0 license */ /* along with SCIP; see the file LICENSE. If not visit scipopt.org. */ /* */ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /**@file scip_cons.h * @ingroup PUBLICCOREAPI * @brief public methods for constraint handler plugins and constraints * @author Tobias Achterberg * @author Timo Berthold * @author Thorsten Koch * @author Alexander Martin * @author Marc Pfetsch * @author Kati Wolter * @author Gregor Hendel * @author Leona Gottwald */ /*---+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2*/ #ifndef __SCIP_SCIP_CONS_H__ #define __SCIP_SCIP_CONS_H__ #include "scip/def.h" #include "scip/type_cons.h" #include "scip/type_heur.h" #include "scip/type_lp.h" #include "scip/type_misc.h" #include "scip/type_result.h" #include "scip/type_retcode.h" #include "scip/type_scip.h" #include "scip/type_sol.h" #include "scip/type_timing.h" #include "scip/type_var.h" /* In debug mode, we include the SCIP's structure in scip.c, such that no one can access * this structure except the interface methods in scip.c. * In optimized mode, the structure is included in scip.h, because some of the methods * are implemented as defines for performance reasons (e.g. the numerical comparisons). * Additionally, the internal "set.h" is included, such that the defines in set.h are * available in optimized mode. */ #ifdef NDEBUG #include "scip/struct_scip.h" #include "scip/cons.h" #endif #ifdef __cplusplus extern "C" { #endif /**@addtogroup PublicConshdlrMethods * * @{ */ /** creates a constraint handler and includes it in SCIP. * * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes. * * @pre This method can be called if SCIP is in one of the following stages: * - \ref SCIP_STAGE_INIT * - \ref SCIP_STAGE_PROBLEM * * @note method has all constraint handler callbacks as arguments and is thus changed every time a new * callback is added * in future releases; consider using SCIPincludeConshdlrBasic() and setter functions * if you seek for a method which is less likely to change in future releases */ SCIP_EXPORT SCIP_RETCODE SCIPincludeConshdlr( SCIP* scip, /**< SCIP data structure */ const char* name, /**< name of constraint handler */ const char* desc, /**< description of constraint handler */ int sepapriority, /**< priority of the constraint handler for separation */ int enfopriority, /**< priority of the constraint handler for constraint enforcing */ int chckpriority, /**< priority of the constraint handler for checking feasibility (and propagation) */ int sepafreq, /**< frequency for separating cuts; zero means to separate only in the root node */ int propfreq, /**< frequency for propagating domains; zero means only preprocessing propagation */ int eagerfreq, /**< frequency for using all instead of only the useful constraints in separation, * propagation and enforcement, -1 for no eager evaluations, 0 for first only */ int maxprerounds, /**< maximal number of presolving rounds the constraint handler participates in (-1: no limit) */ SCIP_Bool delaysepa, /**< should separation method be delayed, if other separators found cuts? */ SCIP_Bool delayprop, /**< should propagation method be delayed, if other propagators found reductions? */ SCIP_Bool needscons, /**< should the constraint handler be skipped, if no constraints are available? */ SCIP_PROPTIMING proptiming, /**< positions in the node solving loop where propagation method of constraint handlers should be executed */ SCIP_PRESOLTIMING presoltiming, /**< timing mask of the constraint handler's presolving method */ SCIP_DECL_CONSHDLRCOPY((*conshdlrcopy)), /**< copy method of constraint handler or NULL if you don't want to copy your plugin into sub-SCIPs */ SCIP_DECL_CONSFREE ((*consfree)), /**< destructor of constraint handler */ SCIP_DECL_CONSINIT ((*consinit)), /**< initialize constraint handler */ SCIP_DECL_CONSEXIT ((*consexit)), /**< deinitialize constraint handler */ SCIP_DECL_CONSINITPRE ((*consinitpre)), /**< presolving initialization method of constraint handler */ SCIP_DECL_CONSEXITPRE ((*consexitpre)), /**< presolving deinitialization method of constraint handler */ SCIP_DECL_CONSINITSOL ((*consinitsol)), /**< solving process initialization method of constraint handler */ SCIP_DECL_CONSEXITSOL ((*consexitsol)), /**< solving process deinitialization method of constraint handler */ SCIP_DECL_CONSDELETE ((*consdelete)), /**< free specific constraint data */ SCIP_DECL_CONSTRANS ((*constrans)), /**< transform constraint data into data belonging to the transformed problem */ SCIP_DECL_CONSINITLP ((*consinitlp)), /**< initialize LP with relaxations of "initial" constraints */ SCIP_DECL_CONSSEPALP ((*conssepalp)), /**< separate cutting planes for LP solution */ SCIP_DECL_CONSSEPASOL ((*conssepasol)), /**< separate cutting planes for arbitrary primal solution */ SCIP_DECL_CONSENFOLP ((*consenfolp)), /**< enforcing constraints for LP solutions */ SCIP_DECL_CONSENFORELAX ((*consenforelax)), /**< enforcing constraints for relaxation solutions */ SCIP_DECL_CONSENFOPS ((*consenfops)), /**< enforcing constraints for pseudo solutions */ SCIP_DECL_CONSCHECK ((*conscheck)), /**< check feasibility of primal solution */ SCIP_DECL_CONSPROP ((*consprop)), /**< propagate variable domains */ SCIP_DECL_CONSPRESOL ((*conspresol)), /**< presolving method */ SCIP_DECL_CONSRESPROP ((*consresprop)), /**< propagation conflict resolving method */ SCIP_DECL_CONSLOCK ((*conslock)), /**< variable rounding lock method */ SCIP_DECL_CONSACTIVE ((*consactive)), /**< activation notification method */ SCIP_DECL_CONSDEACTIVE((*consdeactive)), /**< deactivation notification method */ SCIP_DECL_CONSENABLE ((*consenable)), /**< enabling notification method */ SCIP_DECL_CONSDISABLE ((*consdisable)), /**< disabling notification method */ SCIP_DECL_CONSDELVARS ((*consdelvars)), /**< variable deletion method */ SCIP_DECL_CONSPRINT ((*consprint)), /**< constraint display method */ SCIP_DECL_CONSCOPY ((*conscopy)), /**< constraint copying method */ SCIP_DECL_CONSPARSE ((*consparse)), /**< constraint parsing method */ SCIP_DECL_CONSGETVARS ((*consgetvars)), /**< constraint get variables method */ SCIP_DECL_CONSGETNVARS((*consgetnvars)), /**< constraint get number of variable method */ SCIP_DECL_CONSGETDIVEBDCHGS((*consgetdivebdchgs)), /**< constraint handler diving solution enforcement method */ SCIP_CONSHDLRDATA* conshdlrdata /**< constraint handler data */ ); /** creates a constraint handler and includes it in SCIP. All non-fundamental (or optional) callbacks will be set to NULL. * Optional callbacks can be set via specific setter functions, see SCIPsetConshdlrInit(), SCIPsetConshdlrExit(), * SCIPsetConshdlrCopy(), SCIPsetConshdlrFree(), SCIPsetConshdlrInitsol(), SCIPsetConshdlrExitsol(), * SCIPsetConshdlrInitpre(), SCIPsetConshdlrExitpre(), SCIPsetConshdlrPresol(), SCIPsetConshdlrDelete(), * SCIPsetConshdlrDelvars(), SCIPsetConshdlrInitlp(), SCIPsetConshdlrActive(), SCIPsetConshdlrDeactive(), * SCIPsetConshdlrEnable(), SCIPsetConshdlrDisable(), SCIPsetConshdlrResprop(), SCIPsetConshdlrTrans(), * SCIPsetConshdlrPrint(), SCIPsetConshdlrParse(), SCIPsetConshdlrGetVars(), SCIPsetConshdlrGetNVars(), and * SCIPsetConshdlrGetDiveBdChgs(). * * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes. * * @pre This method can be called if SCIP is in one of the following stages: * - \ref SCIP_STAGE_INIT * - \ref SCIP_STAGE_PROBLEM * * @note if you want to set all callbacks with a single method call, consider using SCIPincludeConshdlr() instead */ SCIP_EXPORT SCIP_RETCODE SCIPincludeConshdlrBasic( SCIP* scip, /**< SCIP data structure */ SCIP_CONSHDLR** conshdlrptr, /**< reference to a constraint handler pointer, or NULL */ const char* name, /**< name of constraint handler */ const char* desc, /**< description of constraint handler */ int enfopriority, /**< priority of the constraint handler for constraint enforcing */ int chckpriority, /**< priority of the constraint handler for checking feasibility (and propagation) */ int eagerfreq, /**< frequency for using all instead of only the useful constraints in separation, * propagation and enforcement, -1 for no eager evaluations, 0 for first only */ SCIP_Bool needscons, /**< should the constraint handler be skipped, if no constraints are available? */ SCIP_DECL_CONSENFOLP ((*consenfolp)), /**< enforcing constraints for LP solutions */ SCIP_DECL_CONSENFOPS ((*consenfops)), /**< enforcing constraints for pseudo solutions */ SCIP_DECL_CONSCHECK ((*conscheck)), /**< check feasibility of primal solution */ SCIP_DECL_CONSLOCK ((*conslock)), /**< variable rounding lock method */ SCIP_CONSHDLRDATA* conshdlrdata /**< constraint handler data */ ); /** sets all separation related callbacks/parameters of the constraint handler * * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes. * * @pre This method can be called if SCIP is in one of the following stages: * - \ref SCIP_STAGE_INIT * - \ref SCIP_STAGE_PROBLEM */ SCIP_EXPORT SCIP_RETCODE SCIPsetConshdlrSepa( SCIP* scip, /**< SCIP data structure */ SCIP_CONSHDLR* conshdlr, /**< constraint handler */ SCIP_DECL_CONSSEPALP ((*conssepalp)), /**< separate cutting planes for LP solution */ SCIP_DECL_CONSSEPASOL ((*conssepasol)), /**< separate cutting planes for arbitrary primal solution */ int sepafreq, /**< frequency for separating cuts; zero means to separate only in the root node */ int sepapriority, /**< priority of the constraint handler for separation */ SCIP_Bool delaysepa /**< should separation method be delayed, if other separators found cuts? */ ); /** sets both the propagation callback and the propagation frequency of the constraint handler * * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes. * * @pre This method can be called if SCIP is in one of the following stages: * - \ref SCIP_STAGE_INIT * - \ref SCIP_STAGE_PROBLEM */ SCIP_EXPORT SCIP_RETCODE SCIPsetConshdlrProp( SCIP* scip, /**< SCIP data structure */ SCIP_CONSHDLR* conshdlr, /**< constraint handler */ SCIP_DECL_CONSPROP ((*consprop)), /**< propagate variable domains */ int propfreq, /**< frequency for propagating domains; zero means only preprocessing propagation */ SCIP_Bool delayprop, /**< should propagation method be delayed, if other propagators found reductions? */ SCIP_PROPTIMING proptiming /**< positions in the node solving loop where propagation should be executed */ ); /** sets relaxation enforcement method of the constraint handler * * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes. * * @pre This method can be called if SCIP is in one of the following stages: * - \ref SCIP_STAGE_INIT * - \ref SCIP_STAGE_PROBLEM */ SCIP_EXPORT SCIP_RETCODE SCIPsetConshdlrEnforelax( SCIP* scip, /**< SCIP data structure */ SCIP_CONSHDLR* conshdlr, /**< constraint handler */ SCIP_DECL_CONSENFORELAX ((*consenforelax)) /**< enforcement method for relaxation solution of constraint handler (might be NULL) */ ); /** sets copy method of both the constraint handler and each associated constraint * * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes. * * @pre This method can be called if SCIP is in one of the following stages: * - \ref SCIP_STAGE_INIT * - \ref SCIP_STAGE_PROBLEM */ SCIP_EXPORT SCIP_RETCODE SCIPsetConshdlrCopy( SCIP* scip, /**< SCIP data structure */ SCIP_CONSHDLR* conshdlr, /**< constraint handler */ SCIP_DECL_CONSHDLRCOPY((*conshdlrcopy)), /**< copy method of constraint handler or NULL if you don't want to copy your plugin into sub-SCIPs */ SCIP_DECL_CONSCOPY ((*conscopy)) /**< constraint copying method */ ); /** sets destructor method of constraint handler * * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes. * * @pre This method can be called if SCIP is in one of the following stages: * - \ref SCIP_STAGE_INIT * - \ref SCIP_STAGE_PROBLEM */ SCIP_EXPORT SCIP_RETCODE SCIPsetConshdlrFree( SCIP* scip, /**< SCIP data structure */ SCIP_CONSHDLR* conshdlr, /**< constraint handler */ SCIP_DECL_CONSFREE ((*consfree)) /**< destructor of constraint handler */ ); /** sets initialization method of constraint handler * * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes. * * @pre This method can be called if SCIP is in one of the following stages: * - \ref SCIP_STAGE_INIT * - \ref SCIP_STAGE_PROBLEM */ SCIP_EXPORT SCIP_RETCODE SCIPsetConshdlrInit( SCIP* scip, /**< SCIP data structure */ SCIP_CONSHDLR* conshdlr, /**< constraint handler */ SCIP_DECL_CONSINIT ((*consinit)) /**< initialize constraint handler */ ); /** sets deinitialization method of constraint handler * * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes. * * @pre This method can be called if SCIP is in one of the following stages: * - \ref SCIP_STAGE_INIT * - \ref SCIP_STAGE_PROBLEM */ SCIP_EXPORT SCIP_RETCODE SCIPsetConshdlrExit( SCIP* scip, /**< SCIP data structure */ SCIP_CONSHDLR* conshdlr, /**< constraint handler */ SCIP_DECL_CONSEXIT ((*consexit)) /**< deinitialize constraint handler */ ); /** sets solving process initialization method of constraint handler * * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes. * * @pre This method can be called if SCIP is in one of the following stages: * - \ref SCIP_STAGE_INIT * - \ref SCIP_STAGE_PROBLEM */ SCIP_EXPORT SCIP_RETCODE SCIPsetConshdlrInitsol( SCIP* scip, /**< SCIP data structure */ SCIP_CONSHDLR* conshdlr, /**< constraint handler */ SCIP_DECL_CONSINITSOL((*consinitsol)) /**< solving process initialization method of constraint handler */ ); /** sets solving process deinitialization method of constraint handler * * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes. * * @pre This method can be called if SCIP is in one of the following stages: * - \ref SCIP_STAGE_INIT * - \ref SCIP_STAGE_PROBLEM */ SCIP_EXPORT SCIP_RETCODE SCIPsetConshdlrExitsol( SCIP* scip, /**< SCIP data structure */ SCIP_CONSHDLR* conshdlr, /**< constraint handler */ SCIP_DECL_CONSEXITSOL ((*consexitsol))/**< solving process deinitialization method of constraint handler */ ); /** sets preprocessing initialization method of constraint handler * * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes. * * @pre This method can be called if SCIP is in one of the following stages: * - \ref SCIP_STAGE_INIT * - \ref SCIP_STAGE_PROBLEM */ SCIP_EXPORT SCIP_RETCODE SCIPsetConshdlrInitpre( SCIP* scip, /**< SCIP data structure */ SCIP_CONSHDLR* conshdlr, /**< constraint handler */ SCIP_DECL_CONSINITPRE((*consinitpre)) /**< preprocessing initialization method of constraint handler */ ); /** sets preprocessing deinitialization method of constraint handler * * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes. * * @pre This method can be called if SCIP is in one of the following stages: * - \ref SCIP_STAGE_INIT * - \ref SCIP_STAGE_PROBLEM */ SCIP_EXPORT SCIP_RETCODE SCIPsetConshdlrExitpre( SCIP* scip, /**< SCIP data structure */ SCIP_CONSHDLR* conshdlr, /**< constraint handler */ SCIP_DECL_CONSEXITPRE((*consexitpre)) /**< preprocessing deinitialization method of constraint handler */ ); /** sets presolving method of constraint handler * * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes. * * @pre This method can be called if SCIP is in one of the following stages: * - \ref SCIP_STAGE_INIT * - \ref SCIP_STAGE_PROBLEM */ SCIP_EXPORT SCIP_RETCODE SCIPsetConshdlrPresol( SCIP* scip, /**< SCIP data structure */ SCIP_CONSHDLR* conshdlr, /**< constraint handler */ SCIP_DECL_CONSPRESOL ((*conspresol)), /**< presolving method of constraint handler */ int maxprerounds, /**< maximal number of presolving rounds the constraint handler participates in (-1: no limit) */ SCIP_PRESOLTIMING presoltiming /**< timing mask of the constraint handler's presolving method */ ); /** sets method of constraint handler to free specific constraint data * * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes. * * @pre This method can be called if SCIP is in one of the following stages: * - \ref SCIP_STAGE_INIT * - \ref SCIP_STAGE_PROBLEM */ SCIP_EXPORT SCIP_RETCODE SCIPsetConshdlrDelete( SCIP* scip, /**< SCIP data structure */ SCIP_CONSHDLR* conshdlr, /**< constraint handler */ SCIP_DECL_CONSDELETE ((*consdelete)) /**< free specific constraint data */ ); /** sets method of constraint handler to transform constraint data into data belonging to the transformed problem * * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes. * * @pre This method can be called if SCIP is in one of the following stages: * - \ref SCIP_STAGE_INIT * - \ref SCIP_STAGE_PROBLEM */ SCIP_EXPORT SCIP_RETCODE SCIPsetConshdlrTrans( SCIP* scip, /**< SCIP data structure */ SCIP_CONSHDLR* conshdlr, /**< constraint handler */ SCIP_DECL_CONSTRANS ((*constrans)) /**< transform constraint data into data belonging to the transformed problem */ ); /** sets method of constraint handler to initialize LP with relaxations of "initial" constraints * * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes. * * @pre This method can be called if SCIP is in one of the following stages: * - \ref SCIP_STAGE_INIT * - \ref SCIP_STAGE_PROBLEM */ SCIP_EXPORT SCIP_RETCODE SCIPsetConshdlrInitlp( SCIP* scip, /**< SCIP data structure */ SCIP_CONSHDLR* conshdlr, /**< constraint handler */ SCIP_DECL_CONSINITLP ((*consinitlp)) /**< initialize LP with relaxations of "initial" constraints */ ); /** sets propagation conflict resolving method of constraint handler * * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes. * * @pre This method can be called if SCIP is in one of the following stages: * - \ref SCIP_STAGE_INIT * - \ref SCIP_STAGE_PROBLEM */ SCIP_EXPORT SCIP_RETCODE SCIPsetConshdlrResprop( SCIP* scip, /**< SCIP data structure */ SCIP_CONSHDLR* conshdlr, /**< constraint handler */ SCIP_DECL_CONSRESPROP ((*consresprop)) /**< propagation conflict resolving method */ ); /** sets activation notification method of constraint handler * * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes. * * @pre This method can be called if SCIP is in one of the following stages: * - \ref SCIP_STAGE_INIT * - \ref SCIP_STAGE_PROBLEM */ SCIP_EXPORT SCIP_RETCODE SCIPsetConshdlrActive( SCIP* scip, /**< SCIP data structure */ SCIP_CONSHDLR* conshdlr, /**< constraint handler */ SCIP_DECL_CONSACTIVE ((*consactive)) /**< activation notification method */ ); /** sets deactivation notification method of constraint handler * * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes. * * @pre This method can be called if SCIP is in one of the following stages: * - \ref SCIP_STAGE_INIT * - \ref SCIP_STAGE_PROBLEM */ SCIP_EXPORT SCIP_RETCODE SCIPsetConshdlrDeactive( SCIP* scip, /**< SCIP data structure */ SCIP_CONSHDLR* conshdlr, /**< constraint handler */ SCIP_DECL_CONSDEACTIVE((*consdeactive)) /**< deactivation notification method */ ); /** sets enabling notification method of constraint handler * * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes. * * @pre This method can be called if SCIP is in one of the following stages: * - \ref SCIP_STAGE_INIT * - \ref SCIP_STAGE_PROBLEM */ SCIP_EXPORT SCIP_RETCODE SCIPsetConshdlrEnable( SCIP* scip, /**< SCIP data structure */ SCIP_CONSHDLR* conshdlr, /**< constraint handler */ SCIP_DECL_CONSENABLE ((*consenable)) /**< enabling notification method */ ); /** sets disabling notification method of constraint handler * * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes. * * @pre This method can be called if SCIP is in one of the following stages: * - \ref SCIP_STAGE_INIT * - \ref SCIP_STAGE_PROBLEM */ SCIP_EXPORT SCIP_RETCODE SCIPsetConshdlrDisable( SCIP* scip, /**< SCIP data structure */ SCIP_CONSHDLR* conshdlr, /**< constraint handler */ SCIP_DECL_CONSDISABLE ((*consdisable)) /**< disabling notification method */ ); /** sets variable deletion method of constraint handler * * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes. * * @pre This method can be called if SCIP is in one of the following stages: * - \ref SCIP_STAGE_INIT * - \ref SCIP_STAGE_PROBLEM */ SCIP_EXPORT SCIP_RETCODE SCIPsetConshdlrDelvars( SCIP* scip, /**< SCIP data structure */ SCIP_CONSHDLR* conshdlr, /**< constraint handler */ SCIP_DECL_CONSDELVARS ((*consdelvars)) /**< variable deletion method */ ); /** sets constraint display method of constraint handler * * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes. * * @pre This method can be called if SCIP is in one of the following stages: * - \ref SCIP_STAGE_INIT * - \ref SCIP_STAGE_PROBLEM */ SCIP_EXPORT SCIP_RETCODE SCIPsetConshdlrPrint( SCIP* scip, /**< SCIP data structure */ SCIP_CONSHDLR* conshdlr, /**< constraint handler */ SCIP_DECL_CONSPRINT ((*consprint)) /**< constraint display method */ ); /** sets constraint parsing method of constraint handler * * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes. * * @pre This method can be called if SCIP is in one of the following stages: * - \ref SCIP_STAGE_INIT * - \ref SCIP_STAGE_PROBLEM */ SCIP_EXPORT SCIP_RETCODE SCIPsetConshdlrParse( SCIP* scip, /**< SCIP data structure */ SCIP_CONSHDLR* conshdlr, /**< constraint handler */ SCIP_DECL_CONSPARSE ((*consparse)) /**< constraint parsing method */ ); /** sets constraint variable getter method of constraint handler * * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes. * * @pre This method can be called if SCIP is in one of the following stages: * - \ref SCIP_STAGE_INIT * - \ref SCIP_STAGE_PROBLEM */ SCIP_EXPORT SCIP_RETCODE SCIPsetConshdlrGetVars( SCIP* scip, /**< SCIP data structure */ SCIP_CONSHDLR* conshdlr, /**< constraint handler */ SCIP_DECL_CONSGETVARS ((*consgetvars)) /**< constraint variable getter method */ ); /** sets constraint variable number getter method of constraint handler * * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes. * * @pre This method can be called if SCIP is in one of the following stages: * - \ref SCIP_STAGE_INIT * - \ref SCIP_STAGE_PROBLEM */ SCIP_EXPORT SCIP_RETCODE SCIPsetConshdlrGetNVars( SCIP* scip, /**< SCIP data structure */ SCIP_CONSHDLR* conshdlr, /**< constraint handler */ SCIP_DECL_CONSGETNVARS((*consgetnvars)) /**< constraint variable number getter method */ ); /** sets diving enforcement method of constraint handler * * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes. * * @pre This method can be called if SCIP is in one of the following stages: * - \ref SCIP_STAGE_INIT * - \ref SCIP_STAGE_PROBLEM */ SCIP_EXPORT SCIP_RETCODE SCIPsetConshdlrGetDiveBdChgs( SCIP* scip, /**< SCIP data structure */ SCIP_CONSHDLR* conshdlr, /**< constraint handler */ SCIP_DECL_CONSGETDIVEBDCHGS((*consgetdivebdchgs)) /**< constraint handler diving solution enforcement method */ ); /** returns the constraint handler of the given name, or NULL if not existing */ SCIP_EXPORT SCIP_CONSHDLR* SCIPfindConshdlr( SCIP* scip, /**< SCIP data structure */ const char* name /**< name of constraint handler */ ); /** returns the array of currently available constraint handlers */ SCIP_EXPORT SCIP_CONSHDLR** SCIPgetConshdlrs( SCIP* scip /**< SCIP data structure */ ); /** returns the number of currently available constraint handlers */ SCIP_EXPORT int SCIPgetNConshdlrs( SCIP* scip /**< SCIP data structure */ ); /** @} */ /**@addtogroup PublicConstraintMethods * * @{ */ /** creates and captures a constraint of the given constraint handler * * @warning If a constraint is marked to be checked for feasibility but not to be enforced, a LP or pseudo solution may * be declared feasible even if it violates this particular constraint. This constellation should only be * used, if no LP or pseudo solution can violate the constraint -- e.g. if a local constraint is redundant due * to the variable's local bounds. * * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes. * * @pre This method can be called if @p scip is in one of the following stages: * - \ref SCIP_STAGE_PROBLEM * - \ref SCIP_STAGE_TRANSFORMING * - \ref SCIP_STAGE_INITPRESOLVE * - \ref SCIP_STAGE_PRESOLVING * - \ref SCIP_STAGE_EXITPRESOLVE * - \ref SCIP_STAGE_PRESOLVED * - \ref SCIP_STAGE_INITSOLVE * - \ref SCIP_STAGE_SOLVING * - \ref SCIP_STAGE_EXITSOLVE * * @note the constraint gets captured, hence at one point you have to release it using the method SCIPreleaseCons() */ SCIP_EXPORT SCIP_RETCODE SCIPcreateCons( SCIP* scip, /**< SCIP data structure */ SCIP_CONS** cons, /**< pointer to constraint */ const char* name, /**< name of constraint */ SCIP_CONSHDLR* conshdlr, /**< constraint handler for this constraint */ SCIP_CONSDATA* consdata, /**< data for this specific constraint */ SCIP_Bool initial, /**< should the LP relaxation of constraint be in the initial LP? * Usually set to TRUE. Set to FALSE for 'lazy constraints'. */ SCIP_Bool separate, /**< should the constraint be separated during LP processing? * Usually set to TRUE. */ SCIP_Bool enforce, /**< should the constraint be enforced during node processing? * TRUE for model constraints, FALSE for additional, redundant constraints. */ SCIP_Bool check, /**< should the constraint be checked for feasibility? * TRUE for model constraints, FALSE for additional, redundant constraints. */ SCIP_Bool propagate, /**< should the constraint be propagated during node processing? * Usually set to TRUE. */ SCIP_Bool local, /**< is constraint only valid locally? * Usually set to FALSE. Has to be set to TRUE, e.g., for branching constraints. */ SCIP_Bool modifiable, /**< is constraint modifiable (subject to column generation)? * Usually set to FALSE. In column generation applications, set to TRUE if pricing * adds coefficients to this constraint. */ SCIP_Bool dynamic, /**< is constraint subject to aging? * Usually set to FALSE. Set to TRUE for own cuts which * are separated as constraints. */ SCIP_Bool removable, /**< should the relaxation be removed from the LP due to aging or cleanup? * Usually set to FALSE. Set to TRUE for 'lazy constraints' and 'user cuts'. */ SCIP_Bool stickingatnode /**< should the constraint always be kept at the node where it was added, even * if it may be moved to a more global node? * Usually set to FALSE. Set to TRUE to for constraints that represent node data. */ ); /** parses constraint information (in cip format) out of a string; if the parsing process was successful a constraint is * creates and captures; * * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes. * * @pre This method can be called if @p scip is in one of the following stages: * - \ref SCIP_STAGE_PROBLEM * - \ref SCIP_STAGE_TRANSFORMING * - \ref SCIP_STAGE_INITPRESOLVE * - \ref SCIP_STAGE_PRESOLVING * - \ref SCIP_STAGE_EXITPRESOLVE * - \ref SCIP_STAGE_PRESOLVED * - \ref SCIP_STAGE_SOLVING * - \ref SCIP_STAGE_EXITSOLVE * * @warning If a constraint is marked to be checked for feasibility but not to be enforced, a LP or pseudo solution may * be declared feasible even if it violates this particular constraint. This constellation should only be * used, if no LP or pseudo solution can violate the constraint -- e.g. if a local constraint is redundant due * to the variable's local bounds. */ SCIP_EXPORT SCIP_RETCODE SCIPparseCons( SCIP* scip, /**< SCIP data structure */ SCIP_CONS** cons, /**< pointer to store constraint */ const char* str, /**< string to parse for constraint */ SCIP_Bool initial, /**< should the LP relaxation of constraint be in the initial LP? * Usually set to TRUE. Set to FALSE for 'lazy constraints'. */ SCIP_Bool separate, /**< should the constraint be separated during LP processing? * Usually set to TRUE. */ SCIP_Bool enforce, /**< should the constraint be enforced during node processing? * TRUE for model constraints, FALSE for additional, redundant constraints. */ SCIP_Bool check, /**< should the constraint be checked for feasibility? * TRUE for model constraints, FALSE for additional, redundant constraints. */ SCIP_Bool propagate, /**< should the constraint be propagated during node processing? * Usually set to TRUE. */ SCIP_Bool local, /**< is constraint only valid locally? * Usually set to FALSE. Has to be set to TRUE, e.g., for branching constraints. */ SCIP_Bool modifiable, /**< is constraint modifiable (subject to column generation)? * Usually set to FALSE. In column generation applications, set to TRUE if pricing * adds coefficients to this constraint. */ SCIP_Bool dynamic, /**< is constraint subject to aging? * Usually set to FALSE. Set to TRUE for own cuts which * are separated as constraints. */ SCIP_Bool removable, /**< should the relaxation be removed from the LP due to aging or cleanup? * Usually set to FALSE. Set to TRUE for 'lazy constraints' and 'user cuts'. */ SCIP_Bool stickingatnode, /**< should the constraint always be kept at the node where it was added, even * if it may be moved to a more global node? * Usually set to FALSE. Set to TRUE to for constraints that represent node data. */ SCIP_Bool* success /**< pointer to store if the paring process was successful */ ); /** increases usage counter of constraint * * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes. * * @pre This method can be called if @p scip is in one of the following stages: * - \ref SCIP_STAGE_PROBLEM * - \ref SCIP_STAGE_TRANSFORMING * - \ref SCIP_STAGE_TRANSFORMED * - \ref SCIP_STAGE_INITPRESOLVE * - \ref SCIP_STAGE_PRESOLVING * - \ref SCIP_STAGE_EXITPRESOLVE * - \ref SCIP_STAGE_PRESOLVED * - \ref SCIP_STAGE_INITSOLVE * - \ref SCIP_STAGE_SOLVING * - \ref SCIP_STAGE_SOLVED */ SCIP_EXPORT SCIP_RETCODE SCIPcaptureCons( SCIP* scip, /**< SCIP data structure */ SCIP_CONS* cons /**< constraint to capture */ ); /** decreases usage counter of constraint, if the usage pointer reaches zero the constraint gets freed * * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes. * * @pre This method can be called if @p scip is in one of the following stages: * - \ref SCIP_STAGE_PROBLEM * - \ref SCIP_STAGE_TRANSFORMING * - \ref SCIP_STAGE_TRANSFORMED * - \ref SCIP_STAGE_INITPRESOLVE * - \ref SCIP_STAGE_PRESOLVING * - \ref SCIP_STAGE_EXITPRESOLVE * - \ref SCIP_STAGE_PRESOLVED * - \ref SCIP_STAGE_INITSOLVE * - \ref SCIP_STAGE_SOLVING * - \ref SCIP_STAGE_SOLVED * - \ref SCIP_STAGE_EXITSOLVE * - \ref SCIP_STAGE_FREETRANS * * @note the pointer of the constraint will be NULLed */ SCIP_EXPORT SCIP_RETCODE SCIPreleaseCons( SCIP* scip, /**< SCIP data structure */ SCIP_CONS** cons /**< pointer to constraint */ ); /** change constraint name * * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes. * * @pre This method can be called if @p scip is in one of the following stages: * - \ref SCIP_STAGE_PROBLEM * * @note to get the current name of a constraint, use SCIPconsGetName() from pub_cons.h */ SCIP_EXPORT SCIP_RETCODE SCIPchgConsName( SCIP* scip, /**< SCIP data structure */ SCIP_CONS* cons, /**< constraint */ const char* name /**< new name of constraint */ ); /** sets the initial flag of the given constraint * * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes. * * @pre This method can be called if @p scip is in one of the following stages: * - \ref SCIP_STAGE_PROBLEM * - \ref SCIP_STAGE_TRANSFORMING * - \ref SCIP_STAGE_PRESOLVING * - \ref SCIP_STAGE_PRESOLVED * - \ref SCIP_STAGE_SOLVING */ SCIP_EXPORT SCIP_RETCODE SCIPsetConsInitial( SCIP* scip, /**< SCIP data structure */ SCIP_CONS* cons, /**< constraint */ SCIP_Bool initial /**< new value */ ); /** sets the separate flag of the given constraint * * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes. * * @pre This method can be called if @p scip is in one of the following stages: * - \ref SCIP_STAGE_PROBLEM * - \ref SCIP_STAGE_TRANSFORMING * - \ref SCIP_STAGE_PRESOLVING * - \ref SCIP_STAGE_PRESOLVED * - \ref SCIP_STAGE_SOLVING */ SCIP_EXPORT SCIP_RETCODE SCIPsetConsSeparated( SCIP* scip, /**< SCIP data structure */ SCIP_CONS* cons, /**< constraint */ SCIP_Bool separate /**< new value */ ); /** sets the enforce flag of the given constraint * * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes. * * @pre This method can be called if @p scip is in one of the following stages: * - \ref SCIP_STAGE_PROBLEM * - \ref SCIP_STAGE_TRANSFORMING * - \ref SCIP_STAGE_PRESOLVING * - \ref SCIP_STAGE_PRESOLVED * - \ref SCIP_STAGE_SOLVING */ SCIP_EXPORT SCIP_RETCODE SCIPsetConsEnforced( SCIP* scip, /**< SCIP data structure */ SCIP_CONS* cons, /**< constraint */ SCIP_Bool enforce /**< new value */ ); /** sets the check flag of the given constraint * * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes. * * @pre This method can be called if @p scip is in one of the following stages: * - \ref SCIP_STAGE_PROBLEM * - \ref SCIP_STAGE_TRANSFORMING * - \ref SCIP_STAGE_PRESOLVING * - \ref SCIP_STAGE_PRESOLVED * - \ref SCIP_STAGE_SOLVING */ SCIP_EXPORT SCIP_RETCODE SCIPsetConsChecked( SCIP* scip, /**< SCIP data structure */ SCIP_CONS* cons, /**< constraint */ SCIP_Bool check /**< new value */ ); /** sets the propagate flag of the given constraint * * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes. * * @pre This method can be called if @p scip is in one of the following stages: * - \ref SCIP_STAGE_PROBLEM * - \ref SCIP_STAGE_TRANSFORMING * - \ref SCIP_STAGE_PRESOLVING * - \ref SCIP_STAGE_PRESOLVED * - \ref SCIP_STAGE_SOLVING */ SCIP_EXPORT SCIP_RETCODE SCIPsetConsPropagated( SCIP* scip, /**< SCIP data structure */ SCIP_CONS* cons, /**< constraint */ SCIP_Bool propagate /**< new value */ ); /** sets the local flag of the given constraint * * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes. * * @pre This method can be called if @p scip is in one of the following stages: * - \ref SCIP_STAGE_PROBLEM * - \ref SCIP_STAGE_TRANSFORMING * - \ref SCIP_STAGE_INITPRESOLVE * - \ref SCIP_STAGE_PRESOLVING * - \ref SCIP_STAGE_PRESOLVED * - \ref SCIP_STAGE_INITSOLVE * - \ref SCIP_STAGE_SOLVING */ SCIP_EXPORT SCIP_RETCODE SCIPsetConsLocal( SCIP* scip, /**< SCIP data structure */ SCIP_CONS* cons, /**< constraint */ SCIP_Bool local /**< new value */ ); /** sets the modifiable flag of the given constraint * * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes. * * @pre This method can be called if @p scip is in one of the following stages: * - \ref SCIP_STAGE_PROBLEM * - \ref SCIP_STAGE_TRANSFORMING * - \ref SCIP_STAGE_PRESOLVING * - \ref SCIP_STAGE_PRESOLVED * - \ref SCIP_STAGE_SOLVING * - \ref SCIP_STAGE_EXITSOLVE */ SCIP_EXPORT SCIP_RETCODE SCIPsetConsModifiable( SCIP* scip, /**< SCIP data structure */ SCIP_CONS* cons, /**< constraint */ SCIP_Bool modifiable /**< new value */ ); /** sets the dynamic flag of the given constraint * * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes. * * @pre This method can be called if @p scip is in one of the following stages: * - \ref SCIP_STAGE_PROBLEM * - \ref SCIP_STAGE_TRANSFORMING * - \ref SCIP_STAGE_PRESOLVING * - \ref SCIP_STAGE_PRESOLVED * - \ref SCIP_STAGE_SOLVING */ SCIP_EXPORT SCIP_RETCODE SCIPsetConsDynamic( SCIP* scip, /**< SCIP data structure */ SCIP_CONS* cons, /**< constraint */ SCIP_Bool dynamic /**< new value */ ); /** sets the removable flag of the given constraint * * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes. * * @pre This method can be called if @p scip is in one of the following stages: * - \ref SCIP_STAGE_PROBLEM * - \ref SCIP_STAGE_TRANSFORMING * - \ref SCIP_STAGE_PRESOLVING * - \ref SCIP_STAGE_PRESOLVED * - \ref SCIP_STAGE_SOLVING */ SCIP_EXPORT SCIP_RETCODE SCIPsetConsRemovable( SCIP* scip, /**< SCIP data structure */ SCIP_CONS* cons, /**< constraint */ SCIP_Bool removable /**< new value */ ); /** sets the stickingatnode flag of the given constraint * * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes. * * @pre This method can be called if @p scip is in one of the following stages: * - \ref SCIP_STAGE_PROBLEM * - \ref SCIP_STAGE_TRANSFORMING * - \ref SCIP_STAGE_PRESOLVING * - \ref SCIP_STAGE_PRESOLVED * - \ref SCIP_STAGE_SOLVING */ SCIP_EXPORT SCIP_RETCODE SCIPsetConsStickingAtNode( SCIP* scip, /**< SCIP data structure */ SCIP_CONS* cons, /**< constraint */ SCIP_Bool stickingatnode /**< new value */ ); /** updates the flags of the first constraint according to the ones of the second constraint * * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes. * * @pre This method can be called if @p scip is in one of the following stages: * - \ref SCIP_STAGE_PROBLEM * - \ref SCIP_STAGE_TRANSFORMING * - \ref SCIP_STAGE_PRESOLVING * - \ref SCIP_STAGE_PRESOLVED * - \ref SCIP_STAGE_SOLVING */ SCIP_EXPORT SCIP_RETCODE SCIPupdateConsFlags( SCIP* scip, /**< SCIP data structure */ SCIP_CONS* cons0, /**< constraint that should stay */ SCIP_CONS* cons1 /**< constraint that should be deleted */ ); /** gets and captures transformed constraint of a given constraint; if the constraint is not yet transformed, * a new transformed constraint for this constraint is created * * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes. * * @pre This method can be called if @p scip is in one of the following stages: * - \ref SCIP_STAGE_TRANSFORMING * - \ref SCIP_STAGE_TRANSFORMED * - \ref SCIP_STAGE_INITPRESOLVE * - \ref SCIP_STAGE_PRESOLVING * - \ref SCIP_STAGE_EXITPRESOLVE * - \ref SCIP_STAGE_PRESOLVED * - \ref SCIP_STAGE_INITSOLVE * - \ref SCIP_STAGE_SOLVING */ SCIP_EXPORT SCIP_RETCODE SCIPtransformCons( SCIP* scip, /**< SCIP data structure */ SCIP_CONS* cons, /**< constraint to get/create transformed constraint for */ SCIP_CONS** transcons /**< pointer to store the transformed constraint */ ); /** gets and captures transformed constraints for an array of constraints; * if a constraint in the array is not yet transformed, a new transformed constraint for this constraint is created; * it is possible to call this method with conss == transconss * * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes. * * @pre This method can be called if @p scip is in one of the following stages: * - \ref SCIP_STAGE_TRANSFORMING * - \ref SCIP_STAGE_TRANSFORMED * - \ref SCIP_STAGE_INITPRESOLVE * - \ref SCIP_STAGE_PRESOLVING * - \ref SCIP_STAGE_EXITPRESOLVE * - \ref SCIP_STAGE_PRESOLVED * - \ref SCIP_STAGE_INITSOLVE * - \ref SCIP_STAGE_SOLVING */ SCIP_EXPORT SCIP_RETCODE SCIPtransformConss( SCIP* scip, /**< SCIP data structure */ int nconss, /**< number of constraints to get/create transformed constraints for */ SCIP_CONS** conss, /**< array with constraints to get/create transformed constraints for */ SCIP_CONS** transconss /**< array to store the transformed constraints */ ); /** gets corresponding transformed constraint of a given constraint; * returns NULL as transcons, if transformed constraint is not yet existing * * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes. * * @pre This method can be called if @p scip is in one of the following stages: * - \ref SCIP_STAGE_TRANSFORMING * - \ref SCIP_STAGE_TRANSFORMED * - \ref SCIP_STAGE_INITPRESOLVE * - \ref SCIP_STAGE_PRESOLVING * - \ref SCIP_STAGE_EXITPRESOLVE * - \ref SCIP_STAGE_PRESOLVED * - \ref SCIP_STAGE_INITSOLVE * - \ref SCIP_STAGE_SOLVING * - \ref SCIP_STAGE_SOLVED * - \ref SCIP_STAGE_EXITSOLVE * - \ref SCIP_STAGE_FREETRANS */ SCIP_EXPORT SCIP_RETCODE SCIPgetTransformedCons( SCIP* scip, /**< SCIP data structure */ SCIP_CONS* cons, /**< constraint to get the transformed constraint for */ SCIP_CONS** transcons /**< pointer to store the transformed constraint */ ); /** gets corresponding transformed constraints for an array of constraints; * stores NULL in a transconss slot, if the transformed constraint is not yet existing; * it is possible to call this method with conss == transconss, but remember that constraints that are not * yet transformed will be replaced with NULL * * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes. * * @pre This method can be called if @p scip is in one of the following stages: * - \ref SCIP_STAGE_TRANSFORMING * - \ref SCIP_STAGE_TRANSFORMED * - \ref SCIP_STAGE_INITPRESOLVE * - \ref SCIP_STAGE_PRESOLVING * - \ref SCIP_STAGE_EXITPRESOLVE * - \ref SCIP_STAGE_PRESOLVED * - \ref SCIP_STAGE_INITSOLVE * - \ref SCIP_STAGE_SOLVING * - \ref SCIP_STAGE_SOLVED * - \ref SCIP_STAGE_EXITSOLVE * - \ref SCIP_STAGE_FREETRANS */ SCIP_EXPORT SCIP_RETCODE SCIPgetTransformedConss( SCIP* scip, /**< SCIP data structure */ int nconss, /**< number of constraints to get the transformed constraints for */ SCIP_CONS** conss, /**< constraints to get the transformed constraints for */ SCIP_CONS** transconss /**< array to store the transformed constraints */ ); /** adds given value to age of constraint, but age can never become negative; * should be called * - in constraint separation, if no cut was found for this constraint, * - in constraint enforcing, if constraint was feasible, and * - in constraint propagation, if no domain reduction was deduced; * * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes. * * @pre This method can be called if @p scip is in one of the following stages: * - \ref SCIP_STAGE_TRANSFORMED * - \ref SCIP_STAGE_PRESOLVING * - \ref SCIP_STAGE_PRESOLVED * - \ref SCIP_STAGE_SOLVING * - \ref SCIP_STAGE_SOLVED */ SCIP_EXPORT SCIP_RETCODE SCIPaddConsAge( SCIP* scip, /**< SCIP data structure */ SCIP_CONS* cons, /**< constraint */ SCIP_Real deltaage /**< value to add to the constraint's age */ ); /** increases age of constraint by 1.0; * should be called * - in constraint separation, if no cut was found for this constraint, * - in constraint enforcing, if constraint was feasible, and * - in constraint propagation, if no domain reduction was deduced; * * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes. * * @pre This method can be called if @p scip is in one of the following stages: * - \ref SCIP_STAGE_TRANSFORMED * - \ref SCIP_STAGE_PRESOLVING * - \ref SCIP_STAGE_PRESOLVED * - \ref SCIP_STAGE_SOLVING * - \ref SCIP_STAGE_SOLVED */ SCIP_EXPORT SCIP_RETCODE SCIPincConsAge( SCIP* scip, /**< SCIP data structure */ SCIP_CONS* cons /**< constraint */ ); /** resets age of constraint to zero; * should be called * - in constraint separation, if a cut was found for this constraint, * - in constraint enforcing, if the constraint was violated, and * - in constraint propagation, if a domain reduction was deduced; * * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes. * * @pre This method can be called if @p scip is in one of the following stages: * - \ref SCIP_STAGE_TRANSFORMED * - \ref SCIP_STAGE_PRESOLVING * - \ref SCIP_STAGE_PRESOLVED * - \ref SCIP_STAGE_SOLVING * - \ref SCIP_STAGE_SOLVED */ SCIP_EXPORT SCIP_RETCODE SCIPresetConsAge( SCIP* scip, /**< SCIP data structure */ SCIP_CONS* cons /**< constraint */ ); /** enables constraint's separation, propagation, and enforcing capabilities * * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes. * * @pre This method can be called if @p scip is in one of the following stages: * - \ref SCIP_STAGE_TRANSFORMED * - \ref SCIP_STAGE_PRESOLVING * - \ref SCIP_STAGE_PRESOLVED * - \ref SCIP_STAGE_INITSOLVE * - \ref SCIP_STAGE_SOLVING * - \ref SCIP_STAGE_SOLVED */ SCIP_EXPORT SCIP_RETCODE SCIPenableCons( SCIP* scip, /**< SCIP data structure */ SCIP_CONS* cons /**< constraint */ ); /** disables constraint's separation, propagation, and enforcing capabilities, s.t. the constraint is not propagated, * separated, and enforced anymore until it is enabled again with a call to SCIPenableCons(); * in contrast to SCIPdelConsLocal() and SCIPdelConsNode(), the disabling is not associated to a node in the tree and * does not consume memory; therefore, the constraint is neither automatically enabled on leaving the node nor * automatically disabled again on entering the node again; * note that the constraints enforcing capabilities are necessary for the solution's feasibility, if the constraint * is a model constraint; that means, you must be sure that the constraint cannot be violated in the current subtree, * and you have to enable it again manually by calling SCIPenableCons(), if this subtree is left (e.g. by using * an appropriate event handler that watches the corresponding variables' domain changes) * * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes. * * @pre This method can be called if @p scip is in one of the following stages: * - \ref SCIP_STAGE_TRANSFORMED * - \ref SCIP_STAGE_INITPRESOLVE * - \ref SCIP_STAGE_PRESOLVING * - \ref SCIP_STAGE_PRESOLVED * - \ref SCIP_STAGE_INITSOLVE * - \ref SCIP_STAGE_SOLVING * - \ref SCIP_STAGE_SOLVED */ SCIP_EXPORT SCIP_RETCODE SCIPdisableCons( SCIP* scip, /**< SCIP data structure */ SCIP_CONS* cons /**< constraint */ ); /** enables constraint's separation capabilities * * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes. * * @pre This method can be called if @p scip is in one of the following stages: * - \ref SCIP_STAGE_TRANSFORMED * - \ref SCIP_STAGE_PRESOLVING * - \ref SCIP_STAGE_PRESOLVED * - \ref SCIP_STAGE_INITSOLVE * - \ref SCIP_STAGE_SOLVING * - \ref SCIP_STAGE_SOLVED */ SCIP_EXPORT SCIP_RETCODE SCIPenableConsSeparation( SCIP* scip, /**< SCIP data structure */ SCIP_CONS* cons /**< constraint */ ); /** disables constraint's separation capabilities s.t. the constraint is not propagated anymore until the separation * is enabled again with a call to SCIPenableConsSeparation(); in contrast to SCIPdelConsLocal() and SCIPdelConsNode(), * the disabling is not associated to a node in the tree and does not consume memory; therefore, the constraint * is neither automatically enabled on leaving the node nor automatically disabled again on entering the node again * * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes. * * @pre This method can be called if @p scip is in one of the following stages: * - \ref SCIP_STAGE_TRANSFORMED * - \ref SCIP_STAGE_PRESOLVING * - \ref SCIP_STAGE_PRESOLVED * - \ref SCIP_STAGE_INITSOLVE * - \ref SCIP_STAGE_SOLVING * - \ref SCIP_STAGE_SOLVED */ SCIP_EXPORT SCIP_RETCODE SCIPdisableConsSeparation( SCIP* scip, /**< SCIP data structure */ SCIP_CONS* cons /**< constraint */ ); /** enables constraint's propagation capabilities * * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes. * * @pre This method can be called if @p scip is in one of the following stages: * - \ref SCIP_STAGE_TRANSFORMED * - \ref SCIP_STAGE_INITPRESOLVE * - \ref SCIP_STAGE_PRESOLVING * - \ref SCIP_STAGE_EXITPRESOLVE * - \ref SCIP_STAGE_PRESOLVED * - \ref SCIP_STAGE_INITSOLVE * - \ref SCIP_STAGE_SOLVING * - \ref SCIP_STAGE_SOLVED */ SCIP_EXPORT SCIP_RETCODE SCIPenableConsPropagation( SCIP* scip, /**< SCIP data structure */ SCIP_CONS* cons /**< constraint */ ); /** disables constraint's propagation capabilities s.t. the constraint is not propagated anymore until the propagation * is enabled again with a call to SCIPenableConsPropagation(); in contrast to SCIPdelConsLocal() and SCIPdelConsNode(), * the disabling is not associated to a node in the tree and does not consume memory; therefore, the constraint * is neither automatically enabled on leaving the node nor automatically disabled again on entering the node again * * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes. * * @pre This method can be called if @p scip is in one of the following stages: * - \ref SCIP_STAGE_TRANSFORMED * - \ref SCIP_STAGE_INITPRESOLVE * - \ref SCIP_STAGE_PRESOLVING * - \ref SCIP_STAGE_EXITPRESOLVE * - \ref SCIP_STAGE_PRESOLVED * - \ref SCIP_STAGE_INITSOLVE * - \ref SCIP_STAGE_SOLVING * - \ref SCIP_STAGE_SOLVED */ SCIP_EXPORT SCIP_RETCODE SCIPdisableConsPropagation( SCIP* scip, /**< SCIP data structure */ SCIP_CONS* cons /**< constraint */ ); /** marks constraint to be propagated * * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes. * * @pre This method can be called if @p scip is in one of the following stages: * - \ref SCIP_STAGE_TRANSFORMING * - \ref SCIP_STAGE_TRANSFORMED * - \ref SCIP_STAGE_PRESOLVING * - \ref SCIP_STAGE_EXITPRESOLVE * - \ref SCIP_STAGE_PRESOLVED * - \ref SCIP_STAGE_INITSOLVE * - \ref SCIP_STAGE_SOLVING * - \ref SCIP_STAGE_SOLVED * * @note if a constraint is marked to be propagated, the age of the constraint will be ignored for propagation */ SCIP_EXPORT SCIP_RETCODE SCIPmarkConsPropagate( SCIP* scip, /**< SCIP data structure */ SCIP_CONS* cons /**< constraint */ ); /** unmarks the constraint to be propagated * * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes. * * @pre This method can be called if @p scip is in one of the following stages: * - \ref SCIP_STAGE_TRANSFORMED * - \ref SCIP_STAGE_PRESOLVING * - \ref SCIP_STAGE_EXITPRESOLVE * - \ref SCIP_STAGE_PRESOLVED * - \ref SCIP_STAGE_INITSOLVE * - \ref SCIP_STAGE_SOLVING * - \ref SCIP_STAGE_SOLVED */ SCIP_EXPORT SCIP_RETCODE SCIPunmarkConsPropagate( SCIP* scip, /**< SCIP data structure */ SCIP_CONS* cons /**< constraint */ ); /** adds given values to lock status of type @p locktype of the constraint and updates the rounding locks of the involved variables * * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes. * * @pre This method can be called if @p scip is in one of the following stages: * - \ref SCIP_STAGE_PROBLEM * - \ref SCIP_STAGE_TRANSFORMING * - \ref SCIP_STAGE_INITPRESOLVE * - \ref SCIP_STAGE_PRESOLVING * - \ref SCIP_STAGE_EXITPRESOLVE * - \ref SCIP_STAGE_INITSOLVE * - \ref SCIP_STAGE_SOLVING * - \ref SCIP_STAGE_EXITSOLVE * - \ref SCIP_STAGE_FREETRANS */ SCIP_EXPORT SCIP_RETCODE SCIPaddConsLocksType( SCIP* scip, /**< SCIP data structure */ SCIP_CONS* cons, /**< constraint */ SCIP_LOCKTYPE locktype, /**< type of the variable locks */ int nlockspos, /**< increase in number of rounding locks for constraint */ int nlocksneg /**< increase in number of rounding locks for constraint's negation */ ); /** adds given values to lock status of the constraint and updates the rounding locks of the involved variables * * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes. * * @pre This method can be called if @p scip is in one of the following stages: * - \ref SCIP_STAGE_PROBLEM * - \ref SCIP_STAGE_TRANSFORMING * - \ref SCIP_STAGE_INITPRESOLVE * - \ref SCIP_STAGE_PRESOLVING * - \ref SCIP_STAGE_EXITPRESOLVE * - \ref SCIP_STAGE_INITSOLVE * - \ref SCIP_STAGE_SOLVING * - \ref SCIP_STAGE_EXITSOLVE * - \ref SCIP_STAGE_FREETRANS * * @note This methods always adds locks of type model */ SCIP_EXPORT SCIP_RETCODE SCIPaddConsLocks( SCIP* scip, /**< SCIP data structure */ SCIP_CONS* cons, /**< constraint */ int nlockspos, /**< increase in number of rounding locks for constraint */ int nlocksneg /**< increase in number of rounding locks for constraint's negation */ ); /** checks single constraint for feasibility of the given solution * * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes. * * @pre This method can be called if @p scip is in one of the following stages: * - \ref SCIP_STAGE_TRANSFORMED * - \ref SCIP_STAGE_INITPRESOLVE * - \ref SCIP_STAGE_PRESOLVING * - \ref SCIP_STAGE_EXITPRESOLVE * - \ref SCIP_STAGE_PRESOLVED * - \ref SCIP_STAGE_INITSOLVE * - \ref SCIP_STAGE_SOLVING * - \ref SCIP_STAGE_SOLVED */ SCIP_EXPORT SCIP_RETCODE SCIPcheckCons( SCIP* scip, /**< SCIP data structure */ SCIP_CONS* cons, /**< constraint to check */ SCIP_SOL* sol, /**< primal CIP solution */ SCIP_Bool checkintegrality, /**< Has integrality to be checked? */ SCIP_Bool checklprows, /**< Do constraints represented by rows in the current LP have to be checked? */ SCIP_Bool printreason, /**< Should the reason for the violation be printed? */ SCIP_RESULT* result /**< pointer to store the result of the callback method */ ); /** enforces single constraint for a given pseudo solution * * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes. * * @pre This method can be called if @p scip is in one of the following stages: * - \ref SCIP_STAGE_SOLVING * * @note This is an advanced method and should be used with caution. It may only be called for constraints that were not * added to SCIP beforehand. */ SCIP_EXPORT SCIP_RETCODE SCIPenfopsCons( SCIP* scip, /**< SCIP data structure */ SCIP_CONS* cons, /**< constraint to enforce */ SCIP_Bool solinfeasible, /**< was the solution already declared infeasible by a constraint handler? */ SCIP_Bool objinfeasible, /**< is the solution infeasible anyway due to violating lower objective bound? */ SCIP_RESULT* result /**< pointer to store the result of the callback method */ ); /** enforces single constraint for a given LP solution * * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes. * * @pre This method can be called if @p scip is in one of the following stages: * - \ref SCIP_STAGE_SOLVING * * @note This is an advanced method and should be used with caution. It may only be called for constraints that were not * added to SCIP beforehand. */ SCIP_EXPORT SCIP_RETCODE SCIPenfolpCons( SCIP* scip, /**< SCIP data structure */ SCIP_CONS* cons, /**< constraint to enforce */ SCIP_Bool solinfeasible, /**< was the solution already declared infeasible by a constraint handler? */ SCIP_RESULT* result /**< pointer to store the result of the callback method */ ); /** enforces single constraint for a given relaxation solution * * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes. * * @pre This method can be called if @p scip is in one of the following stages: * - \ref SCIP_STAGE_SOLVING * * @note This is an advanced method and should be used with caution. It may only be called for constraints that were not * added to SCIP beforehand. */ SCIP_RETCODE SCIPenforelaxCons( SCIP* scip, /**< SCIP data structure */ SCIP_CONS* cons, /**< constraint to enforce */ SCIP_SOL* sol, /**< solution to enforce */ SCIP_Bool solinfeasible, /**< was the solution already declared infeasible by a constraint handler? */ SCIP_RESULT* result /**< pointer to store the result of the callback method */ ); /** calls LP initialization method for single constraint * * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes. * * @pre This method can be called if @p scip is in one of the following stages: * - \ref SCIP_STAGE_SOLVING * * @note This is an advanced method and should be used with caution. It may only be called for constraints that were not * added to SCIP beforehand. */ SCIP_EXPORT SCIP_RETCODE SCIPinitlpCons( SCIP* scip, /**< SCIP data structure */ SCIP_CONS* cons, /**< constraint to initialize */ SCIP_Bool* infeasible /**< pointer to store whether infeasibility was detected while building the LP */ ); /** calls separation method of single constraint for LP solution * * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes. * * @pre This method can be called if @p scip is in one of the following stages: * - \ref SCIP_STAGE_SOLVING * * @note This is an advanced method and should be used with caution. */ SCIP_EXPORT SCIP_RETCODE SCIPsepalpCons( SCIP* scip, /**< SCIP data structure */ SCIP_CONS* cons, /**< constraint to separate */ SCIP_RESULT* result /**< pointer to store the result of the separation call */ ); /** calls separation method of single constraint for given primal solution * * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes. * * @pre This method can be called if @p scip is in one of the following stages: * - \ref SCIP_STAGE_SOLVING * * @note This is an advanced method and should be used with caution. */ SCIP_EXPORT SCIP_RETCODE SCIPsepasolCons( SCIP* scip, /**< SCIP data structure */ SCIP_CONS* cons, /**< constraint to separate */ SCIP_SOL* sol, /**< primal solution that should be separated*/ SCIP_RESULT* result /**< pointer to store the result of the separation call */ ); /** calls domain propagation method of single constraint * * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes. * * @pre This method can be called if @p scip is in one of the following stages: * - \ref SCIP_STAGE_PRESOLVING * - \ref SCIP_STAGE_SOLVING * * @note This is an advanced method and should be used with caution. */ SCIP_EXPORT SCIP_RETCODE SCIPpropCons( SCIP* scip, /**< SCIP data structure */ SCIP_CONS* cons, /**< constraint to propagate */ SCIP_PROPTIMING proptiming, /**< current point in the node solving loop */ SCIP_RESULT* result /**< pointer to store the result of the callback method */ ); /** resolves propagation conflict of single constraint * * * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes. * * @pre This method can be called if @p scip is in one of the following stages: * - \ref SCIP_STAGE_PRESOLVING * - \ref SCIP_STAGE_SOLVING * * @note This is an advanced method and should be used with caution. It may only be called for constraints that were not * added to SCIP beforehand. */ SCIP_EXPORT SCIP_RETCODE SCIPrespropCons( SCIP* scip, /**< SCIP data structure */ SCIP_CONS* cons, /**< constraint to resolve conflict for */ SCIP_VAR* infervar, /**< the conflict variable whose bound change has to be resolved */ int inferinfo, /**< the user information passed to the corresponding SCIPinferVarLbCons() or SCIPinferVarUbCons() call */ SCIP_BOUNDTYPE boundtype, /**< the type of the changed bound (lower or upper bound) */ SCIP_BDCHGIDX* bdchgidx, /**< the index of the bound change, representing the point of time where the change took place */ SCIP_Real relaxedbd, /**< the relaxed bound which is sufficient to be explained */ SCIP_RESULT* result /**< pointer to store the result of the callback method */ ); /** presolves of single constraint * * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes. * * @pre This method can be called if @p scip is in one of the following stages: * - \ref SCIP_STAGE_PRESOLVING * * @note This is an advanced method and should be used with caution. */ SCIP_EXPORT SCIP_RETCODE SCIPpresolCons( SCIP* scip, /**< SCIP data structure */ SCIP_CONS* cons, /**< constraint to presolve */ int nrounds, /**< number of presolving rounds already done */ SCIP_PRESOLTIMING presoltiming, /**< presolving timing(s) to be performed */ int nnewfixedvars, /**< number of variables fixed since the last call to the presolving method */ int nnewaggrvars, /**< number of variables aggregated since the last call to the presolving method */ int nnewchgvartypes, /**< number of variable type changes since the last call to the presolving method */ int nnewchgbds, /**< number of variable bounds tightened since the last call to the presolving method */ int nnewholes, /**< number of domain holes added since the last call to the presolving method */ int nnewdelconss, /**< number of deleted constraints since the last call to the presolving method */ int nnewaddconss, /**< number of added constraints since the last call to the presolving method */ int nnewupgdconss, /**< number of upgraded constraints since the last call to the presolving method */ int nnewchgcoefs, /**< number of changed coefficients since the last call to the presolving method */ int nnewchgsides, /**< number of changed left or right hand sides since the last call to the presolving method */ int* nfixedvars, /**< pointer to count total number of variables fixed of all presolvers */ int* naggrvars, /**< pointer to count total number of variables aggregated of all presolvers */ int* nchgvartypes, /**< pointer to count total number of variable type changes of all presolvers */ int* nchgbds, /**< pointer to count total number of variable bounds tightened of all presolvers */ int* naddholes, /**< pointer to count total number of domain holes added of all presolvers */ int* ndelconss, /**< pointer to count total number of deleted constraints of all presolvers */ int* naddconss, /**< pointer to count total number of added constraints of all presolvers */ int* nupgdconss, /**< pointer to count total number of upgraded constraints of all presolvers */ int* nchgcoefs, /**< pointer to count total number of changed coefficients of all presolvers */ int* nchgsides, /**< pointer to count total number of changed left/right hand sides of all presolvers */ SCIP_RESULT* result /**< pointer to store the result of the callback method */ ); /** calls constraint activation notification method of single constraint * * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes. * * @pre This method can be called if @p scip is in one of the following stages: * - \ref SCIP_STAGE_TRANSFORMING * * @note This is an advanced method and should be used with caution. It may only be called for constraints that were not * added to SCIP beforehand. */ SCIP_EXPORT SCIP_RETCODE SCIPactiveCons( SCIP* scip, /**< SCIP data structure */ SCIP_CONS* cons /**< constraint to notify */ ); /** calls constraint deactivation notification method of single constraint * * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes. * * @pre This method can be called if @p scip is in one of the following stages: * - \ref SCIP_STAGE_PRESOLVING * - \ref SCIP_STAGE_SOLVING * * @note This is an advanced method and should be used with caution. It may only be called for constraints that were not * added to SCIP beforehand. */ SCIP_EXPORT SCIP_RETCODE SCIPdeactiveCons( SCIP* scip, /**< SCIP data structure */ SCIP_CONS* cons /**< constraint to notify */ ); /** outputs constraint information to file stream via the message handler system * * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes. * * @pre This method can be called if @p scip is in one of the following stages: * - \ref SCIP_STAGE_PROBLEM * - \ref SCIP_STAGE_TRANSFORMING * - \ref SCIP_STAGE_TRANSFORMED * - \ref SCIP_STAGE_INITPRESOLVE * - \ref SCIP_STAGE_PRESOLVING * - \ref SCIP_STAGE_EXITPRESOLVE * - \ref SCIP_STAGE_PRESOLVED * - \ref SCIP_STAGE_INITSOLVE * - \ref SCIP_STAGE_SOLVING * - \ref SCIP_STAGE_SOLVED * - \ref SCIP_STAGE_EXITSOLVE * - \ref SCIP_STAGE_FREETRANS * * @note If the message handler is set to a NULL pointer nothing will be printed. * @note The file stream will not be flushed directly, this can be achieved by calling SCIPinfoMessage() printing a * newline character. */ SCIP_EXPORT SCIP_RETCODE SCIPprintCons( SCIP* scip, /**< SCIP data structure */ SCIP_CONS* cons, /**< constraint */ FILE* file /**< output file (or NULL for standard output) */ ); /** method to collect the variables of a constraint * * If the number of variables is greater than the available slots in the variable array, nothing happens except that * the success point is set to FALSE. With the method SCIPgetConsNVars() it is possible to get the number of variables * a constraint has in its scope. * * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes. * * @pre This method can be called if @p scip is in one of the following stages: * - \ref SCIP_STAGE_PROBLEM * - \ref SCIP_STAGE_TRANSFORMING * - \ref SCIP_STAGE_TRANSFORMED * - \ref SCIP_STAGE_INITPRESOLVE * - \ref SCIP_STAGE_PRESOLVING * - \ref SCIP_STAGE_EXITPRESOLVE * - \ref SCIP_STAGE_PRESOLVED * - \ref SCIP_STAGE_INITSOLVE * - \ref SCIP_STAGE_SOLVING * - \ref SCIP_STAGE_SOLVED * - \ref SCIP_STAGE_EXITSOLVE * - \ref SCIP_STAGE_FREETRANS * * @note The success pointer indicates if all variables were copied into the vars arrray. * * @note It might be that a constraint handler does not support this functionality, in that case the success pointer is * set to FALSE. */ SCIP_EXPORT SCIP_RETCODE SCIPgetConsVars( SCIP* scip, /**< SCIP data structure */ SCIP_CONS* cons, /**< constraint for which the variables are wanted */ SCIP_VAR** vars, /**< array to store the involved variable of the constraint */ int varssize, /**< available slots in vars array which is needed to check if the array is large enough */ SCIP_Bool* success /**< pointer to store whether the variables are successfully copied */ ); /** method to collect the number of variables of a constraint * * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes. * * @pre This method can be called if @p scip is in one of the following stages: * - \ref SCIP_STAGE_PROBLEM * - \ref SCIP_STAGE_TRANSFORMING * - \ref SCIP_STAGE_TRANSFORMED * - \ref SCIP_STAGE_INITPRESOLVE * - \ref SCIP_STAGE_PRESOLVING * - \ref SCIP_STAGE_EXITPRESOLVE * - \ref SCIP_STAGE_PRESOLVED * - \ref SCIP_STAGE_INITSOLVE * - \ref SCIP_STAGE_SOLVING * - \ref SCIP_STAGE_SOLVED * - \ref SCIP_STAGE_EXITSOLVE * - \ref SCIP_STAGE_FREETRANS * * @note The success pointer indicates if the contraint handler was able to return the number of variables * * @note It might be that a constraint handler does not support this functionality, in that case the success pointer is * set to FALSE */ SCIP_EXPORT SCIP_RETCODE SCIPgetConsNVars( SCIP* scip, /**< SCIP data structure */ SCIP_CONS* cons, /**< constraint for which the number of variables is wanted */ int* nvars, /**< pointer to store the number of variables */ SCIP_Bool* success /**< pointer to store whether the constraint successfully returned the number of variables */ ); /* In optimized mode, the function calls are overwritten by defines to reduce the number of function calls and * speed up the algorithms. */ #ifdef NDEBUG #define SCIPmarkConsPropagate(scip, cons) SCIPconsMarkPropagate(cons, (scip)->set) #endif /**@} */ #ifdef __cplusplus } #endif #endif