Scippy

    SCIP

    Solving Constraint Integer Programs

    type_presol.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 type_presol.h
    26 * @ingroup TYPEDEFINITIONS
    27 * @brief type definitions for presolvers
    28 * @author Tobias Achterberg
    29 */
    30
    31/** @defgroup DEFPLUGINS_PRESOL Default Presolvers
    32 * @ingroup DEFPLUGINS
    33 * @brief implementation files (.c files) of the default presolvers of SCIP
    34 */
    35
    36/*---+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2*/
    37
    38#ifndef __SCIP_TYPE_PRESOL_H__
    39#define __SCIP_TYPE_PRESOL_H__
    40
    41#include "scip/def.h"
    42#include "scip/type_retcode.h"
    43#include "scip/type_result.h"
    44#include "scip/type_scip.h"
    45
    46#ifdef __cplusplus
    47extern "C" {
    48#endif
    49
    50typedef struct SCIP_Presol SCIP_PRESOL; /**< presolver data structure */
    51typedef struct SCIP_PresolData SCIP_PRESOLDATA; /**< presolver specific data */
    52
    53
    54/** copy method for presolver plugins (called when SCIP copies plugins)
    55 *
    56 * input:
    57 * - scip : SCIP main data structure
    58 * - presol : the presolver itself
    59 */
    60#define SCIP_DECL_PRESOLCOPY(x) SCIP_RETCODE x (SCIP* scip, SCIP_PRESOL* presol)
    61
    62/** destructor of presolver to free user data (called when SCIP is exiting)
    63 *
    64 * input:
    65 * - scip : SCIP main data structure
    66 * - presol : the presolver itself
    67 */
    68#define SCIP_DECL_PRESOLFREE(x) SCIP_RETCODE x (SCIP* scip, SCIP_PRESOL* presol)
    69
    70/** initialization method of presolver (called after problem was transformed)
    71 *
    72 * input:
    73 * - scip : SCIP main data structure
    74 * - presol : the presolver itself
    75 */
    76#define SCIP_DECL_PRESOLINIT(x) SCIP_RETCODE x (SCIP* scip, SCIP_PRESOL* presol)
    77
    78/** deinitialization method of presolver (called before transformed problem is freed)
    79 *
    80 * input:
    81 * - scip : SCIP main data structure
    82 * - presol : the presolver itself
    83 */
    84#define SCIP_DECL_PRESOLEXIT(x) SCIP_RETCODE x (SCIP* scip, SCIP_PRESOL* presol)
    85
    86/** presolving initialization method of presolver (called when presolving is about to begin)
    87 *
    88 * This method is called when the presolving process is about to begin, even if presolving is turned off.
    89 * The presolver may use this call to initialize its data structures.
    90 *
    91 * Necessary modifications that have to be performed even if presolving is turned off should be done here or in the
    92 * presolving deinitialization call (SCIP_DECL_PRESOLSEXITPRE()).
    93 *
    94 * input:
    95 * - scip : SCIP main data structure
    96 * - presol : the presolver itself
    97 */
    98#define SCIP_DECL_PRESOLINITPRE(x) SCIP_RETCODE x (SCIP* scip, SCIP_PRESOL* presol)
    99
    100/** presolving deinitialization method of presolver (called after presolving has been finished)
    101 *
    102 * This method is called after the presolving has been finished, even if presolving is turned off.
    103 * The presolver may use this call e.g. to clean up or modify its data structures.
    104 *
    105 * Necessary modifications that have to be performed even if presolving is turned off should be done here or in the
    106 * presolving initialization call (SCIP_DECL_PRESOLINITPRE()).
    107 *
    108 * Besides necessary modifications and clean up, no time consuming operations should be performed, especially if the
    109 * problem has already been solved. Use the method SCIPgetStatus(), which in this case returns SCIP_STATUS_OPTIMAL,
    110 * SCIP_STATUS_INFEASIBLE, SCIP_STATUS_UNBOUNDED, or SCIP_STATUS_INFORUNBD.
    111 *
    112 * input:
    113 * - scip : SCIP main data structure
    114 * - presol : the presolver itself
    115 */
    116#define SCIP_DECL_PRESOLEXITPRE(x) SCIP_RETCODE x (SCIP* scip, SCIP_PRESOL* presol)
    117
    118/** execution method of presolver
    119 *
    120 * The presolver should go through the variables and constraints and tighten the domains or
    121 * constraints. Each tightening should increase the given total numbers of changes.
    122 *
    123 * input:
    124 * - scip : SCIP main data structure
    125 * - presol : the presolver itself
    126 * - nrounds : number of presolving rounds already done
    127 * - presoltiming : current presolving timing
    128 * - nnewfixedvars : number of variables fixed since the last call to the presolver
    129 * - nnewaggrvars : number of variables aggregated since the last call to the presolver
    130 * - nnewchgvartypes : number of variable type changes since the last call to the presolver
    131 * - nnewchgbds : number of variable bounds tightened since the last call to the presolver
    132 * - nnewholes : number of domain holes added since the last call to the presolver
    133 * - nnewdelconss : number of deleted constraints since the last call to the presolver
    134 * - nnewaddconss : number of added constraints since the last call to the presolver
    135 * - nnewupgdconss : number of upgraded constraints since the last call to the presolver
    136 * - nnewchgcoefs : number of changed coefficients since the last call to the presolver
    137 * - nnewchgsides : number of changed left or right hand sides since the last call to the presolver
    138 *
    139 * @note the counters state the changes since the last call including the changes of this presolver during its last
    140 * last call
    141 *
    142 * @note if the presolver uses dual information it is nesassary to check via calling SCIPallowWeakDualReds and
    143 * SCIPallowStrongDualReds if dual reductions are allowed.
    144 *
    145 * input/output:
    146 * - nfixedvars : pointer to total number of variables fixed of all presolvers
    147 * - naggrvars : pointer to total number of variables aggregated of all presolvers
    148 * - nchgvartypes : pointer to total number of variable type changes of all presolvers
    149 * - nchgbds : pointer to total number of variable bounds tightened of all presolvers
    150 * - naddholes : pointer to total number of domain holes added of all presolvers
    151 * - ndelconss : pointer to total number of deleted constraints of all presolvers
    152 * - naddconss : pointer to total number of added constraints of all presolvers
    153 * - nupgdconss : pointer to total number of upgraded constraints of all presolvers
    154 * - nchgcoefs : pointer to total number of changed coefficients of all presolvers
    155 * - nchgsides : pointer to total number of changed left/right hand sides of all presolvers
    156 *
    157 * output:
    158 * - result : pointer to store the result of the presolving call
    159 *
    160 * possible return values for *result:
    161 * - SCIP_UNBOUNDED : at least one variable is not bounded by any constraint in obj. direction -> problem is unbounded
    162 * - SCIP_CUTOFF : at least one constraint is infeasible in the variable's bounds -> problem is infeasible
    163 * - SCIP_SUCCESS : the presolver found a reduction
    164 * - SCIP_DIDNOTFIND : the presolver searched, but did not find a presolving change
    165 * - SCIP_DIDNOTRUN : the presolver was skipped
    166 */
    167#define SCIP_DECL_PRESOLEXEC(x) SCIP_RETCODE x (SCIP* scip, SCIP_PRESOL* presol, int nrounds, SCIP_PRESOLTIMING presoltiming, \
    168 int nnewfixedvars, int nnewaggrvars, int nnewchgvartypes, int nnewchgbds, int nnewholes, \
    169 int nnewdelconss, int nnewaddconss, int nnewupgdconss, int nnewchgcoefs, int nnewchgsides, \
    170 int* nfixedvars, int* naggrvars, int* nchgvartypes, int* nchgbds, int* naddholes, \
    171 int* ndelconss, int* naddconss, int* nupgdconss, int* nchgcoefs, int* nchgsides, SCIP_RESULT* result)
    172
    173#ifdef __cplusplus
    174}
    175#endif
    176
    177#endif
    common defines and data types used in all packages of SCIP
    struct SCIP_PresolData SCIP_PRESOLDATA
    Definition: type_presol.h:51
    result codes for SCIP callback methods
    type definitions for return codes for SCIP methods
    type definitions for SCIP's main datastructure