Scippy

    SCIP

    Solving Constraint Integer Programs

    conflict_dualproofanalysis.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 conflict_dualproofanalysis.h
    26 * @ingroup OTHER_CFILES
    27 * @brief internal methods for dual proof conflict analysis
    28 * @author Timo Berthold
    29 * @author Jakob Witzig
    30 * @author Sander Borst
    31 *
    32 * In dual proof analysis, an infeasible LP relaxation is analysed.
    33 * Using the dual solution, a valid constraint is derived that is violated
    34 * by all values in the domain. This constraint is added to the problem
    35 * and can then be used for domain propagation. More details can be found in [1]
    36 *
    37 * [1] J. Witzig, T. Berthold, en S. Heinz, ‘Computational aspects of infeasibility analysis in mixed integer programming’,
    38 * Math. Prog. Comp., mrt. 2021, doi: 10.1007/s12532-021-00202-0.
    39 */
    40
    41/*---+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2*/
    42
    43#ifndef __SCIP_CONFLICT_DUALPROOFANALYSIS_H__
    44#define __SCIP_CONFLICT_DUALPROOFANALYSIS_H__
    45
    47#include "scip/def.h"
    48#include "scip/type_branch.h"
    49#include "scip/type_conflict.h"
    51#include "scip/type_event.h"
    52#include "scip/type_implics.h"
    53#include "scip/type_lp.h"
    54#include "scip/type_prob.h"
    55#include "scip/type_reopt.h"
    56#include "scip/type_retcode.h"
    57#include "scip/type_set.h"
    58#include "scip/type_stat.h"
    59#include "scip/type_tree.h"
    60#include "scip/type_var.h"
    61#include "scip/type_cuts.h"
    62
    63#ifdef __cplusplus
    64extern "C" {
    65#endif
    66/*
    67 * Proof Sets
    68 */
    69
    70/** frees a proofset */
    72 SCIP_PROOFSET** proofset, /**< proof set */
    73 BMS_BLKMEM* blkmem /**< block memory */
    74 );
    75
    76/** returns the number of variables in the proofset */
    78 SCIP_PROOFSET* proofset /**< proof set */
    79 );
    80/** returns the number of variables in the proofset */
    81
    82
    83/** creates and clears the proofset */
    85 SCIP_CONFLICT* conflict, /**< conflict analysis data */
    86 BMS_BLKMEM* blkmem /**< block memory of transformed problem */
    87 );
    88
    89
    90/* create proof constraints out of proof sets */
    92 SCIP_CONFLICT* conflict, /**< conflict analysis data */
    93 SCIP_CONFLICTSTORE* conflictstore, /**< conflict store */
    94 BMS_BLKMEM* blkmem, /**< block memory */
    95 SCIP_SET* set, /**< global SCIP settings */
    96 SCIP_STAT* stat, /**< dynamic problem statistics */
    97 SCIP_PROB* transprob, /**< transformed problem after presolve */
    98 SCIP_PROB* origprob, /**< original problem */
    99 SCIP_TREE* tree, /**< branch and bound tree */
    100 SCIP_REOPT* reopt, /**< reoptimization data structure */
    101 SCIP_LP* lp, /**< current LP data */
    102 SCIP_BRANCHCAND* branchcand, /**< branching candidate storage */
    103 SCIP_EVENTQUEUE* eventqueue, /**< event queue */
    104 SCIP_EVENTFILTER* eventfilter, /**< global event filter */
    105 SCIP_CLIQUETABLE* cliquetable /**< clique table data structure */
    106 );
    107
    108/** perform conflict analysis based on a dual unbounded ray
    109 *
    110 * given an aggregation of rows lhs <= a^Tx such that lhs > maxactivity. if the constraint has size one we add a
    111 * bound change instead of the constraint.
    112 */
    114 SCIP_CONFLICT* conflict, /**< conflict analysis data */
    115 SCIP_SET* set, /**< global SCIP settings */
    116 SCIP_STAT* stat, /**< dynamic SCIP statistics */
    117 SCIP_EVENTFILTER* eventfilter, /**< global event filter */
    118 BMS_BLKMEM* blkmem, /**< block memory */
    119 SCIP_PROB* origprob, /**< original problem */
    120 SCIP_PROB* transprob, /**< transformed problem */
    121 SCIP_TREE* tree, /**< tree data */
    122 SCIP_REOPT* reopt, /**< reoptimization data */
    123 SCIP_LP* lp, /**< LP data */
    124 SCIP_AGGRROW* proofrow, /**< aggregated row representing the proof */
    125 int validdepth, /**< valid depth of the dual proof */
    126 SCIP_Real* curvarlbs, /**< current lower bounds of active problem variables */
    127 SCIP_Real* curvarubs, /**< current upper bounds of active problem variables */
    128 SCIP_Bool initialproof, /**< do we analyze the initial reason of infeasibility? */
    129 SCIP_Bool* globalinfeasible, /**< pointer to store whether global infeasibility could be proven */
    130 SCIP_Bool* success /**< pointer to store success result */
    131 );
    132
    133#ifdef __cplusplus
    134}
    135#endif
    136
    137#endif
    void SCIPproofsetFree(SCIP_PROOFSET **proofset, BMS_BLKMEM *blkmem)
    SCIP_RETCODE SCIPconflictInitProofset(SCIP_CONFLICT *conflict, BMS_BLKMEM *blkmem)
    SCIP_RETCODE SCIPconflictFlushProofset(SCIP_CONFLICT *conflict, SCIP_CONFLICTSTORE *conflictstore, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_PROB *transprob, SCIP_PROB *origprob, SCIP_TREE *tree, SCIP_REOPT *reopt, SCIP_LP *lp, SCIP_BRANCHCAND *branchcand, SCIP_EVENTQUEUE *eventqueue, SCIP_EVENTFILTER *eventfilter, SCIP_CLIQUETABLE *cliquetable)
    SCIP_RETCODE SCIPconflictAnalyzeDualProof(SCIP_CONFLICT *conflict, SCIP_SET *set, SCIP_STAT *stat, SCIP_EVENTFILTER *eventfilter, BMS_BLKMEM *blkmem, SCIP_PROB *origprob, SCIP_PROB *transprob, SCIP_TREE *tree, SCIP_REOPT *reopt, SCIP_LP *lp, SCIP_AGGRROW *proofrow, int validdepth, SCIP_Real *curvarlbs, SCIP_Real *curvarubs, SCIP_Bool initialproof, SCIP_Bool *globalinfeasible, SCIP_Bool *success)
    int SCIPproofsetGetNVars(SCIP_PROOFSET *proofset)
    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
    Definition: heur_padm.c:135
    type definitions for branching rules
    type definitions for conflict analysis
    type definitions for conflict store
    type definitions for cuts
    type definitions for managing events
    type definitions for implications, variable bounds, and cliques
    type definitions for LP management
    type definitions for storing and manipulating the main problem
    type definitions for collecting reoptimization information
    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 problem statistics
    type definitions for branch and bound tree
    type definitions for problem variables