Scippy

    SCIP

    Solving Constraint Integer Programs

    relax.h
    Go to the documentation of this file.
    1/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
    2/* */
    3/* This file is part of the program and library */
    4/* SCIP --- Solving Constraint Integer Programs */
    5/* */
    6/* Copyright (c) 2002-2025 Zuse Institute Berlin (ZIB) */
    7/* */
    8/* Licensed under the Apache License, Version 2.0 (the "License"); */
    9/* you may not use this file except in compliance with the License. */
    10/* You may obtain a copy of the License at */
    11/* */
    12/* http://www.apache.org/licenses/LICENSE-2.0 */
    13/* */
    14/* Unless required by applicable law or agreed to in writing, software */
    15/* distributed under the License is distributed on an "AS IS" BASIS, */
    16/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. */
    17/* See the License for the specific language governing permissions and */
    18/* limitations under the License. */
    19/* */
    20/* You should have received a copy of the Apache-2.0 license */
    21/* along with SCIP; see the file LICENSE. If not visit scipopt.org. */
    22/* */
    23/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
    24
    25/**@file relax.h
    26 * @ingroup INTERNALAPI
    27 * @brief internal methods for relaxators
    28 * @author Tobias Achterberg
    29 */
    30
    31/*---+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2*/
    32
    33#ifndef __SCIP_RELAX_H__
    34#define __SCIP_RELAX_H__
    35
    36
    37#include "scip/def.h"
    39#include "scip/type_primal.h"
    40#include "scip/type_relax.h"
    41#include "scip/type_result.h"
    42#include "scip/type_retcode.h"
    43#include "scip/type_set.h"
    44#include "scip/type_sol.h"
    45#include "scip/type_stat.h"
    46#include "scip/type_tree.h"
    47#include "scip/type_var.h"
    48#include "scip/pub_relax.h"
    49
    50#ifdef __cplusplus
    51extern "C" {
    52#endif
    53
    54/** copies the given relaxator to a new scip */
    56 SCIP_RELAX* relax, /**< relaxator */
    57 SCIP_SET* set /**< SCIP_SET of SCIP to copy to */
    58 );
    59
    60/** creates a relaxator */
    62 SCIP_RELAX** relax, /**< pointer to relaxator data structure */
    63 SCIP_SET* set, /**< global SCIP settings */
    64 SCIP_MESSAGEHDLR* messagehdlr, /**< message handler */
    65 BMS_BLKMEM* blkmem, /**< block memory for parameter settings */
    66 const char* name, /**< name of relaxator */
    67 const char* desc, /**< description of relaxator */
    68 int priority, /**< priority of the relaxator (negative: after LP, non-negative: before LP) */
    69 int freq, /**< frequency for calling relaxator */
    70 SCIP_DECL_RELAXCOPY ((*relaxcopy)), /**< copy method of relaxator or NULL if you don't want to copy your plugin into sub-SCIPs */
    71 SCIP_DECL_RELAXFREE ((*relaxfree)), /**< destructor of relaxator */
    72 SCIP_DECL_RELAXINIT ((*relaxinit)), /**< initialize relaxator */
    73 SCIP_DECL_RELAXEXIT ((*relaxexit)), /**< deinitialize relaxator */
    74 SCIP_DECL_RELAXINITSOL((*relaxinitsol)), /**< solving process initialization method of relaxator */
    75 SCIP_DECL_RELAXEXITSOL((*relaxexitsol)), /**< solving process deinitialization method of relaxator */
    76 SCIP_DECL_RELAXEXEC ((*relaxexec)), /**< execution method of relaxator */
    77 SCIP_RELAXDATA* relaxdata /**< relaxator data */
    78 );
    79
    80/** calls destructor and frees memory of relaxator */
    82 SCIP_RELAX** relax, /**< pointer to relaxator data structure */
    83 SCIP_SET* set /**< global SCIP settings */
    84 );
    85
    86/** initializes relaxator */
    88 SCIP_RELAX* relax, /**< relaxator */
    89 SCIP_SET* set /**< global SCIP settings */
    90 );
    91
    92/** calls exit method of relaxator */
    94 SCIP_RELAX* relax, /**< relaxator */
    95 SCIP_SET* set /**< global SCIP settings */
    96 );
    97
    98/** informs relaxator that the branch and bound process is being started */
    100 SCIP_RELAX* relax, /**< relaxator */
    101 SCIP_SET* set /**< global SCIP settings */
    102 );
    103
    104/** informs relaxator that the branch and bound process data is being freed */
    106 SCIP_RELAX* relax, /**< relaxator */
    107 SCIP_SET* set /**< global SCIP settings */
    108 );
    109
    110/** calls execution method of relaxator */
    112 SCIP_RELAX* relax, /**< relaxator */
    113 SCIP_SET* set, /**< global SCIP settings */
    114 SCIP_TREE* tree, /**< branch and bound tree */
    115 SCIP_STAT* stat, /**< dynamic problem statistics */
    116 int depth, /**< depth of current node */
    117 SCIP_Real* lowerbound, /**< pointer to lower bound computed by the relaxator */
    118 SCIP_RESULT* result /**< pointer to store the result of the callback method */
    119 );
    120
    121/** sets priority of relaxator */
    123 SCIP_RELAX* relax, /**< relaxator */
    124 SCIP_SET* set, /**< global SCIP settings */
    125 int priority /**< new priority of the relaxator */
    126 );
    127
    128/** set copy callback of relaxation handler */
    130 SCIP_RELAX* relax, /**< relaxation handler */
    131 SCIP_DECL_RELAXCOPY ((*relaxcopy)) /**< copy method of relaxation handler */
    132 );
    133
    134/** set destructor callback of relaxation handler */
    136 SCIP_RELAX* relax, /**< relaxation handler */
    137 SCIP_DECL_RELAXFREE ((*relaxfree)) /**< destructor of relaxation handler */
    138 );
    139
    140/** set initialization callback of relaxation handler */
    142 SCIP_RELAX* relax, /**< relaxation handler */
    143 SCIP_DECL_RELAXINIT ((*relaxinit)) /**< initialize relaxation handler */
    144 );
    145
    146/** set deinitialization callback of relaxation handler */
    148 SCIP_RELAX* relax, /**< relaxation handler */
    149 SCIP_DECL_RELAXEXIT ((*relaxexit)) /**< deinitialize relaxation handler */
    150 );
    151
    152/** set solving process initialization callback of relaxation handler */
    154 SCIP_RELAX* relax, /**< relaxation handler */
    155 SCIP_DECL_RELAXINITSOL((*relaxinitsol)) /**< solving process initialization method of relaxation handler */
    156 );
    157
    158/** set solving process deinitialization callback of relaxation handler */
    160 SCIP_RELAX* relax, /**< relaxation handler */
    161 SCIP_DECL_RELAXEXITSOL((*relaxexitsol)) /**< solving process deinitialization callback relaxation handler */
    162 );
    163
    164/** returns whether the relaxation was completely solved at the current node */
    166 SCIP_RELAX* relax, /**< relaxator */
    167 SCIP_STAT* stat /**< dynamic problem statistics */
    168 );
    169
    170/*
    171 * methods for the global relaxation data
    172 */
    173
    174/** enables or disables all clocks of \p relax, depending on the value of the flag */
    176 SCIP_RELAX* relax, /**< the relaxation handler for which all clocks should be enabled or disabled */
    177 SCIP_Bool enable /**< should the clocks of the relaxation handler be enabled? */
    178 );
    179
    180/** creates global relaxation data */
    182 SCIP_RELAXATION** relaxation, /**< global relaxation data */
    183 BMS_BLKMEM* blkmem, /**< block memory */
    184 SCIP_SET* set, /**< global SCIP settings */
    185 SCIP_STAT* stat, /**< problem statistics data */
    186 SCIP_PRIMAL* primal, /**< primal data */
    187 SCIP_TREE* tree /**< branch and bound tree */
    188 );
    189
    190/** frees global relaxation data */
    192 SCIP_RELAXATION** relaxation /**< global relaxation data */
    193 );
    194
    195/** sets the relaxsolzero flag in the relaxation data to the given value */
    197 SCIP_RELAXATION* relaxation, /**< global relaxation data */
    198 SCIP_Bool iszero /**< are all values of the relaxation solution set to zero? */
    199 );
    200
    201/** returns whether the global relaxation solution is cleared and all values are set to zero */
    203 SCIP_RELAXATION* relaxation /**< global relaxation data */
    204 );
    205
    206/** sets the relaxsolvalid and includeslp flags in the relaxation data to the given values */
    208 SCIP_RELAXATION* relaxation, /**< global relaxation data */
    209 SCIP_Bool isvalid, /**< is the stored solution valid? */
    210 SCIP_Bool includeslp /**< does the relaxator contain all cuts in the LP? */
    211 );
    212
    213/** returns whether the global relaxation solution is valid */
    215 SCIP_RELAXATION* relaxation /**< global relaxation data */
    216 );
    217
    218/** returns whether the global relaxation solution was computed by a relaxator which included all LP cuts */
    220 SCIP_RELAXATION* relaxation /**< global relaxation data */
    221 );
    222
    223/** sets the objective value of the global relaxation solution */
    225 SCIP_RELAXATION* relaxation, /**< global relaxation data */
    226 SCIP_Real obj /**< objective value */
    227 );
    228
    229/** returns the objective value of the global relaxation solution w.r.t. the transformed problem */
    231 SCIP_RELAXATION* relaxation /**< global relaxation data */
    232 );
    233
    234/** adds the given value to the global relaxation solution's objective value */
    236 SCIP_RELAXATION* relaxation, /**< global relaxation data */
    237 SCIP_Real val /**< value to add to the objective value */
    238 );
    239
    240/** updates objective value of current relaxation solution after change of objective coefficient */
    242 SCIP_RELAXATION* relaxation, /**< global relaxation data */
    243 SCIP_SET* set, /**< global SCIP settings */
    244 SCIP_VAR* var, /**< variable with changed objective coefficient */
    245 SCIP_Real oldobj, /**< old objective coefficient */
    246 SCIP_Real newobj /**< new objective coefficient */
    247 );
    248
    249/** store the most recent relaxation handler \p relax responsible for the solution */
    251 SCIP_RELAXATION* relaxation, /**< global relaxation data */
    252 SCIP_RELAX* relax /**< relaxation handler responsible for the most recent relaxation solution */
    253 );
    254
    255/** returns the most recent relaxation handler responsible for the solution, or NULL if unspecified */
    257 SCIP_RELAXATION* relaxation /**< global relaxation data */
    258 );
    259
    260#ifdef __cplusplus
    261}
    262#endif
    263
    264#endif
    common defines and data types used in all packages of SCIP
    #define SCIP_Bool
    Definition: def.h:91
    #define SCIP_Real
    Definition: def.h:156
    memory allocation routines
    struct BMS_BlkMem BMS_BLKMEM
    Definition: memory.h:437
    public methods for relaxation handlers
    void SCIPrelaxSetExitsol(SCIP_RELAX *relax, SCIP_DECL_RELAXEXITSOL((*relaxexitsol)))
    Definition: relax.c:536
    void SCIPrelaxSetInitsol(SCIP_RELAX *relax, SCIP_DECL_RELAXINITSOL((*relaxinitsol)))
    Definition: relax.c:525
    SCIP_RETCODE SCIPrelaxInit(SCIP_RELAX *relax, SCIP_SET *set)
    Definition: relax.c:232
    SCIP_Bool SCIPrelaxationIsSolZero(SCIP_RELAXATION *relaxation)
    Definition: relax.c:800
    SCIP_RETCODE SCIPrelaxCreate(SCIP_RELAX **relax, SCIP_SET *set, SCIP_MESSAGEHDLR *messagehdlr, BMS_BLKMEM *blkmem, const char *name, const char *desc, int priority, int freq, SCIP_DECL_RELAXCOPY((*relaxcopy)), SCIP_DECL_RELAXFREE((*relaxfree)), SCIP_DECL_RELAXINIT((*relaxinit)), SCIP_DECL_RELAXEXIT((*relaxexit)), SCIP_DECL_RELAXINITSOL((*relaxinitsol)), SCIP_DECL_RELAXEXITSOL((*relaxexitsol)), SCIP_DECL_RELAXEXEC((*relaxexec)), SCIP_RELAXDATA *relaxdata)
    Definition: relax.c:173
    void SCIPrelaxationSetSolZero(SCIP_RELAXATION *relaxation, SCIP_Bool iszero)
    Definition: relax.c:789
    SCIP_RETCODE SCIPrelaxExit(SCIP_RELAX *relax, SCIP_SET *set)
    Definition: relax.c:276
    void SCIPrelaxationUpdateVarObj(SCIP_RELAXATION *relaxation, SCIP_SET *set, SCIP_VAR *var, SCIP_Real oldobj, SCIP_Real newobj)
    Definition: relax.c:875
    void SCIPrelaxationSetSolValid(SCIP_RELAXATION *relaxation, SCIP_Bool isvalid, SCIP_Bool includeslp)
    Definition: relax.c:810
    void SCIPrelaxSetInit(SCIP_RELAX *relax, SCIP_DECL_RELAXINIT((*relaxinit)))
    Definition: relax.c:503
    void SCIPrelaxSetExit(SCIP_RELAX *relax, SCIP_DECL_RELAXEXIT((*relaxexit)))
    Definition: relax.c:514
    SCIP_RETCODE SCIPrelaxFree(SCIP_RELAX **relax, SCIP_SET *set)
    Definition: relax.c:205
    void SCIPrelaxationSetSolObj(SCIP_RELAXATION *relaxation, SCIP_Real obj)
    Definition: relax.c:843
    void SCIPrelaxSetFree(SCIP_RELAX *relax, SCIP_DECL_RELAXFREE((*relaxfree)))
    Definition: relax.c:492
    SCIP_Real SCIPrelaxationGetSolObj(SCIP_RELAXATION *relaxation)
    Definition: relax.c:854
    void SCIPrelaxSetCopy(SCIP_RELAX *relax, SCIP_DECL_RELAXCOPY((*relaxcopy)))
    Definition: relax.c:481
    void SCIPrelaxationSolObjAdd(SCIP_RELAXATION *relaxation, SCIP_Real val)
    Definition: relax.c:864
    SCIP_RETCODE SCIPrelaxCopyInclude(SCIP_RELAX *relax, SCIP_SET *set)
    Definition: relax.c:83
    void SCIPrelaxationSetSolRelax(SCIP_RELAXATION *relaxation, SCIP_RELAX *relax)
    Definition: relax.c:895
    SCIP_Bool SCIPrelaxIsSolved(SCIP_RELAX *relax, SCIP_STAT *stat)
    Definition: relax.c:723
    SCIP_RETCODE SCIPrelaxationFree(SCIP_RELAXATION **relaxation)
    Definition: relax.c:777
    void SCIPrelaxEnableOrDisableClocks(SCIP_RELAX *relax, SCIP_Bool enable)
    Definition: relax.c:621
    SCIP_RETCODE SCIPrelaxationCreate(SCIP_RELAXATION **relaxation, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_PRIMAL *primal, SCIP_TREE *tree)
    Definition: relax.c:749
    SCIP_RELAX * SCIPrelaxationGetSolRelax(SCIP_RELAXATION *relaxation)
    Definition: relax.c:906
    SCIP_RETCODE SCIPrelaxInitsol(SCIP_RELAX *relax, SCIP_SET *set)
    Definition: relax.c:306
    SCIP_RETCODE SCIPrelaxExec(SCIP_RELAX *relax, SCIP_SET *set, SCIP_TREE *tree, SCIP_STAT *stat, int depth, SCIP_Real *lowerbound, SCIP_RESULT *result)
    Definition: relax.c:354
    void SCIPrelaxSetPriority(SCIP_RELAX *relax, SCIP_SET *set, int priority)
    Definition: relax.c:587
    SCIP_Bool SCIPrelaxationIsLpIncludedForSol(SCIP_RELAXATION *relaxation)
    Definition: relax.c:833
    SCIP_Bool SCIPrelaxationIsSolValid(SCIP_RELAXATION *relaxation)
    Definition: relax.c:823
    SCIP_RETCODE SCIPrelaxExitsol(SCIP_RELAX *relax, SCIP_SET *set)
    Definition: relax.c:330
    Definition: heur_padm.c:135
    type definitions for collecting primal CIP solutions and primal informations
    type definitions for relaxators
    #define SCIP_DECL_RELAXINIT(x)
    Definition: type_relax.h:77
    #define SCIP_DECL_RELAXEXITSOL(x)
    Definition: type_relax.h:107
    #define SCIP_DECL_RELAXFREE(x)
    Definition: type_relax.h:69
    #define SCIP_DECL_RELAXINITSOL(x)
    Definition: type_relax.h:96
    #define SCIP_DECL_RELAXCOPY(x)
    Definition: type_relax.h:61
    #define SCIP_DECL_RELAXEXEC(x)
    Definition: type_relax.h:132
    #define SCIP_DECL_RELAXEXIT(x)
    Definition: type_relax.h:85
    struct SCIP_RelaxData SCIP_RELAXDATA
    Definition: type_relax.h:52
    result codes for SCIP callback methods
    enum SCIP_Result SCIP_RESULT
    Definition: type_result.h:61
    type definitions for return codes for SCIP methods
    enum SCIP_Retcode SCIP_RETCODE
    Definition: type_retcode.h:63
    type definitions for global SCIP settings
    type definitions for storing primal CIP solutions
    type definitions for problem statistics
    type definitions for branch and bound tree
    type definitions for problem variables