/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /* */ /* 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_prob.h * @ingroup PUBLICCOREAPI * @brief public methods for global and local (sub)problems * @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_PROB_H__ #define __SCIP_SCIP_PROB_H__ #include "scip/def.h" #include "scip/type_conflict.h" #include "scip/type_cons.h" #include "scip/type_event.h" #include "scip/type_misc.h" #include "scip/type_prob.h" #include "scip/type_result.h" #include "scip/type_retcode.h" #include "scip/type_scip.h" #include "scip/type_sol.h" #include "scip/type_tree.h" #include "scip/type_var.h" #ifdef __cplusplus extern "C" { #endif /**@addtogroup GlobalProblemMethods * * @{ */ /** creates empty problem and initializes all solving data structures (the objective sense is set to MINIMIZE) * If the problem type requires the use of variable pricers, these pricers should be added to the problem with calls * to SCIPactivatePricer(). These pricers are automatically deactivated, when the problem is 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_INIT * - \ref SCIP_STAGE_PROBLEM * - \ref SCIP_STAGE_TRANSFORMED * - \ref SCIP_STAGE_PRESOLVING * - \ref SCIP_STAGE_PRESOLVED * - \ref SCIP_STAGE_SOLVING * - \ref SCIP_STAGE_SOLVED * - \ref SCIP_STAGE_FREE * * @post After calling this method, \SCIP reaches the following stage: * - \ref SCIP_STAGE_PROBLEM */ SCIP_EXPORT SCIP_RETCODE SCIPcreateProb( SCIP* scip, /**< SCIP data structure */ const char* name, /**< problem name */ SCIP_DECL_PROBDELORIG ((*probdelorig)), /**< frees user data of original problem */ SCIP_DECL_PROBTRANS ((*probtrans)), /**< creates user data of transformed problem by transforming original user data */ SCIP_DECL_PROBDELTRANS((*probdeltrans)), /**< frees user data of transformed problem */ SCIP_DECL_PROBINITSOL ((*probinitsol)), /**< solving process initialization method of transformed data */ SCIP_DECL_PROBEXITSOL ((*probexitsol)), /**< solving process deinitialization method of transformed data */ SCIP_DECL_PROBCOPY ((*probcopy)), /**< copies user data if you want to copy it to a subscip, or NULL */ SCIP_PROBDATA* probdata /**< user problem data set by the reader */ ); /** creates empty problem and initializes all solving data structures (the objective sense is set to MINIMIZE) * all callback methods will be set to NULL and can be set afterwards, if needed, via SCIPsetProbDelorig(), * SCIPsetProbTrans(), SCIPsetProbDeltrans(), SCIPsetProbInitsol(), SCIPsetProbExitsol(), and * SCIPsetProbCopy() * If the problem type requires the use of variable pricers, these pricers should be added to the problem with calls * to SCIPactivatePricer(). These pricers are automatically deactivated, when the problem is 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_INIT * - \ref SCIP_STAGE_PROBLEM * - \ref SCIP_STAGE_TRANSFORMED * - \ref SCIP_STAGE_PRESOLVING * - \ref SCIP_STAGE_PRESOLVED * - \ref SCIP_STAGE_SOLVING * - \ref SCIP_STAGE_SOLVED * - \ref SCIP_STAGE_FREE * * @post After calling this method, \SCIP reaches the following stage: * - \ref SCIP_STAGE_PROBLEM */ SCIP_EXPORT SCIP_RETCODE SCIPcreateProbBasic( SCIP* scip, /**< SCIP data structure */ const char* name /**< problem name */ ); /** sets callback to free user data of original 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 @p scip is in one of the following stages: * - \ref SCIP_STAGE_PROBLEM */ SCIP_EXPORT SCIP_RETCODE SCIPsetProbDelorig( SCIP* scip, /**< SCIP data structure */ SCIP_DECL_PROBDELORIG ((*probdelorig)) /**< frees user data of original problem */ ); /** sets callback to create user data of transformed problem by transforming original user 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 @p scip is in one of the following stages: * - \ref SCIP_STAGE_PROBLEM */ SCIP_EXPORT SCIP_RETCODE SCIPsetProbTrans( SCIP* scip, /**< SCIP data structure */ SCIP_DECL_PROBTRANS ((*probtrans)) /**< creates user data of transformed problem by transforming original user data */ ); /** sets callback to free user data of 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 @p scip is in one of the following stages: * - \ref SCIP_STAGE_PROBLEM */ SCIP_EXPORT SCIP_RETCODE SCIPsetProbDeltrans( SCIP* scip, /**< SCIP data structure */ SCIP_DECL_PROBDELTRANS((*probdeltrans)) /**< frees user data of transformed problem */ ); /** sets solving process initialization callback of transformed 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 @p scip is in one of the following stages: * - \ref SCIP_STAGE_PROBLEM */ SCIP_EXPORT SCIP_RETCODE SCIPsetProbInitsol( SCIP* scip, /**< SCIP data structure */ SCIP_DECL_PROBINITSOL ((*probinitsol)) /**< solving process initialization method of transformed data */ ); /** sets solving process deinitialization callback of transformed 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 @p scip is in one of the following stages: * - \ref SCIP_STAGE_PROBLEM */ SCIP_EXPORT SCIP_RETCODE SCIPsetProbExitsol( SCIP* scip, /**< SCIP data structure */ SCIP_DECL_PROBEXITSOL ((*probexitsol)) /**< solving process deinitialization method of transformed data */ ); /** sets callback to copy user data to a subscip * * @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 */ SCIP_EXPORT SCIP_RETCODE SCIPsetProbCopy( SCIP* scip, /**< SCIP data structure */ SCIP_DECL_PROBCOPY ((*probcopy)) /**< copies user data if you want to copy it to a subscip, or NULL */ ); /** reads problem from file and initializes all solving data structures * * @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_INIT * - \ref SCIP_STAGE_PROBLEM * - \ref SCIP_STAGE_TRANSFORMED * - \ref SCIP_STAGE_INITPRESOLVE * - \ref SCIP_STAGE_PRESOLVING * - \ref SCIP_STAGE_EXITPRESOLVE * - \ref SCIP_STAGE_PRESOLVED * - \ref SCIP_STAGE_SOLVING * - \ref SCIP_STAGE_EXITSOLVE * * @post After the method was called, \SCIP is in one of the following stages: * - \ref SCIP_STAGE_INIT if reading failed (usually, when a SCIP_READERROR occurs) * - \ref SCIP_STAGE_PROBLEM if the problem file was successfully read */ SCIP_EXPORT SCIP_RETCODE SCIPreadProb( SCIP* scip, /**< SCIP data structure */ const char* filename, /**< problem file name */ const char* extension /**< extension of the desired file reader, * or NULL if file extension should be used */ ); /** writes original problem to file * * @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 */ SCIP_EXPORT SCIP_RETCODE SCIPwriteOrigProblem( SCIP* scip, /**< SCIP data structure */ const char* filename, /**< output file (or NULL for standard output) */ const char* extension, /**< extension of the desired file reader, * or NULL if file extension should be used */ SCIP_Bool genericnames /**< use generic variable and constraint names? */ ); /** writes transformed problem which are valid in the current node to file * * @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 * - \ref SCIP_STAGE_EXITSOLVE * * @note If you want the write all constraints (including the once which are redundant for example), you need to set * the parameter to TRUE */ SCIP_EXPORT SCIP_RETCODE SCIPwriteTransProblem( SCIP* scip, /**< SCIP data structure */ const char* filename, /**< output file (or NULL for standard output) */ const char* extension, /**< extension of the desired file reader, * or NULL if file extension should be used */ SCIP_Bool genericnames /**< using generic variable and constraint names? */ ); /** frees problem and solution process 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 @p scip is in one of the following stages: * - \ref SCIP_STAGE_INIT * - \ref SCIP_STAGE_PROBLEM * - \ref SCIP_STAGE_TRANSFORMED * - \ref SCIP_STAGE_PRESOLVING * - \ref SCIP_STAGE_PRESOLVED * - \ref SCIP_STAGE_SOLVING * - \ref SCIP_STAGE_SOLVED * - \ref SCIP_STAGE_FREE * * @post After this method was called, SCIP is in the following stage: * - \ref SCIP_STAGE_INIT */ SCIP_EXPORT SCIP_RETCODE SCIPfreeProb( SCIP* scip /**< SCIP data structure */ ); /** permutes parts of the problem data structure * * @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_TRANSFORMED */ SCIP_EXPORT SCIP_RETCODE SCIPpermuteProb( SCIP* scip, /**< SCIP data structure */ unsigned int randseed, /**< seed value for random generator */ SCIP_Bool permuteconss, /**< should the list of constraints in each constraint handler be permuted? */ SCIP_Bool permutebinvars, /**< should the list of binary variables be permuted? */ SCIP_Bool permuteintvars, /**< should the list of integer variables be permuted? */ SCIP_Bool permuteimplvars, /**< should the list of implicit integer variables be permuted? */ SCIP_Bool permutecontvars /**< should the list of continuous integer variables be permuted? */ ); /** gets user problem data * * @return a SCIP_PROBDATA pointer, or NULL if no problem data was allocated * * @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 */ SCIP_EXPORT SCIP_PROBDATA* SCIPgetProbData( SCIP* scip /**< SCIP data structure */ ); /** sets user problem 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 @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 */ SCIP_EXPORT SCIP_RETCODE SCIPsetProbData( SCIP* scip, /**< SCIP data structure */ SCIP_PROBDATA* probdata /**< user problem data to use */ ); /** returns name of the current problem instance * * @return name of the current problem instance * * @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 */ SCIP_EXPORT const char* SCIPgetProbName( SCIP* scip /**< SCIP data structure */ ); /** sets name of the current problem instance * * @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 */ SCIP_EXPORT SCIP_RETCODE SCIPsetProbName( SCIP* scip, /**< SCIP data structure */ const char* name /**< name to be set */ ); /** changes the objective function * * @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_PRESOLVED * * @note This method should be only used to change the objective function during two reoptimization runs and is only * recommended to an experienced user. * * @note All variables not given in \p vars array are assumed to have an objective coefficient of zero. */ SCIP_EXPORT SCIP_RETCODE SCIPchgReoptObjective( SCIP* scip, /**< SCIP data structure */ SCIP_OBJSENSE objsense, /**< new objective function */ SCIP_VAR** vars, /**< problem variables */ SCIP_Real* coefs, /**< objective coefficients */ int nvars /**< variables in vars array */ ); /** returns objective sense of original problem * * @return objective sense of original problem * * @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 */ SCIP_EXPORT SCIP_OBJSENSE SCIPgetObjsense( SCIP* scip /**< SCIP data structure */ ); /** sets objective sense of 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 @p scip is in one of the following stages: * - \ref SCIP_STAGE_PROBLEM */ SCIP_EXPORT SCIP_RETCODE SCIPsetObjsense( SCIP* scip, /**< SCIP data structure */ SCIP_OBJSENSE objsense /**< new objective sense */ ); /** adds offset of objective function * * @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 */ SCIP_EXPORT SCIP_RETCODE SCIPaddObjoffset( SCIP* scip, /**< SCIP data structure */ SCIP_Real addval /**< value to add to objective offset */ ); /** adds offset of objective function to original problem and to all existing solution in original space * * @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 */ SCIP_EXPORT SCIP_RETCODE SCIPaddOrigObjoffset( SCIP* scip, /**< SCIP data structure */ SCIP_Real addval /**< value to add to objective offset */ ); /** returns the objective offset of the original problem * * @return the objective offset of the original problem * * @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_Real SCIPgetOrigObjoffset( SCIP* scip /**< SCIP data structure */ ); /** returns the objective scale of the original problem * * @return the objective scale of the original problem * * @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_Real SCIPgetOrigObjscale( SCIP* scip /**< SCIP data structure */ ); /** returns the objective offset of the transformed problem * * @return the objective offset of the transformed problem * * @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_Real SCIPgetTransObjoffset( SCIP* scip /**< SCIP data structure */ ); /** returns the objective scale of the transformed problem * * @return the objective scale of the transformed problem * * @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_Real SCIPgetTransObjscale( SCIP* scip /**< SCIP data structure */ ); /** sets limit on objective function, such that only solutions better than this limit are accepted * * @note SCIP will only look for solutions with a strictly better objective value, thus, e.g., prune * all branch-and-bound nodes with dual bound equal or worse to the objective limit. * However, SCIP will also collect solutions with objective value worse than the objective limit and * use them to run improvement heuristics on them. * @note If SCIP can prove that there exists no solution with a strictly better objective value, the solving status * will normally be infeasible (the objective limit is interpreted as part of the problem). * The only exception is that by chance, SCIP found a solution with the same objective value and thus * proved the optimality of this solution, resulting in solution status optimal. * * @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_TRANSFORMED * - \ref SCIP_STAGE_INITPRESOLVE * - \ref SCIP_STAGE_PRESOLVING * - \ref SCIP_STAGE_EXITPRESOLVE * - \ref SCIP_STAGE_PRESOLVED * - \ref SCIP_STAGE_SOLVING */ SCIP_EXPORT SCIP_RETCODE SCIPsetObjlimit( SCIP* scip, /**< SCIP data structure */ SCIP_Real objlimit /**< new primal objective limit */ ); /** returns current limit on objective function * * @return the current objective limit of the original problem * * @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_Real SCIPgetObjlimit( SCIP* scip /**< SCIP data structure */ ); /** informs SCIP, that the objective value is always integral in every feasible 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_PROBLEM * - \ref SCIP_STAGE_TRANSFORMING * - \ref SCIP_STAGE_INITPRESOLVE * - \ref SCIP_STAGE_EXITPRESOLVE * - \ref SCIP_STAGE_SOLVING * * @note This function should be used to inform SCIP that the objective function is integral, helping to improve the * performance. This is useful when using column generation. If no column generation (pricing) is used, SCIP * automatically detects whether the objective function is integral or can be scaled to be integral. However, in * any case, the user has to make sure that no variable is added during the solving process that destroys this * property. */ SCIP_EXPORT SCIP_RETCODE SCIPsetObjIntegral( SCIP* scip /**< SCIP data structure */ ); /** returns whether the objective value is known to be integral in every feasible solution * * @return TRUE, if objective value is known to be always integral, otherwise FALSE * * @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 * * @note If no pricing is performed, SCIP automatically detects whether the objective function is integral or can be * scaled to be integral, helping to improve performance. This function returns the result. Otherwise * SCIPsetObjIntegral() can be used to inform SCIP. However, in any case, the user has to make sure that no * variable is added during the solving process that destroys this property. */ SCIP_EXPORT SCIP_Bool SCIPisObjIntegral( SCIP* scip /**< SCIP data structure */ ); /** returns the Euclidean norm of the objective function vector (available only for transformed problem) * * @return the Euclidean norm of the transformed objective function vector * * @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 * - \ref SCIP_STAGE_EXITSOLVE */ SCIP_EXPORT SCIP_Real SCIPgetObjNorm( SCIP* scip /**< SCIP data structure */ ); /** adds variable to the 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 @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 */ SCIP_EXPORT SCIP_RETCODE SCIPaddVar( SCIP* scip, /**< SCIP data structure */ SCIP_VAR* var /**< variable to add */ ); /** adds variable to the problem and uses it as pricing candidate to enter the LP * * @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 only be called if @p scip is in stage \ref SCIP_STAGE_SOLVING */ SCIP_EXPORT SCIP_RETCODE SCIPaddPricedVar( SCIP* scip, /**< SCIP data structure */ SCIP_VAR* var, /**< variable to add */ SCIP_Real score /**< pricing score of variable (the larger, the better the variable) */ ); /** removes variable from the 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 @p scip is in one of the following stages: * - \ref SCIP_STAGE_PROBLEM * - \ref SCIP_STAGE_TRANSFORMING * - \ref SCIP_STAGE_TRANSFORMED * - \ref SCIP_STAGE_PRESOLVING * - \ref SCIP_STAGE_FREETRANS */ SCIP_EXPORT SCIP_RETCODE SCIPdelVar( SCIP* scip, /**< SCIP data structure */ SCIP_VAR* var, /**< variable to delete */ SCIP_Bool* deleted /**< pointer to store whether variable was successfully marked to be deleted */ ); /** gets variables of the problem along with the numbers of different variable types; data may become invalid after * calls to SCIPchgVarType(), SCIPfixVar(), SCIPaggregateVars(), and SCIPmultiaggregateVar() * * @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_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 * * @note Variables in the vars array are ordered: binaries first, then integers, implicit integers and continuous last. */ SCIP_EXPORT SCIP_RETCODE SCIPgetVarsData( SCIP* scip, /**< SCIP data structure */ SCIP_VAR*** vars, /**< pointer to store variables array or NULL if not needed */ int* nvars, /**< pointer to store number of variables or NULL if not needed */ int* nbinvars, /**< pointer to store number of binary variables or NULL if not needed */ int* nintvars, /**< pointer to store number of integer variables or NULL if not needed */ int* nimplvars, /**< pointer to store number of implicit integral vars or NULL if not needed */ int* ncontvars /**< pointer to store number of continuous variables or NULL if not needed */ ); /** gets array with active problem variables * * @return array with active problem variables * * @pre This method can be called if @p scip is in one of the following stages: * - \ref SCIP_STAGE_PROBLEM * - \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 * * @warning If your are using the methods which add or change bound of variables (e.g., SCIPchgVarType(), SCIPfixVar(), * SCIPaggregateVars(), and SCIPmultiaggregateVar()), it can happen that the internal variable array (which is * accessed via this method) gets resized and/or resorted. This can invalid the data pointer which is returned * by this method. * * @note Variables in the array are ordered: binaries first, then integers, implicit integers and continuous last. */ SCIP_EXPORT SCIP_VAR** SCIPgetVars( SCIP* scip /**< SCIP data structure */ ); /** gets number of active problem variables * * @return the number of active problem variables * * @pre This method can be called if @p scip is in one of the following stages: * - \ref SCIP_STAGE_PROBLEM * - \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 */ SCIP_EXPORT int SCIPgetNVars( SCIP* scip /**< SCIP data structure */ ); /** gets number of binary active problem variables * * @return the number of binary active problem variables * * @pre This method can be called if @p scip is in one of the following stages: * - \ref SCIP_STAGE_PROBLEM * - \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 */ SCIP_EXPORT int SCIPgetNBinVars( SCIP* scip /**< SCIP data structure */ ); /** gets number of integer active problem variables * * @return the number of integer active problem variables * * @pre This method can be called if @p scip is in one of the following stages: * - \ref SCIP_STAGE_PROBLEM * - \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 */ SCIP_EXPORT int SCIPgetNIntVars( SCIP* scip /**< SCIP data structure */ ); /** gets number of implicit integer active problem variables * * @return the number of implicit integer active problem variables * * @pre This method can be called if @p scip is in one of the following stages: * - \ref SCIP_STAGE_PROBLEM * - \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 */ SCIP_EXPORT int SCIPgetNImplVars( SCIP* scip /**< SCIP data structure */ ); /** gets number of continuous active problem variables * * @return the number of continuous active problem variables * * @pre This method can be called if @p scip is in one of the following stages: * - \ref SCIP_STAGE_PROBLEM * - \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 */ SCIP_EXPORT int SCIPgetNContVars( SCIP* scip /**< SCIP data structure */ ); /** gets number of active problem variables with a non-zero objective coefficient * * @note In case of the original problem the number of variables is counted. In case of the transformed problem the * number of variables is just returned since it is stored internally * * @return the number of active problem variables with a non-zero objective coefficient * * @pre This method can be called if @p scip is in one of the following stages: * - \ref SCIP_STAGE_PROBLEM * - \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 int SCIPgetNObjVars( SCIP* scip /**< SCIP data structure */ ); /** gets array with fixed and aggregated problem variables; data may become invalid after * calls to SCIPfixVar(), SCIPaggregateVars(), and SCIPmultiaggregateVar() * * @return an array with fixed and aggregated problem variables; data may become invalid after * calls to SCIPfixVar(), SCIPaggregateVars(), and SCIPmultiaggregateVar() * * @pre This method can be called if @p scip is in one of the following stages: * - \ref SCIP_STAGE_PROBLEM * - \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_VAR** SCIPgetFixedVars( SCIP* scip /**< SCIP data structure */ ); /** gets number of fixed or aggregated problem variables * * @return the number of fixed or aggregated problem variables * * @pre This method can be called if @p scip is in one of the following stages: * - \ref SCIP_STAGE_PROBLEM * - \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 int SCIPgetNFixedVars( SCIP* scip /**< SCIP data structure */ ); /** gets variables of the original problem along with the numbers of different variable types; data may become invalid * after a call to SCIPchgVarType() * * @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 */ SCIP_EXPORT SCIP_RETCODE SCIPgetOrigVarsData( SCIP* scip, /**< SCIP data structure */ SCIP_VAR*** vars, /**< pointer to store variables array or NULL if not needed */ int* nvars, /**< pointer to store number of variables or NULL if not needed */ int* nbinvars, /**< pointer to store number of binary variables or NULL if not needed */ int* nintvars, /**< pointer to store number of integer variables or NULL if not needed */ int* nimplvars, /**< pointer to store number of implicit integral vars or NULL if not needed */ int* ncontvars /**< pointer to store number of continuous variables or NULL if not needed */ ); /** gets array with original problem variables; data may become invalid after * a call to SCIPchgVarType() * * @return an array with original problem variables; data may become invalid after * a call to SCIPchgVarType() * * @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 */ SCIP_EXPORT SCIP_VAR** SCIPgetOrigVars( SCIP* scip /**< SCIP data structure */ ); /** gets number of original problem variables * * @return the number of original problem variables * * @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 */ SCIP_EXPORT int SCIPgetNOrigVars( SCIP* scip /**< SCIP data structure */ ); /** gets number of binary variables in the original problem * * @return the number of binary variables in the original problem * * @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 */ SCIP_EXPORT int SCIPgetNOrigBinVars( SCIP* scip /**< SCIP data structure */ ); /** gets the number of integer variables in the original problem * * @return the number of integer variables in the original problem * * @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 */ SCIP_EXPORT int SCIPgetNOrigIntVars( SCIP* scip /**< SCIP data structure */ ); /** gets number of implicit integer variables in the original problem * * @return the number of implicit integer variables in the original problem * * @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 */ SCIP_EXPORT int SCIPgetNOrigImplVars( SCIP* scip /**< SCIP data structure */ ); /** gets number of continuous variables in the original problem * * @return the number of continuous variables in the original problem * * @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 */ SCIP_EXPORT int SCIPgetNOrigContVars( SCIP* scip /**< SCIP data structure */ ); /** gets number of all problem variables created during creation and solving of problem; * this includes also variables that were deleted in the meantime * * @return the number of all problem variables created during creation and solving of problem; * this includes also variables that were deleted in the meantime * * @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 */ SCIP_EXPORT int SCIPgetNTotalVars( SCIP* scip /**< SCIP data structure */ ); /** gets variables of the original or transformed problem along with the numbers of different variable types; * the returned problem space (original or transformed) corresponds to the given solution; * data may become invalid after calls to SCIPchgVarType(), SCIPfixVar(), SCIPaggregateVars(), and * SCIPmultiaggregateVar() * * @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_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 SCIPgetSolVarsData( SCIP* scip, /**< SCIP data structure */ SCIP_SOL* sol, /**< primal solution that selects the problem space, NULL for current solution */ SCIP_VAR*** vars, /**< pointer to store variables array or NULL if not needed */ int* nvars, /**< pointer to store number of variables or NULL if not needed */ int* nbinvars, /**< pointer to store number of binary variables or NULL if not needed */ int* nintvars, /**< pointer to store number of integer variables or NULL if not needed */ int* nimplvars, /**< pointer to store number of implicit integral vars or NULL if not needed */ int* ncontvars /**< pointer to store number of continuous variables or NULL if not needed */ ); /** returns variable of given name in the problem, or NULL if not existing * * @return variable of given name in the problem, or NULL if not existing * * @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 */ SCIP_EXPORT SCIP_VAR* SCIPfindVar( SCIP* scip, /**< SCIP data structure */ const char* name /**< name of variable to find */ ); /** returns TRUE iff all potential variables exist in the problem, and FALSE, if there may be additional variables, * that will be added in pricing and improve the objective value * * @return TRUE, if all potential variables exist in the problem; FALSE, otherwise * * @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_Bool SCIPallVarsInProb( SCIP* scip /**< SCIP data structure */ ); /** adds constraint to the problem; if constraint is only valid locally, it is added to the local subproblem of the * current node (and all of its subnodes); otherwise it is added to the global problem; * if a local constraint is added at the root node, it is automatically upgraded into a global 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_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 */ SCIP_EXPORT SCIP_RETCODE SCIPaddCons( SCIP* scip, /**< SCIP data structure */ SCIP_CONS* cons /**< constraint to add */ ); /** globally removes constraint from all subproblems; removes constraint from the constraint set change data of the * node, where it was added, or from the problem, if it was a problem 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_INITPRESOLVE * - \ref SCIP_STAGE_PRESOLVING * - \ref SCIP_STAGE_EXITPRESOLVE * - \ref SCIP_STAGE_INITSOLVE * - \ref SCIP_STAGE_SOLVING * - \ref SCIP_STAGE_EXITSOLVE */ SCIP_EXPORT SCIP_RETCODE SCIPdelCons( SCIP* scip, /**< SCIP data structure */ SCIP_CONS* cons /**< constraint to delete */ ); /** returns original constraint of given name in the problem, or NULL if not existing * * @return original constraint of given name in the problem, or NULL if not existing * * @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_INITSOLVE * - \ref SCIP_STAGE_SOLVING * - \ref SCIP_STAGE_SOLVED * - \ref SCIP_STAGE_EXITSOLVE * - \ref SCIP_STAGE_FREETRANS */ SCIP_EXPORT SCIP_CONS* SCIPfindOrigCons( SCIP* scip, /**< SCIP data structure */ const char* name /**< name of constraint to find */ ); /** returns constraint of given name in the problem, or NULL if not existing * * @return constraint of given name in the problem, or NULL if not existing * * @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 */ SCIP_EXPORT SCIP_CONS* SCIPfindCons( SCIP* scip, /**< SCIP data structure */ const char* name /**< name of constraint to find */ ); /** gets number of upgraded constraints * * @return number of upgraded constraints * * @pre This method can be called if @p scip is in one of the following stages: * - \ref SCIP_STAGE_PROBLEM * - \ref SCIP_STAGE_TRANSFORMED * - \ref SCIP_STAGE_INITPRESOLVE * - \ref SCIP_STAGE_PRESOLVING * - \ref SCIP_STAGE_PRESOLVED * - \ref SCIP_STAGE_EXITPRESOLVE * - \ref SCIP_STAGE_SOLVING * - \ref SCIP_STAGE_SOLVED */ SCIP_EXPORT int SCIPgetNUpgrConss( SCIP* scip /**< SCIP data structure */ ); /** gets total number of globally valid constraints currently in the problem * * @return total number of globally valid constraints currently in the problem * * @pre This method can be called if @p scip is in one of the following stages: * - \ref SCIP_STAGE_PROBLEM * - \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 int SCIPgetNConss( SCIP* scip /**< SCIP data structure */ ); /** gets array of globally valid constraints currently in the problem * * @return array of globally valid constraints currently in the problem * * @pre This method can be called if @p scip is in one of the following stages: * - \ref SCIP_STAGE_PROBLEM * - \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 * * @warning If your are using the method SCIPaddCons(), it can happen that the internal constraint array (which is * accessed via this method) gets resized. This can invalid the pointer which is returned by this method. */ SCIP_EXPORT SCIP_CONS** SCIPgetConss( SCIP* scip /**< SCIP data structure */ ); /** gets total number of constraints in the original problem * * @return total number of constraints in the original problem * * @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 */ SCIP_EXPORT int SCIPgetNOrigConss( SCIP* scip /**< SCIP data structure */ ); /** gets array of constraints in the original problem * * @return array of constraints in the original problem * * @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 */ SCIP_EXPORT SCIP_CONS** SCIPgetOrigConss( SCIP* scip /**< SCIP data structure */ ); /** computes the number of check constraint in the current node (loop over all constraint handler and cumulates the * number of check constraints) * * @return returns the number of check constraints * * @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 */ SCIP_EXPORT int SCIPgetNCheckConss( SCIP* scip /**< SCIP data structure */ ); /**@} */ /**@addtogroup LocalSubproblemMethods * * @{ */ /** adds a conflict to a given node or globally to the problem if @p node == 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 in one of the following stages of the SCIP solving process: * - \ref SCIP_STAGE_INITPRESOLVE * - \ref SCIP_STAGE_PRESOLVING * - \ref SCIP_STAGE_EXITPRESOLVE * - \ref SCIP_STAGE_SOLVING * * @note this method will release the constraint */ SCIP_EXPORT SCIP_RETCODE SCIPaddConflict( SCIP* scip, /**< SCIP data structure */ SCIP_NODE* node, /**< node to add conflict (or NULL if global) */ SCIP_CONS* cons, /**< constraint representing the conflict */ SCIP_NODE* validnode, /**< node at which the constraint is valid (or NULL) */ SCIP_CONFTYPE conftype, /**< type of the conflict */ SCIP_Bool iscutoffinvolved /**< is a cutoff bound involved in this conflict */ ); /** removes all conflicts depending on an old cutoff bound if the improvement of the incumbent is good enough * * @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 in one of the following stages of the SCIP solving process: * - \ref SCIP_STAGE_PRESOLVING * - \ref SCIP_STAGE_SOLVING */ SCIP_EXPORT SCIP_RETCODE SCIPclearConflictStore( SCIP* scip, /**< SCIP data structure */ SCIP_EVENT* event /**< event data */ ); /** adds constraint to the given node (and all of its subnodes), even if it is a global constraint; * It is sometimes desirable to add the constraint to a more local node (i.e., a node of larger depth) even if * the constraint is also valid higher in the tree, for example, if one wants to produce a constraint which is * only active in a small part of the tree although it is valid in a larger part. * In this case, one should pass the more global node where the constraint is valid as "validnode". * Note that the same constraint cannot be added twice to the branching tree with different "validnode" parameters. * If the constraint is valid at the same node as it is inserted (the usual case), one should pass NULL as "validnode". * If the "validnode" is the root node, it is automatically upgraded into a global constraint, but still only added to * the given node. If a local constraint is added to the root node, it is added to the global problem instead. * * @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 in one of the following stages of the SCIP solving process: * - \ref SCIP_STAGE_INITPRESOLVE * - \ref SCIP_STAGE_PRESOLVING * - \ref SCIP_STAGE_EXITPRESOLVE * - \ref SCIP_STAGE_SOLVING */ SCIP_EXPORT SCIP_RETCODE SCIPaddConsNode( SCIP* scip, /**< SCIP data structure */ SCIP_NODE* node, /**< node to add constraint to */ SCIP_CONS* cons, /**< constraint to add */ SCIP_NODE* validnode /**< node at which the constraint is valid, or NULL */ ); /** adds constraint locally to the current node (and all of its subnodes), even if it is a global constraint; * It is sometimes desirable to add the constraint to a more local node (i.e., a node of larger depth) even if * the constraint is also valid higher in the tree, for example, if one wants to produce a constraint which is * only active in a small part of the tree although it is valid in a larger part. * * If the constraint is valid at the same node as it is inserted (the usual case), one should pass NULL as "validnode". * If the "validnode" is the root node, it is automatically upgraded into a global constraint, but still only added to * the given node. If a local constraint is added to the root node, it is added to the global problem instead. * * @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 in one of the following stages of the SCIP solving process: * - \ref SCIP_STAGE_INITPRESOLVE * - \ref SCIP_STAGE_PRESOLVING * - \ref SCIP_STAGE_EXITPRESOLVE * - \ref SCIP_STAGE_SOLVING * * @note The same constraint cannot be added twice to the branching tree with different "validnode" parameters. This is * the case due internal data structures and performance issues. In such a case you should try to realize your * issue using the method SCIPdisableCons() and SCIPenableCons() and control these via the event system of SCIP. */ SCIP_EXPORT SCIP_RETCODE SCIPaddConsLocal( SCIP* scip, /**< SCIP data structure */ SCIP_CONS* cons, /**< constraint to add */ SCIP_NODE* validnode /**< node at which the constraint is valid, or NULL */ ); /** disables constraint's separation, enforcing, and propagation capabilities at the given node (and all subnodes); * if the method is called at the root node, the constraint is globally deleted from the problem; * the constraint deletion is being remembered at the given node, s.t. after leaving the node's subtree, the constraint * is automatically enabled again, and after entering the node's subtree, it is automatically disabled; * this may improve performance because redundant checks on this constraint are avoided, but it consumes memory; * alternatively, use SCIPdisableCons() * * @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 in one of the following stages of the SCIP solving process: * - \ref SCIP_STAGE_INITPRESOLVE * - \ref SCIP_STAGE_PRESOLVING * - \ref SCIP_STAGE_EXITPRESOLVE * - \ref SCIP_STAGE_SOLVING */ SCIP_EXPORT SCIP_RETCODE SCIPdelConsNode( SCIP* scip, /**< SCIP data structure */ SCIP_NODE* node, /**< node to disable constraint in */ SCIP_CONS* cons /**< constraint to locally delete */ ); /** disables constraint's separation, enforcing, and propagation capabilities at the current node (and all subnodes); * if the method is called during problem modification or at the root node, the constraint is globally deleted from * the problem; * the constraint deletion is being remembered at the current node, s.t. after leaving the current subtree, the * constraint is automatically enabled again, and after reentering the current node's subtree, it is automatically * disabled again; * this may improve performance because redundant checks on this constraint are avoided, but it consumes memory; * alternatively, use SCIPdisableCons() * * @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 in one of the following stages of the SCIP solving process: * - \ref SCIP_STAGE_PROBLEM * - \ref SCIP_STAGE_INITPRESOLVE * - \ref SCIP_STAGE_PRESOLVING * - \ref SCIP_STAGE_EXITPRESOLVE * - \ref SCIP_STAGE_SOLVING */ SCIP_EXPORT SCIP_RETCODE SCIPdelConsLocal( SCIP* scip, /**< SCIP data structure */ SCIP_CONS* cons /**< constraint to locally delete */ ); /** gets estimate of best primal solution w.r.t. original problem contained in current subtree * * @return estimate of best primal solution w.r.t. original problem contained in current subtree * * @pre this method can be called in one of the following stages of the SCIP solving process: * - \ref SCIP_STAGE_SOLVING */ SCIP_EXPORT SCIP_Real SCIPgetLocalOrigEstimate( SCIP* scip /**< SCIP data structure */ ); /** gets estimate of best primal solution w.r.t. transformed problem contained in current subtree * * @return estimate of best primal solution w.r.t. transformed problem contained in current subtree * * @pre this method can be called in one of the following stages of the SCIP solving process: * - \ref SCIP_STAGE_SOLVING */ SCIP_EXPORT SCIP_Real SCIPgetLocalTransEstimate( SCIP* scip /**< SCIP data structure */ ); /** gets dual bound of current node * * @return dual bound of current node * * @pre this method can be called in one of the following stages of the SCIP solving process: * - \ref SCIP_STAGE_SOLVING */ SCIP_EXPORT SCIP_Real SCIPgetLocalDualbound( SCIP* scip /**< SCIP data structure */ ); /** gets lower bound of current node in transformed problem * * @return lower bound of current node in transformed problem * * @pre this method can be called in one of the following stages of the SCIP solving process: * - \ref SCIP_STAGE_SOLVING */ SCIP_EXPORT SCIP_Real SCIPgetLocalLowerbound( SCIP* scip /**< SCIP data structure */ ); /** gets dual bound of given node * * @return dual bound of a given node * * @pre this method can be called in one of the following stages of the SCIP solving process: * - \ref SCIP_STAGE_SOLVING */ SCIP_EXPORT SCIP_Real SCIPgetNodeDualbound( SCIP* scip, /**< SCIP data structure */ SCIP_NODE* node /**< node to get dual bound for */ ); /** gets lower bound of given node in transformed problem * * @return lower bound of given node in transformed problem * * @pre this method can be called in one of the following stages of the SCIP solving process: * - \ref SCIP_STAGE_SOLVING */ SCIP_EXPORT SCIP_Real SCIPgetNodeLowerbound( SCIP* scip, /**< SCIP data structure */ SCIP_NODE* node /**< node to get dual bound for */ ); /** if given value is tighter (larger for minimization, smaller for maximization) than the current node's dual bound (in * original problem space), sets the current node's dual bound to the new value * * @note the given new bound has to be a dual bound, i.e., it has to be valid for the original 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 in one of the following stages of the SCIP solving process: * - \ref SCIP_STAGE_PROBLEM * - \ref SCIP_STAGE_PRESOLVING * - \ref SCIP_STAGE_PRESOLVED * - \ref SCIP_STAGE_SOLVING */ SCIP_EXPORT SCIP_RETCODE SCIPupdateLocalDualbound( SCIP* scip, /**< SCIP data structure */ SCIP_Real newbound /**< new dual bound for the node (if it's tighter than the old one) */ ); /** if given value is larger than the current node's lower bound (in transformed problem), sets the current node's * lower bound to the new value * * @note the given new bound has to be a lower bound, i.e., it has to be valid for 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 in one of the following stages of the SCIP solving process: * - \ref SCIP_STAGE_PRESOLVING * - \ref SCIP_STAGE_PRESOLVED * - \ref SCIP_STAGE_SOLVING */ SCIP_EXPORT SCIP_RETCODE SCIPupdateLocalLowerbound( SCIP* scip, /**< SCIP data structure */ SCIP_Real newbound /**< new lower bound for the node (if it's larger than the old one) */ ); /** if given value is tighter (larger for minimization, smaller for maximization) than the node's dual bound, * sets the node's dual bound to the new value * * @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 in one of the following stages of the SCIP solving process: * - \ref SCIP_STAGE_SOLVING */ SCIP_EXPORT SCIP_RETCODE SCIPupdateNodeDualbound( SCIP* scip, /**< SCIP data structure */ SCIP_NODE* node, /**< node to update dual bound for */ SCIP_Real newbound /**< new dual bound for the node (if it's tighter than the old one) */ ); /** if given value is larger than the node's lower bound (in transformed problem), sets the node's lower bound * to the new value * * @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 in one of the following stages of the SCIP solving process: * - \ref SCIP_STAGE_SOLVING */ SCIP_EXPORT SCIP_RETCODE SCIPupdateNodeLowerbound( SCIP* scip, /**< SCIP data structure */ SCIP_NODE* node, /**< node to update lower bound for */ SCIP_Real newbound /**< new lower bound for the node (if it's larger than the old one) */ ); /** change the node selection priority of the given child * * @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 in one of the following stages of the SCIP solving process: * - \ref SCIP_STAGE_SOLVING */ SCIP_EXPORT SCIP_RETCODE SCIPchgChildPrio( SCIP* scip, /**< SCIP data structure */ SCIP_NODE* child, /**< child to update the node selection priority */ SCIP_Real priority /**< node selection priority value */ ); /**@} */ #ifdef __cplusplus } #endif #endif