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