Scippy

GCG

Branch-and-Price & Column Generation for Everyone

/builds/gcg/gcg/CHANGELOG
Go to the documentation of this file.
1 /**@page RN35 Release notes for GCG 3.5
2 @section RN350 GCG 3.5.0
3 *************************
4 
5 New features:
6 -------------
7 
8 - New website documentation
9 - Added several strong branching based branching candidate selection heuristics: strong branching with column generation, strong branching without column generation, hybrid strong/pseudocost branching, reliability branching, hierarchical strong branching, hybrid hierarchical strong/pseudocost branching, hierarchical reliability branching (primarily for original variable branching and Ryan-Foster branching).
10 - New detector neighborhoodmaster: calculating cons-cons adjacency (if not already done), sorting according size of neighborhood. Searching two consecutive constraints with largest size difference (according neighborhood size) in sorted constraints. All constraints having a larger neighborhood than the second one are assigned to the master.
11 - On reading an incomplete decomposition, the program will not necessarily assign all open elements to the master problem but detect the rest of the structure.
12 - Use the user's default application to open pdf files
13 
14 New/changed parameters:
15 -----------------------
16 
17 - New parameters 'branching/orig/usestrong' and 'branching/ryanfoster/usestrong' to enable strong branching for original variable branching and Ryan-Foster branching
18 - New parameters 'branching/bpstrong/...' to alter strong branching behavior
19 - New parameter 'detection/enabled' for easier en-/disabling of the detection
20 - New Parameter 'detection/postprocess' enables the postprocessing of decompositions
21 - Removed paramaters 'detection/detectors/<name>/legacymode'
22 - Removed parameter 'detection/conssadjcalculated'
23 - Removed parameter 'detection/legacymode/onlylegacymode'
24 - Removed parameter 'detection/legacymode/enabled'
25 - Removed parameter 'detection/legacymode/stairlinkingheur'
26 - Removed parameter 'visual/report/showtype'
27 - Removed parameter 'constraints/decomp/createbasicdecomp'
28 - Removed parameters 'detection/detectors/<name>/origenabled'
29 - Moved parameters 'detection/consclassifier/<name>/enabled' to 'detection/classification/consclassifier/<name>/enabled'
30 - Removed parameters 'detection/consclassifier/<name>/origenabled'
31 - Moved parameters 'detection/varclassifier/<name>/enabled' to 'detection/classification/varclassifier/<name>/enabled'
32 - Removed parameters 'detection/varclassifier/<name>/origenabled'
33 - Moved parameter 'detection/allowclassifierduplicates/enabled' to 'detection/classification/allowduplicates'
34 - Moved parameter 'detection/maxnclassesfornblockcandidates' to 'detection/blocknrcandidates/maxnclasses'
35 - Moved parameter 'detection/addblocknr' to 'set/detection/blocknrcandidates/addblocknr'
36 - Moved parameter 'detection/maxnclassesperclassifier' to 'detection/classification/maxnclassesperpartition'
37 - Moved parameter 'detection/maxnclassesperclassifierforlargeprobs' to 'detection/classification/maxnclassesperpartitionforlargeprobs'
38 - Moved parameter 'detection/strong_detection/dualvalrandommethod' to 'detection/score/strong_detection/dualvalrandommethod'
39 - Moved parameter 'detection/strong_detection/coeffactororigvsrandom' to 'detection/score/strong_detection/coeffactororigvsrandom'
40 - Moved parameter 'detection/scoretype' to 'detection/score/scoretype'
41 
42 New/changed menu commands:
43 -----------------------
44 
45 - Removed 'toolbox' feature from 'explore' menu
46 - Removed command 'toolbox'
47 - Removed command 'write/miplib2017features'
48 - Removed command 'write/miplib2017plotsanddecs'
49 - Removed command 'write/miplib2017shortbasefeatures'
50 - Removed command 'write/miplib2017featurefilepath'
51 - Removed command 'write/miplib2017matrixfilepath'
52 - Removed command 'write/miplib2017decompfilepath'
53 - Removed command 'write alloriginaldecompositions'
54 - Removed command 'write allpresolveddecompositions'
55 - Renamed command 'write reportdecompositions' to 'write report'
56 - Renamed command 'write selecteddecompositions' to 'write selected'
57 
58 Visualization and testing:
59 --------------------------
60 
61 - check/compareversions.sh runs tests on several git versions, summarizes performace results
62 
63 Code cleanup:
64 -------------
65 
66 - Cleaned up 'explore' menu
67 - Refactored detection loop
68 - Removed legacymode, including detectors 'connected', 'staircase', 'random', 'cutpacking', 'colors', 'mcl'
69 - Renamed class Seeed to PARTIALDECOMP
70 - Renamed class Seeedpool to DETPROBDATA
71 - Renamed SEEED_WRAPPER to PARTIALDECOMP_WRAPPER
72 - Renamed {Index,Cons,Var}Classifier to {Index,Cons,Var}Partition
73 - Refactored dialog handler
74 - Moved GCG version define to 'def.h', moved 'GCGprintVersion' to 'gcg_general.h/c'
75 
76 New/modified API functions:
77 ---------------------------
78 - New functions: 'GCGtransformProb', 'GCGpresolve', 'GCGdetect', 'GCGsolve'
79 - Renamed 'GCGgetGap' to 'GCGgetVarGap' and 'GCGsetGap' to 'GCGsetVarGap'
80 - New functions: 'GCGgetDualbound', 'GCGgetPrimalbound', 'GCGgetGap'
81 
82 Bug fixes
83 ---------
84 - Fixed function 'ObjPricerGcg::computeCurrentDegeneracy'
85 - Relaxator: Do not construct and flush the LP if it is already constructed
86 
87 
88 @page RN30 Release notes for GCG 3.0
89 @section RN305 GCG 3.0.5
90 *************************
91 
92 Bug fixes
93 ---------
94 
95 - Skip structure detection if the original problem is already solved after presolving.
96 
97 
98 @section RN304 GCG 3.0.4
99 *************************
100 
101 Bug fixes
102 ---------
103 
104 - Fix segmentation fault.
105 - Fix commands 'transform' and 'presolve': Check SCIP_STAGE before calling SCIPdialogExecTransform() and SCIPdialogExecPresolve().
106 
107 
108 @section RN303 GCG 3.0.3
109 *************************
110 
111 Bug fixes
112 ---------
113 
114 - Fix several segmentation faults.
115 - Skip Farkas pricing only if at least one solution of the original problem was successfully added to the master variable space.
116 - Interrupt the pricing loop if SCIP reports that the solving process should be stopped.
117 - Disable the column pool in probing mode.
118 - 'write matrix' and 'write transmatrix' set PDF as file format in the created gnuplot file.
119 
120 
121 @section RN302 GCG 3.0.2
122 *************************
123 
124 Bug fixes
125 ---------
126 
127 - Fix segmentation fault due to missing relaxsol event handler in BENDERS and ORIGINAL mode.
128 - Fix cmake module FindBLISS to handle GMP dependency correctly.
129 - Fix branching on directly transferred master variables in generic branching.
130 - Fix in pricer_gcg when calculating stabilized dual objective value.
131 - Fix a parameter bug concerning heuristic pricing.
132 - Fix: sort pricing solvers before initialization of pricing controller.
133 - Handle fixed master variables correctly when transforming values of original variables into values of master variables.
134 - Transfer solutions to the master problem only if it is not solved already.
135 
136 
137 
138 @section RN301 GCG 3.0.1
139 *************************
140 
141 Command line interface
142 -----------------------
143 
144 - 'write matrix' and 'write transmatrix' for writing a gnuplot file showing the (original and presolved) coefficient matrix
145 
146 New/changed parameters
147 -----------------------
148 
149 - new parameter "relaxing/gcg/mipdiscretization" indicates whether to use discretization with continuous variables (only has an effect if "relaxing/gcg/discretization" is enabled)
150 
151 Performance improvements
152 -------------------------
153 
154 - Improved performance of creating Gnuplot matrix visualizations
155 - Corrected transfer from feasible master solutions to the original problem
156 - Improved performnace of calculating foreseeing decomposition scores
157 
158 Code cleanup
159 ------------
160 
161 - Clean up scaling code in Gnuplot reader
162 
163 Bug fixes
164 ---------
165 
166 - Fix segmentation faults in aggressive detection
167 - Fix toolbox method for assigning variables per regular expression
168 - Fix issue with setting variables as linking variables in decomposition toolbox
169 - Call hmetis only if at matrix should be decomposed into at least two blocks
170 - Fix issues with hmetis in aggressive detection
171 - Deal with empty or duplicate constraint names
172 - Fix an assertion in detection concerning a non-existent hashmap
173 - Fix memory error in relaxator concerning a filename string that was not freed
174 - Fix bug in reader_dec for original problem
175 - Handle double stored external branching candidates correctly in ZI rounding heuristic
176 - Fix issue with non-violated cuts in separation storage
177 - Fix NULL pointer error in two 'if' clauses in seeed pool
178 - Fix memory leak in event_relaxsol
179 - Use correct method to free event handler data in event_relaxsol.
180 - Fix parallelization in pricing loop by allowing only one job per pricing problem at a time
181 - Add a missing Makefile dependency
182 
183 
184 @section RN300 GCG 3.0.0
185 *************************
186 
187 Features
188 --------
189 
190 - new roundwise modular structure detection scheme:
191  - detectors can implement three optional methods:
192  - propagateSeeed : given a partial decomposition d the detector returns a set of decompositions that are a refinement of d
193  - finsishSeeed: given a partial decomposition d the detector returns a set of decompositions that are a refinement of d and complete
194  - postprocessSeeed: given a complete decomposition d the detector returns a set of complete decompositions
195  - there is a current pool of partial decompositions (i.e. some conss and vars are open, initilized by empty decomposition (all vars and conss are open) or user decomposition )
196  - in every detection round the refinement method of each active detector is called on each current partial detection and returns a (possibly empty) set of decompositions (possibly still partial but strictly more refined); afterwards the finishing method of each detector is called on each partial decomposition
197  - after last round the postprocessing method of the corresponding detectors is called on each complete decomposition
198  - duplicates of partial and complete are identified
199  - constraint and variable classification according to several criteria reveals more problem structure, and in particular yield candidates for the number of blocks, that are used by graph partitioning detectors
200  - detection process can run parallelized (in presence of multiple partial decompositions)
201  - structure information concerning the original problem can be used when searching structure in the transformed problem, e.g. by "detect presolve detect"
202  - more user interaction (see point "Command line interface" below for more information):
203  - by command "explore" and inspecting found decompositions,
204  - give partial decompositions,
205  - directly modify found partial decompositions
206  - new visualization methods for decompositions ('visualize' command in 'explore' submenu, family tree (experimental feature: finished decompositions can be seen as leaves in a forest, partial decompositions as inner nodes, ancestor descendant pairs are connected by edge ) )
207  - new scores to evaluate found decompositions
208 - solve the problem with one single block if no decomposition is available ('SCIP mode')
209 - extended isomorph detector by the possibility to identify blocks which are identical
210  w.r.t. signs (but not necessarily values) of coefficients.
211 - extended backtracking mechanism in diving heuristics:
212  single backtracking in addition to limited discrepancy search in master variable diving;
213  added branching on another variable and limited disc. search to original variable diving
214 - added menu item "write reportdecompositions" that creates a report of all decompositions in form of a .tex file
215 - Benders' decomposition mode has been added. The Benders' decomposition mode is activated by setting
216  "relaxing/gcg/mode" to 1. When using the Benders' decomposition mode, the decompositions found by the detectors are
217  used as the master and subproblems.
218 - Original mode has been added. The original mode allows the user to solve the original problem directly without any
219  decomposition being performed. The original mode is selected by setting "relaxing/gcg/mode" to 2.
220 - new pricing scheme:
221  - the pricing loop is now managed by a new class, the 'pricing controller'
222  - pricing is now done by performing 'pricing jobs', which hold a pricing problem, a solver to be applied and some parameters (such as whether the solver is to be applied heuristically)
223  - pricing jobs are organized in a priority queue, which is maintained by the pricing controller
224  - the latter now also decides over premature abortion of the pricing loop
225 - own data structure for pricing problems which also holds solving statistics and results
226 - extension of heuristic pricing, which can now be performed in multiple rounds; in particular, the MIP and the CPLEX pricing solver can now be applied multiple times per pricing loop, with increasing node, solution limits or decreasing gap limts.
227 - new possibility to sort pricing problems: reliability sorting based only on the last few pricing rounds
228 - possibility to solve pricing problems 'chunk'-wise, i.e. to only regard a certain subset of pricing problems in a pricer call
229 - add price store similar to SCIP's sepa store for better column management
230 - interface change in pricing solvers:
231  - solvers now pass their columns directly to the pricing storage rather than returning an array
232  - GCG_DECL_SOLVERSOLVE and GCG_DECL_SOLVERSOLVEHEUR callbacks now also take the master SCIP instance as an input
233  - new callback GCG_DECL_SOLVERUPDATE, called by the pricer when constraint, bound or objective function changes occur on a pricing problem; also fixes a bug in the CPLEX pricing solver
234 - new return type GCG_PRICINGSTATUS which replaces SCIP_STATUS in the pricing solvers
235 
236 - add additional pricing and variable statistics
237 - add hybridization of dual variable smoothing with an ascent method
238 - restructure column pool similar to SCIP's cut pool
239 - parametrize pricing solver priorities
240 - added parameter heuristics/restmaster/pbheur to use restricted master heuristic as price-and-branch heuristic
241 - imitate SCIP's separation procedure in the basis separator by storing the number separation rounds in probing per node
242 - artificial variables can now be added in the first Farkas pricing iteration to make the restricted master problem
243  feasible (including various options on setting the big M objective coefficients of these variables)
244 - new pricing solver that solves independent set problems heuristically using the cliquer library
245 - enable discretization when original problem is a mixed integer program; continuous variables are convexified
246 - solve original LP relaxation in the root node to get a first dual bound and to run some heuristics in the original problem
247 
248 Performance improvements
249 -------------------------
250 
251 - structure detection (default) is now applicable to MIPs with much larger dimensions (150.000 x 500000)
252 
253 Data structures
254 ----------------
255 
256 - new internal data structure to handle partial decompositions; see class_seeed.h for more details
257 - new internal data structure to handle detection loops for different formulations (at the moment original and transformed formulation); see class_seeedpool.h for more information
258 - new internal data structure to handle constraint classification, each constraint classification is a partition of the constraints according a given criteria, used constraint classifiers:
259  - number of nonzero entries
260  - constraint type according to SCIP constraint handlers
261  - constraint type according to MIPLIB2010 constraint classifiaction
262  - constraint name: identity for names with removed digits
263  - constraint name: levenshtein distance graph, for names according to nodes in the same connected component
264 - new internal data structure to handle variable classification, each variable classifier is a partition of the variables according to some criteria
265  - SCIP variable type
266  - objective coefficient
267  - objective sign
268 
269 Deleted and modified API functions
270 -----------------------------------
271 
272 - detector callback DETECTSTRUCTURE is only called in optional legacy mode (legacy mode is detection of version 2.1.4 and completely indepedent from new detecion loop), detectors written by the user should be useable if their parameter detection/detectors/∗/legacymode is set to TRUE
273 
274 New API functions
275 -----------------
276 
277 - detector callback PROPAGATESEEED, called during detection loop to refine partial decompositions, given a partial decomposition d the detector returns a set of decompositions that are a refinement of d
278 - detector callback FINISHSEEED, called during detection loop to finish partial decompositions, given a partial decomposition d the detector returns a set of complete decompositions that are a refinement of d
279 - detector callback POSTPROCESSSEEED, called after detection loop, to postprocess found finished decompositions, given a complete decomposition this method returns a set of complete decompositions
280 
281 Command line interface
282 -----------------------
283 
284 - "explore" submenu to inspect and modify new decompositions
285 - "explore inspect" get information about decomposition on different detail levels
286 - "explore visualize" experimental feature, opens a gnuplot generated pdf visualization of specified decomposition, see /visual/pdfreader parametr
287 - "explore modify" modify known (partial) decompositions by applying specified detector callbacks or assign certain variables/constraints by name
288 - "explore calc_strong" highly experimental feature, calculates a score that is based on strength and solving speed of the Dantzig-Wolfe subproblems
289 - "decomposition_toolbox" creates an empty decomposition (and modify afterwards)
290 - "write alloriginaldecompositions": write all known original decompositions to files (format is given by file extension, e.g. {dec,blk,ref,gp,tex})
291 - "write allpresolveddecompositions": write all known presolved decompositions to files (format is given by file extension, e.g. {dec,blk,ref,gp,tex})
292 - "write familytree": experimental feature, write all (partial) decompositions contained in family tree to files (.gp/.tex) and create family tree file (.tex), and corresponding makefile and docu
293 - "write reportdecompositions":experimental feature, write report of all finished decompositions to LaTeX format
294 - "set detection addblocknr": add candidates for the number of blocks (as a white space separated list)
295 
296 
297 Deleted and modified parameters
298 --------------------------------
299 
300 - modified parameter "detectors/∗/priority" (detection was aborted if high priority detector was successful)
301 
302 
303 New/changed parameters
304 -----------------------
305 
306 - new parameter "constraints/decomp/createbasicdecomp" indicates whether to create a decomposition with all constraints in the master if no other specified (useful to have included comparison)
307 - new parameter "detection/aggregation/limitnconssperblock" if this limit on the number of constraints of a block is exceeded the aggregation information for this block is not calculated
308 - new parameter "detection/aggregation/limitnvarsperblock" if this limit on the number of variables of a block is exceeded the aggregation information for this block is not calculated
309 - new parameter "detection/allowclassifierduplicates/enabled" indicates whether classifier duplicates are allowed (for statistical reasons)
310 - new parameter "detection/benders/enabled" indicates whether benders detection is enabled
311 - new parameter "detection/benders/onlybinmaster" indicates whether only decompositions with only binary variables in the master should be searched if benders detection is enabled
312 - new parameter "detection/benders/onlycontsubpr" indicates whether only decompositions with only continiuous variables in the subproblems should be searched if benders detection is enabled
313 - new parameter "detection/consclassifier/∗/enabled" indicates whether corresponding constraint classifier is enabled
314 - new parameter "detection/consclassifier/∗/origenabled" indicates whether corresponding constraint classifier is enabled for original problem (no effect if "detection/origprob/classificationenabled" is FALSE )
315 - new parameter "detection/legacymode/enabled" indicates whether detection should additionally do legacy mode detection (detection of version 2.1.4)
316 - new parameter "detection/legacymode/onlylegacymode" indicates whether detection should only consist of legacy mode detection
317 - new parameter "detection/maxnclassesfornblockcandidates" to specify the maximum number of classes per classifier (if this number is exceeed two smallest classes are merged until it is reached, both classifier are kept)
318 - new parameter "detection/maxnclassesperclassifier" to specify the maximum number of classes per classifier (if this number is exceeed two smallest classes are merged until it is reached, both classifier are kept)
319 - new parameter "detection/maxnclassesperclassifierforlargeprobs" same as "detection/maxnclassesperclassifier" but only for larger problems (atm with nvars + nconss >= 50000)
320 - new parameter "detection/maxrounds" to specifiy the number of refinement rounds during detection
321 
322 - new parameter "detection/origprob/classificationenabled" indicates whether constraint and variable classification is also enabeled for opriginal problem
323 - new parameter "detection/origprob/enabled" indicates whether to detect structures in original problem found decomps are tried to translate to transformed problem; only useful if presolving is enabled
324 - new parameter "detection/origprob/weightinggpresolvedoriginaldecomps" weighting method when comparing decompositions for presolved and unpresolved problem: 0: NO_MODIF, 1: FRACTION_OF_NNONZEROS, 2: FRACTION_OF_NROWS, 3: FAVOUR_PRESOLVED
325 - new parameter "detection/scoretype" indicates which score should be used for comparing (partial) decompositions (0: max white, 1: border area, 2: classic, 3: max foreseeing white, 4: ppc-max-white, 5: max foreseeing white with aggregation info, 6: ppc-max-white with aggregation info, 7: experimental benders score)
326 - new parameter "detection/detectors/∗/enabled" is this detector enabled when detecting in the transformed problem
327 - new parameter "detection/detectors/∗/finishingenabled" is this detector enabled when finishing partial decompsositions in the original and transformed problem
328 - new parameter "detection/detectors/∗/freqcallround" frequency the detector gets called in detection loop ,ie it is called in round r if and only if mincallround <= r <= maxcallround AND (r - mincallround) mod freqCallRound == 0
329 - new paramater "detection/detectors/∗/legacymode" flag to indicate whether (old) DETECTSTRUCTURE method of detector should be used
330 - new parameter "detection/detectors/∗/maxcallround" maximum round the detector gets called in detection loop
331 - new parameter "detection/detectors/∗/mincallround" minimum round the detector gets called in detection loop
332 - new parameter "detection/detectors/∗/origenabled" is this detector enabled when detecting in the original problem (overruled by "detection/origprob/enabled" )
333 - new parameter "detection/detectors/∗/origfreqcallround" same as "detectors/∗/freqcallround" for original problem
334 - new parameter "detection/detectors/∗/origmaxcallround" same as "detectors/∗/maxcallround" for original problem
335 - new parameter "detection/detectors/∗/origmincallround" same as "detectors/∗/mincallround" for original problem
336 - new parameter "detection/detectors/∗/overruleemphasis" flag to indicate whether emphasis settings for detector <%s> should be overruled by normal settings
337 - new parameter "detection/detectors/∗/postprocessingenabled" is this detector enabled when postprocessing in the original and the transformed problem
338 - new parameter "detection/detectors/∗/usefulrecall" indicates whether this detector is called on descendants of a partial decomposition
339 - new parameter "detection/detectors/connectedbase/useconssadj" should the constraint adjacency datastructure be used (and not the constraint-variable-incidency)
340 - new parameter "detection/detectors/{hrgpartition,hrcgpartition,hcgpartition}/maxnblockcandidates" the maximal number of block number candidates that is used by this detector
341 - new parameter "detection/strong_detection/coeffactororigvsrandom": convex coefficient for original dual values (1-this is factor for random dual value)
342 - new parameter "detection/strong_detection/dualvalrandommethod": method for random dual values use for strong decomposition: 1) naive, 2) expected equality exponential distributed, 3) expected overestimation exponential distributed
343 - new parameter "detection/varclassifier/∗/enabled" indicates whether corresponding variable classifier is enabled
344 - new parameter "detection/varclassifier/∗/origenabled" indicates whether corresponding variable classifier is enabled for original problem (no effect if "detection/origprob/classificationenabled" is FALSE
345 
346 
347 - new parameters "pricing/masterpricer/maxcolsprob*" limit number of columns to be generated per pricing problem
348 - new parameter "pricing/masterpricer/heurpricingiters" replaces old parameter "pricing/masterpricer/heurpricing" and sets maximum number of heuristic pricing rounds within the pricing loop
349 - new parameter "pricing/masterpricer/maxheurdepth" limits maximum depth in the b&b tree at which heuristic pricing is performed
350 - changed parameter "pricing/masterpricer/sorting" to type 'char' and add an option to sort by reliability based only on the last few rounds
351 - new parameter "pricing/masterpricer/nroundscol" sets the number of pricing rounds considered in that case
352 - new parameter "pricing/masterpricer/chunksize" sets the size of the subset ('chunk') of pricing problems to be considered in a pricing round
353 - new parameter "pricing/masterpricer/stabilizationtree" to enable or disable stabilization beyond the root node
354 - new parameter "pricing/masterpricer/useartificualvars" to use artificial variables to make the RMP feasible
355 - new parameter "pricing/masterpricer/bigmartificial" to set big M objective of artificial variables
356 - new parameter "pricing/masterpricer/factorunreliable" to set factor to be used for the objective of unbounded variables
357 - new parameter "pricing/masterpricer/usemaxobj" to limit big M objective of artificial variables
358 
359 - new parameter "relaxing/gcg/mode" is used to set the the Dantzig-Wolfe or Benders' decomposition mode of GCG.
360 
361 - new parameter "set/visual/colorscheme" sets the color scheme of visualizations produced by the gp and tex reader
362 - new parameter "set/visual/draftmode" sets whether nonzeros are shown in visualizations produced by the gp and tex reader
363 - new parameter "set/visual/nonzeroradius" sets the radius of nonzeros in visualizations produced by the gp and tex reader
364 - new parameter "set/visual/pdfreader" sets a PDF reader that is used for opening visualizations
365 - new parameter "set/visual/nmaxdecompstowrite" sets maximum number of decompositions to write
366 - new parameter "set/visual/colors/colorblock" sets color for blocks in visualizations produced by the gp and tex reader
367 - new parameter "set/visual/colors/colorlines" sets color for lines in visualizations produced by the gp and tex reader
368 - new parameter "set/visual/colors/colorlinking" sets color for linking variables in visualizations produced by the gp and tex reader
369 - new parameter "set/visual/colors/colormasterconss" sets color for master constraints in visualizations produced by the gp and tex reader
370 - new parameter "set/visual/colors/colormastervars" sets color for master variables in visualizations produced by the gp and tex reader
371 - new parameter "set/visual/colors/colornonzeros" sets color for nonzeros in visualizations produced by the gp and tex reader
372 - new parameter "set/visual/colors/coloropen" sets color for open areas in visualizations produced by the gp and tex reader
373 - new parameter "set/visual/colors/colorstairlinking" sets color for stairlinking variables in visualizations produced by the gp and tex reader
374 - new parameter "set/visual/famtree/maxndecomps" sets maximum number of finished decompositions in family tree
375 - new parameter "set/visual/report/maxndecomps" sets maximum number of decompositions shown in report
376 - new parameter "set/visual/report/showstatistics" sets whether statistics for each decomposition are included in report
377 - new parameter "set/visual/report/showtitle" sets whether a title page is included in report
378 - new parameter "set/visual/report/showtoc" sets whether a table of contents is included in report
379 - new parameter "set/visual/report/showtype" sets whether only decompositions of a certain type are included in report
380 - new parameter "set/visual/report/usegp" sets whether the report uses gnuplot or LaTeX/Tikz images in report
381 
382 Code cleanup
383 ------------
384 
385 - use SCIP_STATISTIC for pricing statistics and add compiler flag STATISTICS; if STATISTICS is set to true,
386  SCIP_STATISTIC will be defined
387 - add parameter in basis separator specifying the emphasis setting used for separation in probing; remove unnecessary
388  distinctions on objective direction
389 - introduce new module solver.c for managing pricing solvers, to be compliant to how SCIP plugins are designed
390 - re-structured solver_mip
391 
392 Bug fixes
393 ---------
394 - fix a bug in the automatic update of the stabilization parameter alpha
395 - fix issue with pricing problem initialization in CPLEX pricing solver
396 - fix detection of knapsack subproblems in knapsack pricing solver by also accepting negative weights
397 - fix memory management in set covering heuristic
398 - fix a bug in GCG feasibility pump concerning wrong SCIP instances.
399 
400 @page RN21 Release notes for GCG 2.1
401 @section RN214 GCG 2.1.4
402 *************************
403 
404 - use SCIPaddRow() instead of deprecated SCIPaddCut()
405 
406 @section RN213 GCG 2.1.3
407 *************************
408 
409 - changed interface to SCIP 5.0.0
410 
411 bug fixes
412 - fix memory bug in original diving event handler
413 - fix memory bug in DECdecompRemoveDeletedConss
414 - fix bugs in check script
415 - fix bug in checking if master is a set partitioning problem
416 - implement enforelax callbacks
417 - diving heuristics and branching rules compute fractionalities by themselves
418 
419 
420 @section RN212 GCG 2.1.2
421 *************************
422 
423 - changed interface to SCIP 4.0.0
424 
425 code cleanup
426 - cleanup for extreme point heuristics, moved code to own methods, added comments, remove redundant parameters
427 - reallocate memory for origvars array in pricingvardate more efficiently
428 - reallocate memory for original variable array in pricing variable data more efficiently
429 - reorder permutations in isomorph detector according to orbit size and add maxdecomps parameter
430 
431 bug fixes
432 - changed/corrected variable fixing behaviour of Extreme Point RINS in case of aggregated blocks
433 - fixed handling of fixed variables in decompositions
434 - update include method of solver template
435 - fix GCGconsGet*() methods such that negated variables are handled correctly
436 - fix bug in transformation of master solution to original solution
437 - small bugfix in method that creates column graph from matrix
438 - fixed memory errors in unit tests
439 - fix memory issue with GCG_COL's
440 - fix the deletion of old columns in the column pool
441 - fix propagation of original variable bounds to the pricing problems:
442  propapagte bounds only if identical variables have the same bounds,
443  throw an error message otherwise
444 - in case of global bound changes on original variables, check if the current relaxation
445  solution satisfies the new bound, and mark it invalid if not
446 - stop the reduced cost pricing clock correctly
447 - free redundant decompositions correctly
448 - fix identity check of decompositions
449 - fix bug in createPolishedDecomp()
450 - fix bug in isomorph detector
451 - avoid numerical troubles by rounding integral pricing solutions if possible
452 
453 
454 @section RN211 GCG 2.1.1
455 *************************
456 
457 code cleanup
458 - simplified logic when assigning variables to blocks
459 
460 bug fixes
461 - use only one hashmap when initializing pricing problems
462 - small bugfix in set covering heuristic
463 - fixed a bug in original variable diving heuristics
464 - fixed a time limit issue concerning the master problem that was introduced by the SCIP reoptimization feature
465 - reorganized detector callbacks and thus fixed memory leaks when reading a new instance
466 - fixed memory allocation in basis separator
467 
468 @section RN210 GCG 2.1.0
469 *************************
470 
471 features
472 - column pool
473 - new set covering heuristic
474 - basis cuts separator
475 - numerical tolerances of the original problem are used in the master and pricing problems
476 - new compiler flag CPLEXSOLVER to solve pricing problems with CPLEX
477 
478 code cleanup
479 - re-organized constraint handlers for managing branching decisions in original and master problems
480 - simplified code and reduced memory consumption in cutpacking detector
481 
482 bug fixes
483 - GCG columns are freed correctly in the pricer
484 
485 @page RN20 Release notes for GCG 2.0
486 @section RN201 GCG 2.0.1
487 *************************
488 
489 features
490 - decomposition and pricing problems are permuted when the permutation
491  seed is set
492 - progress in dual bound is now displayed while solving the root node
493 - pricing solvers can be enabled or disabled via parameter
494 - display blocks found for decomposition in statistics
495 - new boundtype for fixed original variables due to branching
496 - use new GCG column structure instead SCIP solution structure in pricing
497 
498 code cleanup
499 - simplify code in generic branching
500 - structure of method branchVar()
501 
502 bug fixes
503 - fix bugs concerning stabilization
504 - disable stabilization when linking variables or variables belonging to no block are present
505 - CPLEX pricing solver is disabled as it is incompatible with generic branching
506 - fix memory issues
507 - fix bound propagation bugs
508 - fix bug in knapsack solver
509 - delete constraints added at presolving after the root node
510 - check feasibility of current solution in original problem if this fails in the transformed problem
511 - fix wrong aggregation when using bliss
512 - print warnings when pricing is aborted
513 - fix translation of original solution to master problem when pricing problems are aggregated
514 - better handling of infinite objective values in pricing
515 
516 @section RN200 GCG 2.0
517 *************************
518 features
519 - GCG can now automatically create a decomposition to solve the LP with
520  empty pricing problems. See the cons/decomp/createbasicdecomp parameter
521 - GCG can aggregate pricing problems using bliss which enables us to
522  aggregate more pricing problems
523 - GCG can solve pricing problems in parallel
524 - GCG uses dual variable smoothing to stabilize dual values
525 - GCG can branch on integer aggregated problems using Vanderbeck's general
526  branching rule
527 - GCG can solve integer knapsack problems as a dynamic program
528 - GCG features additional detectors which are able to detect significantly
529  more structures such as staircase structures and problems that can be
530  aggregated
531 - improved heuristics
532 - copy solutions from original problem to master problem
533 - improved handling of compile flags changes such as an automatic
534  recompilation if, e.g., USRFLAGS change
535 - new solver for pricing problems that uses CPLEX to solve the MIP
536  (enabled if LPS=cpx)
537 
538 code cleanup
539 - moved some detection methods to a more global scope to make them reusable
540 - added testing framework to do regression testing (uses google test)
541 - extracted graph methods for reuse
542 - branching is now done in the master problem
543 - remove code that was never called
544 - Rename methods in order to state their intention
545 - provide a gcg.h file to easily use the most common methods
546 
547 bug fixes
548 - memory allocation bugs
549 - bound change propagation fixes
550 - corrected copyright
551 - fixed a lot of code checker issues
552 - use an event handler to disable the master display
553 - override PARASCIP=true if OPENMP=true
554 - correct decomp documentation and simplify decomposition interfaces
555 
556 @page RN11 Release notes for GCG 1.1
557 @section RN110 GCG 1.1
558 *************************
559 features
560 - add staircase structure information
561 - add staircase structure detection
562 - the set partitioning detector can create decompositions with one block
563 - GCG is now separated in a library and a main file so that you can link
564  against it
565 
566 bug fixes
567 - decompositions are now correctly classified
568 - clean up lots of errors related to inconsistent decompositions
569 - safe handling of empty problems
570 - fix detection of identical pricingproblems for aggregation
571 
572 code cleanup
573 - use DECfilloutDecdecompFromHashmaps where appropriate to remove redundant
574  code
575 - Provide DECfillOutFromConstoblock to enable creation of decomposition
576  structures by just specifying constraint to block partition
577 - Add consistency check function for decompositions
578 - removed a bit of redundant and leftover code
579 
580 @page RN10 Release notes for GCG 1.0
581 @section RN100 GCG 1.0
582 *************************
583 features
584 - include variable deletion code
585 - add a block diagonal detector (cons_connected)
586 - add a new default constraint based decomposition format with reader (dec)
587 - added new heuristics gcgrins and xprins
588 - decompositions from multiple detectors are compared in cons_decomp.h
589 - added block diagonal detection code, GCG solves these more intelligently
590 - added detection of standard problems to block detection code
591 - add additional statistics
592 - structure information can now contain presolving information
593 - GCG works with SCIP version 3.0
594 
595 plugins
596 - reworked decdecomp structure handling
597 - merge recent SCIP heuristic changes to their GCG counterparts
598 
599 bug fixes
600 - try to deal with the time limit of the master by looping until the
601  original instance hits the time limit
602 - try to avoid infeasible problems if the timelimit is hit during farkas
603  pricing
604 - fix bugs related to copying master solutions to the original problem
605 - fix bugs where solutions are not correctly freed
606 - fix bug: heuristics that use SCIPcopy really create a working copy
607 - fix propagation bugs
608 - fix issues with empty problems and problems solved in the root node
609 - rewrite relaxcolsel heuristic
610 - moved probing methods to relax_gcg.c and fixed heuristics to use them
611 - fix a vardata creation bug
612 - copy cuts in LNS heuristics correctly
613 - fixed bugs related to presolving
614 - fixed bugs related to linking variables
615 - fixed bugs in Ryan-Foster branching
616 - fix some memory issues
617 
618 code cleanup
619 - updated the documentation
620 - cleaned up code (whitespace and code style changes)
621 - removed all vardata accesses from all files
622 - removed a lot of old code
623 - remove dead code and give the code some love
624 - refactored some parts to remove large methods
625 - cleaned up detector interface
626 - make sure code is clean with all our compilers and code checking tools
627 
628 performance
629 - adjusted default parameters
630 - improve memory handling by switching to buffer memory in appropriate cases
631  and away from buffer in others
632 
633 interface
634 - make githash look nicer
635 - nicer decomposition output
636 
637 Makefile and scripts
638 - add lint directory for static code analysis
639 - add SCIP target to makefile
640 - fix scripts for RWTH Aachens high performing cluster
641 - add possibility to create SCIP link automatically
642 - add small testset to enable small functionality tests
643 - add some modes to test script in order to create and collect
644  decompositions
645 - fix clean rule to a safer version
646 
647 
648 @page RN09 Release notes for GCG 0.9
649 @section RN090 GCG 0.9
650 *************************
651 features
652 - included new heuristics
653 - included new reader for the ref file format
654 - added support for linking variables
655 - added generalized reliability branching using probing
656 - added constraint handler to enforce integral original variables
657 - allow for unbounded pricing problems
658 - branch also on pseudosolutions
659 - support probing for heuristics
660 - GCG works with SCIP version 2.0
661 
662 bug fixes
663 - fixed multiple bugs related to timing issues
664 - fixed bugs related to working with the presolved problem
665 
666 interface
667 - allow master to be accessed from the command line interface
668 - Change branding in interactive SHELL, display version and githash
669 - added more extensive test framework
670 - added gnuplot visualization reader
671 - added much more extensive documentation
672 
673 
674 @page RN08 Release notes for GCG 0.8
675 @section RN081 GCG 0.8.1
676 *************************
677 features
678 - polished source code
679 
680 bug fixes
681 - some
682 
683 
684 @section RN080 GCG 0.8
685 *************************
686 bugfixes
687 - fixed some bugs for solving MIPs when branching on variables that were
688  directly transferred to the master problem
689 
690 @page RN07 Release notes for GCG 0.7
691 @section RN070 GCG 0.7
692 *************************
693 bugfixes
694 - some bugfixes
695 
696 @page RN06 Release notes for GCG 0.6
697 @section RN060 GCG 0.6
698 *************************
699 feastures
700 - implemented dialog handler for GCG
701 - added concept of pricing solvers
702 - statistics about pricing are displayed at the end of solving
703 
704 bugfixes
705 - quite a few
706 
707 @page RN05 Release notes for GCG 0.5
708 @section RN050 GCG 0.5
709 *************************
710 bugfixes
711 - fixed problems with transfering bounds from the original program to the
712  master program: when propagating a node, the bounds of all variables in
713  the pricing problem and variables copied to the master are adjusted, for
714  all master variables created by the pricer, it is checked whether they
715  fulfill the current bounds
716 - fixed bug when disabling discretization approach
717 
718 @page RN04 Release notes for GCG 0.4
719 @section RN040 GCG 0.4
720 *************************
721 design
722 - working SCIP represents the original problem
723 - read in problem is standard format (e.g., .lp-file, .mps-file) and
724  corresponding blk-file
725 - the master problem is represented by a relaxator, which replaces the LP-solving
726 - separation is done by a separator included in the master SCIP, which calls the
727  SCIPseparateSol() method in the original SCIP
728 - branching is done simultaneously in the master and in the original SCIP
729 - variables in the master are extreme points of conv(X) (and extreme rays, but
730  functionality currently not implemented) -> convexification approach
731 - many identical pricing problems -> fat too much effort for pricing,
732  especially farkas pricing!
733 - 2 constraint handler assure that nodes in the master SCIP are linked to
734  nodes in the original SCIP and vice versa
735 - branching rules are implemented as branching rules in the master that
736  have to define the additional callbacks specified in "type_branchgcg.h"
737 
738 features
739 - in blk-file constraints can be forced to be copied to the master problem;
740  all other constraints are added to a block, if they only contain variables
741  of this block
742 - added possibility to use discretization approach, variables in the
743  master then represent integer points in X, integrality in the master is
744  demanded
745 - identification of identical blocks -> break symmetrie in the master
746 - 2 branching rules implemented so far:
747  * branching on original variables (not possible if variable belongs to a
748  block that has similar blocks in the problem), using pseudocost values
749  to choose the variable to branch on
750  * ryan-foster type of branching for identical blocks with set partitioning
751  structure
752 - added GCGs own display plugin showing the number of LP iterations, of
753  constraints, variables and cuts in the master*/