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
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
/* */
/* 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_vardata.h
* @ingroup DATASTRUCTURES
* @brief data structures for GCG variable data
* @author Gerald Gamrath
* @author Martin Bergner
*/
/*---+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2*/
#ifndef GCG_STRUCT_VARDATA_H__
#define GCG_STRUCT_VARDATA_H__
#ifdef __cplusplus
extern "C" {
#endif
/** type of the variable */
enum GCG_Vartype
{
GCG_VARTYPE_ORIGINAL = 0, /**< variable belongs to original problem */
GCG_VARTYPE_PRICING = 1, /**< variable belongs to a pricing problem */
GCG_VARTYPE_MASTER = 2 /**< variable belongs to the master problem */
};
typedef enum GCG_Vartype GCG_VARTYPE;
/** additional data for linking variables */
struct GCG_LinkingVarData
{
SCIP_VAR** pricingvars; /**< array of corresponding variables in the pricing programs (NULL if variable is not linking this block)*/
SCIP_CONS** linkconss; /**< array of constraints in the master problem that ensure that all copies have the same values */
int nblocks; /**< number of blocks that this variable is linking */
};
typedef struct GCG_LinkingVarData GCG_LINKINGVARDATA;
/** data for original variables */
struct GCG_OrigVarData
{
SCIP_VAR* pricingvar; /**< corresponding variable in the pricing program */
SCIP_CONS** masterconss; /**< master constraints of the original program in which the variable has a nonzero entry */
SCIP_Real* coefs; /**< coefficients in the linking constraints of the original program */
int ncoefs; /**< number of coefficients */
SCIP_VAR** mastervars; /**< variables in the master problem that contain the variable */
SCIP_Real* mastervals; /**< value of this variable in the master problem variables */
int nmastervars; /**< number of corresponding master variables */
int maxmastervars; /**< length of arrays mastervars and vals */
GCG_LINKINGVARDATA* linkingvardata; /**< additional data for linking variables */
};
typedef struct GCG_OrigVarData GCG_ORIGVARDATA;
/** data for pricing variables */
struct GCG_PricingVarData
{
SCIP_VAR** origvars; /**< corresponding variables in the original program */
int norigvars; /**< number of corresponding variables in the original program */
int maxorigvars; /**< length of origvars array */
};
typedef struct GCG_PricingVarData GCG_PRICINGVARDATA;
/** data for master variables */
struct GCG_MasterVarData
{
int norigvars; /**< number of variables in the original program corresponding to the current variable */
int maxorigvars; /**< capacity of origvars and origvals */
SCIP_VAR** origvars; /**< variables in the original program corresponding to the current variable */
SCIP_Real* origvals; /**< this variable represents vals[i] times the variable origvars[i] in the
* original program */
SCIP_Bool isray; /**< does this variable represent a ray or an extreme point? */
SCIP_Bool isartificial; /**< is variable artificial? */
SCIP_HASHMAP* origvar2val; /**< hash map that stores the fraction of original variables the master variable is contained in */
int index; /**< index of the master variable if stored in GCG's pricedvars array, -1 otherwise */
};
typedef struct GCG_MasterVarData GCG_MASTERVARDATA;
/** variable data structure */
struct SCIP_VarData
{
union
{
GCG_ORIGVARDATA origvardata; /**< data for original variables */
GCG_PRICINGVARDATA pricingvardata; /**< data for pricing variables */
GCG_MASTERVARDATA mastervardata; /**< data for variable of the master problem */
} data;
GCG_VARTYPE vartype; /**< type of variable */
int blocknr; /**< number of the block and pricing problem, the variable belongs to,
* or -1 if variable is directly transferred to the master problem,
* or -2 if variable is a linking variable */
SCIP_Longint creationnode; /**< node where the variable is created */
SCIP_Longint rootredcostcall; /**< pricing reduced cost call when the variable is created
* (-1 if variable was not created at the root node or was created in Farkas pricing) */
SCIP_Real creationtime; /**< time when the variable is created */
SCIP_Longint iteration; /**< iteration when the variable is created */
SCIP_Real gap; /**< gap when the variable was created */
SCIP_Real redcost; /**< reduced cost of the variable */
};
#ifdef __cplusplus
}
#endif
#endif