9- fixed definition of slack variables of >= constraints and ranged rows in LP interface to Gurobi
10- free memory leaking singleton arrays for ignored variables in SCIPapplyHeurDualval()
11- use epsilon tolerance for bound implications of dual substitutions in dualPresolve() of cons_linear
12- fixed timeouts due to race conditions when using TPI=omp
13- fixed issues with indexing of concurrent solvers when a solver finishes (because SCIP is too fast) before others have been created when using TPI=tny
14- respect fixing if variable is declared binary in bounds section of mps file
15- fixed reading mps files with short row and column names and some fixed-form mps files with spaces in row names
16- force local bounds to adjusted value when fixing variable
17- adds missing NULL check for Benders' subproblems in feasalt cut
18- apply objective scale to pseudoboolean non-linear terms
19- impose pseudoboolean cost bound without intermediate casting
20- flatten aggregation graph before finishing presolve to accelerate evaluating an empty solution
21- respect fixed resultants in binvarGetActiveProbindex() of branch_relpscost
22- drop fixed resultants when copying pseudoboolean constraint
23- correct matrix entry when resolving aggregated variables in checkSystemGF2() of cons_xor
24- corrected symmetry detection graph of cons_and, cons_or, cons_xor, and cons_indicator
25- correct redundancy filter in consdataCreateRedundant() of cons_bounddisjunction
26- replaced unreliable comparison of node pointers by node numbers in prop_genvbounds
27- allocate memory for all integral variables in applyCliqueFixings() of heur_clique
28- fix conflict resolution for one particular case in cons_indicator
29- make interface to nauty thread safe
30- use relative epsilon tolerance to check Farkas row in SCIPlpGetDualfarkas() to avoid invalid cutoff
31- fixed bug with SOS2 constraints of size that avoided a correct enforcing
32
33Build system
34------------
35
36### Cmake
37
38- allow to set HIGHS_DIR via -D flag as well
39- reenable building and testing of SCFLP example
40- fixed that compiler flags for sanitizers were not used for compiling objects of SCIP library
41- prioritize local includes for unittests, examples, and applications to link the intended SCIP version
42- fix detection of Gurobi 11 and 12 libs on Linux
43
44### Makefile
45
46- fix use of SANITIZE=full for debug builds with GCC on Linux: removed -fsanitize=leak because it cannot be used together with -fsanitize=address
47- fix that make install SHARED=true missed to install libscipbase
48
49@section RN921 SCIP 9.2.1
50*************************
51
52Fixed bugs
53----------
54
55- apply same feasibility definition in PaPILO as in SCIP to avoid numerical inconsistencies
56- check variable cancellation in SCIPvarAddVlb() and SCIPvarAddVub() to avert wrong infeasibility
57- SCIPfreeReoptSolve() now also clears partial solutions
58- fixed bug in calculation of "fractionality score" for spatial branching candidates in cons_nonlinear
59- fixed bug with installing symmetry dialog in sub-SCIPs
60- added copy callbacks for presolvers dualagg and redvub, branching rules lookahead and cloud, primal heuristics dualval and repair, propagator nlobbt, and separators gauge and convexproj
61- respect maximal separation rounds setting by running remaining delayed separators in last round
62- replace terms consistently in applyFixings() of cons_linear to handle infinite aggregations
63
64Build system
65------------
66
67### Cmake
68
69- fix SCIP Optimization Suite build with -DSYM=(s)bliss and bliss being downloaded and built during configuration by cmake
70- fix use of a bliss cmake installation (from https://github.com/scipopt/bliss) specified via BLISS_DIR if -DSYM=(s)bliss
71
72### Makefile
73
74- the check/solchecker build can now use also GMP installations by Homebrew on macOS/arm64
75
76Miscellaneous
77-------------
78
79- the output precision for writing CIP/OPB files has been increased at several places for nonlinear constraints
80- the solchecker tool now also supports SCIP solutions without unknown or infinite values
81- generate an error if the same linear constraint is used by several indicator constraints
82
83@section RN920 SCIP 9.2.0
84*************************
85
86Features
87--------
88
89- added check for absolute and relative gap limits at end of synchronization in concurrent solving mode, in order to terminate earlier;
90 note that if the concurrent solve is stopped due to a gap limit, the "winner" solver will have an interrupted solution status and
91 its primal and dual bounds may not be the best possible ones (use SCIPgetConcurrentPrimalbound() and SCIPgetConcurrentDualbound() instead)
92- parse pseudoboolean constraint from CIP format (and add linear-"and"-reformulation)
93
94Performance improvements
95------------------------
96
97- reoptimization now also stores propagations from propagators if reoptimization/saveconsprop is enabled;
98 the parameter will be renamed to reoptimization/saveprop in a next major release
99- imposed stricter limits on the size of disconnected components which may be solved separately during presolve
100- use individual slack variables also for constraints indicated by a common binary variable to use tighter formulation by default
101- when computing symmetries using Nauty, iteration limits are now available to terminate Nauty early
102
103Fixed bugs
104----------
105
106- Benders' decomposition subproblems that are always infeasible are correctly handled and the complete problem is declared infeasible
107- skip linear constraint propagation if the residual activity bound cancels the side precision
108- correct bound tracking to make the evaluation of primal-dual-integrals work
109- skip aggregations on fixed variables in milp presolver to avoid errors for earlier versions of PaPILO
110- use indices of negation counterparts and accept fixings when ordering and-resultants of pseudoboolean constraints
111- update locks on model variables before removing pseudoboolean constraints in presolve
112- reformulate soft pseudoboolean constraints with linear constraints if the indicator decomposition is disabled
113- add workaround for recent HiGHS versions resetting the model status when changing the presolve option after a solve
114- avoid hashmap key error in removal of doubletons and singletons in dual presolve of setppc constraints by updating constraints and corresponding hashmaps after each multi-aggregation
115
116Interface changes
117-----------------
118
119### New API functions
120
121- added SCIPtpiIsAvailable() to check whether a working task processing interface is available (TPI != none)
122- added SCIPtpiGetLibraryName() and SCIPtpiGetLibraryDesc()
123- SCIPdelCons() can now also be called in SCIP_STAGE_TRANSFORMED
124- added SCIPstrcasecmp() and SCIPstrncasecmp() for case-insensitive string comparison
125- added SCIPbendersSubproblemsAreInfeasible() to return if at least one subproblem has been identified as being
126 infeasible prior to performing any variable fixing
127
128### New parameters
129
130- presolving/milp/abortfacexhaustive to control the abort threshold for exhaustive presolving in PAPILO
131- presolving/milp/abortfacmedium to control the abort threshold for medium presolving in PAPILO
132- presolving/milp/abortfacfast to control the abort threshold for fast presolving in PAPILO
133- constraints/components/maxcompweight to determine the maximum weight for a disconnected component that is solved during presolve
134- constraints/components/contfactor counts the contributing factor of a single continuous variables with respect to the weight limit specified by constraints/components/maxcompweight
135- constraints/indicator/usesameslackvar to decide whether the same slack variable should be used for indicators constraints with common binary variable
136- propagating/symmetry/nautymaxncells and propagating/symmetry/nautymaxnnodes to set iteration limits in Nauty (only available if build with SYM=nauty or SYM=snauty)
137
138### Changed parameters
139
140- presolving/milp/threads is now only available if PaPILO is built with TBB
141- changed default of numerics/recomputefac to 1e+6 to aim at relative epsilon precision
142
143Build system
144------------
145
146### Cmake
147
148- attempted to fix detection of CPLEX library on macOS and Windows systems
149
150Testing
151-------
152
153- added parameter FILTER for tests/Makefile to run only tests with a specific pattern (ctest with -R FILTER)
154
155Miscellaneous
156-------------
157
158- adjusted Gurobi interface for Gurobi 12
159- reordered events: BESTSOLFOUND/NODE_FEASIBLE are now processed before the nodes are cut off and before NODE_DELETE events are processed
160- removed `#define` of `getcwd` (in case of Windows builds) in scip/def.h
161- the `#define` of `strcasecmp` and `strncasecmp` (in case of Windows builds) in scip/def.h will be removed with SCIP 10;
162 use `SCIPstr(n)casecmp()` (scip/pub_misc.h) instead
163
164@section RN911 SCIP 9.1.1
165*************************
166
167Fixed bugs
168----------
169
170- fix bug in separator aggregation that caused incorrect terminations when for an integral objective the objective limit was set to a fractional value
171- fix bug in memory management of doublelex matrices where indices were set beyond array bounds
172- store relevance flags in consdataTightenCoefs() of cons_linear.c to avoid dropping variables unintentionally due to numerical changes
173- fix possible segmentation fault when resetting local and global bounds of original variables after abnormal termination
174- compare coefficient scales to detect parallelism to avoid integral relaxations in detectRedundantConstraints() of cons_linear.c
175- remove coefficient information from linear constraint hashes in order to compare keys with tolerances
176- fixed NULL pointer dereference in SCIPtpiGetNumThreads() of TinyCThread interface if called before SCIPtpiInit(); now returns 0 in this case
177- calling SCIPsolveConcurrent() when SCIP was compiled without a TPI now results in a plugin-not-found error
178- fixed LPI status functions of lpi_cpx if the barrier is called
179- check cuts for redundancy after scaling in cutTightenCoefs() and cutTightenCoefsQuad() of cuts.c
180- maintain definition of artificial integral variables in xor constraints to avoid invalidation of conflict constraints
181- free childless nodes only after the deactivation of the old focus path in treeSwitchPath() of tree.c
182- only normalize rows for column norm evaluations in shift-and-propagate heuristic to avoid unscaled violations
183- expression handler for absolute value computes now also a cut when one of the bounds is infinite as long as the sign of the argument is known
184- check for more data to be freed before modifying nonlinear constraints in SCIPaddExprNonlinear()
185- allow for terms with zero coefficients when checking sum in SCIPexprCheckQuadratic()
186- do not abort writing of constraints to lp/pip files (and forget to free buffer memory) when encountering unsupported nonlinear constraint
187- fixed that strings with names and descriptions of the LPI's were not null-terminated
188- fixed decision on when to enforce nonlinear constraints on relaxation solutions if integer variables are present
189- fixed reading of very long lines (>78000 characters) in FlatZinc reader
190- fixed write of strings with at least 1024 characters when compiling with MSVS 2015 (14.0) or later (still an issue with earlier MSVS, which will not be fixed)
191- keep epsilon coefficients in applyFixings() of cons_linear.c until multiples are merged to avoid loss of relevant contributions
192- fixed that some variable type changes were not accounted correctly in presolve of linear constraints
193- fix constraint sorting in setpp-orbitope upgrade in symmetry code
194- fixed that SCIPnodeGetConsProps() also counted bound changes from propagators
195- use original and-constraints of an untransformed pseudoboolean constraint when copying original problems to avert segmentation faults
196- sort and-constraints of a pseudoboolean constraint with respect to the resultant problem indices to avoid shuffled copies
197- treat pseudoboolean constraints as nonlinear constraints in OPB reader to prevent duplication mistakes
198
199Examples and applications
200-------------------------
201
202- in example Binpacking implement Farkas pricing for packings because branching can actually lead to infeasible restricted master LPs
203
204Testing
205-------
206
207- allow unknown parameters to let tests pass if only optional dependencies are missing
208
209Build system
210------------
211
212### Cmake
213
214- fixed compilation and linking with HiGHS; to use HiGHS, cmake now requires to specify the directory containing the `highs-config.cmake` file via `-DHIGHS_DIR`
215- extended identification of Ipopt library on Windows to also look for ipopt.dll.lib, as this is used since Ipopt 3.13.0 (2019)
216
217
218@section RN910 SCIP 9.1.0
219*************************
220
221Features
222--------
223
224- added constraint handler that checks and enforces bounds on original variables which have been fixed or aggregated in the transformed problem
225- allow for implicit integer variables in xor constraints
226- implemented symmetry detection callbacks for pseudoboolean constraints
227- added option to consider enforcement of nonlinear constraints (including spatial branching) before integrality has been enforced
228
229Fixed bugs
230----------
231
232- make sure that, in dual proof analysis, upgraded constraints can report their number of variables
233- check knapsack constraints as linear constraints to avoid violations based on implicit integrality
234- make sure that symmetry detection callbacks report success
235- make arithmetics in cuts.c more robust to avoid invalid scg cuts due to numerical rounding sensitivity
236- allow to copy pseudoboolean constraints even if no AND constraints are present in order to avoid a warning
237- set value for variable that is introduced to reformulate nonlinear objective function when reading .nl files with initial solution
238- fixed that multi-aggregations from PaPILO were accepted without ensuring that their bounds hold
239
240Examples and applications
241-------------------------
242
243- TSP: removed `gzstream.h/hpp` and parse gzipped files differently
244
245Interface changes
246-----------------
247
248### New callbacks
249
250- SCIP_DECL_NLHDLRENFO takes additional parameter branchcandonly to indicate whether only branching candidates should be registered,
251 without looking for cuts or boundchanges
252
253### New API functions
254
255- new function SCIPgetExprActivityNonlinear() to get activity of nonlinear constraint
256- new function SCIPincludeConshdlrFixedvar() to include new constraint handler that checks bounds on fixed original variables
257
258### New parameters
259
260- limits/primal to terminate the solve as soon as the primal bound is at least as good as this value, same as limits/objectivestop (deprecated)
261- limits/dual to terminate the solve as soon as the dual bound is at least as good as this value
262- presolving/milp/internalmaxrounds to control the maximal rounds for each call of the milp presolver (PaPILO)
263- constraints/fixedvar/∗ to control the new constraint handler that checks bounds on fixed original variables
264- constraints/nonlinear/branching/mixfractional to specify minimal average pseudo cost count for discrete variables
265 at which to start considering spatial branching before branching on fractional integer variables
266 (default infinity means that integrality is always enforced before nonlinear constraints)
267- constraints/nonlinear/branching/fracweight to specify weight of fractionality of integer variables in spatial branching
268
269### New data structures
270
271- enum SCIP_Status has been extended by SCIP_STATUS_PRIMALLIMIT and SCIP_STATUS_DUALLIMIT to indicate termination at limits/primal and limits/dual respectively
272
273Build system
274------------
275
276- changed the default symmetry computation package from sassy+bliss to sassy+nauty
277- bliss source is no longer included in the source tree, but can be linked as external library (https://github.com/ds4dm/Bliss)
278- cmake now automatically downloads and installs the latest release version of SoPlex from GitHub if it is not found directly
279
280Miscellaneous
281-------------
282
283- updated nauty to version 2.8.8
284
285
286@section RN901 SCIP 9.0.1
287*************************
288
289Fixed bugs
290----------
291
292- fixed bug in detection of double lex matrices due to wrong memory allocation
293- fixed bug where parameter `limits/objectivestop` was copied to subscips in plugins which have different objectives
294- in count mode respect empty solution when problem is solved in presolving
295- fixed that SCIP may have tried to pass a negative random seed to an LP solver
296- fixed bug where conflict analysis in strong branching tried to analyze an unsuccessful LP solve
297- enable parameter limits/restarts by allowing to reach the restart limit in restartAllowed()
298- handle normalizing linear constraints in presolving with more caution to avoid numerical difficulties for integer variables with large coefficients
299- use quad precision to calculate residual activity bounds to reduce numerical errors for large variable bounds in cons_linear.c
300- in SCIPsolveProbingLP() when objective has been changed do not return cutoff due to exceeding the cutoff bound
301- set probing LP to be a relaxation only when objective has not been changed
302- declare contradicting infinities in getMinActivity() and getMaxActivity() as non-tight
303- reject farkas solution with large values to bound magnification of errors in SCIPgetFarkasProof()
304- if all variables are fixed, apply relative feasibility tolerance to avoid invalid infeasibility in applyFixings() of cons_linear.c
305- delete empty redundant knapsack and linear constraints after cleanup in SCIPmatrixCreate()
306- cleanup first constraints in SCIPcleanupConssVarbound(), SCIPcleanupConssSetppc(), and SCIPcleanupConssLogicor()
307- symmetry handling methods have not been added immediately after computing symmetries, which has been fixed
308- delay checking node limits after presolving to correctly continue up to the exceeding main node
309- simplified the objective sense assumption for the subproblems in the Lagromory separator
310- update effective root depth iteratively to avoid trapping it at a single child node
311- fixed that dualsparsify presolver did not always check do-not-multiaggregate variable flag
312- fixed bug in computing elements of orbits in orbital reduction
313
314Miscellaneous
315-------------
316
317- redefine isrelax to istight in cons_linear.c
318
319Build system
320------------
321
322### Cmake
323
324- A file cmake.log containing the changed options is written to the cmake build directory.
325- removed replacement of the settings of RelWithDebInfo
326- add compile option -ffp-contract=off or /fp:precise to enhance reproducibility across different systems
327
328### Makefile
329
330- add flags -ffp-contract=off and /fp:precise to enhance reproducibility across different systems
331
332Interface changes
333-----------------
334
335### New parameters
336
337- added parameter "propagating/symmetry/symtiming" to determine when symmetries are computed and handled
338
339### Changed parameters
340
341- Disabled "propagating/symmetry/addconsstiming" since it is not used anymore.
342- Disabled "propagating/symmetry/ofsymcomptiming" since it is not used anymore.
343
344@section RN900 SCIP 9.0.0
345*************************
346
347Features
348--------
349
350- added simplification of abs(x)^n to x^n when n is even (simplify rule POW12)
351- in expression simplification, added possibility to expand power of sum with exponents larger than 2 (simplify rule POW7)
352- in expression simplification, added possibility to expand products with sums as factor when there are more than two factors (simplify rule SP12b)
353- in expression simplification, added possibility to allow expanding power of products with fractional exponent (simplify rule POW5a)
354- can now build with Lapack (used for solving nonlinear problems) explicitly; if IPOPT is used, then Lapack is accessed through it;
355 an interface to Lapack is available in lapack_calls.h
356- added support for logical constraints in binary variables and basic logical operators (and, or, not, equal) to AMPL .nl reader
357- indicator constraints now use the same slack variable for the linear constraints if binary variables are used multiple times
358 for indicator constraints
359- new diving heuristic indicatordiving that focuses on indicator variables which control semicontinuous variables
360- updated statistics on NLP relaxation; information on convexity of NLP has been added
361- added new bandit method (EXP.3-IX) that is the new default of the ALNS heuristic
362- added dialog to display recognized permutation symmetries ("display symmetry")
363- The symmetry detection code has been completely restructured. Instead of completely encoding symmetry information in
364 prop_symmetry.c, there is a new callback for constraint handlers, which returns symmetry relevant information by
365 encoding a constraint as a node and edge colored graph. This way, also custom constraint handlers can provide
366 symmetry information.
367- added special presolving step for logicor and set covering/packing for constraints with two variables and one independent variable
368- increased the depth field of the tree structure from 16 to 30 bits and the max depth of the search tree from 65534 to 1073741822
369- added new cut selector plugin called cutsel_ensemble. Performs a superset of hybrid cutsel. Implements new filtering methods and scoring options.
370- added new branching rule based on Gomory mixed-integer cuts
371- added new branching score to the reliability pseudo-cost branching rule
372- added new cut selector plugin called cutsel_dynamic. Performs a superset of hybrid cutsel. Implements new filtering methods and scoring options.
373- added monoidal strengthening to intersection cut generation of nlhdlr_quadratic
374- extended heuristic dps to run after processing the node and to use strict limits for the reoptimization step
375- extended obbt propagator to handle variables of the linear constraints corresponding to indicator constraints
376- added new heuristic heur_scheduler that models the selection of LNS and diving heuristics as a multi-armed bandit problem
377- added nonlinear handler for signomial expressions: adds cuts based on a difference of convex functions representation
378- Delayed separators are now called if no other cuts have been found. Previously, such separators were only called near stalling or when the separation rounds limit was reached.
379- added a new separator sepa_lagromory to generate Lagromory cuts in a relax-and-cut framework, i.e., GMI cuts generated
380 at different bases that are explored in the process of solving the Lagrangian dual problem at a node. This separator
381 is OFF by default.
382- when parsing nonlinear constraints from CIP files, the * after the number in a term is now optional if followed by a variable,
383 i.e., instead of 3*<x>*<y>, now also 3<x>*<y> can be read, but 3<x><y> is not supported;
384 this allows to read some CIP files that were written with SCIP < 8
385- when running bliss, we now limit the number of actually created generators and not the ones considered by bliss
386
387Performance improvements
388------------------------
389
390- Variable conflict-based addition of Schreier-Sims cuts for symmetry handling in prop_symmetry.c does no longer use
391 an expensive explicit conflict graph construction.
392- Only run propagation of indicator constraints if relevant variables have changed.
393- Propagation of indicator constraints propagates maximal activity of linear constraint to upper bound of slack variable.
394- Added initialization of LP relaxation for SOC constraints.
395- Avoided some numerical issues when separating SOC constraints.
396- If differentation of convex expression fails in convex nlhdlr, then a perturbed point is tried.
397- Use sassy/bliss as default symmetry computation package.
398- No longer linearize indicator constraints in undercover heuristic by default.
399- Deactivate pre-root heuristic zeroobj in undercover heuristic.
400- Added new branching score tiebreaker for reliability pseudo-cost branching rule
401- Try nearest bound if zero solution value is out of bounds in heuristic trivial.
402
403Interface changes
404-----------------
405
406### New and changed callbacks
407
408- Added solution linearization callback for nonlinear handlers.
409 The nonlinear handler may use this callback to add tight cuts that use the given solution as reference point to the cutpool.
410 The callback is called if option constraints/nonlinear/linearizeheursol is enabled.
411- The callback for copying problem data SCIP_DECL_PROBCOPY() now has a parameter "original" indicating whether the original
412 or transformed problem should be copied. Similarly, SCIPprobCopy() in prob.h/c has such a parameter.
413- Added CONSGETPERMSYMGRAPH and CONSGETSIGNEDPERMSYMGRAPH callback for constraint handlers, which provides symmetry information about constraints to SCIP.
414
415### Deleted and changed API methods
416
417- SCIPtpiInitLock(), SCIPtpiDestroyLock(), SCIPtpiInitCondition(), SCIPtpiDestroyCondition() now take a double
418 pointer to SCIP_LOCK/SCIP_CONDITION, respectively.
419- Renamed SCIPtpiSumbitJob() to SCIPtpiSubmitJob().
420- SCIPcreateConsIndicatorLinCons(), SCIPcreateConsIndicatorGenericLinCons() do not allow binvar to be NULL anymore
421- Replaced SCIPnlrowSetCurvature() by SCIPsetNlRowCurvature().
422- SCIPsnprintf() now returns the required string length in case reallocation is necessary.
423- SCIPcomputeCoverUndercover() receives three more arguments which nonlinearities to cover
424- removed definition of SQRT
425- SCIPincludeObjConshdlr(), SCIPincludeConshdlr(), SCIPconshdlrCreate() receive two more arguments for the
426 conshdlr callbacks CONSGETPERMSYMGRAPH and CONSGETSIGNEDPERMSYMGRAPH
428- new parameter issigned for SCIPcomputeOrbitsSym()
429- new parameter symtype for SCIPcomputeComponentsSym()
430- new parameter symtype and permvardomaincenter for SCIPlexicographicReductionAddPermutation()
431- replaced parameters matrixdata and exprdata of SYMcomputeSymmetryGenerators() by graph
432
433### New API functions
434
435- new functions for interfacing with Lapack: SCIPlapackIsAvailable(), SCIPlapackIsAvailable(), SCIPlapackComputeEigenvalues(), and SCIPlapackSolveLinearEquations
436 These functions should be used instead of SCIPisIpoptAvailableIpopt(), SCIPcallLapackDsyevIpopt(), and
437 SCIPsolveLinearEquationsIpopt() in the context of computing eigenvalues or solving linear equations.
438 If IPOPT is available, the calls will be passed on to Ipopt's interface to Lapack.
461- SCIPincludeCutselEnsemble(), SCIPselectCutsEnsemble() to include cutsel_ensemble or use the selection algorithm
462- SCIPincludeBranchruleGomory() includes new gomory cut based branching rule
463- SCIPgetVarAvgGMIScore(), SCIPincVarGMISumScore(), SCIPgetVarLastGMIScore(), SCIPsetVarLastGMIScore() set historical values used by SCIP's default branching rule
464- SCIPincludeNlhdlrSignomial() includes the signomial nonlinear handler
465- SCIPgetExprMonomialData() returns a monomial representation of a product expression
466- SCIPestimateRoot() computes estimators for roots with exponent in [0,1]
467- SCIPincludeCutselDynamic(), SCIPselectCutsDynamic() to include cutsel_dynamic or use the selection algorithm
468- SCIPincludeSepaLagromory() to include the new Lagromory separator
469- SCIPconsCompCheck() to compare two constraints based on their check priority
470- SCIPgetConsPermsymGraph() and SCIPgetConsSignedPermsymGraph() to access the (signed) permutation symmetry detection graph of a constraint
471- SCIPsetConshdlrGetPermsymGraph() and SCIPsetConshdlrGetSignedPermsymGraph() to set the (signed) permutation symmetry detection graph of a constraint
472- SCIPconshdlrSupportsPermsymDetection() and SCIPconshdlrSupportsSignedPermsymDetection() to access whether a conshdlr supports detection of (signed) permutation symmetries
473- new API functions for creating and manipulating a symmetry detection graph: SCIPcreateSymgraph(), SCIPfreeSymgraph(), SCIPcopySymgraph(), SCIPextendPermsymDetectionGraphLinear(),
505 String values should not be quoted and spaces in string values are not supported.
506- sassy can be used now as preprocessor for nauty/traces
507- The solution status codes written to AMPL solution files now match those from https://mp.ampl.com/details.html#_CPPv4N2mp3sol6StatusE.
508
509### Changed parameters
510
511- change default value of parameter separating/filtercutpoolrel to FALSE
512- Shrunk range of parameter "propagating/symmetry/sstleaderrule" from [0,3] to [0,2], removed "MAXCONFLICTS"-option.
513- Removed reading/gmsreader/freeints. A default upper bound of +inf is now assumed for integer variables in GAMS (which is the case since GAMS 23.1).
514- Disabled "propagating/symmetry/symfixnonbinaryvars" since it is not used in the new symmetry code.
515- Replaced "propagating/symmetry/onlybinarysymmetry" with "propagating/symmetry/enforcecomputesymmetry" and set to FALSE by default.
516- Disabled "propagating/symmetry/performpresolving" since running orbital reduction during presolving is not effective.
517- Repurposed "propagating/symmetry/usedynamicprop" since it now also applies to lexicographic reduction.
518- Changed default value of parameter "propagating/symmetry/addsymresacks" from FALSE to TRUE.
519
520### New parameters
521
522- separating/maxcutsgenfactor and separating/maxcutsrootgenfactor as factors (w.r.t. separating/maxcuts and
523 separating/maxcutsroot) for limits on the number of cuts generated (which used to be constants '2')
524- expr/pow/expandmaxexponent to specify limit on exponent when to expand power of sum
525- expr/pow/distribfracexponent to enable expanding power of products with fractional exponents
526- expr/product/expandalways to enable expanding any product with sums as factor (that is, also when more than two factors)
527- nlhdlr/convex/maxperturb to specify maximal perturbation of non-differential reference points
528- benders/default/nlpiterlimit to adjust iteration limit for NLP solver for Benders' decomposition NLP subproblems
529- limits/objectivestop to interrupt the solve as soon as a primal solution is found
530 that is at least as good as the given value
531- heuristics/undercover/{coverand,coverind,covernl} to control which nonlinearities to consider (by default only "and" and nonlinear constraints)
532- cutselection/ensemble/∗ all parameters for new ensemble cut selector
533- cutselection/dynamic/∗ all parameters for new dynamic cut selector
534- branching/relpscost/gmiavgeffweight specifies the weight in the relpscost branching score of the normalized efficacy of all generated GMI cuts (for a variable)
535 branching/relpscost/gmilasteffweight specifies the weight in the elpscost branching score of the normalized efficacy of the last generated GMI cut (for a variable)
536- nlhdlr/quadratic/usemonoidal to enable monoidal strengthening when separating quadratics with intersection cuts
537- nlhdlr/quadratic/trackmore to collect more statistics for monoidal strengthening when separating quadratics with intersection cuts
538- nlhdlr/quadratic/useminrep to use the minimal representation to compute cut coefficients when separating quadratics with intersection cuts
539- nlhdlr/quadratic/sparsifycuts to enable sparsification of intersection cuts for quadratics
540- heuristics/dps/reoptlimits to set strict limits for the reoptimization step in dps
541- heuristics/dps/timing to run dps after processing the node
542- heuristics/scheduler/∗ all parameters for new scheduler heuristic
543- nlhdlr/signomial/enabled, nlhdlr/signomial/maxnundervars, nlhdlr/signomial/mincutscale: parameters for the signomial nonlinear handler
544- separating/lagromory/freq to denote the frequency for calling Lagromory separator
545- separating/lagromory/away to denote the minimal integrality violation of a basis variable to try separation
546- separating/lagromory/dynamiccuts to denote whether the generated cuts be removed from LP if they are no longer tight
547- separating/lagromory/maxroundsroot to denote the maximal number of separation rounds in the root node
548- separating/lagromory/maxrounds to denote the maximal number of separation rounds in a non-root node
549- separating/lagromory/nmaxcutsperlproot to denote, in the root node, the maximal number of Lagromory cuts that can be
550 separated per explored basis of the Lagrangian dual
551- separating/lagromory/nmaxcutsperlp to denote, in a non-root node, the maximal number of Lagromory cuts that can be
552 separated per explored basis of the Lagrangian dual
553- separating/lagromory/perroundnmaxlpiters to denote the maximal number of separating LP iterations that are allowed per
554 separation round
555- separating/lagromory/dualdegeneracyratethreshold to denote the minimum dual degeneracy rate for the separator execution
556- separating/lagromory/varconsratiothreshold to denote the minimum variable-constraint ratio on the optimal face for the
557 separator execution
558- many other advanced parameters for the Lagromory separator, which are also mentioned under separating/lagromory/∗
559
560### Data structures
561
562- new data structure SYM_GRAPH to encode symmetry information from a constraint
563- new data structure SYM_EXPRDATA to encode symmetry information from expressions
564- replaced enum SYM_SYMTYPE by a complete new one; removed SYM_RHSSENSE, added SYM_NODETYPE and SYM_CONSOPTYPE
565
566Deleted files
567-------------
568
569- deleted the now unused files: tpi_none.h, tpi_openmp.h, tpi_tnycthrd.h, type_tpi_none.h, type_tpi_openmp.h, type_tpi_tnycthrd.h
570
571Unit tests
572----------
573
574- new unittests for nlhdlr_quadratic that test monoidal strengthening and the use of the minimal representation to compute cut coefficients
575- unittests for nlhdlr_signomial
576
577Testing
578-------
579
580- changed `set lim obj` to `set lim objective` in ctest since `obj` is no longer unambiguous
581
582Build system
583------------
584
585### Cmake
586
587- New flag -DLAPACK=on for linking with Lapack (must be available in the system)
588- added flag option "SYM=sbliss" for using sassy/bliss as a graph automorphism package
589- use SYM=sbliss by default, since sassy and bliss are now shipped with SCIP.
590- added flag option "SYM=snauty" for using sassy/nauty as a graph automorphism package
591
592### Makefile
593
594- added flag option "nauty" for SYM variable to specify which graph automorphism package should be used
595- added flag option "sbliss" (sassy/bliss) for SYM variable to specify which graph automorphism package should be used
596- added flag option "snauty" (sassy/nauty) for SYM variable to specify which graph automorphism package should be used
597- use SYM=sbliss by default, since sassy and bliss are now shipped with SCIP
598- New flag LAPACK for linking with Lapack (must be available in the system)
599- A file scip/config.h is created in the build directory ($(OBJDIR)/include) now.
600 Defining NO_CONFIG_HEADER is no longer necessary and has no effect anymore.
601
602Fixed bugs
603----------
604
605- Number of runs in which separation is enabled will now be correct as per "separating/maxruns" parameter. Earlier,
606 separation was enabled for "maxruns + 1" number of runs, i.e., separation was enabled even when "maxruns = 0" was set.
607- add safeguard for number of selected cuts
608- use double double precision for delta in activity updates of cons_linear.c
609- sort constraints in checkSolOrig() to keep the logic of constraint handlers intact
610- fixed make install when SHARED=no and make uninstall
611- check absolute coefficients relative to extremal average to avoid invalid unifications in normalizeCons()
612- enforce and check symmetry-based constraints to take their locks (in dual reductions) into account
613- flush changes at the end of SCIPlpiSetBase() in lpi_grb.c to apply the newly set basis correctly
614
615Miscellaneous
616-------------
617
618- The TPI has been changed to become mostly independent from the actual parallel interface during compile time.
619 For this, the locks and conditions are now pointers to abstract structs.
620- fixed that scip/def.h, the header for C preprocessor definition (`#define`'s), included headers for some SCIP type and function definitions
632- fixed that scaling of rows in Gurobi interface (SCIPlpiScaleRow()) changed infinite sides to large finite ones (1e20) when scale factor is negative
633- check whether objective limit is truly reached in SCIPlpiIsStable()
634- if an objective limit is set and Mosek claims that it is exceeded, check that this is indeed the case in SCIPlpiIsStable()
635- the .mps file reader was extended to additionally accept .mps files with the objective sense section on one line
636- ensure that delayed cutpool separation does not happen if enough cuts have been found already
637- fixed that a Gurobi or Mosek interface (LPI) could not be freed from a thread different than the one it was created in, which lead to problems when, e.g., using the concurrent optimizer
638- in cons_varbound if both variables are fixed, instead of propagating the constraint check the feasibility of the constraint since propagating can lead to unnecessary numerical troubles
639- fixed memory leak in branching rule "distribution"
640- fixed that undercover did not enforce that sufficiently many variables in an and-constraints were fixed to have it linearized in the generated sub-scip
641- fixed two bugs in cons_varbound: avoid adding variable bounds if vbdcoef is infinite and unlock/lock variables if lhs/rhs/vbdcoef are changed
642- globalize constraint changes before bound changes during the effective root shift in treeSwitchPath() to correctly update variable locks by avoiding global bounds with outstanding bound change events when deleting constraints
643- fixed error when attempting to copy SCIP with activated pricers
644- remove integrality check for implicit integral variables in cons_integral.c, updated the definition for variable type implicit integer to be more explicit that these variables can take fractional values, and updated FAQ entry
645- updated and, or, and pseudoboolean constraint handlers to better handle fractional implicit integer variables in enforcement
646- avoid invalid strong Chvatal-Gomory cuts by ceiling with tolerance in the calculation of parameter k and flooring slack coefficients with standard epsilon tolerance as well as quad precision
647- add missing row links to columns in SCIPflushRowExtensions() required to maintain correct row norms
648- restrict separator intobj to solutions for which there can be no better feasible integral objective values to avoid cutting them off
649- delay removal of clique lists from SCIPvarRemoveCliquesImplicsVbs() into cliqueCleanup() to avoid segmentation faults by incomplete cleanups after variable conversions
650- reject sub-solutions with invalid objectives in SCIPtranslateSubSols() due to contradicting infinite contributions
651- correct column index in getMinMaxActivityResiduals() to make presolver dualinfer work
652- copy quiet flag from main scip's message handler to the one of solverscip in concurrent optimization
653- avoid bound tightening cycles towards huge redundancy bounds in fullDualPresolve() to avert fatal numerical trouble in representing vertices of linear relaxations with unbounded domains
654- fix problem where debug solution did not work if branching constraints are present
655- update index of dominating variable on coefficient deletion in dualPresolving() of constraint handler logicor
656- pass on flags from a redundant to the implying varbound constraint in preprocessConstraintPairs() to avoid suboptimal fixings by model relaxations
657- apply reductions of dualinfer only if a dual solution exists (primal is bounded)
658- before presolving is finished check solutions before retransforming them including tiny values to keep check flags consistent
659- disable heuristics before and during presolving in benders decomposition to avoid messing up the objective structure in the solution store by dropping auxiliary variables in the required retransformations
660- correct local flag of singleton conflict constraints in tightenSingleVar() against invalid bound globalization
661- respect unboundedness in the computation of activity bounds in conflict.c to avoid invalid huge bounds due to small coefficients on unbounded variables
662- ensure positive sides of a linear constraint when recognizing a set partition in rangedRowSimplify() to account for redundancy issues
663- relax numerical conditions for variable aggregations to avert invalid variable fixings
664- fixed harmless read of uninitialized data when creating parameters
665- fix call of SCIPnlpiOraclePrintProblem in nlpi_worhp
666
667Performance improvements
668------------------------
669
670- Use sassy/bliss as default symmetry computation package.
671
672Interface changes
673-----------------
674
675### Interfaces to external software
676
677- added interface to nauty/traces for symmetry computation
678- added interface to sassy, a preprocessor for symmetry computation
679- The directory src/sassy contains the source code of sassy.
680
681Build system
682------------
683
684### Cmake
685
686- added flag option "SYM=sbliss" for using sassy/bliss as a graph automorphism package
687
688### Makefile
689
690- added flag option "nauty" for SYM variable to specify which graph automorphism package should be used
691- added flag option "sbliss" for SYM variable to specify which graph automorphism package should be used
692- use SYM=sbliss by default, since sassy and bliss are now shipped with SCIP
693
694Miscellaneous
695-------------
696
697- the parameter change callback is no longer called at the moment a parameter is created
698
699@section RN804 SCIP 8.0.4
700*************************
701
702Features
703--------
704
705- use quad precision in cutsSubstituteMIR() for substituting slack variables into CMIR cuts
706- use quad precision for activity computations in cons_linear.c
707
708### Deleted and changed API methods
709
710- SCIPshrinkDisjunctiveVarSet() no longer attempts to cutoff the current node if it finds the
711 given disjunction to be infeasible; it is now in the responsibility of the caller to act accordingly
712
713### New API functions
714
715- added SCIPskipSpace
716- added XML parser routines from src/xml/xml.h
717
718### Interfaces to external software
719
720- updated XPRESS interface to work with XPRESS 41 as well
721- new interface to LP solver HiGHS (lpi_highs.cpp)
722
723### Changed parameters
724
725- changed integer parameter "propagating/symmetry/recomputrestart" from range {0, 1, 2} to being fixed at value 0
726
727Unit tests
728----------
729
730- added new checks for objective, bounds and sides inside the scaling tests in lpi/change.c
731
732Fixed bugs
733----------
734
735- relax condition of assert in lpSolve to hold only if lp/checkstability is true
736- OPB reader: dynamically increase the size of the line buffer for reading in getMaxAndConsDim()
737- Enabled the solution limit checks in SCIPsolveIsStopped in solve.c when in SCIP_STAGE_PRESOLVING
738- fix quad precision comparison for the calculation of knapsackcover constraints.
739- force copying of symmetry constraints for concurrent solve
740- increase the precision of double multiplications in quad precision environments
741- corrected handling of different variable types in symmetry
742- orbitope detection: refine computation of overlap structure and fixed bug in finding orbitope generators
743- ensure that winner is always determined in concurrent mode
744- when a row with invalid index range is added to the global cutpool, update the indices instead of failing with an assert
745- update of watched literals in cons_xor.c and ensure that fixed variables are counted in propacateCons()
746- avoid some numerical issue in check for redundant variables in linear constraints (introduced with version 8.0.2)
747- more rows are treated as being integral in cutsSubstituteMIR() for CMIR cuts
748- fixed several relaxations of the rhs of cuts to 0 in cuts.c
749- avoid aggregation into a single linear constraint if they should not be upgraded (needed for indicator constraints)
750- apply effective root changes before fork is repropagated during treeSwitchPath() in tree.c
751- avoid invalid objective value for solutions generated from an unbounded LP relaxation in case of a nonlinear objective function
752- disable recomputing symmetries after a restart (constraint removal is not permitted)
753- avoid cutting off optimal solutions for small feasibility tolerances in conflict analysis
754- initialize variable in presol_dualsparsify.c
755- fix in presolving of variable bound constraints to use absolute instead of relative difference
756- free variable histories in reoptimization mode
757- handle whitespaces in interactive shell history consistently
758- check and enforce equalities on which the objective is projected in cons_linear.c
759- ensure row feasibilities of solution shiftings in heur_oneopt.c and heur_twoopt.c
846- new parameters to turn on more statistics: misc/showdivingstats (diving heuristics), heuristics/alns/shownbstats (ALNS), estimation/showstats (tree size estimation)
847
848### Data structures
849
850- added nrootcalls and ncutsadded to SCIP_Cutpool
851- added fromcutpool flag to SCIP_Row and fixed 33 bit allocation
1002 Removed support for parameterized expressions.
1003- Added support for expression types sin, cos, and entropy. Added an expression type that stores a SCIP variable.
1004- Added handling of sin and cos expressions in OSiL reader.
1005- Added handling of sin, cos, and tan expressions in ZIMPL reader.
1006- Added expression handler plugin type, removed user expression type.
1007- Replaced expressions, expression trees, and expression graphs by a new implementation of expressions.
1008- Added differentiation methods (Gradients and Hessian directions) to expressions.
1009- Added integrality information to expressions.
1010- Added comparison and hashing of expressions.
1011- Improved simplification of expressions and identification of common subexpressions, in particular terms that appear
1012 equally in several quadratic functions are now identified.
1013- Expression simplification now expands powers also when the resulting exponents will be larger than 2.
1014- Added table to print statistics on expression handlers.
1015- Removed interval-arithmetic evaluation from expression interpreter (interfaces to automatic differentiation codes).
1016- Hessians for user-provided expression handlers are not available in the NLP solver interfaces for now.
1017- Sparse Hessians are now returned by expression interpreter. Removed dense Hessians.
1018
1019Constraint handlers for NLP:
1020- cons_nonlinear has been completely rewritten and now handles constraints of the form lhs <= expr <= rhs, where
1021 expr is an expression using the new expression type. A linear part of a nonlinear constraint is no longer distinguished.
1022- Methods that work on a particular nonlinear structure are now implemented via nonlinear handlers (nlhdlr).
1023 These handlers are plugins of cons_nonlinear and interact with cons_nonlinear by detecting structures in expressions and
1024 providing propagation and separation mechanisms.
1025- Added nlhdlr "default" as a mandatory nlhdlr: this is a nlhdlr that gets active on expressions that no other nlhdlr handles.
1026 It then uses the callbacks implemented in expression handlers to provide domain propagation and linear under/overestimates.
1027- Added nlhdlr for quadratic expressions: domain propagation that was previously part of cons_quadratic; separation via intersection cuts (currently disabled).
1028- Added nlhdlr for bilinear expressions: collects bilinear products and provides under/overestimation of a product over a 2D-projection of the LP.
1029- Added nlhdlr for convex and concave expressions: detection of convex/concave subexpressions and linear under/overestimation.
1030- Added nlhdlr for quotients: detects quotients, provides specialized linear under/overestimation and domain propagation for univariate quotients.
1031- Added nlhdlr for perspective reformulations: detects expressions in semi-continuous variables and tightens linear
1032 under/overestimates of these expressions by applying a perspective transformation.
1033- Added nlhdlr for second-order cones: detects second-order cone constraints (as ||x|| <= t or a quadratic that can written like that) and
1034 separates on a disaggregated reformulation (similar to cons_soc previously).
1035- Removed constraint handlers abspower, bivariate, quadratic, and soc.
1036- Removed simplification of duplicate abspower constraints for now.
1037 Removed simplification of abspower constraints with loose variables.
1038 Removed resolving of domain propagation (ConsResProp callback) and conflict analysis for abspower constraints.
1039 Removed propagation of varbounds for variables of abspower constraints.
1040 Removed reformulation of abs(x)^p * x into signpower expression for now.
1041- Removed reformulation of SOC constraints when adding to the NLP.
1042 Removed possibility to add linearizations a la Glineur or BenTal&Nemirovski for SOC constraints.
1043- Removed possibility to disaggregate quadratic constraints.
1044 Removed lifted tangent inequalities for bilinear terms in quadratic constraints.
1045 Removed option to project LP solution onto feasible region of a quadratic constraint via interior point or gauge function.
1046 Removed handling of unbounded LPs when enforcing quadratic constraints.
1047- Removed construction of cuts from interval gradients for nonlinear constraints.
1048 Removed possibility to pretend that all nonlinear constraints are convex.
1049 Removed possibility to create local or non-initial nonlinear constraints for now.
1050- Removed explicit reformulation of nonlinear constraints in presolve.
1051 An extended formulation is now generated implicitly and used to construct the LP relaxation,
1052 but the original formulation is used to check feasibility, propagate variable domains, etc.
1053 Variables that are added for the extended formulation are now marked as relaxation-only.
1054- Improved locking of nonlinear variables in nonlinear constraints by taking monotonicity into account.
1055- Improved mechanisms to detect and handle structures in nonlinear constraints, which allows for several algorithms
1056 to work simultaneously on equal or overlapping expressions.
1057- Improved linearization of (sums of) products of binary variables, e.g., clique information is now taken into account.
1058 Removed option to linearize products between a binary and a non-binary variable.
1059- Nonlinear constraints with the same function (but possibly different left- or right-hand-side) are now merged.
1060- When a variable appears in only one concave less-or-equal constraint, it will be fixed to one of its bounds in more cases now.
1061- New branching rule for variables in nonlinear constraints (implemented in cons_nonlinear) that scores candidates
1062 based on constraint violation, variable type, and pseudo-costs simultaneously.
1063- Added tables to print statistics of nonlinear constraint handler and nonlinear handlers.
1064
1065Performance improvements
1066------------------------
1067
1068- Use the objective cutoff row as base row for separation in sepa_aggregation.c.
1069- Separate lifted cover cuts based on newer lifting function of Letchford and Souli (2019) in sepa_aggregation.c.
1070- In-tree restarts due to tree size estimation have been made compatible with orbital fixing.
1071- Improved upgrade of orbisacks to packing/partitioning orbitopes.
1072- Improved running time of symresack cover separation.
1073- Improved propagation algorithm for orbisack and symresack.
1074- Improved handling for expressions of type signpower in CppAD interface by making use of CppADs conditional expressions.
1075- Faster reevaluation of Hessian for quadratic expressions in CppAD interface.
1076- Enabled optimization of taped expressions in the CppAD interface.
1077- Sparse Hessian evaluation for expressions with sparse Hessian in the CppAD interface.
1078- Disabled branching on variables that are added for the extended formulation of a nonlinear constraint.
1079- Prefer branching on variables in nonconvex terms of nonlinear constraints also if a cut could be generated but would yield a small reduction in the convexification gap only.
1080- When violations of nonlinear constraints are tiny, the feasibility tolerance for the LP relaxation may now be reduced temporarily to allow for cuts to have an effect.
1081- Improved under/overestimation of multidimensional vertex-polyhedral (e.g., multilinear or concave) functions by use of scaling and keeping the cut-generating LP around.
1082- Products in nonlinear constraints are no longer disaggregated for the extended formulation.
1083- No longer relax bounds of integral variables when computing bounds on activity in nonlinear constraints.
1084- Revised and improved Ipopt interface.
1085- Revised and improved subNLP primal heuristic, in particular choice of iteration limit and starting condition and reuse of subSCIP.
1086- Merge strongcg into the gomory separator to avoid computing the same base equality twice. The files
1087 sepa_strongcg.{h|c} have been removed.
1088- The RENS neighborhood in ALNS now fixes fractional variables if necessary for reaching its target fixing rate.
1089- Use cpsolver emphasis in sepa_rapidlearning.
1090- If decomposition/maxgraphedge = 0, the computation of the block graph is completely turned off.
1091- Fixed a performance bug in cons_integral.c where rounding information was passed incorrectly to the generic diving algorithm.
1092
1093Examples and applications
1094-------------------------
1095
1096- Add c++ Sudoku example
1097- Removed circle.c and renamed string.c to spring.c in CallableLibrary example.
1098- SCIP-Jack (Steiner tree application):
1099 Most files have been modified and many new ones have been added (code base more than doubled).
1100 Two new problem classes are supported: maximum-weight connected subgraph problem with budget constraints, partial-terminal node-weighted Steiner tree problem.
1101 Major performance improvements accross all problem classes that are supported.
1102
1103Interface changes
1104-----------------
1105
1106### New and changed callbacks
1107
1108- extend SEPAEXEC{LP,SOL} callbacks by parameter "depth", which should be used within separation instead of SCIPgetCurrentDepth()
1109- extend SCIPseparateSolCutpool() by parameter "pretendroot", which is passed to SCIPcutpoolSeparate() instead of SCIPtreeGetCurrentDepth(scip->tree) == 0
1127- added SCIP_NLPIPROBLEM* problem to SCIP_DECL_NLPIGETSOLVERPOINTER
1128
1129### Deleted and changed API methods
1130
1131- When calling SCIPdelVar() in the SCIP_STAGE_PROBLEM stage, it is now documented as the user's responsibility to ensure
1132 the variable is not present in any constraints. Otherwise, SCIPsolve() now returns SCIP_INVALIDDATA.
1133- removed SCIPselectCuts(), replaced by SCIPselectCutsHybrid() of the hybrid cut selector plugin
1134- If SCIPvarMarkRelaxationOnly() is called for a variable, then this now need to happen before the
1135 variable is added to the transformed problem (SCIPaddVar()).
1136 SCIPvarMarkRelaxationOnly() will automatically call SCIPvarMarkDeletable().
1137- SCIPcomputeOrbitsFilterSym() and SCIPcomputeComponentsSym(): Type of argument componentblocked
1138 changed from SCIP_Shortbool* to unsigned*.
1139- removed SCIPsetParam()
1140- SCIPcreateConsOrbitope() and SCIPcreateConsBasicOrbitope() have two new arguments "usedynamicprop"
1141 and "mayinteract" to encode whether a dynamic reordering of the orbitope rows shall be used in
1142 full orbitope propagation and whether the orbitope might interact with other symmetry handling
1143 methods, respectively.
1144- internal function SCIPgetPropertiesPerm() has been replaced by SCIPisInvolutionPerm()
1145- internal function SCIPgenerateOrbitopeVarsMatrix() has new arguments "storelexorder", "lexorder",
1146 "nvarsorder", "maxnvarsorder" to compute and store the lexicographic order defined by an orbitope
1147- renamed SCIPcomputeArraysIntersection() and SCIPcomputeArraysSetminus() to
1148 SCIPcomputeArraysIntersectionInt() and SCIPcomputeArraysSetminusInt(), respectively, and changed
1149 their return type from SCIP_RETCODE (which _always_ was SCIP_OKAY) to void
1150- removed SCIPincludeDialogDefault(), use SCIPincludeDialogDefaultBasic() instead and check whether you also need SCIPincludeDialogDefaultSet() and SCIPincludeDialogDefaultFix()
1151- removed exprint argument from SCIPaddNlRowGradientBenderscutOpt()
1152- added copyexprhdlrs argument to SCIPcopyPlugins() (19th position)
1153- added copycutselectors argument to SCIPcopyPlugins() (10th position)
1154- removed refpoint argument from SCIPaddSquareSecant()
1155- added argument exprdata to SYMcomputeSymmetryGenerators()
1170- renamed SCIPsetNlRowExprtree() to SCIPsetNlRowExpr() and changed type of expr(tree) argument to SCIP_EXPR*
1171- SCIPenableNLP() is no longer allowed in stages INITSOLVE and SOLVING
1172- removed SCIPaddLinearConsToNlpHeurSubNlp()
1173- SCIPhasNLPSolution() now returns true also if a infeasible solution to the NLP exists; SCIPcreateNLPSol() can now also be used when only an infeasible solution to the NLP exists
1174- renamed SCIPsolveNLP() to SCIPsolveNLPParam() and added parameter SCIP_NLPPARAM param
1175- removed SCIPsolveDiveNLP(), use SCIPsolveNLPParam() instead
1223- removed SCIPnlpiOracleGetVarDegree() and SCIPnlpiOracleGetVarDegrees(), use SCIPnlpiOracleIsVarNonlinear() and SCIPnlpiOracleGetVarCounts(), respectively, instead
1224- removed SCIPnlpiOracleGetConstraintDegree(), use SCIPnlpiOracleIsConstraintNonlinear() instead
1225- removed argument messagehdlr from SCIPnlpiOraclePrintProblem() and SCIPnlpiOraclePrintProblemGams()
1226- removed SCIPcreateNlpiProb(), use SCIPcreateNlpiProblemFromNlRows() instead
1227- renamed SCIPupdateNlpiProb() to SCIPupdateNlpiProblem() and moved into scip_nlpi.{h,c}
1228- renamed SCIPaddNlpiProbRows() to SCIPaddNlpiProblemRows() and moved into scip_nlpi.{h,c}
1230- removed SCIPgetIpoptApplicationPointerIpopt(), use SCIPgetNlpiSolverPointer() instead
1231- removed SCIPnlpStatisticsCreate(), SCIPnlpStatisticsFree(), SCIPnlpStatisticsGetNIterations(), SCIPnlpStatisticsGetTotalTime(), SCIPnlpStatisticsSetNIterations(), SCIPnlpStatisticsSetTotalTime(), the struct is public now
1232- renamed LapackDsyev() to SCIPcallLapackDsyevIpopt()
1233- renamed SCIPsolveLinearProb() to SCIPsolveLinearEquationsIpopt()
1234
1235Expression interpreter:
1236- removed functions that operated with SCIPInterval
1237- changed first argument of SCIPexprintCreate() to SCIP*
1238- added SCIP* as first argument to SCIPexprintFree()
1239- added SCIP* as first argument to SCIPexprintCompile(), changed third argument to SCIP_EXPR*, added fourth argument SCIP_EXPRINTDATA**
1240- added arguments SCIP*, SCIP_EXPRINT*, and SCIP_EXPR* as first arguments to SCIPexprintFreeData()
1241- renamed SCIPexprintGetExprtreeCapability() to SCIPexprintGetExprCapability();
1242 added SCIP* as first argument, changed third argument to SCIP_EXPR*, added fourth argument SCIP_EXPRINTDATA*
1243- removed SCIPexprintNewParametrization()
1244- SCIPexprintEval(): added SCIP* as first argument, changed third argument to SCIP_EXPR*, added fourth argument SCIP_EXPRINTDATA*
1245- removed SCIPexprintEvalInt()
1246- SCIPexprintGrad(): added SCIP* as first argument, changed third argument to SCIP_EXPR*, added fourth argument SCIP_EXPRINTDATA*
1247- removed SCIPexprintGradInt()
1248- removed SCIPexprintHessianSparsityDense() and SCIPexprintHessianDense, use SCIPexprintHessianSparsity() and SCIPexprintHessian() instead
1249
1250Expressions:
1251- removed SCIPexpropGetName(), use SCIPexprhdlrGetName() instead
1252- removed SCIPexpropGetNChildren()
1253- removed SCIPexprGetOperator(), use SCIPexprGetHdlr() instead
1254- removed SCIPexprGetOpIndex(), SCIPexprGetOpReal(), SCIPexprGetOpData(), use SCIPexprGetData() instead
1255- removed SCIPexprGetRealPowerExponent(), SCIPexprGetIntPowerExponent(), SCIPexprGetSignPowerExponent(), use SCIPgetExponentExprPow() instead
1256- removed SCIPexprGetLinearCoefs(), SCIPexprGetLinearConstant(), use SCIPgetCoefsExprSum() and SCIPgetConstantExprSum() instead
1376- renamed SCIPgetNAllBilinearTermsQuadratic() to SCIPgetNBilinTermsNonlinear() and changed argument from SCIP* to SCIP_CONSHDLR*
1377- renamed SCIPgetAllBilinearTermsQuadratic() to SCIPgetBilinTermsNonlinear() and replaced arguments by SCIP_CONSHDLR* and changed return type to SCIP_CONSNONLINEAR_BILINTERM*
1378- removed SCIPaddBilinearIneqQuadratic(), use SCIPinsertBilinearTermImplicitNonlinear() instead
1379- renamed SCIPcreateConsQuadratic() to SCIPcreateConsQuadraticNonlinear() and removed argument stickingatnode
1380- removed SCIPincludeConshdlrSOC()
1381- replaced SCIPcreateConsBasicSOC() by SCIPcreateConsBasicSOCNonlinear()
1382- deprecated SCIPcreateConsSOC(), use SCIPcreateConsBasicSOCNonlinear() instead
1383- deprecated SCIPgetNlRowSOC(), use SCIPgetNlRowNonlinear() instead
1603- Removed parameters for strongcg separator: separating/strongcg/..., i.e.,
1604 maxrounds, maxroundsroot, maxsepacutsroot, maxsepacuts, dynamiccuts. One can control the
1605 strongcg behavior throught the parameters of sepa_gomory.
1606- renamed separating/{minortho,minorthoroot,objparalfac,intsupportfac} to cutselection/hybrid/{minortho,minorthoroot,objparalweight,intsupportweight}
1607
1608### New parameters
1609
1610- It is now possible to add orbitope constraints to handle symmetries even if not all variables
1611 in a component of the symmetry group are binary. This feature can be enabled using the
1670- new parameters "branching/inference/conflictprio" and "branching/inference/cutoffprio" that allow
1671 using the different score criteria in inference branching hierarchically
1672- new parameters "heuristics/alns/nodesquotmin", "heuristics/alns/maxcallssamesol" and "heuristics/alns/initduringroot"
1673 to control neighborhoods in ALNS
1674- new parameter "benders/default/benderscut/optimality/mir" to control whether mixed-integer rounding procedure is applied to Benders optimality cuts
1675- new parameter "misc/avoidmemout" to try to avoid running into memory limit
1791- added test projection:transitivity in prob/obbt.c
1792- added reader/nl.c
1793- added test intervalarith:sincos in scip/intervalarith.c
1794- added sepa/minor.c
1795- added sepa/rlt/cuts.c
1796- added sepa/rlt/product_detection.c
1797- added sepa/rlt/separation.c
1798- added tests test_compute_symmetry:expr{1,2,3,4} in symmetry/compute.c
1799
1800Build system
1801------------
1802
1803- the separate NLPI library has been integrated into the main SCIP library;
1804 uses of NLPILIBFILE or NLPILIBSRC in Makefiles that use make/make.project
1805 should be removed
1806
1807### Cmake
1808
1809- replace flag PARASCIP by THREADSAFE
1810- option AMPL is now ON by default
1811- add -D_XOPEN_SOURCE=600 cflag for compilation on systems other than windows
1812- add compile options directly instead of modifying CMAKE_C_FLAGS and CMAKE_CXX_FLAGS
1813
1814### Makefile
1815
1816- prefix PKG_CONFIG_PATH with Ipopt's pkgconfig dir instead of postfixing
1817- replace flag PARASCIP by THREADSAFE
1818- flag AMPL is now true by default
1819- libscip has been renamed to libscipbase and libscipsolver has been renamed to libscip
1820 in order to have the same library names for makefiles and cmake. For downward
1821 compatibility libscipsolver still exists (as a link).
1822
1823Fixed bugs
1824----------
1825
1826- fixed handling of multi-aggregation in cons_symresack and cons_orbisack
1827- SCIPgetLowerbound() now consistently returns infinity when status is infeasible
1828- improved the likelihood that a solution that satisfies the nonlinear constraints in the transformed (presolved) problem is also feasible for the original problem
1829- worked around a problem with derivatives of pow at 0 with non-integer exponents in CppAD
1830- fixed that setting of feasiblity and optimiality tolerance for NLP relaxation was overwritten with defaults when solving NLP
1831- fixed variance computation in t-value computation in hypothesis testing of reliability branching
1832- fixed potential overflow in cuts.c:evaluateLiftingFunctionKnapsack()
1833- do not transfer dual reductions to main SCIP in sepa_rapidlearning if strong dual reductions are forbidden
1834- fixed a bug in cons_setppc.c:removeDoubleAndSingletonsAndPerformDualpresolve() which led to wrong variable aggregations
1835- added missing redundancy check to coefficient tightening routine in cons_varbound that led to wrong variable locks
1836- added a check of numerics to avoid wrong reductions in cons_linear.c:simplifyInequalities()
1837- fixed a bug in cons_logicor.c regarding fixed variables that were not removed
1838- presol_milp.c handles variable fixings, suggested by PaPILO, more carefully to cover all cases that can appear
1839- fixed several reproducability bugs that led to different solving paths across multiple runs with one SCIP environment
1840- fixed check of limits/absgap, which was incorrectly applied to the scaled objective of the transformed problem
1841
1842Miscellaneous
1843-------------
1844
1845- in LP, use absolute instead of relative tolerances to check whether solutions from LP solver are primal feasible
1846- when a restart occurs, SCIP now asserts (during EXITSOLVE) that all relaxation-only variables are unlocked and
1847 only captured by the transformed problem.
1848- Avoid redundant calls to LP solver when LP is already flushed and solved
1849- In SCIPdebugMsg(), SCIPsetDebugMsg(), SCIPstatDebugMsg() strip directory from filename.
1850- Recompute activity of rows when checking LP solutions instead of trusting the value given by the LP solver
1851- The define NPARASCIP has been replaced by SCIP_THREADSAFE
1852- Parameters are not reset to their default values before activating an emphasis setting; this now allows to combine
1853 different emphasis settings.
1854- If a lazy bound is set to a value that is tighter than the current global bound, then the global bound is now tightened accordingly.
1855
1856@page RN7 Release notes for SCIP 7
1857
1858@section RN703 SCIP 7.0.3
1859*************************
1860
1861Interface changes
1862-----------------
1863
1864### New API functions
1865
1866- added function SCIPwithDebugSol() to determine whether SCIP was compiled with WITH_DEBUG_SOLUTION
1867
1868- New function SCIPcreateConsBounddisjunctionRedundant() and SCIPcreateConsBasicBounddisjunctionRedundant() that allow
1869 the input to contain redundant literals.
1870
1871### Changed API functions
1872
1873- added __attribute__((format(printf,,,))) to variadic SCIP message printing functions;
1874 this enables warnings about mismatches between format string and variadic function arguments if using GCC.
1875
1876### Interfaces to external software
1877
1878- removed MATLAB interface from interfaces/matlab
1879
1880Build system
1881------------
1882
1883- Compilation will now also work in a raw tarball of the scip git repository
1884
1885### Cmake
1886
1887- Make find_package more verbose and require packages to be found. Now enabled packages that are not found result in an error.
1888
1889Fixed bugs
1890----------
1891
1892- Fixed numerical bug by creating and checking the empty solution when problem vanishes in presolving.
1893- Fixed several bugs in reoptimization.
1894- Fixed bug in cons_bounddisjunction in which a constraint leads to a cutoff.
1895- Fixed bug in reoptimization by avoiding redundant literals for bound disjunctions.
1896- Replace wrong usage of CMAKE_BINARY_DIR by PROJECT_BINARY_DIR in CMake system
1897- Fixed lpi_glop to use absl flag instead of GFlags
1898- Fixed invalid initialization of limits/softtime parameter in cons_components
1899- Fixed MIN macro not defined in some cases.
1900- Safeguard some API methods for querying solving statistics against segmentation faults after SCIPpresolve()
1901- Fixed unfreed solution in concurrent solving
1902- Make sure that logicor constraints are enforced/separated if genlogicor is true in cons_indicator.
1903 Thus, do not change constraints/logicor/sepafreq anymore, but output warning.
1904- Fixed assert that assumed infeasibility cannot occur in presol_boundshift.
1905- Fixed sign bug during creation of conflict constraints with almost zero left-hand side.
1906- Disabled call of conflict handler for conflict sets that contain relaxation-only variables.
1907- Fixed bug in cons_symresack by initializing all constraint data in constrans
1908- Avoid allowing the upgrade of linear constraints corresponding to indicators in propagation of nodes.
1909- Fixed bug in computing lex. min/max faces in dynamic orbitope propagation.
1910- Limit vbounds propagator to one sweep through all bounds per call in order to avoid an infinite loop.
1911- Fixed mismatches between formatter strings and arguments in calls to SCIP message printing functions.
1912
1913Miscellaneous
1914-------------
1915
1916- To avoid performance variablity during reoptimization, the active constraints are now stored in the same order as in the
1917 original problem.
1918- Added workaround for bug in MSVS 2019 when compiling CppAD source.
1919- The original order of variables is now only restored after presolve if `randomization/permutevars` is set to FALSE.
1920
1921@section RN702 SCIP 7.0.2
1922*************************
1923
1924Features
1925--------
1926
1927- Extended check for valid variable and constraint names in PIP writer.
1928- Indicator constraints now write the name of the linear constraint in CIP format. This avoids a complicated
1929 name matching during parsing. The old format is still supported.
1930- The objective scale and offset are now taken into account when reading/writing problems in lp/mps/fzn/pip format.
1931 This often changes the behavior when writing transformed problems.
1932
1933Performance improvements
1934------------------------
1935
1936Examples and applications
1937-------------------------
1938
1939- Add c++ Sudoku example
1940
1941Interface changes
1942-----------------
1943
1944### Deleted and changed API methods
1945
1946- deprecated SCIPsetParam(); use SCIPsetIntParam(), SCIPsetRealParam(), etc, instead
1947
1948### New API functions
1949
1950- new function SCIPcolGetVarProbindex() for accessing the probindex of a variable corresponding to a column
1951- added new sorting functions SCIPsortPtrRealRealBoolBool()
1952
1953Fixed bugs
1954----------
1955
1956- Fixed a sign bug occuring for some cases in the computation of the directed cutoff distance
1957- Fixed overflow in inference information of cumulative constraint handler
1958- Fixed problem with propfreq == 0 in cons_linear.c
1959- Fixed aggregation heuristic in sepa_aggregation.c to not use local rows when that is requested nor modifiable rows
1960- Fixed problem with incompatibility of symmetry handling in Benders decomposition
1961- Fixed parsing of small number in CIP format of nonlinear constraint
1962- Fixed problem in upgrading full orbitopes to partitioning orbitopes
1963- Fixed treatment of negated variables in parsing orbitope constraints
1964- Fixed potential indexing error in prop_vbounds.c
1965- Fixed bug in writing fzn format
1966- Revert to old parameter value when parameter change is rejected in PARAMCHGD callback
1967- Fixed order of linker flags when building AMPL interface with cmake system.
1968- Fixed bug with ofsymcomptiming == 0: now symmetry is actually computed
1969- Improved separation for SOC constraint with multiaggregated variable on right-hand-side.
1970- Fixed bug in presol_boundshift: do not shift non-active variables
1971- Fixed bug in domain propagation for SOC constraints with negative coefficient for variable on right-hand-side.
1972- Fixed bug with multi-aggregated integer variables in cons_xor.
1973- Fixed bug with changed number of variables in storing relaxation solution in probing/diving.
1974- Fixed issues with scip statistics
1975- Fixed issue with multi-aggregated variables
1976- Fixed issue in with buffer memory in cons_cumulative
1977
1978@section RN701 SCIP 7.0.1
1979*************************
1980
1981Build system
1982------------
1983
1984### Cmake
1985
1986- Fixed cmake module for Ipopt to support Ipopt 3.13
1987- Added cmake variable BLISS_LIBRARY_DIR to pass a bliss library
1988- Added warning to require minimal GCC version 4.8
1989- Renamed FindCriterion cmake findmodule to FindCRITERION
1990
1991### Makefile
1992
1993- Updated make/make.project for macOS
1994- Add SANITZERFLAGS (only OPT=dbg) to LDFLAGS also if SHARED=true (and rename SANITZERFLAGS to SANITIZERFLAGS)
1995- Fixed GCC version check in make/make.linux.gnu.dbg
1996
1997Fixed bugs
1998----------
1999
2000- Fixed handling of constant term in quadratic objective of pip-reader
2001- Fixed incorrect value string for parameter estimation/completiontype
2002- Fixed initialization of first LP which led to wrong output about LPs not resolved correctly
2003- Fixed bug in SCIPcutpoolClear() function not clearing internal datastructures properly
2004- Fixed inability to set a value in a solution if it was within epsilon to the current value
2005- Fixed problems for linking optimized code with debug library of SCIP (and vice versa) by moving debug-only members
2006 to end of SCIP structs
2007
2008Miscellaneous
2009-------------
2010
2011- Variables that are marked as relaxation-only are no longer checked against debug solutions if
2012 they are captured by the transformed problem only.
2013
2014@section RN700 SCIP 7.0.0
2015*************************
2016
2017Features
2018--------
2019
2020- Using the parameter "propagating/symmetry/recomputerestart" one can now decide to recompute symmetries after a
2021 restart or not. Previously one could just turn off symmetry computation after a restart. If orbital fixing
2022 has found a reduction before the restart occured, symmetries have to be updated to ensure correctness.
2023 To this end, the user can decide via "propagating/symmetry/disableofrestart" whether orbital fixing is disabled or
2024 whether symmetries are recomputed.
2025
2026- extended relaxators statistics in solve statistics about information on number of cutoffs, improved bounds, etc.
2027
2028- extends SMPS file reader for the stochastic information, the sto files, to read a lower bound for the discrete
2029 scenarios. The lower bound is used when creating the auxiliary variables for Benders' decomposition.
2030
2031- extended Benders framework to solve NLPs and generate optimality and feasibility cuts from their solution
2032 when the subproblem is convex nonlinear.
2033
2034- extended Benders framework to create copies of Benders decompositions that can be used in a multithreading environment
2035
2036- additional functionality has been added to enable the transfer of Benders' decomposition cuts between different SCIP
2037 instances, e.g., when used in UG
2038
2039- LP rows (SCIP_ROW) can now store pointer to a constraint from which the row originates
2040
2041- Trust region, a new LNS heuristic, has been added to SCIP as both a standalone primal heuristic heur_trustregion.c
2042 and as a neighborhood inside of Adaptive Large Neighborhood Search (heur_alns.c). This heuristic is designed to improve the
2043 heuristic performance of the Benders' decomposition algorithm. It builds upon the successful trust region approaches
2044 applied to Benders' decomposition.
2045
2046- Modularity of symmetry handling has been increased. It is now possible to use orbitopes (i.e., polyhedral symmetry
2047 handling techniques) and orbital fixing on the same instance.
2048
2049- cut strengthening enabled within the Benders' decomposition framework. This uses a mix of the Improved Magnanti-Wong
2050 method and Kelly's method. The cut strengthening is enabled by setting the paramemter
2051 "benders/<bendersname>/cutstrengthenenabled" to TRUE. The parameters "cutstrengthenmult", "noimprovelimit" and
2052 "corepointperturb" control the behavior of the cut strengthening method. Additionally, the parameter
2053 "cutstrengthenintpoint" allows the user to specify the solution that is used to initialize the core point. The options
2054 are the first LP solution, the first integer feasible solution, a relative interior point, a solution vector of all
2055 ones and a solution vector of all zeros. Also, the core point can be reinitialized after each update to the incumbent
2056 solution.
2057
2058- added option to adjust weights of different scores in relpscost (hybrid) branching rule based on degeneracy information
2059 and skip strong branching for very high degeneracy rates
2060
2061- added new SCIP_DECOMP* object to store user decompositions. The user can specify one or several decompositions by assigning variable
2062 and/or constraint labels either through the API or by reading a file in DEC format (which is one of the formats that GCG writes).
2063 This format specifies constraint labels, variable labels are inferred from that. The decomposition is transformed after presolving.
2064- statistics regarding the number of blocks, the largest and smallest blocks, the border, and the constraint graph are printed for the original decomposition,
2065 and for each decomposition after presolving.
2066- the decomposition can be used as initial decomposition for the Benders functionality of SCIP.
2067- new subsection "How to provide a problem decomposition" in the SCIP documentation
2068
2069- GINS heuristic can make use of a user-provided decomposition labels in two ways:
2070 1. by selecting a block of variables that maximizes the potential, and randomly selecting a start variable for the neighborhood and/or
2071 2. by selecting an interval of consecutive blocks as neighborhood, until fixing rate is reached. In this case, no variable is randomly selected.
2072
2073- extend potential parameter of GINS to allow computation based on local LP solution, as well
2074
2075- new primal heuristic Adaptive Diving, which registers all publicly available dive sets from other diving heuristics.
2076 At each call, it selects one of the available dive sets based on the user's score type choice (heuristics/adaptivediving/scoretype).
2077 During the solution process, the heuristics learns online which divesets reach the best score, and executes them more frequently.
2078 The statistic output for Diving heuristics has been extended to incorporate the statistics of each dive set within Adaptive diving.
2079
2080- Added new penalty alternating direction method (PADM) primal heuristic that splits the problem into several sub-SCIPs
2081 according to a user-provided decomposition. The sub-SCIPs are solved on an alternating basis until a feasible solution of
2082 the original problem is found.
2083
2084- Symmetry handling constraints (cons_orbisack, cons_orbitope, cons_symresack) now have an additional parameter to encode
2085 whether they are model constraints, i.e., define the problem, or whether they are only present to handle symmetries.
2086
2087- The symmetry code has been completely restructured. The presolvers presol_symbreak and presol_symmetry as well as the propagator
2088 prop_orbitalfixing have been merged into the single propagator prop_symmetry to avoid storing the same information
2089 multiple times. This propagator is now responsible for adding symmetry handling constraints as well as activating orbital
2090 fixing. Moreover, the new file symmetry.c contains general functions for symmetry computations like orbit computations.
2091
2092- Variables can now be marked as "relaxation-only". This flag should be used to introduce new variables that are required
2093 to define a relaxation, but that are not part of any checked constraints. Essentially, these variables should only be used
2094 in the current SCIP solve and disregarded after a restart or in SCIP copies. Hence, these variables are not copied by SCIPcopy and
2095 SCIPgetVarCopy, they are currently not used in conflict constraints, and cuts involving them are not upgraded to linear constraints.
2096 Relaxation-only variables cannot appear in the objective function.
2097
2098- The OSiL reader now supports nonlinear expressions of type "signpower".
2099
2100- Expressions of form abs(x)^p * x in a nonlinear constraint are now sometimes recognized and handled by abspower constraints.
2101
2102- If polyhedral symmetry handling methods are used (cons_orbisack, cons_orbitope, cons_symresack), it is now possible to
2103 recompute symmetries if a restart occured.
2104
2105- upgrade some more quadratic constraints to second-order cone constraints, that is,
2106 handle linear binary variables as if squared in simple upgrade and
2107 do not require bounds for variables that have a zero entry in the computed eigenvectors in the non-simple upgrade
2108
2109- new variable event when changing the variable type
2110
2111- It is no longer necessary to provide a SCIP pointer for the subproblem in SCIPaddBendersSubproblem if custom solving
2112 methods are defined. A NULL pointer can be supplied to SCIPaddBendersSubproblem. In this case, no internal Benders'
2113 cut generation methods can be used.
2114
2115- Using the parameter "constraints/symresack/checkmonotonicity" one can now decide to upgrade to packing/partitioning
2116 symresacks even if the underlying permutation is not monotone.
2117
2118- New branching rule `vanillafullstrong`, mostly for scientific purpose, with the following features:
2119 1) no cutoff or domain reduction: only branching;
2120 2) idempotent (optional): leave SCIP, as much as possible, in the same state before / after the strong branching calls
2121 - basically, do not update any statistic;
2122 3) donotbranch (optional): do no perform branching. So that the brancher can be called as an oracle only
2123 (on which variable would you branch ? But do not branch please);
2124 4) scoreall (optional): keep scoring variables, even if infeasibility is detected;
2125 5) collectscores (optional): store the candidate scores from the last call, which can then be retrieved by calling SCIPgetVanillafullstrongData();
2126 6) integralcands (optional): consider integral candidates for branching,
2127 i.e., get candidates from SCIPgetPseudoBranchCands() instead of SCIPgetLPBranchCands().
2128
2129- If a reference value (misc/referencevalue) is given, the primal-reference and reference-dual integrals are calculated automatically and printed within the SCIP statistics.
2130
2131- Locally valid cuts / rows are now considered for dual proof analysis when `conflict/uselocalrows` is set to TRUE.
2132
2133- Linking variables in the linking constraint handler (cons_linking.{ch}) can now be integer or continuous. The coefficients of the binary variables are therefore now stored as SCIP_Real.
2134
2135- To save memory, it is now possible to remove all variables from the internal symmetry data structures that are
2136 not affected by any symmetry.
2137
2138- Allow to filter first variables from orbits and transfer pseudo cost information to variables in orbit
2139
2140- Add integration of external MILP presolve library as a SCIP presolver plugin that runs on MILP problems
2141
2142- Parallelisation can be used when applying Benders' decomposition. There are two different forms of parallelisation
2143 available. The first is applying Benders' decomposition within a parallel branch-and-bound. This is achieved through
2144 the integration with the UG framework. The second is the use of shared memory parallelisation for solving the Benders'
2145 decomposition subproblems. A priority queue has been added to help with load balancing.
2146
2147- The Benders' decomposition framework can handle MINLPs. If a convex relaxation of the MINLP exists, then this is
2148 solved to generate optimality and feasibility cuts. The extensions to the framework are:
2149 - New generic solving methods to solve convex NLP subproblems.
2150 - Modification to benderscut_opt and benderscut_feas to enable the generation of cuts from convex NLPs.
2151 - Addition of benderscut_feasalt to generate feasibility cuts from an alternative subproblem that minimises the
2152 violation of infeasible problems.
2153 - Better handling of subproblem solution results
2154
2155- Adds a feasibility phase to the Benders' decomposition subproblem solving methods. The feasibility phase adds slack
2156 variables to each of the constraints to ensure feasibility of the subproblem. A large coefficient is given to these
2157 slack variables in the objective function to penalise constraint violations. The coefficients are progressively
2158 increased until all slack variables take the value 0.0.
2159
2160- Improved convexity check for Benders' decomposition subproblems. The constraints of the subproblem are now checked for
2161 convexity in the initialisation of the Benders' decomposition algorithm. This enables the solving of convex NLPs as
2162 Benders' decomposition subproblems.
2163
2164- Benders' decomposition can be applied using decomposition supplied in the DEC format. To apply Benders' decomposition
2165 the parameters decomposition/benderslabels and decomposition/applybenders must be set to TRUE.
2166
2167- new event handler event_estim.c/h that approximates search tree completion and estimates tree size
2168 to trigger restarts; many approximations of search tree completion and estimation, including WBE, SSG, and tree profile method
2169- new display column that reports approx. search tree completion during the search, and an overview in the statistics table
2170- added resources (script, tutorial, test data) to adapt tree size estimation to user instances.
2171
2172- Orbital Fixing uses a list of variables that have been fixed globally since the computation of symmetries to filter
2173 symmetries. Previously, some plugins were disabled, which is not necessary anymore.
2174
2175- A new presolver "dualsparsify" was added. It tries to combine columns (i.e. variables) to cancel nonzero coefficients in the constraint matrix.
2176
2177- The presolver "tworowbnd" was implemented with better performance.
2178
2179- To be able to calculate better bounds for the dual variables, the presolver "dualinfer" was extended by the ability to perform convex combinations of continuous columns.
2180
2181- allow disabling of pricers during solving process
2182
2183- added emphasis setting for numerically challenging instances
2184
2185Performance improvements
2186------------------------
2187
2188- Extended cut presolving by removing variables that been fixed at their bounds
2189
2190- Improved branching point selection when branching on externals branching candidates. Instead of using exactly the
2191 LP solution, a point closer to the middle of the variables domain is chosen.
2192
2193- Matrix presolvers that do not work on incomplete matrices now skip matrix creation if unsupported constraint types are detected.
2194
2195- consLockBenders callback implemented to add down locks on the Benders' decomposition auxiliary variables and
2196 up and down locks per subproblem for all master problem variables. This allows the use of presolving and propagation
2197 with Benders' decomposition.
2198
2199- improved performance of orbital fixing in several ways:
2200 store permutations in transposed form to improve cache efficency;
2201 reverse order to speed up filtering of permutations;
2202 handle variables globally fixed to 1 in list;
2203 use event handler to catch global fixings;
2204 speed up orbit computations;
2205 change handling of restarts;
2206 use only permutations that can contribute to a variable's orbit;
2207
2208- allow rapid learning at local nodes
2209
2210- allow to recompute cut without using fractional values for sepa_cgmip
2211
2212- restrict the number of the clique table nonzeros relative to the number of problem nonzeros, which could be a performance bottleneck.
2213
2214- variable fixings of LP face heuristic are now computed earlier; subproblem creation is skipped if not enough variables are fixed.
2215
2216- Improved domcol presolver to not require a complete representation of all constraints in the matrix
2217
2218- performance improvement of adaptive large neighborhood search heuristic on merely continuous problems. The heuristic
2219 stops if presolving in the sub-SCIP fixes less than 50 % of the current target fixing rate over all variables
2220 (including continuous).
2221
2222- reduce memory usage in symmetry detection by a staggered allocation with decreasing overhead for larger instances
2223
2224- improved full orbitope propagation using a static implementation or a dynamic reordering of orbitope rows by a global rank function
2225
2226- improved detection of packing/partitioning orbitopes
2227
2228- enable an in-tree restart if after a reasonable initialization, the estimated size of the remaining tree is large.
2229
2230
2231Examples and applications
2232-------------------------
2233
2234- added methods to set and get hmin and hmax for optcumulative constraints
2235
2236Interface changes
2237-----------------
2238
2239### New and changed callbacks
2240
2241- new optional callback `SCIP_DECL_DIVESETAVAILABLE` to check preconditions for this dive set, e.g., if an incumbent solution is available,
2242 which is passed as new argument to SCIPcreateDiveset(). SCIPcreateDiveset() has another new parameter "ispublic".
2243
2244- new callback `SCIP_DECL_CONSHDLRCOPY` and `SCIP_DECL_CONSCOPY` in cons_orbisack and cons_symresack
2245
2246- new `idempotent` argument to SCIPgetVarStrongbranchInt() and SCIPgetVarStrongbranchFrac(),
2247 so that statistics are not updated during the call. Likewise, new `updatecol` and `updatestat` arguments to SCIPcolGetStrongbranch().
2248
2249- callback `SCIP_DECL_CONSHDLRENFOLP` can now also return SCIP_SOLVELP as *result, which indicates to the SCIP core that the LP relaxation
2250 should be solved again because the primal feasibility tolerance of the LP has been tightened (using SCIPsetLPFeastol())
2251
2252- extension of SCIP_PQUEUE by a new callback SCIP_DECL_PQUEUEELEMCHGPOS to catch swaps as well as functionality to delete arbitrary elements from the priority queue.
2253
2254### Deleted and changed API methods
2255
2256- LPI:
2257 + now for all lp interfaces consistent requirements on SCIP_LPPAR:
2258 LPITLIM and BARRIERCONVTOL positive or zero; FEASTOL, DUALFEASTOL, LPTILIM strictly positive
2259 + now projecting SCIP_LPPAR values on feasible values for each lp interface
2260 + add interface to Glop
2261 + fixed mapping between scaling parameter values in Gurobi LPI lpi_grb
2262- Symmetry:
2263 + removed method SCIPseparateCoversOrbisack() in cons_orbisack.h since the orbitope constraint
2264 handler has its own implementation of this routine with advanced features now
2265 + renamed SCIPgetGeneratorsSymmetry() to SCIPgetSymmetry() and removed two arguments
2266 + extended method SCIPgetSymmetry(): It is possible to access both the original and
2267 transposed permutations matrix as well as the (independent symmetry) components of a permutation group now.
2268 + arguments of functions SCIPcreateConsOrbisack(), SCIPcreateConsBasicOrbisack(), SCIPcreateConsOrbitope(),
2269 SCIPcreateConsBasicOrbitope(), SCIPcreateConsSymresack(), SCIPcreateConsBasicSymresack(), and SCIPcreateSymbreakCons() extended
2270 by "ismodelcons" to encode whether the constraints are model constraints or not
2271 + the function SCIPgetSymmetry() no longer accepts the parameter recompute, but has parameter permvarmap as new input
2275 + add function SCIPcomputeOrbitsComponentsSym() to compute orbits without filtering permutations and indices of orbits for each variable
2276- SCIPallowObjProp() and SCIPallowDualReds() are deprecated and replaced by SCIPallowWeakDualReds() and SCIPallowStrongDualReds(), respectively
2277- Benders' decomposition
2278 + changed SCIPstoreBenderscutCut() in scip_benders.c to SCIPstoreBendersCut(). Where this function used to take a
2279 SCIP_BENDERSCUT pointer, it now accepts a SCIP_BENDERS pointer.
2280 + the functions SCIPsolveBendersSubproblem() no longer accepts the parameter type. The type is not a necessary
2281 argument for the subproblem solving method.
2282 + arguments of functions SCIPbendersSolveSubproblemLP(), SCIPbendersSolveSubproblemCIP(), and SCIPbendersOnlyCheckConvexRelax() changed
2283 - removed SCIPbenderscutGetNAddedCuts() and SCIPbenderscutGetAddedCutData()
2284
2285
2286### New API functions
2287
2288- new argument "onlyifcomplete" in SCIPmatrixCreate() to skip matrix creation right after detecting unsupported constraint types
2289 and new arguments to count statistics when doing a clean-up of inactive variables in the constraints before building the matrix
2290
2291- new argument "threadsafe" in SCIPcopy(), SCIPcopyConsCompression(), SCIPcopyOrig(), SCIPcopyOrigConsCompression and
2292 SCIPcopyBenders(). This argument must only be set to TRUE if the source and target SCIP instances are to be solved in
2293 parallel. Setting this argument to TRUE has a performance cost.
2294
2295- new argument "append" in SCIPsetModifiedDefaultSettingsIpopt()
2296- functions SCIPclearRelaxSolVals(), SCIPsetRelaxSolVal(), SCIPsetRelaxSolVals(), SCIPsetRelaxSolValsSol(), and SCIPmarkRelaxSolValid()
2297 receive an additional argument "relax" to store the relaxation handler as creator of the relaxation solution.
2298
2299- LP:
2300 - SCIProwGetOriginCons() now returns a SCIP_CONS* instead of a SCIP_CONSHDLR*, use SCIProwGetOriginConshdlr() for the previous behavior
2301 - SCIPcreateRowCons() and SCIPcreateEmptyRowCons() now expect a SCIP_CONS* instead of a SCIP_CONSHDLR*,
2302 use SCIPcreateRowConshdlr() and SCIPcreateEmptyRowConshdlr(), respectively, for the previous behavior
2303 - deprecated SCIPlpfeastol() and SCIPchgLpfeastol(), use SCIPgetLPFeastol() and SCIPsetLPFeastol()
2304
2305- new parameter "divecontext" for every method that queries statistics for a diveset. The context can be used to distinguish between the dive set
2306 as single (standalone) heuristic or within Adaptive Diving.
2307- new parameters "divecontext" and "iterlim" to SCIPperformGenericDivingAlgorithm() to control in which context (single,adaptive) statistics are updated.
2308
2309- SCIPcopyVars, SCIPcopy, SCIPcopyConsCompression, and SCIPgetVarCopy do not copy variables that are marked as relaxation-only,
2310 thus it cannot be assumed anymore that each active variable from the master SCIP also has a counterpart in the copy.
2311 SCIPcopy, SCIPcopyConsCompression, and SCIPcopyConss can now return *valid=TRUE if some non-checked and non-enforced constraints were not copied, e.g.,
2312 because they involved relaxation-only variables. Thus, a copy is already regarded as valid if all checked or enforced constraints were copied successfully.
2313
2314- linking constraint handler:
2315 - changed type of vals argument from int* to SCIP_Real* in SCIPcreateConsLinking() and SCIPcreateConsBasicLinking()
2316 - SCIPgetIntvarLinking() has been renamed to SCIPgetLinkvarLinking().
2317 - changed return value of SCIPgetValsLinking() from int* to SCIP_Real*.
2318 - new method SCIPgetBinvarsDataLinking().
2319
2320- SCIPbendersCheckSubproblemOptimality() now returns a boolean indicating whether the subproblem is optimal or not.
2321 Previously this result was returned through a parameter. The change was required to facilitate the integration with
2322 the UG framework.
2323
2324- deleted SCIPcombineTwoInt(), SCIPcombineThreeInt(), SCIPcombineFourInt(); use the appropriate SCIPhashTwo(), ..., SCIPhashSeven() method instead
2325
2326- SCIPsetupBendersSubproblem takes a parameter of the enforcement type.
2327
2328- SCIPcreateNlpiProb takes a hashmap to store the map between the nlrows and the index in the nlrow array.
2329
2330### New API functions
2331
2332- SCIPallowWeakDualReds() and SCIPallowStrongDualReds() replace the deprecated SCIPallowObjProp() and SCIPallowDualReds(), respectively
2333- methods have been added to facilitate the transfer of Benders' decomposition cuts between solvers in UG. These include
2334 SCIPapplyBendersStoredCuts(), SCIPbendersGetNStoredCuts(), SCIPbendersGetStoredCutData() and
2335 SCIPbendersGetStoredCutOrigData().
2336- added SCIPisConvexAbspower()
2337- new functions SCIPsolGetType(), SCIPsolGetRelax(), SCIPsolSetRelax(), SCIPsolSetLPRelaxation(), SCIPsolSetStrongbranch(),
2338 SCIPsolSetPseudo to set or query the new type attribute of a primal solution. The type attribute gives information
2339 about the origin of the solution, ie, whether it was created by a relaxation handler,
2340 by the LP relaxation, by strong branching, by the current pseudo solution, or by a primal heuristic.
2341 The meaning of the argument 'heur' in all creation methods for primal solutions such as SCIPcreateSol() stays unchanged.
2343- new API functions SCIPsetCommonSubscipParams(), SCIPtranslateSubSol(), and SCIPtranslateSubSols() shared by several Large Neighborhood Search heuristics.
2344- new API function SCIPgetLPDualDegeneracy() to get two measures for the dual degeneracy of the current LP
2345- new API functions SCIPdivesetIsAvailable() to check preconditions of a dive set and SCIPdivesetIsPublic() to check if the dive set can be used
2346 by other primal heuristics.
2347- new API functions SCIPcomputeOrbitsSym(), SCIPcomputeOrbitsFilterSym(), SCIPgetPropertiesPerm(), SCIPdetermineBinvarAffectedSym(),
2348 SCIPdetermineNVarsAffectedSym(), SCIPcomputeComponentsSym(), and SCIPextendSubOrbitope(), SCIPgenerateOrbitopeVarsMatrix() for symmetry computations
2349- new API functions SCIPvarIsRelaxationOnly() and SCIPvarMarkRelaxationOnly() to query and set, resp., whether a variable is marked as relaxation-only
2350- new API functions SCIPconshdlrGetNUpdateConss() and SCIPconshdlrGetUpdateConss(), for expert users only
2351- new API function SCIPgetNConflictDualproofsApplied()
2352- new API functions SCIPeventGetOldtype() and SCIPeventGetNewtype() for the new event when changing the variable type
2353- new API function SCIPisConvexConsQuadratic() to check whether a quadratic constraint is convex when a given set of variables would be fixed
2354- new API functions SCIPgetLPFeastol(), SCIPsetLPFeastol(), and SCIPresetLPFeastol() to get, set, and reset (to the default), respectively, the primal
2355 feasibility tolerance for the LP relaxation
2356- new API functions SCIPcleanupConss{Linear,Varbound,Setppc,Logicor,Knapsack}() to clean up inactive variables from those types of linear constraints
2357- new API function SCIPsetBendersSubproblemComp() used to add a custom comparison method for ordering the Benders'
2358 decomposition subproblem solves. The comparison method is used to help with load balancing.
2359- new API function SCIPgetRowObjParallelism to get the objective parallelism of a row
2360- new API function SCIPcolGetAge to get the age of a column
2361- added SCIPhashThree(), SCIPhashFive(), SCIPhashSix(), and SCIPhashSeven() that complement SCIPhashTwo(), SCIPhashFour() to combine 32bit integers to
2362 a 32bit hash value
2363- new API function SCIPgenerateAndApplyBendersOptCut is used to generate a Benders' optimality cut using the dual
2364 solutions. This function can be supplied vectors for the primal and dual solution for generating an optimality cut.
2365 This avoids the need for a SCIP instance to solve the Benders' decomposition subproblem and generating cuts.
2366- new API function SCIPconsAddCoef used for adding a coefficient to a linear-type constraint.
2367- new API functions SCIPconsNonlinearGetRhs, SCIPconsNonlinearGetLhs and SCIPconsNonlinearAddLinearCoef for getting the
2368 RHS and LHS from a nonlinear-type constraint and adding a linear coefficient to the constraint.
2369- new API function SCIPbendersSolSlackVarsActive for checking whether any slack variables from the feasibility phase are
2370 active in the subproblem solution.
2371- new API functions SCIPbendersSetSubproblemType and SCIPbendersGetSubproblemType sets and gets the subproblem type.
2372 This is either:
2373 - Convex constraints with continuous variables
2374 - Convex constraints with discrete variables
2375 - Non-convex constraints with continuous variables
2376 - Non-convex constraints with discrete variables
2377- new API functions SCIPbendersSetSubproblemIsNonlinear() and SCIPbendersSubproblemIsNonlinear() for setting and
2378 identifying whether the Benders' decomposition subproblems contain nonlinear constraints. Similarly, the functions
2379 SCIPbendersSetMasterIsNonlinear() and SCIPbendersMasterIsNonlinear() sets and identifies whether the Benders'
2380 decomposition master problem contains nonlinear constraints.
2381- new API function SCIPapplyBendersDecomposition for applying Benders' decomposition given a decomposition in the DEC
2382 format
2383- new API function SCIPwasNodeLastBranchParent to query if a node has been the parent of the most recent branching in the tree
2384- new API functions SCIPtreemodelInit(), SCIPtreemodelFree(), SCIPtreemodelIsEnabled(), SCIPtreemodelSelectCandidate() related to the new
2385 treemodel way of comparing branching candidates. These functions are only currently used for reliability pscost branching, but they can be used
2386 in other parts of the code.
2387- New function SCIPcalcChildEstimateIncrease() to compute the increase in the child estimation
2388- new API functions SCIPisOrbitalfixingEnabled() and SCIPgetSymmetryNGenerators() to check whether orbital fixing is
2389 enabled and to get the number of generators of the current symmetry group, respectively
2390- new API function SCIPdelNlRow() to remove a row from the NLP
2391
2392### Event system
2393
2394- new event type SCIP_EVENTTYPE_NODEDELETE to react on nodes that are about to be deleted from the tree
2395
2396### Changed parameters
2397
2398- renamed parameter "propagating/orbitalfixing/enableafterrestart" to ".../symmetry/recomputerestart"
2399- Parameter "misc/allowdualreds" is now called "misc/allowstrongdualreds"
2400- Parameter "misc/allowobjprop" is now called "misc/allowweakdualreds"
2401- changed default values of propagation (new value: 1, old value: 5) and separation frequency (new value: -1, old value: 5) in cons_orbitope.c
2402- all primal heuristics that use sub-SCIPs are disabled within the heuristics fast emphasis setting
2403- deleted parameter heuristics/localbranching/useuct, use heuristics/useuctsubscip instead
2404- changed default value of "presolving/symbreak/detectorbitopes" (new value: TRUE, old value: FALSE)
2405- extended range of "misc/usesymmetry" (new range: [0,3], old range: [0,2])
2420- changed default value of "heuristics/coefdiving/freq" (old: 10, new: -1)
2421- changed default value of "heuristics/conflictdiving/freq" (old: -1, new: 10)
2422- changed default value of "heuristics/conflictdiving/lockweight" (old: 1.0, new: 0.75)
2423- replaced parameter "numerics/lpfeastol" by "numerics/lpfeastolfactor" to specify which factor should be applied to the SCIP feasibility
2424 tolerance to initialize the primal feasibility tolerance of the LP solver
2425- enabling aggressive presolving now activates all available presolving plugins,
2426 and decreases the presolving/restartfac parameter correctly with respect to default.
2427- changed default value of heuristics/rins/nodesquot to 0.3 (was 0.1), to compensate
2428 the removal of a hard coded factor of 3.0 in the code without affecting the default behavior
2429 of the RINS heuristic.
2430- changed default value of "constraints/quadratic/empathy4and" (old: 0, new: 2)
2431- changed default value of "propagating/redcost/useimplics" (old: TRUE, new: FALSE)
2432
2433### New parameters
2434
2435- the possibility to define the Benders' decomposition auxiliary variables as implicit integer is provided. This
2436 behavior is controlled with an additional parameter in the Benders' decomposition framework.
2437- added parameter benders/<bendersname>/cutcheck to enable the generation of Benders' decomposition cuts during solution
2438 checking.
2439- constraints/orbitope/usedynamicprop: the possibility to propagate orbitope constraints by reordering the rows based on the
2440 branching strategy is provided (only possible for non-model constraints)
2441
2442- new parameters heuristics/shiftandpropagate/minfixingratelp and heuristics/locks/minfixingratelp to stop the
2443 heuristics after propagating integer fixings if no sufficient fixing of the all variables (including continuous)
2444 could be achieved. These parameters help to avoid solving LP's that are comparable in hardness to the main root LP.
2445
2446- Added parameters branching/midpull and branching/midpullreldomtrig to control by how much to move
2447 the branching point for an external branching candidate closer to the middle of the candidates domain. The
2448 default of 0.75 and 0.5, respectively, uses a point that is 75*alpha% closer to the middle of the domain, where
2449 alpha is the relative width of the candidates domain (width of local domain divided by width of global domain),
2450 if the latter is below 0.5, and alpha=1.0 otherwise. That is, with the default settings, a branching point is
2451 chosen closer to the middle of the candidates domain if the variables local domain is still similar to its
2452 global domain, but is chosen closer to the LP solution if the local domain is much smaller than the global
2453 domain.
2454
2455- Added parameter lp/minmarkowitz to set the Markowitz stability threshold (range 0.0001 to 0.9999).
2456 High values sacrifice performance for stability.
2457
2458- Added parameters benders/<bendersname>/lnsmaxcalls and benders/<bendersname>/lnsmaxcallsroot to the Benders'
2459 decomposition core. These parameters limit the number of Benders' decomposition subproblem checks, for the full
2460 branch-and-bound tree and root node respective, when solving the auxiliary problem of LNS hueristics. These
2461 parameters only have effect if the lnscheck parameter is set to TRUE.
2462
2463- Added parameter cons/linear/maxmultaggrquot to limit the maximum coefficient dynamism of an equation on which
2464 multiaggregation is performed. This replaces a compiler define of the same name.
2465 Default value is 1000, smaller values make multiaggregations numerically more stable.
2466- new global parameter heuristics/useuctsubscip that affects all LNS heuristics using common sub-SCIP parameters
2467
2468- new parameter branching/relpscost/degeneracyaware to switch degeneracy-aware hybrid branching
2469
2470- new parameter separation/rapidlearning/checkexec to check whether rapid learning is allowed to run locally
2471- new parameters separation/rapidlearning/check{degeneracy,dualbound,leaves,nsols,obj} to enable checking the respective feature for local rapid learning
2472- new parameter separation/rapidlearning/maxcalls to limit the number of rapid learning executions
2473- new parameter separation/rapidlearning/nwaitingnodes to set the number of waiting nodes before the dual bound is checked
2474- new parameter separation/rapidlearning/mindegeneracy to set the minimal threshold of degenerate basic-variables
2475- new parameters separation/rapidlearning/minvarconsratio to set the minimal ratio of unfixed variables in relation to basis size
2476
2477- new parameters to control the Benders' decomposition two-phase method.
2478 - constraints/benderslp/depthfreq: after the maxdepth is reached, then the two-phase method will only be called at
2479 nodes at a depth divisible by depthfreq.
2480 - constraints/benderslp/stalllimit: after the maxdepth is reached, if there has been no improvement in the dual bound
2481 for stalllimit number of nodes, then the two-phase method is executed for the next fractional LP solution that is
2482 encountered.
2483 - constraints/benderslp/iterlimit: after the root node, only iterlimit fractional LP solutions are used at each node
2484 to generate Benders' decomposition cuts.
2485
2486- new parameters for symmetry handling
2487 - new parameter "propagating/symmetry/maxgenerators"
2488 - new parameter "propagating/symmetry/checksymmetries"
2489 - new parameter "propagating/symmetry/displaynorbitvars"
2490 - new parameter "propagating/symmetry/conssaddlp"
2491 - new parameter "propagating/symmetry/addsymresacks"
2492 - new parameter "propagating/symmetry/detectorbitopes"
2493 - new parameter "propagating/symmetry/addconsstiming"
2494 - new parameter "propagating/symmetry/ofsymcomptiming"
2495 - new parameter "propagating/symmetry/performpresolving"
2496 - new parameter "propagating/symmetry/recomputerestart"
2497 - new parameter "constraints/symresack/checkmonotonicity"
2498 - new parameter "propagating/symmetry/compresssymmetries"
2499 - new parameter "propagating/symmetry/compressthreshold"
2500 - new parameter "propagating/symmetry/disableofrestart"
2501 - new parameter "propagating/symmetry/symfixnonbinaryvars"
2502
2503- new parameter for enabling shared memory parallelisation for solving Benders' decomposition subproblems. The parameter
2504 benders/<bendersname>/numthreads sets the number of threads used for parallel subproblem solving.
2505
2506- new parameters to control enhancements for solving MINLPs by Benders' decomposition
2507 - benders/<bendersname>/execfeasphase: enables the feasibility phase for solving the Benders' decomposition
2508 subproblems
2509 - benders/<bendersname>/slackvarcoef: the initial coefficient of the slack variable for the feasibility phase
2510 - benders/<bendersname>/checkconsconvexity: should the constraints be checked for convexity. This can be set to FALSE
2511 if you are certain that the NLP subproblem is convex.
2512
2513- new parameter presolving/clqtablefac (default value 2.0) as limit on number of entries in clique table relative to number of problem nonzeros
2514
2515- new parameter conflict/uselocalrows (default: TRUE) to incorporate locally valid cuts / rows for dual proof analysis
2516
2517- new return code SCIP_NOTIMPLEMENTED for functions, e.g., in the LPI that have not been implemented (yet)
2518
2519- new parameter separating/cgmip/genprimalsols that allows to generate initial primal solutions from Gomory cuts
2520
2521- new parameter branching/relpscost/filtercandssym to allow filtering from orbits
2522
2523- new parameter branching/relpscost/transsympscost to transfer pseudo cost information to orbit
2524
2525- new parameters for tree size estimation and restarts:
2526 - estimation/restarts/restartpolicy (default value n)
2527 - estimation/method (default value c)
2528 - estimation/restarts/restartlimit (default value 1)
2529 - estimation/restarts/minnodes (default value 1000)
2530 - estimation/restarts/countonlyleaves (default value FALSE)
2531 - estimation/restarts/restartfactor (default value 2)
2532 - estimation/coefmonoprog (default value 0.3667)
2533 - estimation/coefmonossg (default value 0.6333)
2534 - estimation/restarts/hitcounterlim (default value 50)
2535 - estimation/reportfreq (default value -1)
2536 - estimation/regforestfilename (default value "-")
2537 - estimation/completiontype (default value a)
2538 - estimation/treeprofile/enabled (default value FALSE)
2539 - estimation/treeprofile/minnodesperdepth (default value 20)
2540 - estimation/useleafts (default value TRUE)
2541 - estimation/ssg/nmaxsubtrees (default value -1)
2542 - estimation/ssg/nminnodeslastsplit (default value 0)
2543
2544- new parameter constraints/linear/extractcliques to turn clique extraction off
2545
2546- new emphasis setting emphasis/numerics to increase numerical stability of (mostly) presolving operations such as (multi-)aggregations at the cost of performance.
2547
2548- new parameters for treemodel:
2549 - new parameter branching/treemodel/enable to enable the treemodel in reliability pscost branching and possible
2550 future parts of the code where it could be used.
2551 - new parameter branching/treemodel/highrule to specify which branching rule to use when treemodel thinks the node
2552 is high in the tree.
2553 - new parameter branching/treemodel/lowrule to specify which branching rule to use when treemodel thinks the node
2554 is low in the tree.
2555 - new parameter branching/treemodel/height to specify at which (estimated) height a node is high or low in the tree.
2556 - new parameter branching/treemodel/filterhigh to specify whether to filter dominated candidates in nodes which are
2557 high in the tree.
2558 - new parameter branching/treemodel/filterlow to specify whether to filter dominated candidates in nodes which are
2559 low in the tree.
2560 - new parameter branching/treemodel/maxfpiter to specify the maximum number of fixed-point iterations to use when
2561 computing the ratio of a variable using the fixed-point method.
2562 - new parameter branching/treemodel/maxsvtsheight to specify the maximum height to compute the SVTS score exactly
2563 before approximating it using the ratio.
2564 - new parameter branching/treemodel/fallbackinf defines the fallback strategy to use when the tree size estimates
2565 obtained by SVTS are infinite.
2566 - new parameter branching/treemodel/fallbacknoprim defines the fallback strategy to use when no primal bound is known
2567 and thus SVTS would not be able to compute a tree size (it would be infinite).
2568 - new parameter branching/treemodel/smallpscost defines the value under which pscosts are considered too small to be
2569 the deciding factor for branching, in which case it may be better not to use the treemodel.
2570
2571- new parameters for symmetry handling constraint handlers to enforce that also non-model constraint are copied:
2572 - new parameter "constraints/orbisack/forceconscopy"
2573 - new parameter "constraints/orbitope/forceconscopy"
2574 - new parameter "constraints/symresack/forceconscopy"
2575
2576
2577### Data structures
2578
2579- small changes in constants of hash functions
2580- added fast 2-universal hash functions for two to seven 32bit elements with 32bit output
2581- extended SCIPpqueueCreate() by additional callback argument SCIP_DECL_PQUEUEELEMCHGPOS to catch position changes
2582- new methods SCIPpqueueDelPos() to delete elements at a specific position in the priority queue and SCIPpqueueFind() to
2583 find a specific position. It is recommended to track position changes using the new callback SCIP_DECL_PQUEUEELEMCHGPOS.
2584 In contrast, using SCIPpqueueFind() can be slow because it needs to compare the element it searches for
2585 with each slot in the queue.
2586
2587### Build system
2588
2589- The default value for DFLAGS in the non-cmake buildsystem has changed from -MM to -MMD. This will break the
2590 generation of depend.* files if that was done by a compiler call that relied on -MM. The new preferred way
2591 to handle compilation dependencies is to additionally use $(DFLAGS) when compiling the object files (.o) and
2592 to include the generated .d files in the Makefile, see also "Build system / Makefile" below.
2593
2594Unit tests
2595----------
2596 - new unit test for treemodel.
2597
2598Testing
2599-------
2600
2601 - fixed an issue that may have lead to wrong status reports in the evaluation scripts
2602
2603Build system
2604------------
2605
2606### Cmake
2607
2608- avoid problem with doubly defined object together with CPLEX
2609
2610### Makefile
2611
2612- Removed static object compilation dependency files (depend.*). If using a GCC compatible compiler, then dependency
2613 files are now dynamically created and updated during build. The new dependency files (*.d) reside next to each object
2614 file (.o) in the corresponding obj subdirectory.
2615- added support for building against Ipopt >= 3.13
2616- unify compiler switches for Intel compiler and avoid problem with doubly defined object together with CPLEX
2617
2618Fixed bugs
2619----------
2620
2621- fix and improve memory handling in symmetry computation
2622- fix shown number of applied conflicts in solving statistics
2623- fix wrongly skipping strong branching call and using old information if LP was solved with 0 iterations
2624- fix minor bug in cut score calculation
2625- fixed several bugs related to rounding locks of variables not being updated correctly
2626- small fix in cons_varbound.c to skip changing bounds of multi-aggregated variables in separation callback
2627- fixed issue in SCIPtightenVar* and SCIPinferVar* that occurs for small bound changes
2628- fixed rejecting minimal boundchange that changed sign of variable, even though SCIPisLb/UbBetter approved it
2629- fixed issue in generateCutNonConvex() which is triggered when adding quadratic constraints during the solving process
2630- fixed bug in freeing the reoptimization data if no problem exists
2631- fixed bug in SCIPreoptReleaseData() when freeing all stored constraints
2632- fixed bug when freeing the transformed problem via interactive shell if reoptimization is enabled
2633- fixed two issues related to (near-)redundant logicor constraints in presolving
2634- fixed counting of aggregations in XOR constraint handler
2635- fixed handling of unbounded solutions
2636- fixed update of LP size information when an LP error occured during probing
2637- handle special case of variable bound constraints during aggregating variables
2638- tighten sides of linear constraints before trying to upgrade them to more specialized constraints (knapsack, logic-or etc.) when calling SCIPupgradeConsLinear()
2639- fixed an issue in repair heuristic in the case of loose (noncolumn) variables
2640- allow user to correctly set heuristics/alns/(un)fixtol
2641- fixed an issue in heur_completesol which is triggered during bound widening of unbounded continuous variables
2642- fixed bug in cons_indicator if addopposite is true
2643- fixed bug in sepa_disjunctive: treat case that conflictgraph is empty
2644- added safety check in conversion to rational number to avoid overflow
2645- fixed bug in interval evaluation with power-operator in certain situations
2646- fixed behavior of SCIPmatrixCreate() regarding memory management and column generation
2647- SCIPmatrixCreate() returns complete=FALSE when locks do not add up
2648- fixed bug in sepa_oddcylce when variables are fixed
2649- fixed numerical issues related to tighter constraint sides in varbound constraint handler
2650- fixed update of watchedvars in logicor constraint handler in case of a restart during the tree
2651- fixed treatment of multi-aggregated variables in logicor constraint handler
2652- handle special case of redundant implications
2653- fixed numerical issue related to almost-0-values in pseudosolution conflict analysis
2654- fixed numerical issue related to very large greatest common dividers in linear constraint handler
2655- avoid using implications on multiaggregated variables when propagating implications
2656- fixed creation of (Lagrangian) variable bounds in the OBBT propagator
2657- fixed sorting of primal solutions
2658- fixed cleaning of clean buffer in conflict analysis
2659- avoid probing on variables with huge bounds in shift and propagate heuristic
2660- fix issue in printing solutions for variables that have been added by the dual sparsify presolver
2661- fix issue related to fixing redundant logic-or constraints after presolving
2662- fixed bug when parsing logic-or and and-constraints
2663- fixed wrong assert in updateLazyBounds()
2664- fixed bug in pricestore, which resulted in too many problem variables being added
2665- fixed bug in cons_knapsack where weight of clique was not reset after an infeasibility was detected
2666- fixed bug in presol_inttobinary which did not take into account that the aggregation could be rejected due to numerics
2667- fixed bug in debug solution mechanism in connection to variables created by presol_inttobinary
2668- fixed wrong indexing while undoing the implications from a redundant variable in SCIPshrinkDisjunctiveVarSet
2669- redundancy checks in SCIPnodeAddBoundinfer now take a possible change to an active variable into account
2670- fixed adding already added quadratic rows to NLP relaxation during solve
2671- fixed issue related to variable locks in the varbound constraint handler
2672- fixed bug in the quadratic constraint handler when changing infinite constraint sides
2673- fixed sorting of variables in linear constraint handler
2674- added additional checks to ensure numerical stability of dual proofs
2675- fixed a case when activities of a linear constraint got unreliable but where still used for reductions
2676- ensure that lhs <= rhs for linear constraints (without tolerances)
2677- make handling of read errors in SCIPfread() consistent between version with and without ZLIB
2678- correctly drop variable events in cons_indicator in restart
2679- fixed bug in cons_orbitope with upgrading of orbitope constraints
2680- additional checks in some presolvers for time limit being exceeded
2681- fixed bug in presolving of cons_varbound with multi-aggregated variables
2682- improve numerics in conflict analysis by using double-double arithmetic
2683- fixed bound acceptance condition to avoid inconsistencies
2684- fixed numerics in pseudoobj propagator by using double-double arithmetic
2685
2686Miscellaneous
2687-------------
2688
2689- modified display column for memory usage ("mem"), which reports the memory usage most of the time, but shows the creator name
2690 (heuristic, relaxation handler, LP relaxation, strong branching, pseudo solution) of every new incumbent solution. Together with this change,
2691 heuristic display characters have been unified to represent the type of the heuristic
2692 (diving, Large neighborhood search, propagation, etc.), see also type_heur.h.
2693- added assert that ensures that the locks of a variable have been decreased to 0 when it is freed
2694- added more output for completing a partial solution
2695- checks in debug mode that clean buffer memory is really clean when being freed are now disabled by default
2696- don't compute symmetries if reoptimization is enabled
2697- prefer integral values when fixing an almost-fixed continuous variable in the trivial presolver
2698- changed the name of the variable that is added by the OSiL reader to represent the quadratic or nonlinear parts of the objective function
2699- SCIP_EXPORT is now defined as __attribute__((__visibility__("default"))) if GCC and no SCIP config header is used
2700
2701@page RN6 Release notes for SCIP 6
2702
2703@section RN602 SCIP 6.0.2
2704*************************
2705
2706Features
2707--------
2708
2709- The abspower constraint handler now passes more accurate convexity
2710 information to the NLP relaxation.
2711
2712Examples and applications
2713-------------------------
2714
2715- added parsing functionality for optcumulative constraints in CIP format
2716
2717Interface changes
2718-----------------
2719
2720### Interfaces to external software
2721
2722- Updated the Mosek LP solver interface to support Mosek 9.0.
2723
2724Build system
2725------------
2726
2727### Cmake
2728
2729- new target to 'doc' to build documentation
2730- ctests now fail if parameter file not found
2731- add flag STATIC_GMP and improve GMP find module
2732- remove non-API methods from library (API methods use new macro SCIP_EXPORT)
2733- increase minimal required CMake version to 3.3
2734- correct paths and dependency information when installing SCIP
2735
2736Fixed bugs
2737----------
2738- fixed SCIP-Jack presolving bug that could lead to wrong results for Steiner arborescence problems
2739- fixed wrong unboundedness result in case not all constraints were already in the LP and enforcement was
2740 skipped because an optimal solution was found
2741- fixed wrong enforcement of constraints in the disjunction constraint handler
2742- fixed wrong behavior of concurrent solve ignoring initial solutions
2743- fixed bug in concurrent solve when problem was already solved in presolving
2744- aggregate non-artificial integer variable for XOR constraints with two binary variables and delete constraint
2745- copy the objective offset when copying the original problem
2746- fixed bug in SCIPlpiGetBInvARow in lpi_cpx using wrong size of resulting vector
2747- fixed quadratic runtime behavior in sepa_aggregation
2748- fixed statistics of separators
2749- improve numerical stability in varbound constraint handler by using double-double arithmetic
2750- fixed bug in propagation of dual proofs
2751- fixed bugs that arise for multiaggregated indicator variables by disallowing multiaggregation for them
2752- improve numerical stability in SCIPcomputeBilinEnvelope* by using double-double arithmetic
2753- fixed bug related to releasing pending bound changes in tree.c
2754- set STD FENV_ACCESS pragma to on in code that changes floating-point rounding mode
2755- disable GCC optimizations in main interval arithmetic code to prevent wrong optimizations
2756- fixed wrong assert in cons_xor concerning the variable type
2757- fixed different behavior of SCIPisLbBetter and SCIPisUbBetter between having NDEBUG defined or not
2758- correctly handle bound disjunctions in symmetry detection
2759- fixed issue in reliability branching related to the LP error flag not being reset
2760- fixed treatment of near-infinite bounds in shiftandpropagate's problem transformation
2761- fixed handling of infinite values in SCIPcomputeHyperplaneThreePoints()
2762- fixed comparisons of infinite values in heur_intshifting.c and heur_shifting.c
2763- fixed bug related to updating unprocessed cuts in the cutpool
2764- fixed bug related to enabling quadratic constraints during `CONSINITLP`
2765- add missing SCIP_EXPORT for functions used by GCG
2766- fixed memory leak and wrong initialization for trival cases in cons_symresack.c
2767- fixed bug with upgrading to packing/partitioning orbitopes
2768- fixed bug with the status while upgrading in presol_symbreak.c
2769- fixed wrong stage while clearing the conflict store
2770- fixed behavior of SCIPfixVar() by setting infeasible pointer to TRUE if fixval lies outside variable domain
2771- allow tightenVar() in SCIP_STAGE_PROBLEM stage
2772- fixed bug in cumulative constraint handler when separating the LP solution
2773- fixed issues with integer overflow in cumulative constraint handler
2774- fixed bug where the convexity of Benders' decomposition subproblems was checked even when users defined subproblem
2775 solving methods. Now, as per the documentation, the user must explicitly state whether the subproblem is convex
2776- fixed wrong indexing in heur_dualval
2777- fixed issue with basis status in SoPlex LPi
2778
2779Miscellaneous
2780-------------
2781
2782- statistics now output primal/dual bounds if objective limit is reached
2783- memory check in debug mode is now disabled by default
2784- message is now provided to the user to inform that automatic Benders' auxiliary variable lower bound computations are
2785 not activated when user defined subproblem solving methods are present
2786- corrected documentation of the primalgap in SCIP; describe when it will be infinite
2787
2788@section RN601 SCIP 6.0.1
2789*************************
2790
2791Features
2792--------
2793
2794- when using a debug solution every (multi-)aggregation will be checked w.r.t. this solution
2795
2796Performance improvements
2797------------------------
2798
2799- try greedy solution first before solving knapsack exactly using dynamic programming in SCIPsolveKnapsackExactly,
2800 compute greedy solution by weighted median selection.
2801- don't consider implied redcost by default in the reduced cost propagator
2802
2803Interface changes
2804-----------------
2805
2806### Deleted and changed API methods and macros
2807
2808- The preprocessor macro NO_CONFIG_HEADER now needs to be defined when
2809 including SCIP header files from a SCIP build or installation that
2810 has been build via the Makefile-only build system.
2811
2812- The following preprocessor macros have been renamed:
2813 WITH_ZLIB to SCIP_WITH_ZLIB, WITH_GMP to SCIP_WITH_GMP, WITH_READLINE
2814 to SCIP_WITH_READLINE, NO_SIGACTION to SCIP_NO_SIGACTION, NO_STRTOK_R
2815 to SCIP_NO_STRTOK_R, ROUNDING_FE to SCIP_ROUNDING_FE, ROUNDING_FP to
2816 SCIP_ROUNDING_FP, ROUNDING_MS to SCIP_ROUNDING_MS. Note, however, that
2817 the names of macros NO_RAND_R and NO_STRERROR_R have not been changed
2818 so far.
2819
2820### New API functions
2821
2822- SCIPhashmapInsertInt(), SCIPhashmapSetImageInt(), and SCIPhashmapGetImageInt() to use integer values as images in hashmaps
2823
2824### Command line interface
2825
2826- warn about coefficients in MPS files with absolute value larger than SCIP's value for infinity
2827
2828### Changed parameters
2829
2830- default clock type for timing is now wallclock
2831
2832Unit tests
2833----------
2834
2835- added unit tests for exact knapsack solving and (weighted) median selection algorithms
2836
2837Build system
2838------------
2839
2840### Cmake
2841
2842- add missing GMP dependency when compiling with SYM=bliss
2843- add DL library when linking to CPLEX to avoid linker errors
2844- new config.h header defining the current build configuration, e.g. SCIP_WITH_GMP
2845
2846Fixed bugs
2847----------
2848
2849- fixed handling of weights in cons_sos1 and cons_sos2 (NULL pointer to weights)
2850- fixed handling of unbounded LPs in SCIP and in several LPIs; added heuristic method to guess solution
2851- the STO reader is capable of handling scenarios defined using lower case "rhs"
2852- fixed OPB reader for instances without explicit plus signs
2853- correct dual solution values for bound constraints
2854- fixed recognition of variable with only one lock in cons_bivariate, cons_quadratic, and cons_nonlinear
2855- fixed update of constraint violations in solution repair in cons_bivariate, cons_quadratic, and cons_nonlinear
2856- print error message and terminate if matrix entries of a column are not consecutive in mps format
2857- fixed incorrect handling of fixed variables when transfer of cuts from LNS heuristic for Benders' decomposition
2858- fix returning local infeasible status by Ipopt interface if Ipopt finds problem locally infeasible
2859- skip attempt to apply fixings in linear constraint handler during solving stage as LP rows cannot change anymore
2860- fixed bug when reading >= indicator constraints in MPS format
2861- fix issue with nodes without domain changes if we ran into solution limit in prop_orbitalfixing
2862- fixed unresolved reference to CppAD's microsoft_timer() function on builds with MS/Intel compilers on Windows
2863- ignore implications added through SCIPaddVarImplication() that are redundant to global bounds also in the
2864 special case of an implication between two binary variables; also, use implications instead of cliques in the case
2865 of a binary implied variable with nonbinary active representative
2866- fixed bug with aggregated variables that are aggregated in propagation of cons_sos1
2867- fixed some special cases in SCIPselect/SCIPselectWeighted methods
2868- relaxed too strict assertion in Zirounding heuristic
2869- fixed the upgrade routine to XOR constraints: aggregate integer variable if its coefficient has the wrong sign
2870- fixed handling of nonartificial parity variables when deleting redundant XOR constraints
2871- earlier deletion of trivial XOR constraints (at most 1 operator left)
2872- fixed wrong hashmap accesses and added sanity check for the correct hashmap type
2873- avoid copying of unbounded solutions from sub-SCIPs as those cannot be checked completely
2874- corrected the output of the first LP value in case of branch-and-price
2875- fixed possible integer overflow, which led to wrong conclusion of infeasibility, in energetic reasoning of cons_cumulative.c
2876
2877Miscellaneous
2878-------------
2879
2880- do not scale linear constraints to integral coefficients
2881
2882@section RN600 SCIP 6.0.0
2883*************************
2884
2885Features
2886--------
2887
2888- new diving heuristic farkasdiving that dives into the direction of the pseudosolution and tries to construct Farkas-proofs
2889- new diving heuristic conflictdiving that considers locks from conflict constraints
2890- restructuring of timing of symmetry computation that allows to add symmetry handling components within presolving
2891- `lp/checkstability` is properly implemented for SoPlex LPI (spx2)
2892- new branching rule lookahead that evaluates potential child and grandchild nodes to determine a branching decision
2893- limits on the number of presolving rounds a presolver (maxrounds) or propagator/constraint handler (maxprerounds)
2894 participates in are now compared to the number of calls of the particular presolving method, not the number of
2895 presolving rounds in general, anymore
2896- new miscellaneous methods for constraints that have a one-row linear representation in pub_misc_linear.h
2897- a Benders' decomposition framework has been added. This framework provides the functionality for a user to solve a
2898 decomposed problem using Benders' decomposition. The framework includes classical optimality and feasibility cuts,
2899 integer optimality cuts and no-good cuts.
2900- add statistic that presents the number of resolves for instable LPs
2901- new readers for stochastic programming problems in SMPS format (reader_sto.h, reader_smps.h)
2902
2903Performance improvements
2904------------------------
2905
2906- cuts generated from certain quadratic constraints with convex feasible region are now global
2907- performance improvements for Adaptive Large Neighborhood Search heur_alns.c
2908 + all neighborhoods now start conservatively from maximum fixing rate
2909 + new default parameter settings for bandit selection parameters
2910 + no adjustment of minimum improvement by default
2911- improved bound tightening for some quadratic equations
2912- constraint handler checking order for original solutions has been modified to check those with negative check priority
2913 that don't need constraints after all other constraint handlers and constraints have been checked
2914- deactivate gauge cuts
2915
2916Examples and applications
2917-------------------------
2918
2919- new example `brachistochrone` in CallableLibrary examples collection; this example implements a discretized model to
2920 obtain the trajectory associated with the shortest time to go from point A to B for a particle under gravity only
2921- new example `circlepacking` in CallableLibrary examples collection; this example models two problems about packing
2922 circles of given radii into a rectangle
2923- new price-and-branch application for the ringpacking problem
2924- new stochastic capacitated facility location example demonstrating the use of the Benders' decomposition framework
2925
2926Interface changes
2927-----------------
2928
2929### New and changed callbacks
2930
2931- added parameter locktype to `SCIP_DECL_CONSLOCK` callback to indicate the type of variable locks
2932
2933### Deleted and changed API methods
2934
2935- Symmetry:
2936 + removed function SCIPgetTimingSymmetry() in presol_symmetry.h since this presolver does not compute symmetries independent
2937 of other components anymore
2938 + additional argument `recompute` to SCIPgetGeneratorsSymmetry() to allow recomputation of symmetries
2939
2940- Random generators:
2941 + the seed of SCIPinitializeRandomSeed() is now an unsigned int
2942 + the seed of SCIPsetInitializeRandomSeed() is now an unsigned int and it returns an unsigned int
2943 + new parameter for SCIPcreateRandom() to specify whether the global random seed shift should be used in the creation of
2944 the random number generator
2945
2946- Miscellaneous:
2947 + additional arguments `preferrecent`, `decayfactor` and `avglim` to SCIPcreateBanditEpsgreedy() to choose between
2948 weights that are simple averages or higher weights for more recent observations (the previous default).
2949 The last two parameters are used for a finer control of the exponential decay.
2950 + functions SCIPintervalSolveUnivariateQuadExpression(), SCIPintervalSolveUnivariateQuadExpressionPositive(), and
2951 SCIPintervalSolveUnivariateQuadExpressionPositiveAllScalar() now take an additional argument to specify already
2952 existing bounds on x, providing an entire interval ([-infinity,infinity]) gives previous behavior
6047 - added writing for pip files (linear, quadratic, polynomial nonlinear, polynomial abspower, polynomial bivariate, and
6048 and constraints)
6049 - CIP format variable characters defined, e.g. `SCIP_VARTYPE_INTEGER_CHAR`
6050 - Improved support for wbo format for weighted PBO problems, IBM's xml-solution
6051 format and pip and zimpl format for polynomial mixed-integer programs
6052 - New reader for (standard) bounds on variables
6053 - Extended reader for CIP models to handle various new constraints, including all types of linear constraints
6054 - flatzinc reader is now capable to read cumulative constraints
6055 - changed opb(/wbo) reader which now creates pseudoboolean constraints instead of linear- and and-constraints, only a
6056 non-linear objective will create and-constraints inside the reader and while reading a wbo file the topcost constraint
6057 is created as well
6058 - added clock for determine the time for reading
6059 - added reader for variable bounds (reader_bnd.{c,h})
6060 - Removed method SCIPreadSol(); call solution reading via SCIPreadProb() which calls the solution reader for .sol files.
6061
6062- Nonlinear:
6063 - Major extensions for nonlinear CIP, new option for n-ary branching on nonlinear variables (within pseudocost branching rule)
6064 - added BETA version of constraint handler for nonlinear constraints (cons_nonlinear.{c,h}) to handle nonlinear
6065 equations given by algebraic expressions using operands like addition, multiplication, power, exp, log, bivariate
6066 nonlinear constraints; currently no trigonometric functions
6067 - added BETA version of constraint handler for bivariate nonlinear constraints (cons_bivariate.{c,h}) to compute tight
6068 estimators for 1-convex and convex-concave bivariate nonlinear functions (given as expression tree)
6069 - the gams writer can now write nonlinear, abspower and bivariate constraints
6070 - Extended writer for GAMS and pip format to write more types of nonlinear constraints
6071 - the pip and zimpl reader now create nonlinear constraints for polynomials of degree > 2
6072
6073- Presolving:
6074 - new dual presolving methods in cons_setppc and cons_logicor
6075 - new presolving step `removeConstraintsDueToNegCliques` in locigor constraint handler which updates logicor constraints
6076 to setppc constraints if a negated clique inside this constraint exist, by default is off
6077 - new presolving step in cons_knapsack (detectRedundantVars, deleteRedundantVars) which determines redundant variables
6078 in knapsack constraint with or without using clique information
6079 - cons_logicor is now able to replace all aggregated variables in presolving by there active or negation of an active
6080 variable counterpart
6081 - prop_pseudoobj is now working in presolving as well
6082 - implement presolving in exitpre() in cons_orbitope and cons_indicator
6083
6084- Propagators:
6085 - added counter for number calls and timing for resolve propagation calls for constraint handler and propagators
6086 - Propagators are now also called in node presolving
6087 - the probing presolver presol_probing.{c.h} is now a propagator prop_probing.{c,h}, all corresponding parameters moved as well
6088 - the redcost separator sepa_redcost.{c.h} is now a propagator prop_redcost.{c,h}, all corresponding parameters moved as well
6089 - outsourced propAndSolve() method in solve.c which calls domain propagation and solving of the lp and relaxation
6090
6091- Statistic:
6092 - solutions which are given by the user from the outside are now marked by `#` in the output
6093 - the `Solving Time` is now spitted into presolving, solving and reading time
6094 - Presolvers section has new column `AddCons` which states the number of added constraint
6095 - Constraints section has new column named \#ResProp which show the number of resolve propagation calls of certain
6096 constraint handler
6097 - Constraint Timing section has a new column \#ResProp which states the time spend in resolve propagation method of the
6098 constraint handler
6099 - improved output of propagators in display statistics
6100 - new section `Propagator Timing` which shows the time spend in different callbacks of the propagator
6101 - rearranged first two columns of Propagators section; \#Propagate and \#ResProp stating the number of call for
6102 propagation and resolve propagation; the Time column is moved into the new section Propagator Timings
6103 - Constraints section has new column named `MaxNumber` which the maximum number of active constraint of a certain
6104 constraint handler
6105 - added two columns `Time-0-It` and `Calls-0-It` in the LP section which states the number of LP call and time spend for
6106 solving LPs with zero iterations (only refactorization)
6107 - The display of statistics for presolvers, propagators, constraints and LP solving has changed.
6108
6109Performance improvements
6110------------------------
6111
6112- Reorganized filtering process of separation storage (allows adding cuts for different solutions)
6113- Improved presolving for various constraint handlers
6114- Improved propagation methods for variable bound constraints
6115- Improved performance for quadratic constraints
6116- performance improvements in prop_vbounds
6117- child selection rules now get also applied when the relaxation value is equal to the bound changed in branching
6118- added dual reduction to cons_cumulative.c
6119- for continuous variables, the pseudo costs update and the pscost branching rule now use the same strategies for
6120 updating the pseudo costs and estimating the improvement in the LP bound
6121- only perform probing if the variables are locked
6122- performance and memory consumption improvements in xmlparse.c
6123- Improved knapsack cover cuts
6124- avoid very long separation times of LEWIs in cons_knapsack for very large minimal covers
6125- used SCIPallocMemoryArray() instead of SCIPallocBlockMemoryArray() which leads to fewer memory consumption in
6126 getLiftingSequence() in cons_knapsack, also improved cache use bei using an extra array instead blockmemory chunks
6127- switched FASTMIP from 1 to 2 for CPLEX and changed default pricing rule back to steepest edge pricing instead of
6128 quickstart steepest edge pricing
6129- made sorting method more robust
6130- LNS heuristics now use SCIPcopy() by default
6131- considering inactive variables in undercover heuristic; limiting effort for solving covering problem
6132- if during probing mode the LP relaxation is solved from scratch, e.g., when calling the shiftandpropagate heuristic
6133 before root node solving, then we clear the resulting LP state, since it might be a bad starting basis for the next
6134 solve of the LP relaxation (controlled by new parameter `lp/clearinitialprobinglp`)
6135- included LP simplifier into SoPlex LP interface, applied when solving from scratch (lpi_spx.cpp)
6136- new presolving steps in varbound constraint handler, tightening bounds, coefficients, sides and pairwise presolving
6137
6138Interface changes
6139-----------------
6140
6141- Miscellaneous:
6142 - The emphasis setting types now distinguish between plugin-type specific parameter settings (default, aggressive, fast, off),
6143 which are changed by SCIPsetHeuristics/Presolving/Separating(), and global emphasis settings (default, cpsolver, easycip,
6144 feasibility, hardlp, optimality, counter), which can be set using SCIPsetEmphasis().
6145
6146### New and changed callbacks
6147
6148- added propagator timings `SCIP_PROPTIMING_BEFORELP`, `SCIP_PROPTIMING_DURINGLPLOOP` and `SCIP_PROPTIMING_AFTERLPLOOP` for
6149 all propagation callbacks (see propagators and constraint handlers) which lead to calling the propagation methods of a
6150 propagator before the lp is solved, during the lp loop and after the lp solving loop
6151
6152- Conflict Analysis:
6153 - Added parameter `separate` to conflict handler callback method SCIP_DECL_CONFLICTEXEC() that defines whether the conflict
6154 constraint should be separated or not.
6155
6156- Constraint Handler:
6157 - The new constraint handler callback SCIP_DECL_CONSDELVARS() is called after variables were marked for deletion.
6158 This method is optional and only of interest if you are using SCIP as a branch-and-price framework. That means,
6159 you are generating new variables during the search. If you are not doing that just define the function pointer
6160 to be `NULL`.
6161 If this method gets implemented you should iterate over all constraints of the constraint handler and delete all
6162 variables that were marked for deletion by SCIPdelVar().
6163
6164- NLP Solver Interface:
6165 - The callbacks SCIP_DECL_NLPIGETSOLUTION() and SCIP_DECL_NLPISETINITIALGUESS() got new parameters to get/set values of
6166 dual variables.
6167 - The callback SCIP_DECL_NLPICOPY() now passes the block memory of the target SCIP as an additional parameter.
6168
6169- Presolving:
6170 - New parameters `isunbounded` and `isinfeasible` for presolving initialization (SCIP_DECL_CONSINITPRE(),
6171 SCIP_DECL_PRESOLINITPRE(), SCIP_DECL_PROPINITPRE()) and presolving deinitialization (SCIP_DECL_CONSEXITPRE(),
6172 SCIP_DECL_PRESOLEXITPRE(), SCIP_DECL_PROPEXITPRE()) callbacks of presolvers,
6173 constraint handlers and propagators, telling the callback whether the problem was already declared to be
6174 unbounded or infeasible. This allows to avoid expensive steps in these methods in case the problem is already
6175 solved, anyway.
6176
6177 Note, that the C++ methods
6178 - scip::ObjConshdlr::scip_presol() corresponding to SCIP_DECL_CONSPRESOL()
6179 - scip::ObjConshdlr::scip_initpre() corresponding to SCIP_DECL_CONSINITPRE()
6180 - scip::ObjPresol::scip_initpre() corresponding to SCIP_DECL_PRESOLINITPRE()
6181 - scip::ObjProp::scip_initpre() corresponding to SCIP_DECL_PROPINITPRE()
6182 - scip::ObjConshdlr::scip_exitpre() corresponding to SCIP_DECL_CONSEXITPRE()
6183 - scip::ObjPresol::scip_exitpre() corresponding to SCIP_DECL_PRESOLEXITPRE()
6184 - scip::ObjProp::scip_exitpre() corresponding to and SCIP_DECL_PROPEXITPRE()
6185 are virtual functions. That means, if you are not adding the new parameters, your code will still compile, but these methods are not executed.
6186 - Propagators are now also called in during presolving, this is supported by the new callback methods SCIP_DECL_PROPINITPRE(),
6187 SCIP_DECL_PROPEXITPRE(), and SCIP_DECL_PROPPRESOL().
6188 - The new parameters `nnewaddconss` and `naddconss` were added to the constraint handler callback method SCIP_DECL_CONSPRESOL()
6189 and the presolver callback method SCIP_DECL_PRESOLEXEC(). These parameters were also added to corresponding C++ wrapper
6190 class methods (scip_presol() in objconshdlr.h and scip_exec() in objpresol.h)
6191
6192- Problem Data:
6193 - The callback SCIP_DECL_PROBCOPY() got a new parameter `global` to indicate whether the global problem or a local version is copied.
6194
6195### Deleted and changed API methods
6196
6197- implemented SCIPlpiGetPrimalRay() in SoPlex interface that has become available with SoPlex version 1.5.0.2
6198- allowed calling SCIPgetRowSolActivity() in `SCIP_STAGE_SOLVED`, since LP is still available
6199- various extensions and modifications for expressions and expression trees (too much to state here)
6200- The result value `SCIP_NEWROUND` has been added, it allows a separator/constraint handler to start a new separation round
6201 (without previous calls to other separators/conshdlrs).
6202- SCIPcalcNodeselPriority() got a new parameter `branchdir`, which defines the type of branching that was performed: upwards, downwards, or fixed.
6203
6204- Constraint Handlers:
6205 - Method SCIPincludeQuadconsUpgrade() of quadratic constraint handler got new parameter `active` to indicate whether the upgrading method is active by default.
6206 - Method SCIPseparateRelaxedKnapsack() in knapsack constraint handler got new parameter `cutoff`, which is a pointer to store whether a cutoff was found.
6207
6208- Nonlinear expressions, relaxation, and solver interface:
6209 - SCIPcreateNLPSol() now creates a `SCIP_SOL` that is linked to the solution of the current NLP relaxation
6210 - Various types and functions dealing with polynomial expressions have been renamed to use the proper terms `monomial` and
6211 `polynomial` in nonlinear expressions (nlpi/∗expr*); results in many renamings of types, structs and methods.
6212 - The methods SCIPnlpGetObjective(), SCIPnlpGetSolVals(), and SCIPnlpGetVarSolVal() have been removed, use SCIPgetNLPObjval(),
6213 SCIPvarGetNLPSol() and SCIPcreateNLPSol() to retrieve NLP solution values instead.
6214 SCIPcreateNLPSol() now returns an error if NLP or NLP solution is not available
6215 - Removed methods SCIPmarkRequireNLP() and SCIPisNLPRequired(), because the NLP is now always constructed if nonlinearities
6216 are present.
6217 - SCIPgetNLP() has been removed and NLP-methods from pub_nlp.h have been moved to scip.h, which resulted in some renamings, too.
6218 - renamed SCIPexprtreeEvalSol() to SCIPevalExprtreeSol() and now located in scip.h.
6219 - renamed SCIPexprtreeEvalIntLocalBounds() to SCIPevalExprtreeLocalBounds() and now located in scip.h.
6220 - renamed SCIPexprtreeEvalIntGlobalBounds() to SCIPevalExprtreeGlobalBounds() and now located in scip.h.
6221 - The functions SCIPnlpiGetSolution() and SCIPnlpiSetInitialGuess() got additional arguments to get/set dual values.
6222 - The method SCIPgetNLPI() got a new parameter `nlpiproblem`, which is a pointer to store the NLP solver interface problem.
6223
6224- Timing:
6225 - SCIPincludeProp() got additional parameters to set the timing mask of the propagator and the new callbacks and parameters
6226 related to calling the propagator in presolving.
6227 - SCIPincludeConshdlr() got additional parameters to set the variable deletion callback function and the timing mask for
6228 propagation.
6229 - removed parameters timelimit and memorylimit from SCIPapplyRens()
6230 - The parameters `timelimit` and `memorylimit` were removed from SCIPapplyRens().
6231
6232- Problem Data:
6233 - The method SCIPcopyProb() got a new parameter `global` to indicate whether the global problem or a local version is copied.
6234
6235- Writing and Parsing Constraints:
6236 - The methods SCIPwriteVarName(), SCIPwriteVarsList(), and SCIPwriteVarsLinearsum() got a new boolean parameter `type`
6237 that indicates whether the variable type should be written or not.
6238 - The methods SCIPparseVarName() and SCIPparseVarsList() got a new output parameter `endptr` that is filled with the position
6239 where the parsing stopped.
6240 - The method SCIPwriteVarsList() got additionally a new parameter `delimiter` that defines the character which is used for delimitation.
6241
6242- Variables:
6243 - SCIPmarkDoNotMultaggrVar()/SCIPvarMarkDoNotMultaggr() now allow to mark negated and aggregated variables
6244 - SCIPgetVarCopy() got a new parameter `success` that will be FALSE if method is called after problem creation stage and no hash map is
6245 given or no image for the given variable is contained in the given hash map.
6246 - SCIPchgVarType() got an extra boolean parameter to store if infeasibility is recognized while upgrading a variable from continuous
6247 type to an integer type.
6248 - SCIPdelVar() got a new parameter `deleted`, which stores whether the variable was successfully marked to be deleted.
6249
6250### New API functions
6251
6252- information about the quality of the solution of an LP (currently the condition number of the basis matrix) can now be:
6253 + requested from the LPI (currently only available for CPLEX): methods SCIPlpiGetRealSolQuality() and
6254 + SCIPprintLPSolutionQuality() command display lpsolquality in interactive shell display column lpcond to show
6255 + estimate on condition number, if available
6256- SCIPround() and SCIPfeasRound() to round to nearest integer
6257- SCIPsortRealRealIntInt() and corresponding sorting/inserting/deleting methods in pub_misc.h and necessary defines in misc.c
6258- SCIPsortRealIntLong(), SCIPsortPtrPtrRealInt() and corresponding sorting/inserting/deleting methods in
6259 pub_misc.h and necessary defines in misc.c
6260- SCIPcomputeLPRelIntPoint() to compute relative interior point of the current LP
6261- SCIPstartSolvingTime() and SCIPstopSolvingTime() which can be used to start or stop the solving time clock
6262- SCIPstrToRealValue() and SCIPstrCopySection() in pub_misc.h; these methods can be used to convert a string
6263 into a `SCIP_Real` value and to copy a substring.
6264- SCIPgetBinvarRepresentatives() which gets binary variables that are equal to some given binary variables,
6265 and which are either active, fixed, or multi-aggregated, or the negated variables of active, fixed, or multi-aggregated variables
6266- SCIPhasPrimalRay() and SCIPgetPrimalRayVal() that return whether a primal ray is stored and which value a
6267 given variable has in the primal ray, respectively
6268- SCIPsetConsModifiable()
6269- SCIPsetParam() which is a generic parameter setter method, independent of the parameter type
6270- SCIPpropInitpre(), SCIPpropExitpre(), SCIPpropPresol() which initializes, exists and executes the presolving phase
6271- SCIProwGetAge() to access the age of a row (pub_lp.h/lp.c)
6272- SCIPsolGetOrigObj() in pub_sol.h which returns for a solution in the original problem space the objective value
6273- SCIPretransformSol() in scip.h that allows to retransform a solution to the original space
6274- SCIPlpiClearState() to LP interfaces for clearing basis information in the LP solver
6275- SCIPgetSubscipDepth() to access the depth of the current SCIP as a copied subproblem
6276- SCIPdebugAddSolVal() and SCIPdebugGetSolVal() to add/get values to/from a debug solution
6277- SCIPsepastoreRemoveInefficaciousCuts() to remove non-efficious cuts from the separation storage
6278
6279- Nodes:
6280 - SCIPnodeGetParent() to get parent node of a node
6281 - SCIPnodesSharePath() in pub_tree.h that determines whether two nodes are on the same leaf-root path
6282 - SCIPnodesGetCommonAncestor() in pub_tree.h that finds the common ancestor node for two given nodes
6283
6284- Read and Write:
6285 - SCIPgetReadingTime() which returns the time for reading in seconds
6286 - SCIPparseVarsLinearsum(), SCIPparseVarsPolynomial() and SCIPwriteVarsPolynomial() and for writing and
6287 parsing polynomials in constraint handler writing/parsing methods
6288
6289- Memory:
6290 - SCIPcreateMesshdlrPThreads() and SCIPfreeMesshdlrPThreads() for allocating and deleting necessary memory
6291 for message handlers for parallel pthread version
6292 - SCIPallocClearMemoryArray() and BMSallocClearMemoryArray() for allocating cleared memory arrays in scip.h and memory.h
6293
6294- Intervals:
6295 - SCIPintervalPowerScalarInverse() to solve an equation y = x^p for given bounds on y and scalar exponent p
6296 - SCIPintervalQuadBivar() to compute tight bounds on a bivariate quadratic form
6297 - SCIPintervalSolveBivariateQuadExpressionAllScalar() to compute tight bounds on the solutions of a bivariate quadratic equation
6298
6299- Variables:
6300 - SCIPcomputeVarCurrent{L,U}b{Local,Global}() to compute local or global lower or upper bounds of a
6301 multiaggregated variable from the bounds of the aggregation variables
6302 - SCIPbranchVarValNary() for n-ary variable branching
6303 - SCIPgetNegatedVars() which returns all negated variables for a given array of variables, if the negated
6304 variables are not existing yet, they will be created
6305 - SCIPgetNTotalVars() that returns the total number of created vars, icluding variables that were deleted in the meantime
6306 - SCIPvarGetHashkey(), SCIPvarIsHashkeyEq(), SCIPvarGetHashkeyVal() in pub_var.h which can be used for `SCIP_HASHTABLE` of variables
6307 - SCIPvarGetNBdchgInfosLb() and SCIPvarGetNBdchgInfosUb() in pub_var.h returning the number of lower or upper bound changes on the active path
6308 - SCIPvarGetBdchgInfoLb() and SCIPvarGetBdchgInfoUb() returning the bound change information at the given position
6309 - SCIPvarMarkDeletable() to mark a variable to be deletable completely from the problem (for
6310 branch-and-price); can only be called before the variable is added to the problem
6311 - SCIPvarMarkNotDeletable() that marks a variable to be non-deleteable (used within SCIP for forbidding
6312 deletion of variables contained in solution, LP bases, (multi)aggregation, ...)
6313 - SCIPvarIsDeletable() that returns whether a variable is marked to be deletable (each variable is per default non-deletable)
6314
6315- NLP:
6316 - SCIPgetNLPVarsNonlinearity() to get for each variable in the NLP the number of NLP rows in which this variable appears in a nonlinear way
6317 - SCIPnlrowGetDualsol(), SCIPgetNLPVarsLbDualsol(), SCIPgetNLPVarsUbDualsol() to retrieve dual values from an NLP solution
6318 - SCIPgetNLPFracVars() to get the fractional variables in an NLP solution
6319
6320- Propagator:
6321 - SCIPpropSetPresolPriority() which changes the presolving priority of a given propagator