/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ /* */ /* 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_sol.h * @ingroup PUBLICCOREAPI * @brief public methods for solutions * @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_SOL_H__ #define __SCIP_SCIP_SOL_H__ #include "scip/def.h" #include "scip/type_cons.h" #include "scip/type_heur.h" #include "scip/type_retcode.h" #include "scip/type_scip.h" #include "scip/type_sol.h" #include "scip/type_var.h" #ifdef __cplusplus extern "C" { #endif /**@addtogroup PublicSolutionMethods * * @{ */ /** creates a primal solution, initialized to zero * * @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_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 */ SCIP_EXPORT SCIP_RETCODE SCIPcreateSol( SCIP* scip, /**< SCIP data structure */ SCIP_SOL** sol, /**< pointer to store the solution */ SCIP_HEUR* heur /**< heuristic that found the solution (or NULL if it's from the tree) */ ); /** creates a primal solution, initialized to the current 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 SCIP is in one of the following stages: * - \ref SCIP_STAGE_SOLVING */ SCIP_EXPORT SCIP_RETCODE SCIPcreateLPSol( SCIP* scip, /**< SCIP data structure */ SCIP_SOL** sol, /**< pointer to store the solution */ SCIP_HEUR* heur /**< heuristic that found the solution (or NULL if it's from the tree) */ ); /** creates a primal solution, initialized to the current NLP 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 SCIP is in one of the following stages: * - \ref SCIP_STAGE_SOLVING */ SCIP_EXPORT SCIP_RETCODE SCIPcreateNLPSol( SCIP* scip, /**< SCIP data structure */ SCIP_SOL** sol, /**< pointer to store the solution */ SCIP_HEUR* heur /**< heuristic that found the solution (or NULL if it's from the tree) */ ); /** creates a primal solution, initialized to the current 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 SCIP is in one of the following stages: * - \ref SCIP_STAGE_SOLVING */ SCIP_EXPORT SCIP_RETCODE SCIPcreateRelaxSol( SCIP* scip, /**< SCIP data structure */ SCIP_SOL** sol, /**< pointer to store the solution */ SCIP_HEUR* heur /**< heuristic that found the solution (or NULL if it's from the tree) */ ); /** creates a primal solution, initialized to the current 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 SCIP is in one of the following stages: * - \ref SCIP_STAGE_SOLVING */ SCIP_EXPORT SCIP_RETCODE SCIPcreatePseudoSol( SCIP* scip, /**< SCIP data structure */ SCIP_SOL** sol, /**< pointer to store the solution */ SCIP_HEUR* heur /**< heuristic that found the solution (or NULL if it's from the tree) */ ); /** creates a primal solution, initialized to the current LP or pseudo solution, depending on whether the LP was solved * at the current node * * @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_SOLVING */ SCIP_EXPORT SCIP_RETCODE SCIPcreateCurrentSol( SCIP* scip, /**< SCIP data structure */ SCIP_SOL** sol, /**< pointer to store the solution */ SCIP_HEUR* heur /**< heuristic that found the solution (or NULL if it's from the tree) */ ); /** creates a partial primal solution, initialized to unknown values * * @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_PROBLEM */ SCIP_EXPORT SCIP_RETCODE SCIPcreatePartialSol( SCIP* scip, /**< SCIP data structure */ SCIP_SOL** sol, /**< pointer to store the solution */ SCIP_HEUR* heur /**< heuristic that found the solution (or NULL if it's from the tree) */ ); /** creates a primal solution, initialized to unknown values * * @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_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 SCIPcreateUnknownSol( SCIP* scip, /**< SCIP data structure */ SCIP_SOL** sol, /**< pointer to store the solution */ SCIP_HEUR* heur /**< heuristic that found the solution (or NULL if it's from the tree) */ ); /** creates a primal solution living in the original problem space, initialized to zero; * a solution in original space allows to set original variables to values that would be invalid in the * transformed problem due to preprocessing fixings or aggregations * * @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_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 */ SCIP_EXPORT SCIP_RETCODE SCIPcreateOrigSol( SCIP* scip, /**< SCIP data structure */ SCIP_SOL** sol, /**< pointer to store the solution */ SCIP_HEUR* heur /**< heuristic that found the solution (or NULL if it's from the tree) */ ); /** creates a copy of a primal solution; note that a copy of a linked solution is also linked and needs to be unlinked * if it should stay unaffected from changes in the LP or 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 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 */ SCIP_EXPORT SCIP_RETCODE SCIPcreateSolCopy( SCIP* scip, /**< SCIP data structure */ SCIP_SOL** sol, /**< pointer to store the solution */ SCIP_SOL* sourcesol /**< primal CIP solution to copy */ ); /** creates a copy of a solution in the original primal solution 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 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 SCIPcreateSolCopyOrig( SCIP* scip, /**< SCIP data structure */ SCIP_SOL** sol, /**< pointer to store the solution */ SCIP_SOL* sourcesol /**< primal CIP solution to copy */ ); /** creates a copy of a primal solution, thereby replacing infinite fixings of variables by finite values; * the copy is always defined in the original variable space; * success indicates whether the objective value of the solution was changed by removing infinite values * * @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_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 */ SCIP_EXPORT SCIP_RETCODE SCIPcreateFiniteSolCopy( SCIP* scip, /**< SCIP data structure */ SCIP_SOL** sol, /**< pointer to store the solution */ SCIP_SOL* sourcesol, /**< primal CIP solution to copy */ SCIP_Bool* success /**< does the finite solution have the same objective value? */ ); /** frees primal CIP 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 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 SCIPfreeSol( SCIP* scip, /**< SCIP data structure */ SCIP_SOL** sol /**< pointer to the solution */ ); /** links a primal solution to the current 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 SCIP is in one of the following stages: * - \ref SCIP_STAGE_SOLVING */ SCIP_EXPORT SCIP_RETCODE SCIPlinkLPSol( SCIP* scip, /**< SCIP data structure */ SCIP_SOL* sol /**< primal solution */ ); /** links a primal solution to the current NLP 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 SCIP is in one of the following stages: * - \ref SCIP_STAGE_SOLVING */ SCIP_EXPORT SCIP_RETCODE SCIPlinkNLPSol( SCIP* scip, /**< SCIP data structure */ SCIP_SOL* sol /**< primal solution */ ); /** links a primal solution to the current 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 SCIP is in one of the following stages: * - \ref SCIP_STAGE_SOLVING */ SCIP_EXPORT SCIP_RETCODE SCIPlinkRelaxSol( SCIP* scip, /**< SCIP data structure */ SCIP_SOL* sol /**< primal solution */ ); /** links a primal solution to the current 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 SCIP is in one of the following stages: * - \ref SCIP_STAGE_PRESOLVING * - \ref SCIP_STAGE_SOLVING */ SCIP_EXPORT SCIP_RETCODE SCIPlinkPseudoSol( SCIP* scip, /**< SCIP data structure */ SCIP_SOL* sol /**< primal solution */ ); /** links a primal solution to the current LP or 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 SCIP is in one of the following stages: * - \ref SCIP_STAGE_SOLVING */ SCIP_EXPORT SCIP_RETCODE SCIPlinkCurrentSol( SCIP* scip, /**< SCIP data structure */ SCIP_SOL* sol /**< primal solution */ ); /** clears a 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 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 SCIPclearSol( SCIP* scip, /**< SCIP data structure */ SCIP_SOL* sol /**< primal solution */ ); /** stores solution values of variables in solution's own array * * @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_TRANSFORMING * - \ref SCIP_STAGE_TRANSFORMED * - \ref SCIP_STAGE_PRESOLVING * - \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 SCIPunlinkSol( SCIP* scip, /**< SCIP data structure */ SCIP_SOL* sol /**< primal solution */ ); /** sets value of variable in primal CIP 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 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 SCIPsetSolVal( SCIP* scip, /**< SCIP data structure */ SCIP_SOL* sol, /**< primal solution */ SCIP_VAR* var, /**< variable to add to solution */ SCIP_Real val /**< solution value of variable */ ); /** sets values of multiple variables in primal CIP 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 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 SCIPsetSolVals( SCIP* scip, /**< SCIP data structure */ SCIP_SOL* sol, /**< primal solution */ int nvars, /**< number of variables to set solution value for */ SCIP_VAR** vars, /**< array with variables to add to solution */ SCIP_Real* vals /**< array with solution values of variables */ ); /** increases value of variable in primal CIP 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 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 SCIPincSolVal( SCIP* scip, /**< SCIP data structure */ SCIP_SOL* sol, /**< primal solution */ SCIP_VAR* var, /**< variable to increase solution value for */ SCIP_Real incval /**< increment for solution value of variable */ ); /** returns value of variable in primal CIP solution, or in current LP/pseudo solution * * @return value of variable in primal CIP solution, or in current LP/pseudo solution * * @pre In case the solution pointer @p sol is @b NULL, that means it is asked for the LP or pseudo solution, this method * can only be called if @p scip is in the solving stage \ref SCIP_STAGE_SOLVING. In any other case, 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_Real SCIPgetSolVal( SCIP* scip, /**< SCIP data structure */ SCIP_SOL* sol, /**< primal solution, or NULL for current LP/pseudo solution */ SCIP_VAR* var /**< variable to get value for */ ); /** gets values of multiple variables in primal CIP 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 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 SCIPgetSolVals( SCIP* scip, /**< SCIP data structure */ SCIP_SOL* sol, /**< primal solution, or NULL for current LP/pseudo solution */ int nvars, /**< number of variables to get solution value for */ SCIP_VAR** vars, /**< array with variables to get value for */ SCIP_Real* vals /**< array to store solution values of variables */ ); /** returns objective value of primal CIP solution w.r.t. original problem, or current LP/pseudo objective value * * @return objective value of primal CIP solution w.r.t. original problem, or current LP/pseudo objective value * * @pre This method can be called if 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_Real SCIPgetSolOrigObj( SCIP* scip, /**< SCIP data structure */ SCIP_SOL* sol /**< primal solution, or NULL for current LP/pseudo objective value */ ); /** returns transformed objective value of primal CIP solution, or transformed current LP/pseudo objective value * * @return transformed objective value of primal CIP solution, or transformed current LP/pseudo objective value * * @pre This method can be called if 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_Real SCIPgetSolTransObj( SCIP* scip, /**< SCIP data structure */ SCIP_SOL* sol /**< primal solution, or NULL for current LP/pseudo objective value */ ); /** recomputes the objective value of an original solution, e.g., when transferring solutions * from the solution pool (objective coefficients might have changed in the meantime) * * @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_PRESOLVING * - \ref SCIP_STAGE_SOLVING * */ SCIP_EXPORT SCIP_RETCODE SCIPrecomputeSolObj( SCIP* scip, SCIP_SOL* sol ); /** maps original space objective value into transformed objective value * * @return transformed objective value * * @pre This method can be called if 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 */ SCIP_EXPORT SCIP_Real SCIPtransformObj( SCIP* scip, /**< SCIP data structure */ SCIP_Real obj /**< original space objective value to transform */ ); /** maps transformed objective value into original space * * @return objective value into original space * * @pre This method can be called if 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 */ SCIP_EXPORT SCIP_Real SCIPretransformObj( SCIP* scip, /**< SCIP data structure */ SCIP_Real obj /**< transformed objective value to retransform in original space */ ); /** gets clock time, when this solution was found * * @return clock time, when this solution was found * * @pre This method can be called if 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_Real SCIPgetSolTime( SCIP* scip, /**< SCIP data structure */ SCIP_SOL* sol /**< primal solution */ ); /** gets branch and bound run number, where this solution was found * * @return branch and bound run number, where this solution was found * * @pre This method can be called if 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 int SCIPgetSolRunnum( SCIP* scip, /**< SCIP data structure */ SCIP_SOL* sol /**< primal solution */ ); /** gets node number of the specific branch and bound run, where this solution was found * * @return node number of the specific branch and bound run, where this solution was found * * @pre This method can be called if 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_Longint SCIPgetSolNodenum( SCIP* scip, /**< SCIP data structure */ SCIP_SOL* sol /**< primal solution */ ); /** gets heuristic, that found this solution (or NULL if it's from the tree) * * @return heuristic, that found this solution (or NULL if it's from the tree) * * @pre This method can be called if 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_HEUR* SCIPgetSolHeur( SCIP* scip, /**< SCIP data structure */ SCIP_SOL* sol /**< primal solution */ ); /** returns whether two given solutions are exactly equal * * @return returns whether two given solutions are exactly equal * * @pre This method can be called if 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_Bool SCIPareSolsEqual( SCIP* scip, /**< SCIP data structure */ SCIP_SOL* sol1, /**< first primal CIP solution */ SCIP_SOL* sol2 /**< second primal CIP solution */ ); /** adjusts solution values of implicit integer variables in handed solution. Solution objective value is not * deteriorated by this method. * * @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_SOLVING */ SCIP_EXPORT SCIP_RETCODE SCIPadjustImplicitSolVals( SCIP* scip, /**< SCIP data structure */ SCIP_SOL* sol, /**< primal CIP solution */ SCIP_Bool uselprows /**< should LP row information be considered for none-objective variables */ ); /** outputs non-zero variables of solution in original problem space to the given file stream * * @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 In case the solution pointer @p sol is NULL (askinking for the current LP/pseudo solution), this method can be * called if @p scip is in one of the following stages: * - \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 * * @pre In case the solution pointer @p sol is @b not NULL, 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 SCIP_RETCODE SCIPprintSol( SCIP* scip, /**< SCIP data structure */ SCIP_SOL* sol, /**< primal solution, or NULL for current LP/pseudo solution */ FILE* file, /**< output file (or NULL for standard output) */ SCIP_Bool printzeros /**< should variables set to zero be printed? */ ); /** outputs non-zero variables of solution in transformed problem space to file stream * * @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_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_RETCODE SCIPprintTransSol( SCIP* scip, /**< SCIP data structure */ SCIP_SOL* sol, /**< primal solution, or NULL for current LP/pseudo solution */ FILE* file, /**< output file (or NULL for standard output) */ SCIP_Bool printzeros /**< should variables set to zero be printed? */ ); /** outputs discrete variables of solution in original problem space to the given file stream * * @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 */ SCIP_EXPORT SCIP_RETCODE SCIPprintMIPStart( SCIP* scip, /**< SCIP data structure */ SCIP_SOL* sol, /**< primal solution */ FILE* file /**< output file (or NULL for standard output) */ ); /** returns dual solution value of a constraint */ SCIP_EXPORT SCIP_RETCODE SCIPgetDualSolVal( SCIP* scip, /**< SCIP data structure */ SCIP_CONS* cons, /**< constraint for which the dual solution should be returned */ SCIP_Real* dualsolval, /**< pointer to store the dual solution value */ SCIP_Bool* boundconstraint /**< pointer to store whether the constraint is a bound constraint (or NULL) */ ); /** check whether the dual solution is available * * @note This is used when calling \ref SCIPprintDualSol() * * @return is dual solution available? * * @pre This method can be called if SCIP is in one of the following stages: * - \ref SCIP_STAGE_SOLVED */ SCIP_EXPORT SCIP_Bool SCIPisDualSolAvailable( SCIP* scip, /**< SCIP data structure */ SCIP_Bool printreason /**< print warning message if dualsol is not available? */ ); /** outputs dual solution from LP solver to file stream * * @note This only works if no presolving has been performed, which can be checked by calling method \ref * SCIPhasPerformedPresolve(). * * @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_SOLVED */ SCIP_EXPORT SCIP_RETCODE SCIPprintDualSol( SCIP* scip, /**< SCIP data structure */ FILE* file, /**< output file (or NULL for standard output) */ SCIP_Bool printzeros /**< should variables set to zero be printed? */ ); /** outputs non-zero variables of solution representing a ray in original problem space to file stream * * @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_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 SCIP_RETCODE SCIPprintRay( SCIP* scip, /**< SCIP data structure */ SCIP_SOL* sol, /**< primal solution representing ray */ FILE* file, /**< output file (or NULL for standard output) */ SCIP_Bool printzeros /**< should variables set to zero be printed? */ ); /** gets number of feasible primal solutions stored in the solution storage in case the problem is transformed; * in case the problem stage is SCIP_STAGE_PROBLEM, the number of solution in the original solution candidate * storage is returned * * @return number of feasible primal solutions stored in the solution storage in case the problem is transformed; or * number of solution in the original solution candidate storage if the problem stage is SCIP_STAGE_PROBLEM * * @pre This method can be called if 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 SCIPgetNSols( SCIP* scip /**< SCIP data structure */ ); /** gets array of feasible primal solutions stored in the solution storage in case the problem is transformed; in case * if the problem stage is in SCIP_STAGE_PROBLEM, it returns the number array of solution candidate stored * * @return array of feasible primal solutions * * @pre This method can be called if 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 SCIP_SOL** SCIPgetSols( SCIP* scip /**< SCIP data structure */ ); /** gets best feasible primal solution found so far if the problem is transformed; in case the problem is in * SCIP_STAGE_PROBLEM it returns the best solution candidate, or NULL if no solution has been found or the candidate * store is empty; * * @return best feasible primal solution so far * * @pre This method can be called if 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 SCIP_SOL* SCIPgetBestSol( SCIP* scip /**< SCIP data structure */ ); /** outputs best feasible primal solution found so far to file stream * * @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 * - \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_FREE */ SCIP_EXPORT SCIP_RETCODE SCIPprintBestSol( SCIP* scip, /**< SCIP data structure */ FILE* file, /**< output file (or NULL for standard output) */ SCIP_Bool printzeros /**< should variables set to zero be printed? */ ); /** outputs best feasible primal solution found so far in transformed variables to file stream * * @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 * - \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_FREE */ SCIP_EXPORT SCIP_RETCODE SCIPprintBestTransSol( SCIP* scip, /**< SCIP data structure */ FILE* file, /**< output file (or NULL for standard output) */ SCIP_Bool printzeros /**< should variables set to zero be printed? */ ); /** try to round 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 SCIP is in one of the following stages: * - \ref SCIP_STAGE_SOLVING */ SCIP_EXPORT SCIP_RETCODE SCIProundSol( SCIP* scip, /**< SCIP data structure */ SCIP_SOL* sol, /**< primal solution */ SCIP_Bool* success /**< pointer to store whether rounding was successful */ ); /** retransforms solution to original problem 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 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 SCIPretransformSol( SCIP* scip, /**< SCIP data structure */ SCIP_SOL* sol /**< primal CIP solution */ ); /** reads a given solution 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 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 */ SCIP_EXPORT SCIP_RETCODE SCIPreadSol( SCIP* scip, /**< SCIP data structure */ const char* filename /**< name of the input file */ ); /** reads a given solution file and store the solution values in the given solution pointer * * @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_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 */ SCIP_EXPORT SCIP_RETCODE SCIPreadSolFile( SCIP* scip, /**< SCIP data structure */ const char* filename, /**< name of the input file */ SCIP_SOL* sol, /**< solution pointer */ SCIP_Bool xml, /**< true, iff the given solution in written in XML */ SCIP_Bool* partial, /**< pointer to store if the solution is partial */ SCIP_Bool* error /**< pointer store if an error occured */ ); /** adds feasible primal solution to solution storage by copying it * * @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_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_FREETRANS * * @note Do not call during propagation, use heur_trysol instead. */ SCIP_EXPORT SCIP_RETCODE SCIPaddSol( SCIP* scip, /**< SCIP data structure */ SCIP_SOL* sol, /**< primal CIP solution */ SCIP_Bool* stored /**< stores whether given solution was good enough to keep */ ); /** adds primal solution to solution storage, frees the solution afterwards * * @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_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_FREETRANS * * @note Do not call during propagation, use heur_trysol instead. */ SCIP_EXPORT SCIP_RETCODE SCIPaddSolFree( SCIP* scip, /**< SCIP data structure */ SCIP_SOL** sol, /**< pointer to primal CIP solution; is cleared in function call */ SCIP_Bool* stored /**< stores whether given solution was good enough to keep */ ); /** adds current LP/pseudo solution to solution storage * * @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_PRESOLVED * - \ref SCIP_STAGE_SOLVING */ SCIP_EXPORT SCIP_RETCODE SCIPaddCurrentSol( SCIP* scip, /**< SCIP data structure */ SCIP_HEUR* heur, /**< heuristic that found the solution */ SCIP_Bool* stored /**< stores whether given solution was good enough to keep */ ); /** checks solution for feasibility; if possible, adds it to storage by copying * * @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_TRANSFORMED * - \ref SCIP_STAGE_INITPRESOLVE * - \ref SCIP_STAGE_PRESOLVING * - \ref SCIP_STAGE_EXITPRESOLVE * - \ref SCIP_STAGE_PRESOLVED * - \ref SCIP_STAGE_SOLVING * * @note Do not call during propagation, use heur_trysol instead. */ SCIP_EXPORT SCIP_RETCODE SCIPtrySol( SCIP* scip, /**< SCIP data structure */ SCIP_SOL* sol, /**< primal CIP solution */ SCIP_Bool printreason, /**< Should all reasons of violations be printed? */ SCIP_Bool completely, /**< Should all violations be checked if printreason is true? */ SCIP_Bool checkbounds, /**< Should the bounds of the variables be checked? */ 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* stored /**< stores whether given solution was feasible and good enough to keep */ ); /** checks primal solution; if feasible, adds it to storage; solution is freed afterwards * * @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_TRANSFORMED * - \ref SCIP_STAGE_INITPRESOLVE * - \ref SCIP_STAGE_PRESOLVING * - \ref SCIP_STAGE_EXITPRESOLVE * - \ref SCIP_STAGE_PRESOLVED * - \ref SCIP_STAGE_SOLVING * * @note Do not call during propagation, use heur_trysol instead. */ SCIP_EXPORT SCIP_RETCODE SCIPtrySolFree( SCIP* scip, /**< SCIP data structure */ SCIP_SOL** sol, /**< pointer to primal CIP solution; is cleared in function call */ SCIP_Bool printreason, /**< Should all reasons of violations be printed? */ SCIP_Bool completely, /**< Should all violations be checked if printreason is true? */ SCIP_Bool checkbounds, /**< Should the bounds of the variables be checked? */ 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* stored /**< stores whether solution was feasible and good enough to keep */ ); /** checks current LP/pseudo solution for feasibility; if possible, adds it to storage * * @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_PRESOLVED * - \ref SCIP_STAGE_SOLVING */ SCIP_EXPORT SCIP_RETCODE SCIPtryCurrentSol( SCIP* scip, /**< SCIP data structure */ SCIP_HEUR* heur, /**< heuristic that found the solution */ SCIP_Bool printreason, /**< Should all reasons of violations be printed? */ SCIP_Bool completely, /**< Should all violations be checked if printreason is true? */ 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* stored /**< stores whether given solution was feasible and good enough to keep */ ); /** returns all partial solutions * * @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_PROBLEM * - \ref SCIP_STAGE_PRESOLVING * - \ref SCIP_STAGE_SOLVING * - \ref SCIP_STAGE_SOLVED */ SCIP_EXPORT SCIP_SOL** SCIPgetPartialSols( SCIP* scip /**< SCIP data structure */ ); /** returns number of partial solutions * * @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_PROBLEM * - \ref SCIP_STAGE_PRESOLVING * - \ref SCIP_STAGE_SOLVING * - \ref SCIP_STAGE_SOLVED */ int SCIPgetNPartialSols( SCIP* scip /**< SCIP data structure */ ); /** checks solution for feasibility without adding it to the solution store * * @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_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 SCIPcheckSol( SCIP* scip, /**< SCIP data structure */ SCIP_SOL* sol, /**< primal CIP solution */ SCIP_Bool printreason, /**< Should all reasons of violations be printed? */ SCIP_Bool completely, /**< Should all violations be checked if printreason is true? */ SCIP_Bool checkbounds, /**< Should the bounds of the variables be checked? */ 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* feasible /**< stores whether given solution is feasible */ ); /** checks solution for feasibility in original problem without adding it to the solution store; * this method is used to double check a solution in order to validate the presolving process * * @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_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 SCIPcheckSolOrig( SCIP* scip, /**< SCIP data structure */ SCIP_SOL* sol, /**< primal CIP solution */ SCIP_Bool* feasible, /**< stores whether given solution is feasible */ SCIP_Bool printreason, /**< should the reason for the violation be printed? */ SCIP_Bool completely /**< Should all violations be checked if printreason is true? */ ); /** update integrality violation of a solution */ SCIP_EXPORT void SCIPupdateSolIntegralityViolation( SCIP* scip, /**< SCIP data structure */ SCIP_SOL* sol, /**< primal CIP solution */ SCIP_Real absviol /**< absolute violation */ ); /** update bound violation of a solution */ SCIP_EXPORT void SCIPupdateSolBoundViolation( SCIP* scip, /**< SCIP data structure */ SCIP_SOL* sol, /**< primal CIP solution */ SCIP_Real absviol, /**< absolute violation */ SCIP_Real relviol /**< relative violation */ ); /** update LP row violation of a solution */ SCIP_EXPORT void SCIPupdateSolLPRowViolation( SCIP* scip, /**< SCIP data structure */ SCIP_SOL* sol, /**< primal CIP solution */ SCIP_Real absviol, /**< absolute violation */ SCIP_Real relviol /**< relative violation */ ); /** update constraint violation of a solution */ SCIP_EXPORT void SCIPupdateSolConsViolation( SCIP* scip, /**< SCIP data structure */ SCIP_SOL* sol, /**< primal CIP solution */ SCIP_Real absviol, /**< absolute violation */ SCIP_Real relviol /**< relative violation */ ); /** update LP row and constraint violations of a solution */ SCIP_EXPORT void SCIPupdateSolLPConsViolation( SCIP* scip, /**< SCIP data structure */ SCIP_SOL* sol, /**< primal CIP solution */ SCIP_Real absviol, /**< absolute violation */ SCIP_Real relviol /**< relative violation */ ); /** allow violation updates */ SCIP_EXPORT void SCIPactivateSolViolationUpdates( SCIP* scip /**< SCIP data structure */ ); /** disallow violation updates */ SCIP_EXPORT void SCIPdeactivateSolViolationUpdates( SCIP* scip /**< SCIP data structure */ ); /** return whether a primal ray is stored that proves unboundedness of the LP relaxation * * @return return whether a primal ray is stored that proves unboundedness of the LP relaxation * * @pre This method can be called if SCIP is in one of the following stages: * - \ref SCIP_STAGE_SOLVING * - \ref SCIP_STAGE_SOLVED */ SCIP_EXPORT SCIP_Bool SCIPhasPrimalRay( SCIP* scip /**< SCIP data structure */ ); /** gets value of given variable in primal ray causing unboundedness of the LP relaxation; * should only be called if such a ray is stored (check with SCIPhasPrimalRay()) * * @return value of given variable in primal ray causing unboundedness of the LP relaxation * * @pre This method can be called if SCIP is in one of the following stages: * - \ref SCIP_STAGE_SOLVING * - \ref SCIP_STAGE_SOLVED */ SCIP_EXPORT SCIP_Real SCIPgetPrimalRayVal( SCIP* scip, /**< SCIP data structure */ SCIP_VAR* var /**< variable to get value for */ ); /** updates the primal ray thats proves unboundedness * * @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_PRESOLVED * - \ref SCIP_STAGE_SOLVING * - \ref SCIP_STAGE_SOLVED * * See \ref SCIP_Stage "SCIP_STAGE" for a complete list of all possible solving stages. */ SCIP_EXPORT SCIP_RETCODE SCIPupdatePrimalRay( SCIP* scip, /**< SCIP data structure */ SCIP_SOL* primalray /**< the new primal ray */ ); /**@} */ #ifdef __cplusplus } #endif #endif