Scippy

    SCIP

    Solving Constraint Integer Programs

    cons_superindicator.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 cons_superindicator.h
    26 * @ingroup CONSHDLRS
    27 * @brief constraint handler for indicator constraints over arbitrary constraint types
    28 * @author Ambros Gleixner
    29 * @author Frederic Pythoud
    30 *
    31 */
    32
    33/*---+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2*/
    34
    35#ifndef __SCIP_CONS_SUPERINDICATOR_H__
    36#define __SCIP_CONS_SUPERINDICATOR_H__
    37
    38
    39#include "scip/def.h"
    40#include "scip/type_cons.h"
    41#include "scip/type_dialog.h"
    42#include "scip/type_retcode.h"
    43#include "scip/type_scip.h"
    44#include "scip/type_var.h"
    45
    46#ifdef __cplusplus
    47extern "C" {
    48#endif
    49
    50
    51
    52/*
    53 * constraint-specific interface methods
    54 */
    55
    56/** creates the handler for superindicator constraints and includes it in SCIP
    57 *
    58 * @ingroup ConshdlrIncludes
    59 * */
    60SCIP_EXPORT
    62 SCIP* scip /**< SCIP data structure */
    63 );
    64
    65/**@addtogroup CONSHDLRS
    66 *
    67 * @{
    68 *
    69 * @name Superindicator Constraints
    70 *
    71 * @{
    72 *
    73 * Superindicator constraints are constraints of the form
    74 * \f[
    75 * x_i = 1 \Rightarrow C(x)
    76 * \f]
    77 * where \f$ x_i \f$ is a binary variable and \f$ C(\dot) \f$ a constraint. The superindicator constraint is satisfied
    78 * if and only if x_i is zero or C is satisfied.
    79 */
    80
    81/** creates and captures a superindicator constraint
    82 *
    83 * @note the constraint gets captured, hence at one point you have to release it using the method SCIPreleaseCons()
    84 */
    85SCIP_EXPORT
    87 SCIP* scip, /**< SCIP data structure */
    88 SCIP_CONS** cons, /**< pointer to hold the created constraint */
    89 const char* name, /**< name of constraint */
    90 SCIP_VAR* binvar, /**< pointer to the indicator constraint */
    91 SCIP_CONS* slackcons, /**< constraint corresponding to the handled constraint */
    92 SCIP_Bool initial, /**< should the LP relaxation of constraint be in the initial LP?
    93 * Usually set to TRUE. Set to FALSE for 'lazy constraints'. */
    94 SCIP_Bool separate, /**< should the constraint be separated during LP processing?
    95 * Usually set to TRUE. */
    96 SCIP_Bool enforce, /**< should the constraint be enforced during node processing?
    97 * TRUE for model constraints, FALSE for additional, redundant constraints. */
    98 SCIP_Bool check, /**< should the constraint be checked for feasibility?
    99 * TRUE for model constraints, FALSE for additional, redundant constraints. */
    100 SCIP_Bool propagate, /**< should the constraint be propagated during node processing?
    101 * Usually set to TRUE. */
    102 SCIP_Bool local, /**< is constraint only valid locally?
    103 * Usually set to FALSE. Has to be set to TRUE, e.g., for branching constraints. */
    104 SCIP_Bool dynamic, /**< is constraint subject to aging?
    105 * Usually set to FALSE. Set to TRUE for own cuts which
    106 * are separated as constraints. */
    107 SCIP_Bool removable, /**< should the relaxation be removed from the LP due to aging or cleanup?
    108 * Usually set to FALSE. Set to TRUE for 'lazy constraints' and 'user cuts'. */
    109 SCIP_Bool stickingatnode /**< should the constraint always be kept at the node where it was added, even
    110 * if it may be moved to a more global node?
    111 * Usually set to FALSE. Set to TRUE to for constraints that represent node data. */
    112 );
    113
    114/** creates and captures a superindicator constraint
    115 * in its most basic version, i. e., all constraint flags are set to their basic value as explained for the
    116 * method SCIPcreateConsSuperindicator(); all flags can be set via SCIPsetConsFLAGNAME-methods in scip.h
    117 *
    118 * @see SCIPcreateConsSuperindicator() for information about the basic constraint flag configuration
    119 *
    120 * @note the constraint gets captured, hence at one point you have to release it using the method SCIPreleaseCons()
    121 */
    122SCIP_EXPORT
    124 SCIP* scip, /**< SCIP data structure */
    125 SCIP_CONS** cons, /**< pointer to hold the created constraint */
    126 const char* name, /**< name of constraint */
    127 SCIP_VAR* binvar, /**< pointer to the indicator constraint */
    128 SCIP_CONS* slackcons /**< constraint corresponding to the handled constraint */
    129 );
    130
    131/** gets binary variable corresponding to the superindicator constraint */
    132SCIP_EXPORT
    134 SCIP_CONS* cons /**< superindicator constraint */
    135 );
    136
    137/** gets the slack constraint corresponding to the superindicator constraint */
    138SCIP_EXPORT
    140 SCIP_CONS* cons /**< superindicator constraint */
    141 );
    142
    143
    144
    145/*
    146 * constraint-dependent SCIP methods
    147 */
    148
    149/** transforms the current problem into a MinUC problem (minimizing the number of unsatisfied constraints),
    150 * a CIP generalization of the MinULR (min. unsatisfied linear relations) problem
    151 */
    152SCIP_EXPORT
    154 SCIP* scip, /**< SCIP data structure */
    155 SCIP_Bool* success /**< pointer to store whether all constraints could be transformed */
    156 );
    157
    158
    159
    160/*
    161 * constraint-dependent dialog entries
    162 */
    163
    164/** dialog execution method for the SCIPtransformMinUC() command */
    165SCIP_EXPORT
    166SCIP_DECL_DIALOGEXEC(SCIPdialogExecChangeMinUC);
    167
    168/** @} */
    169
    170/** @} */
    171
    172#ifdef __cplusplus
    173}
    174#endif
    175
    176#endif
    common defines and data types used in all packages of SCIP
    #define SCIP_Bool
    Definition: def.h:91
    SCIP_VAR * SCIPgetBinaryVarSuperindicator(SCIP_CONS *cons)
    SCIP_DECL_DIALOGEXEC(SCIPdialogExecChangeMinUC)
    SCIP_RETCODE SCIPtransformMinUC(SCIP *scip, SCIP_Bool *success)
    SCIP_CONS * SCIPgetSlackConsSuperindicator(SCIP_CONS *cons)
    SCIP_RETCODE SCIPcreateConsSuperindicator(SCIP *scip, SCIP_CONS **cons, const char *name, SCIP_VAR *binvar, SCIP_CONS *slackcons, SCIP_Bool initial, SCIP_Bool separate, SCIP_Bool enforce, SCIP_Bool check, SCIP_Bool propagate, SCIP_Bool local, SCIP_Bool dynamic, SCIP_Bool removable, SCIP_Bool stickingatnode)
    SCIP_RETCODE SCIPcreateConsBasicSuperindicator(SCIP *scip, SCIP_CONS **cons, const char *name, SCIP_VAR *binvar, SCIP_CONS *slackcons)
    SCIP_RETCODE SCIPincludeConshdlrSuperindicator(SCIP *scip)
    static SCIP_RETCODE separate(SCIP *scip, SCIP_SEPA *sepa, SCIP_SOL *sol, SCIP_RESULT *result)
    Main separation function.
    Definition: sepa_flower.c:1221
    type definitions for constraints and constraint handlers
    type definitions for user interface dialog
    type definitions for return codes for SCIP methods
    enum SCIP_Retcode SCIP_RETCODE
    Definition: type_retcode.h:63
    type definitions for SCIP's main datastructure
    type definitions for problem variables