SCIP Doxygen Documentation
Loading...
Searching...
No Matches
sepa_flower.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-2026 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 sepa_flower.h
26
* @ingroup SEPARATORS
27
* @brief flower-inequality separator
28
* @author Matthias Walter
29
*
30
* Separator for flower inequalities that are valid for the mulitlinear polytope \f$ P(G) \f$ of a hypergraph
31
* \f$ G = (V,E) \f$, defined as the convex hull of all vectors \f$ z \in \{0,1\}^{V + E} \f$ that
32
* satisfy \f$ z_e = \prod_{v \in e} z_v \f$ for all \f$ e \in E \f$. In other words, the variable associated with each
33
* (hyper-)edge is equal to the product of the variables associated with the vertices.
34
*
35
* The hypergraph \f$ G \f$ is computed in the first separation round in which this separator is called. The edges
36
* correspond to all AND constraints (see \ref cons_and.h), where \f$ z_e \f$ is the resultant \f$ r \f$ of
37
* \f$ r = x_1 \land x_2 \land \dotsb \land x_n \f$ and its incident vertices correspond to the \f$ x_i \f$.
38
* Moreover, also (nonlinear) product expressions (see \ref expr_product.h) are scanned. For these, the involved
39
* variables are not necessarily binary, i.e., we have \f$ \ell_i \leq x_i \leq u_i \f$, and there might be an
40
* additional constant scaling factor \f$ c \f$. Such expressions \f$ r = c \prod\limits_{i=1}^n x_i \f$ are only taken
41
* into account if \f$ \ell_i \geq 0 \f$ for all \f$ i \f$ since in this case the cut can be applied to the space
42
* \f$ (r',x') \f$ with \f$ r' = \frac{ r }{ c \cdot u_1 \cdot u_2 \cdot \dotsc \cdot u_n } \f$ and
43
* \f$ x'_i = \frac{ x_i }{ u_i } \f$ for all \f$ i \f$.
44
*
45
* ### Flower inequalities ###
46
*
47
* The implemented cuts are <em>k-flower inequalities</em> for \f$ k=1,2 \f$. Such a cut is determined by a
48
* <em>base edge</em> \f$ e \f$ and \f$ k \f$ adjacent edges \f$ f_1, f_2, \dotsc, f_k \f$ that satisfy
49
* \f$ f_i \cap e \neq \emptyset \f$ but are disjoint in \f$ e \f$, i.e., \f$ f_i \cap f_j \cap e = \emptyset \f$ for
50
* all \f$ i \neq j \f$ holds. The set \f$ R \f$ of <em>remaining nodes</em> is defined as
51
* \f$ R := e \setminus \bigcup_{i=1}^k f_i \f$. The inequality reads
52
* \f[ z_e + \sum\limits_{i=1}^k (1-z_{f_i}) + \sum\limits_{v \in R} (1-z_v) \geq 1. \f]
53
* Validity follows from the fact that the left-hand side is a sum of nonnegative binary terms, and can thus only
54
* be violated if (in particular) \f$ z_{f_i} = 1 \f$ for \f$ i=1,2,\dotsc,k \f$ and \f$ z_v = 1 \f$ for all
55
* \f$ v \in R \f$ holds. This, however, implies \f$ z_v = 1 \f$ for all \f$ v \in e \f$ and thus \f$ z_e = 1 \f$.
56
*
57
* Separation can either be done in time \f$ \mathcal{O}( |E|^{k+1} ) \f$ by enumeration or as follows:
58
* Replacing an adjacent edge \f$ f_i \f$ by another edge \f$ f_i' \f$ with the same <em>overlap</em> with the base
59
* edge, i.e., \f$ f'_i \cap e = f_i \cap e \f$ improves the violation if \f$ 1-z_{f'_i} < 1 - z_{f_i} \f$.
60
* Consequently, we compute the set of all <em>overlap sets</em> \f$ \{ e \cap f \mid e,f \in E \} \f$
61
* (see \ref hypergraph.h) and compute \f$ \min \{ 1-z_e \mid e \in E : U \subseteq e \} \f$ for all such \f$ U \f$.
62
* If the number of overlap sets incident to an edge is constant (say, if \f$ |e| \f$ is constant), then the running
63
* time reduces to \f$ \mathcal{O} ( |E| ) \f$.
64
*/
65
66
/*---+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2*/
67
68
#ifndef __SCIP_SEPA_MULTILINEAR_H__
69
#define __SCIP_SEPA_MULTILINEAR_H__
70
71
72
#include "
scip/scip.h
"
73
74
#ifdef __cplusplus
75
extern
"C"
{
76
#endif
77
78
/** creates the flower separator and includes it in SCIP
79
*
80
* @ingroup SeparatorIncludes
81
*/
82
SCIP_EXPORT
83
SCIP_RETCODE
SCIPincludeSepaFlower
(
84
SCIP
*
scip
/**< SCIP data structure */
85
);
86
87
#ifdef __cplusplus
88
}
89
#endif
90
91
#endif
SCIPincludeSepaFlower
SCIP_RETCODE SCIPincludeSepaFlower(SCIP *scip)
Definition
sepa_flower.c:1428
scip
Definition
multiprecision.hpp:66
scip.h
SCIP callable library.
SCIP_RETCODE
enum SCIP_Retcode SCIP_RETCODE
Definition
type_retcode.h:63
SCIP
struct Scip SCIP
Definition
type_scip.h:39
sepa_flower.h
© 2002-2026 by Zuse Institute Berlin (ZIB),
Imprint
Generated on
for SCIP Doxygen Documentation by
1.15.0