1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
/* */
/* This file is part of the program */
/* GCG --- Generic Column Generation */
/* a Dantzig-Wolfe decomposition based extension */
/* of the branch-cut-and-price framework */
/* SCIP --- Solving Constraint Integer Programs */
/* */
/* Copyright (C) 2010-2022 Operations Research, RWTH Aachen University */
/* Zuse Institute Berlin (ZIB) */
/* */
/* This program is free software; you can redistribute it and/or */
/* modify it under the terms of the GNU Lesser General Public License */
/* as published by the Free Software Foundation; either version 3 */
/* of the License, or (at your option) any later version. */
/* */
/* This program is distributed in the hope that it will be useful, */
/* but WITHOUT ANY WARRANTY; without even the implied warranty of */
/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the */
/* GNU Lesser General Public License for more details. */
/* */
/* You should have received a copy of the GNU Lesser General Public License */
/* along with this program; if not, write to the Free Software */
/* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.*/
/* */
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
/**@file struct_decomp.h
* @ingroup DECOMP
* @ingroup DATASTRUCTURES
* @brief structure information for decomposition information in GCG projects
* @author Martin Bergner
* @author Michael Bastubbe
*/
/*---+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2*/
#ifndef GCG_STRUCT_DECOMP_H_
#define GCG_STRUCT_DECOMP_H_
#include "scip/scip.h"
#include "type_decomp.h"
#include "type_detector.h"
#ifdef __cplusplus
extern "C" {
#endif
/** decomposition structure information */
struct DecDecomp
{
SCIP_Bool presolved; /**< does the decomposition refer to the presolved problem? */
int nblocks; /**< number of blocks in this decomposition */
SCIP_VAR*** subscipvars; /**< two dimensional array of variables in each block
Usage: Usage: subscipvars[b][v] is variable v in block b */
int* nsubscipvars; /**< array of number of variables in each block
Usage: nsubscipvars[b] is the number of variables of block b */
SCIP_CONS*** subscipconss; /**< two dimensional array of constraints in each block
Usage: subscipcons[b][c] is constraint c in block b */
int* nsubscipconss; /**< array of number of constraints in each block
Usage: nsubscipcons[b] is the number of constraints of block b */
SCIP_CONS** linkingconss; /**< array of constraints linking the blocks
Usage: linkingcons[c] is linking constraint number c */
int nlinkingconss; /**< number of linking constraints */
SCIP_VAR** linkingvars; /**< array of variables linking the blocks
Usage: linkingvars[v] is linking variable number v */
int nlinkingvars; /**< number of linking variables */
int nfixedlinkingvars; /**< number of linking variables that are fixed */
int nmastervars; /**< number of linking variables that are purely master variables*/
SCIP_VAR*** stairlinkingvars; /**< array of variables staircaselinking the blocks */
int* nstairlinkingvars; /**< number of staircaselinking variables */
SCIP_HASHMAP* vartoblock; /**< hashmap mapping variables to their blocks (from 1 to nblocks)
Usage: SCIPhashmapGetImage(vartoblock, var) returns b+1, where b is the block of
variable var. This map is somehow inverse of the subscipcvars array. */
SCIP_HASHMAP* constoblock; /**< hashmap mapping constraints to their blocks (from 1 to nblocks)
Usage: Usage: SCIPhashmapGetImage(constoblock, cons) returns b+1, where b is the block of
constraint cons. This map is somehow inverse of the subscipconss array.*/
SCIP_HASHMAP* varindex; /**< hashmap mapping variables to indices for a visual ordering */
SCIP_HASHMAP* consindex; /**< hashmap mapping constraints to indices for visual ordering */
DEC_DECTYPE type; /**< type of the decomposition */
DEC_DETECTOR** detectorchain; /**< array of detectors that worked on this decomposition */
DEC_DETECTOR* detector; /**< detector that found this decomposition */
int sizedetectorchain; /**< number of detectors that worked on this decomposition */
int partialdecid; /**< id of the partialdec this decomposition originates from */
SCIP_Real* detectorclocktimes; /**< times of the detectors that worked on this decomposition */
SCIP_Real* pctvarstoborder; /**< percentages of variables assigned to the border of the corresponding detectors on this decomposition */
SCIP_Real* pctconsstoborder; /**< percentages of constraints assigned to the border of the corresponding detectors on this decomposition */
SCIP_Real* pctvarstoblock; /**< percentages of variables assigned to a block of the corresponding detectors on this decomposition */
SCIP_Real* pctconsstoblock; /**< percentages of variables assigned to a block of the corresponding detectors on this decomposition */
SCIP_Real* pctvarsfromopen; /**< percentages of variables assigned to a block or border of the corresponding detectors on this decomposition */
SCIP_Real* pctconssfromopen; /**< percentages of constraints assigned to a block or the border of the corresponding detectors on this decomposition */
int* nnewblocks; /**< number of new blocks of the corresponding detectors on this decomposition */
char* detectorchainstring;/**< string for the detector information working on that decomposition */
SCIP_Real maxwhitescore; /**< maximum white score (i.e. [fraction of white area] (nonborder+nonblock) ) */
};
#ifdef __cplusplus
}
#endif
#endif /* STRUCT_DECOMP_H_ */