Scippy

    SCIP

    Solving Constraint Integer Programs

    type_sepa.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_sepa.h
    26 * @ingroup TYPEDEFINITIONS
    27 * @brief type definitions for separators
    28 * @author Tobias Achterberg
    29 */
    30
    31/** @defgroup DEFPLUGINS_SEPA Default Separators
    32 * @ingroup DEFPLUGINS
    33 * @brief implementation files (.c files) of the default separators of SCIP
    34 */
    35
    36/*---+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2*/
    37
    38#ifndef __SCIP_TYPE_SEPA_H__
    39#define __SCIP_TYPE_SEPA_H__
    40
    41#include "scip/def.h"
    42#include "scip/type_retcode.h"
    43#include "scip/type_result.h"
    44#include "scip/type_sol.h"
    45#include "scip/type_scip.h"
    46
    47#ifdef __cplusplus
    48extern "C" {
    49#endif
    50
    51typedef struct SCIP_Sepa SCIP_SEPA; /**< separator */
    52typedef struct SCIP_SepaData SCIP_SEPADATA; /**< locally defined separator data */
    53
    54
    55/** copy method for separator plugins (called when SCIP copies plugins)
    56 *
    57 * input:
    58 * - scip : SCIP main data structure
    59 * - sepa : the separator itself
    60 */
    61#define SCIP_DECL_SEPACOPY(x) SCIP_RETCODE x (SCIP* scip, SCIP_SEPA* sepa)
    62
    63/** destructor of separator to free user data (called when SCIP is exiting)
    64 *
    65 * input:
    66 * - scip : SCIP main data structure
    67 * - sepa : the separator itself
    68 */
    69#define SCIP_DECL_SEPAFREE(x) SCIP_RETCODE x (SCIP* scip, SCIP_SEPA* sepa)
    70
    71/** initialization method of separator (called after problem was transformed)
    72 *
    73 * input:
    74 * - scip : SCIP main data structure
    75 * - sepa : the separator itself
    76 */
    77#define SCIP_DECL_SEPAINIT(x) SCIP_RETCODE x (SCIP* scip, SCIP_SEPA* sepa)
    78
    79/** deinitialization method of separator (called before transformed problem is freed)
    80 *
    81 * input:
    82 * - scip : SCIP main data structure
    83 * - sepa : the separator itself
    84 */
    85#define SCIP_DECL_SEPAEXIT(x) SCIP_RETCODE x (SCIP* scip, SCIP_SEPA* sepa)
    86
    87/** solving process initialization method of separator (called when branch and bound process is about to begin)
    88 *
    89 * This method is called when the presolving was finished and the branch and bound process is about to begin.
    90 * The separator may use this call to initialize its branch and bound specific data.
    91 *
    92 * input:
    93 * - scip : SCIP main data structure
    94 * - sepa : the separator itself
    95 */
    96#define SCIP_DECL_SEPAINITSOL(x) SCIP_RETCODE x (SCIP* scip, SCIP_SEPA* sepa)
    97
    98/** solving process deinitialization method of separator (called before branch and bound process data is freed)
    99 *
    100 * This method is called before the branch and bound process is freed.
    101 * The separator should use this call to clean up its branch and bound data.
    102 *
    103 * input:
    104 * - scip : SCIP main data structure
    105 * - sepa : the separator itself
    106 */
    107#define SCIP_DECL_SEPAEXITSOL(x) SCIP_RETCODE x (SCIP* scip, SCIP_SEPA* sepa)
    108
    109/** LP solution separation method of separator
    110 *
    111 * Searches for cutting planes that separate the current LP solution. The method is called in the LP solving loop,
    112 * which means that a valid LP solution exists.
    113 *
    114 * input:
    115 * - scip : SCIP main data structure
    116 * - sepa : the separator itself
    117 * - result : pointer to store the result of the separation call
    118 * - allowlocal : should the separator allow local cuts?
    119 * - depth : pretended depth of current node
    120 *
    121 * @note The depth argument shouldn't be use to determine whether the cut is globally valid or not. The value of depth
    122 * could be 0 even though we are not in the root node! The purpose of depth is to control the behavior of the
    123 * separator. Usually separators will have different limits on the number of cuts to be applied in the root node, etc.
    124 * These limits should be checked against depth and not against the actual depth of the current node.
    125 *
    126 * possible return values for *result (if more than one applies, the first in the list should be used):
    127 * - SCIP_CUTOFF : the node is infeasible in the variable's bounds and can be cut off
    128 * - SCIP_CONSADDED : an additional constraint was generated
    129 * - SCIP_REDUCEDDOM : a variable's domain was reduced
    130 * - SCIP_SEPARATED : a cutting plane was generated
    131 * - SCIP_NEWROUND : a cutting plane was generated and a new separation round should immediately start
    132 * - SCIP_DIDNOTFIND : the separator searched, but did not find domain reductions, cutting planes, or cut constraints
    133 * - SCIP_DIDNOTRUN : the separator was skipped
    134 * - SCIP_DELAYED : the separator was skipped, but should be called again
    135 */
    136#define SCIP_DECL_SEPAEXECLP(x) SCIP_RETCODE x (SCIP* scip, SCIP_SEPA* sepa, SCIP_RESULT* result, SCIP_Bool allowlocal, int depth)
    137
    138/** arbitrary primal solution separation method of separator
    139 *
    140 * Searches for cutting planes that separate the given primal solution. The method is called outside the LP solution
    141 * loop (e.g., by a relaxator or a primal heuristic), which means that there is no valid LP solution.
    142 *
    143 * input:
    144 * - scip : SCIP main data structure
    145 * - sepa : the separator itself
    146 * - sol : primal solution that should be separated
    147 * - result : pointer to store the result of the separation call
    148 * - allowlocal : should the separator allow local cuts?
    149 * - depth : pretended depth of current node
    150 *
    151 * @note The depth argument shouldn't be use to determine whether the cut is globally valid or not. The value of depth
    152 * could be 0 even though we are not in the root node! The purpose of depth is to control the behavior of the
    153 * separator. Usually separators will have different limits on the number of cuts to be applied in the root node, etc.
    154 * These limits should be checked against depth and not against the actual depth of the current node.
    155 *
    156 * possible return values for *result (if more than one applies, the first in the list should be used):
    157 * - SCIP_CUTOFF : the node is infeasible in the variable's bounds and can be cut off
    158 * - SCIP_CONSADDED : an additional constraint was generated
    159 * - SCIP_REDUCEDDOM : a variable's domain was reduced
    160 * - SCIP_SEPARATED : a cutting plane was generated
    161 * - SCIP_NEWROUND : a cutting plane was generated and a new separation round should immediately start
    162 * - SCIP_DIDNOTFIND : the separator searched, but did not find domain reductions, cutting planes, or cut constraints
    163 * - SCIP_DIDNOTRUN : the separator was skipped
    164 * - SCIP_DELAYED : the separator was skipped, but should be called again
    165 */
    166#define SCIP_DECL_SEPAEXECSOL(x) SCIP_RETCODE x (SCIP* scip, SCIP_SEPA* sepa, SCIP_SOL* sol, SCIP_RESULT* result, SCIP_Bool allowlocal, int depth)
    167
    168#ifdef __cplusplus
    169}
    170#endif
    171
    172#endif
    common defines and data types used in all packages of SCIP
    result codes for SCIP callback methods
    type definitions for return codes for SCIP methods
    type definitions for SCIP's main datastructure
    struct SCIP_SepaData SCIP_SEPADATA
    Definition: type_sepa.h:52
    type definitions for storing primal CIP solutions