Scippy

GCG

Branch-and-Price & Column Generation for Everyone

bendersplugins.c
Go to the documentation of this file.
1 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2 /* */
3 /* This file is part of the program */
4 /* GCG --- Generic Column Generation */
5 /* a Dantzig-Wolfe decomposition based extension */
6 /* of the branch-cut-and-price framework */
7 /* SCIP --- Solving Constraint Integer Programs */
8 /* */
9 /* Copyright (C) 2010-2021 Operations Research, RWTH Aachen University */
10 /* Zuse Institute Berlin (ZIB) */
11 /* */
12 /* This program is free software; you can redistribute it and/or */
13 /* modify it under the terms of the GNU Lesser General Public License */
14 /* as published by the Free Software Foundation; either version 3 */
15 /* of the License, or (at your option) any later version. */
16 /* */
17 /* This program is distributed in the hope that it will be useful, */
18 /* but WITHOUT ANY WARRANTY; without even the implied warranty of */
19 /* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the */
20 /* GNU Lesser General Public License for more details. */
21 /* */
22 /* You should have received a copy of the GNU Lesser General Public License */
23 /* along with this program; if not, write to the Free Software */
24 /* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.*/
25 /* */
26 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
27 
28 /**@file bendersplugins.c
29  * @brief SCIP plugins for the master problem running in Benders' decomposition mode
30  * @author Stephen J. Maher
31  */
32 
33 /*--+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2*/
34 
35 #include "bendersplugins.h"
36 #include "scip/scipdefplugins.h"
37 #include "scip/debug.h"
38 
39 /* GCG specific stuff */
40 #include "dialog_master.h"
41 #include "disp_master.h"
42 
43 /** includes default GCG Benders' decomposition plugins */
45  SCIP* scip /**< SCIP data structure */
46  )
47 {
48  /* including the dialog used for the master problem */
49  SCIP_CALL( SCIPincludeDialogMaster(scip) );
50  /* including the SCIP default plugins */
51  SCIP_CALL( SCIPincludeConshdlrNonlinear(scip) ); /* nonlinear must be before linear, quadratic, abspower, and and due to constraint upgrading */
52  SCIP_CALL( SCIPincludeNlhdlrQuadratic(scip) ); /* quadratic must be before linear due to constraint upgrading */
53  SCIP_CALL( SCIPincludeConshdlrLinear(scip) ); /* linear must be before its specializations due to constraint upgrading */
54  SCIP_CALL( SCIPincludeConshdlrAnd(scip) );
55  SCIP_CALL( SCIPincludeConshdlrBenders(scip) );
56  SCIP_CALL( SCIPincludeConshdlrBenderslp(scip) );
57  SCIP_CALL( SCIPincludeConshdlrBounddisjunction(scip) );
58  SCIP_CALL( SCIPincludeConshdlrCardinality(scip) );
59  SCIP_CALL( SCIPincludeConshdlrConjunction(scip) );
60  SCIP_CALL( SCIPincludeConshdlrCountsols(scip) );
61  SCIP_CALL( SCIPincludeConshdlrCumulative(scip) );
62  SCIP_CALL( SCIPincludeConshdlrDisjunction(scip) );
63  SCIP_CALL( SCIPincludeConshdlrIndicator(scip) );
64  SCIP_CALL( SCIPincludeConshdlrIntegral(scip) );
65  SCIP_CALL( SCIPincludeConshdlrKnapsack(scip) );
66  SCIP_CALL( SCIPincludeConshdlrLinking(scip) );
67  SCIP_CALL( SCIPincludeConshdlrLogicor(scip) );
68  SCIP_CALL( SCIPincludeConshdlrOr(scip) );
69  SCIP_CALL( SCIPincludeConshdlrOrbisack(scip) );
70  SCIP_CALL( SCIPincludeConshdlrOrbitope(scip) );
71  SCIP_CALL( SCIPincludeConshdlrPseudoboolean(scip) );
72  SCIP_CALL( SCIPincludeConshdlrSetppc(scip) );
73  SCIP_CALL( SCIPincludeConshdlrSOS1(scip) );
74  SCIP_CALL( SCIPincludeConshdlrSOS2(scip) );
75  SCIP_CALL( SCIPincludeConshdlrSuperindicator(scip) );
76  SCIP_CALL( SCIPincludeConshdlrSymresack(scip) );
77  SCIP_CALL( SCIPincludeConshdlrVarbound(scip) );
78  SCIP_CALL( SCIPincludeConshdlrXor(scip) );
79  SCIP_CALL( SCIPincludeConshdlrComponents(scip) );
80  SCIP_CALL( SCIPincludeReaderBnd(scip) );
81  SCIP_CALL( SCIPincludeReaderCcg(scip) );
82  SCIP_CALL( SCIPincludeReaderCip(scip) );
83  SCIP_CALL( SCIPincludeReaderCnf(scip) );
84  SCIP_CALL( SCIPincludeReaderCor(scip) );
85  SCIP_CALL( SCIPincludeReaderDiff(scip) );
86  SCIP_CALL( SCIPincludeReaderFix(scip) );
87  SCIP_CALL( SCIPincludeReaderFzn(scip) );
88  SCIP_CALL( SCIPincludeReaderGms(scip) );
89  SCIP_CALL( SCIPincludeReaderLp(scip) );
90  SCIP_CALL( SCIPincludeReaderMps(scip) );
91  SCIP_CALL( SCIPincludeReaderMst(scip) );
92  SCIP_CALL( SCIPincludeReaderOpb(scip) );
93  SCIP_CALL( SCIPincludeReaderOsil(scip) );
94  SCIP_CALL( SCIPincludeReaderPip(scip) );
95  SCIP_CALL( SCIPincludeReaderPpm(scip) );
96  SCIP_CALL( SCIPincludeReaderPbm(scip) );
97  SCIP_CALL( SCIPincludeReaderRlp(scip) );
98  SCIP_CALL( SCIPincludeReaderSmps(scip) );
99  SCIP_CALL( SCIPincludeReaderSol(scip) );
100  SCIP_CALL( SCIPincludeReaderSto(scip) );
101  SCIP_CALL( SCIPincludeReaderTim(scip) );
102  SCIP_CALL( SCIPincludeReaderWbo(scip) );
103  SCIP_CALL( SCIPincludeReaderZpl(scip) );
104  SCIP_CALL( SCIPincludePresolBoundshift(scip) );
105  SCIP_CALL( SCIPincludePresolConvertinttobin(scip) );
106  SCIP_CALL( SCIPincludePresolDomcol(scip) );
107  SCIP_CALL( SCIPincludePresolDualagg(scip) );
108  SCIP_CALL( SCIPincludePresolDualcomp(scip) );
109  SCIP_CALL( SCIPincludePresolDualinfer(scip) );
110  SCIP_CALL( SCIPincludePresolGateextraction(scip) );
111  SCIP_CALL( SCIPincludePresolImplics(scip) );
112  SCIP_CALL( SCIPincludePresolInttobinary(scip) );
113  SCIP_CALL( SCIPincludePresolQPKKTref(scip) );
114  SCIP_CALL( SCIPincludePresolRedvub(scip) );
115  SCIP_CALL( SCIPincludePresolTrivial(scip) );
116  SCIP_CALL( SCIPincludePresolTworowbnd(scip) );
117  SCIP_CALL( SCIPincludePresolSparsify(scip) );
118  SCIP_CALL( SCIPincludePresolStuffing(scip) );
119  SCIP_CALL( SCIPincludeNodeselBfs(scip) );
120  SCIP_CALL( SCIPincludeNodeselBreadthfirst(scip) );
121  SCIP_CALL( SCIPincludeNodeselDfs(scip) );
122  SCIP_CALL( SCIPincludeNodeselEstimate(scip) );
123  SCIP_CALL( SCIPincludeNodeselHybridestim(scip) );
124  SCIP_CALL( SCIPincludeNodeselRestartdfs(scip) );
125  SCIP_CALL( SCIPincludeNodeselUct(scip) );
126  SCIP_CALL( SCIPincludeBranchruleAllfullstrong(scip) );
127  SCIP_CALL( SCIPincludeBranchruleCloud(scip) );
128  SCIP_CALL( SCIPincludeBranchruleDistribution(scip) );
129  SCIP_CALL( SCIPincludeBranchruleFullstrong(scip) );
130  SCIP_CALL( SCIPincludeBranchruleInference(scip) );
131  SCIP_CALL( SCIPincludeBranchruleLeastinf(scip) );
132  SCIP_CALL( SCIPincludeBranchruleMostinf(scip) );
133  SCIP_CALL( SCIPincludeBranchruleMultAggr(scip) );
134  SCIP_CALL( SCIPincludeBranchruleNodereopt(scip) );
135  SCIP_CALL( SCIPincludeBranchrulePscost(scip) );
136  SCIP_CALL( SCIPincludeBranchruleRandom(scip) );
137  SCIP_CALL( SCIPincludeBranchruleRelpscost(scip) );
138  SCIP_CALL( SCIPincludeEventHdlrSolvingphase(scip) );
139  SCIP_CALL( SCIPincludeComprLargestrepr(scip) );
140  SCIP_CALL( SCIPincludeComprWeakcompr(scip) );
141  SCIP_CALL( SCIPincludeHeurActconsdiving(scip) );
142  SCIP_CALL( SCIPincludeHeurBound(scip) );
143  SCIP_CALL( SCIPincludeHeurClique(scip) );
144  SCIP_CALL( SCIPincludeHeurCoefdiving(scip) );
145  SCIP_CALL( SCIPincludeHeurCompletesol(scip) );
146  SCIP_CALL( SCIPincludeHeurCrossover(scip) );
147  SCIP_CALL( SCIPincludeHeurDins(scip) );
148  SCIP_CALL( SCIPincludeHeurDistributiondiving(scip) );
149  SCIP_CALL( SCIPincludeHeurDualval(scip) );
150  SCIP_CALL( SCIPincludeHeurFeaspump(scip) );
151  SCIP_CALL( SCIPincludeHeurFixandinfer(scip) );
152  SCIP_CALL( SCIPincludeHeurFracdiving(scip) );
153  SCIP_CALL( SCIPincludeHeurGins(scip) );
154  SCIP_CALL( SCIPincludeHeurGuideddiving(scip) );
155  SCIP_CALL( SCIPincludeHeurZeroobj(scip) );
156  SCIP_CALL( SCIPincludeHeurIndicator(scip) );
157  SCIP_CALL( SCIPincludeHeurIntdiving(scip) );
158  SCIP_CALL( SCIPincludeHeurIntshifting(scip) );
159  SCIP_CALL( SCIPincludeHeurLinesearchdiving(scip) );
160  SCIP_CALL( SCIPincludeHeurLocalbranching(scip) );
161  SCIP_CALL( SCIPincludeHeurLocks(scip) );
162  SCIP_CALL( SCIPincludeHeurLpface(scip) );
163  SCIP_CALL( SCIPincludeHeurAlns(scip) );
164  SCIP_CALL( SCIPincludeHeurNlpdiving(scip) );
165  SCIP_CALL( SCIPincludeHeurMutation(scip) );
166  SCIP_CALL( SCIPincludeHeurMultistart(scip) );
167  SCIP_CALL( SCIPincludeHeurMpec(scip) );
168  SCIP_CALL( SCIPincludeHeurObjpscostdiving(scip) );
169  SCIP_CALL( SCIPincludeHeurOctane(scip) );
170  SCIP_CALL( SCIPincludeHeurOfins(scip) );
171  SCIP_CALL( SCIPincludeHeurOneopt(scip) );
172  SCIP_CALL( SCIPincludeHeurProximity(scip) );
173  SCIP_CALL( SCIPincludeHeurPscostdiving(scip) );
174  SCIP_CALL( SCIPincludeHeurRandrounding(scip) );
175  SCIP_CALL( SCIPincludeHeurRens(scip) );
176  SCIP_CALL( SCIPincludeHeurReoptsols(scip) );
177  SCIP_CALL( SCIPincludeHeurRepair(scip) );
178  SCIP_CALL( SCIPincludeHeurRins(scip) );
179  SCIP_CALL( SCIPincludeHeurRootsoldiving(scip) );
180  SCIP_CALL( SCIPincludeHeurRounding(scip) );
181  SCIP_CALL( SCIPincludeHeurShiftandpropagate(scip) );
182  SCIP_CALL( SCIPincludeHeurShifting(scip) );
183  SCIP_CALL( SCIPincludeHeurSimplerounding(scip) );
184  SCIP_CALL( SCIPincludeHeurSubNlp(scip) );
185  SCIP_CALL( SCIPincludeHeurTrivial(scip) );
186  SCIP_CALL( SCIPincludeHeurTrivialnegation(scip) );
187  SCIP_CALL( SCIPincludeHeurTrySol(scip) );
188  SCIP_CALL( SCIPincludeHeurTwoopt(scip) );
189  SCIP_CALL( SCIPincludeHeurUndercover(scip) );
190  SCIP_CALL( SCIPincludeHeurVbounds(scip) );
191  SCIP_CALL( SCIPincludeHeurVeclendiving(scip) );
192  SCIP_CALL( SCIPincludeHeurZirounding(scip) );
193  SCIP_CALL( SCIPincludePropDualfix(scip) );
194  SCIP_CALL( SCIPincludePropGenvbounds(scip) );
195  SCIP_CALL( SCIPincludePropObbt(scip) );
196  SCIP_CALL( SCIPincludePropNlobbt(scip) );
197  SCIP_CALL( SCIPincludePropProbing(scip) );
198  SCIP_CALL( SCIPincludePropPseudoobj(scip) );
199  SCIP_CALL( SCIPincludePropRedcost(scip) );
200  SCIP_CALL( SCIPincludePropRootredcost(scip) );
201  SCIP_CALL( SCIPincludePropVbounds(scip) );
202  SCIP_CALL( SCIPincludeSepaCGMIP(scip) );
203  SCIP_CALL( SCIPincludeSepaClique(scip) );
204  SCIP_CALL( SCIPincludeSepaClosecuts(scip) );
205  SCIP_CALL( SCIPincludeSepaAggregation(scip) );
206  SCIP_CALL( SCIPincludeSepaConvexproj(scip) );
207  SCIP_CALL( SCIPincludeSepaDisjunctive(scip) );
208  SCIP_CALL( SCIPincludeSepaEccuts(scip) );
209  SCIP_CALL( SCIPincludeSepaGauge(scip) );
210  SCIP_CALL( SCIPincludeSepaGomory(scip) );
211  SCIP_CALL( SCIPincludeSepaImpliedbounds(scip) );
212  SCIP_CALL( SCIPincludeSepaIntobj(scip) );
213  SCIP_CALL( SCIPincludeSepaMcf(scip) );
214  SCIP_CALL( SCIPincludeSepaOddcycle(scip) );
215  SCIP_CALL( SCIPincludeSepaRapidlearning(scip) );
216  SCIP_CALL( SCIPincludeSepaZerohalf(scip) );
217  SCIP_CALL( SCIPincludeEventHdlrSofttimelimit(scip) );
218  SCIP_CALL( SCIPincludeConcurrentScipSolvers(scip) );
219  SCIP_CALL( SCIPincludeBendersDefault(scip) );
220 
221  SCIP_CALL( SCIPdebugIncludeProp(scip) ); /*lint !e506 !e774*/
222 
223  /* including the display used for the master problem */
224  SCIP_CALL( SCIPincludeDispMaster(scip) );
225  SCIP_CALL( SCIPincludeTableDefault(scip) );
226 
227  /* Benders' decomposition specific plugins */
228 
229 
230  return SCIP_OKAY;
231 }
SCIP_RETCODE GCGincludeBendersPlugins(SCIP *scip)
SCIP plugins for the master problem running in Benders' decomposition mode.
user interface dialog for master problem
master display columns
SCIP_RETCODE SCIPincludeDialogMaster(SCIP *scip)
Definition: dialog_master.c:73
SCIP_RETCODE SCIPincludeDispMaster(SCIP *scip)
Definition: disp_master.c:89