9- added command line option `-t` to specify the number of threads, which triggers concurrent solving via SCIPsolveConcurrent()
10
11Performance improvements
12------------------------
13
14- implemented interval function evaluation callback in CONOPT interface
15- reduced complexity of SCIPundoBdchgsProof() during conflict analysis accelerating execution for many variables
16- terminate dynamic programming in the exact knapsack solver early once the optimal LP-based upper bound is reached
17
18Fixed bugs
19----------
20
21- include original objective offset when writing transformed problem
22- corrected random seed calculation in SCIPsetInitializeRandomSeed() in optimized mode
23- correct node selector for heuristic node preview in main solving loop
24- stop interrupted node without copying to child node to simplify continuation of solve
25- fixed bug with locking/unlocking aggregated variables in cons_orbisack/orbitope_full/orbitope_pp/symresack
26- fixed a bug in sassy/dejavu by adding a patch to dejavu/preprocess.h
27- fixed that registering branching candidates in the estimate callback of a nlhdlr was not accounted in the nlhdlr statistics
28- fixed that copying relaxation-only variable in SCIPgetVarCopy() was not rejected as intended
29- apply consistent arithmetic and tolerance to SCIPselectWeighted*() for stable critical item
30- fixed invalid memory access when calling SCIPgetStatus() in INIT stage
31- fixed that functions declared in pub_history.h were not included in optimized builds of SCIP
32- fixed that parameter changes were printed to the log when parsing emphasis settings via an "emphasis:" line in a settings file (other parameter settings are not printed)
33- disabled use of std::unchecked_array_iterator in amplmp's variant of fmt when using MSVC >= 2026
34- fixed compilation issue with MSVC 2026 when enabling C++20
35- fixed compilation issues with clang-based Intel compiler on Windows
36- fixed that check/check.sh did not reset EXECNAME before calling tmpfile configuration script
37
38Interface changes
39-----------------
40
41### New API functions
42
43- added SCIPcalcBestCut() to try multiple cut generation methods (FlowCover, KnapsackCover, CMIR) on an aggregation row and return the best cut by efficacy
44- added SCIPinitCutGenParams(), SCIPcreateCutGenResult(), and SCIPfreeCutGenResult() as helper functions for SCIPcalcBestCut()
45- added SCIPnlpiOracleEvalObjectiveInterval() and SCIPnlpiOracleEvalConstraintInterval()
46- added SCIPgetSolvingPhase() along with enum SCIP_SOLVINGPHASE to query the current solving phase tracked by the solvingphase event handler, phase evaluation requires solvingphases/enabled = TRUE or solvingphases/testmode = TRUE
47- added SCIPgetSolvingPhaseFlags() along with typedef SCIP_SOLVINGPHASEFLAG for flags SCIP_SOLVINGPHASEFLAG_NONE/RANK1/ESTIMATE/OPTIMAL/LOG to query which reached transition criteria have been detected by the solvingphase event handler, flag evaluation requires solvingphases/enabled = TRUE or solvingphases/testmode = TRUE
48- added SCIPiisGetSubscipCons() and SCIPiisGetSubscipVar() to get the variables and constraints of the IIS subscip corresponding to the main problem
49- added SCIPiisGetVarsmap() and SCIPiisGetConssmap()
50
51### New parameters
52
53- `presolving/milp/enableGF2`: whether to enable GF2 presolver in upcoming PaPILO 4
54- `concurrent/symmetrybefore`: whether symmetry should be computed before concurrent solving
55- `constraints/<handler>/copytypedcons` for knapsack, logicor, setppc, and varbound constraint handlers to copy constraints with their native type instead of as linear constraints (default: FALSE)
56
57### Data Structures
58
59- added struct \ref SCIP_CUTGENPARAMS for cut generation parameters
60- added struct \ref SCIP_CUTGENRESULT for cut generation result
61
62Build system
63------------
64
65- added build flag CHECKNAME=auto to control name checks in plugin function calls
66
67### Cmake
68
69- added workaround to avoid -isystem for ZLIB headers on macOS (leads to compilation issues for C++ code)
70
71### Makefiles
72
73- changed default compiler (COMP) from gnu to clang when on macOS and added make/make.darwin.arm.clang{.opt,.dbg,}
74- fixed makefiles for build with LPS=highs
75
76Miscellaneous
77-------------
78
79- added an example with a nonlinear handler for the potential function of the Lennard-Jones Cluster problem
80
81@section RN1003 SCIP 10.0.3
82***************************
83
84Fixed bugs
85----------
86
87- fixed statistic on added linear constraints in propagation
88- keep flag rangedrowpropagated of linear and exactlinear constraints for probing bound changes to avoid duplicate constraints by ranged row propagation
89- define result of SCIPconsProp() also if no propagation callback is available
90- keep variable for impossible substitution in cardinality constraint presolving to avoid duplication error
91- fix locking of indicator variables associated with cardinality constraints
92- free hashmap in cardinality constraints if problem is freed before transforming
93- fix CONSGETVARS and CONSGETNVARS callbacks of cardinality constraint handler
94- correct integer variable offset when removing duplicate variables from xor constraint
95- add applied clique as constraint when reformulating a binary product to avoid problem relaxation
96- round coefficients when aggregating integer variables with epsilon coefficient tolerance to ensure consistency of integrality
97- in the components constraint handler, avoid solving last component as a subproblem if all others components were trivial
98- when solving a node is interrupted, create a node branched event for the artificial child node
99- add missing capture of binary variable in indicator constraint handler
100- disregard deletable flag in IIS generation to reenable removal of unused variables
101- restore infeasible original problem in IIS addition filter if interrupted or hitting a limit
102- fixed that SCIP did not catch Ctrl+C in concurrent mode
103- SCIPsolveConcurrent() now returns with an error when reoptimization is enabled, since the concurrent sub-solvers do not perform reoptimization and the combination could segfault after SCIPfreeReoptSolve()
104- fixed indexing in the heap implementation in Dijkstra's algorithm; behavior of heap was and is correct
105
106Build systems
107-------------
108
109- fixed that the doc target in cmake builds was not available when using -DBUILD_TESTING=OFF
110- add /bigobj compiler flag when compiling with cmake, MSVC, LPS=spx, and in debug mode
111
112Miscellaneous
113-------------
114
115- added DEBUGTOOL=perf option for check scripts to collect perf statistics (new sections @06, @09, @10), including computation and comparison of non-memory-stalling frequency-normalized time
116- check scripts now write available memory (kB) and the current cumulative CPU ticks (from /proc/stat) before and after the solve to the .out file (new sections @07 and @08)
117- allow to return SCIP_CONSADDED when propagating constraints
118- cardinality constraint handler now parses and writes the indicator variables
119
120@section RN1002 SCIP 10.0.2
121***************************
122
123Fixed bugs
124----------
125
126- an error is now produced if the emphasis settings in parameter files are wrong
127- propagate focus lower bound to child nodes to avoid outdated global lower bound
128- set small coefficients in SCIPvarGetActiveRepresentatives() to zero, in particular for (multi-)aggregations
129- avoid flattening multi-aggregations twice
130- fixed that inttobinary presolver kept trying to aggregate variables that were marked as not to be aggregated
131- provide memory allocation for implied integral binary and integer variables in dks heuristic to avoid data corruption
132- fixed that violations of nonlinear constraints were not registered with solutions, and so were not included in the overview printed by the checksol command of the SCIP shell
133- fixed failing assert when assembling data for writing of JSON statistics and no plugins were included for some plugin types
134- fixed a bug in sassy/dejavu by updating version
135- add missing library exports of SCIPchgVarLbGlobalExact(), SCIPchgVarUbGlobalExact(), SCIPinferVarLbConsExact(), and SCIPinferVarUbConsExact()
136- add prefix TNY_ for tnycthread functions in order to avoid name clash with POSIX threads functions
137- keep sanitizers enabled if only unsupported for some language in cmake
138- fixed that header files and library of exact LP solver interface (lpiexact) and header files of TPI were not installed by make install (non-cmake build)
139- fixed that C++14 may not have been enforced when compiling with CppAD or Boost with makefiles
140
141Miscellaneous
142-------------
143
144- check scripts can now copy solution files to check/results/, functional for CPLEX, GAMS, and SCIP for now; new option KEEPSOL to disable writing and keeping solution files
145
146@section RN1001 SCIP 10.0.1
147***************************
148
149Fixed bugs
150----------
151
152- fixed that parameters passed on as variadic arguments to SCIPsolveNLP() and SCIPsolveNlpi() were ignored when compiling with MS compilers without -Zc:preprocessor
153- make more CONOPT output available when verbosity level is set to 2
154- turn off detection of definitional constraints in CONOPT for now, to work around a related issue in CONOPT 4.39.0
155- fixed call of SCIPcreateConsBasicSOCNonlinear() with coefs being NULL, and fixed check for offsets being finite
156- avoid crash when initial IIS solve fails while reporting errors explicitly
157- fixed that variable removal in IIS cleanup tried to delete variables that were marked as not deletable
158- fixed that some IIS info messages were not using a user's message handler
159- fixed use of interactive option (-i) of AMPL interface
160- fixed failure in nl writing on big endian machines
161- correct memory reallocation in storeSubproblemMasterVar() of benders.c to avoid errors when freeing memory
162- also set real solution in SCIPsolSetValExact() to maintain approximation
163- handle exact solutions in SCIPsolCheckOrig(), SCIPcheckSolOrig(), and SCIPrecomputeSolObj() to correctly check exact initial solutions in SCIPtransformProb()
164- fixed calculation of Euclidean norm in calcEfficacyDenseStorage() for use in exact solving
165- removed unnecessary explicit linking of GMP library for exact solving mode unittests
166- fixed bug with changing the type of the slack variable in indicator constraints while copying
167- signal extreme estimations in timeSeriesEstimate() and skip pruning estimations in eventExecEstim() to avoid unstable restarting
168- fixed parallelism computation of dynamic cut selector to use Euclidean norm instead of unsupported argument
169- fixed that non-efficacious cuts were not filtered out before checking dynamic parallelism in dynamic cut selector
170- fixes in nauty.h for 32bit systems
171- fixed SCIPgetDualSolVal() for a linear constraint with a single variable
172- adjust conflictAnalyzeLP() to inability of row aggregation to handle a change in the number of variables
173- propagate child lower bounds back to focus node to ensure consistent lower bound tracking
174
175Miscellaneous
176-------------
177
178- updated ampl/mp to version 4.0.4
179- switch from GetTempPath2A to GetTempPathA in nl writer for Windows for broader compatibility
180
181@section RN1000 SCIP 10.0.0
182***************************
183
184Features and Performance Improvements
185-------------------------------------
186
187### Exact Solving
188- added numerically exact solving mode for mixed-integer linear programs to the core framework including certification of branch-and-bound phase
189- core extensions:
190 - new wrapper struct SCIP_RATIONAL for rational arithmetic currently based on Boost, GMP, and MPFR
191 - new data structure SCIP_LPEXACT for handling rational LP relaxation and computing safe dual bounds
192 - new interfaces to exact LP solvers SoPlex and QSopt_ex
193 - safe dualproof version of conflict analysis
194 - new data structure SCIP_CERTIFICATE for certificate printing/proof logging
195- new plugins:
196 - new constraint handler "exactlinear" for handling linear constraints with rational data
197 - new constraint handler "exactsol" to post-process and repair solutions from floating-point heuristics
198- plugins revised for numerically exact solving mode:
199 - adjusted readers for MPS, LP, CIP, OPB/WBO, and ZIMPL files
200 - extended presolver "milp" to perform rational presolving with PaPILO
202 - extended Gomory cut separator to separate and certify numerically safe MIR cuts
203 - adjusted all primal heuristics (except for five dedicated MINLP heuristics)
204- new interfaces to exact LP solvers SoPlex and QSopt_ex
205
206### Symmetry Handling
207- added more techniques to handle reflection symmetries, in particular, for orbitopes with column reflections and matrices whose rows and columns can be permuted by a symmetry
208- Dejavu can be used to compute symmetries; the source code is shipped with SCIP and incorporates sassy
209- implemented symmetry detection callbacks for disjunction and superindicator constraint handlers
210- detailed information about applied symmetry handling techniques can be printed to the terminal
211- improve memory usage by introducing different constraint handlers for full orbitopes and packing/partitioning orbitopes
212- symmetry detection no longer treats implicit integer variables separately, but computes symmetries based on the variable type inferred from variable bounds and implied integrality
213- extended the statistics to also include information about the number of variables (per type) affected by symmetry
214- implemented method to compute new permutations from a given list of symmetry group generators
215- cons_orbisack, cons_orbitope_full, cons_orbitope_pp, and cons_symresack now try to replace the stored aggregated variables by active ones at the end of presolving;
216 this should reduce the size of copies of the presolved problem
217- simplified symmetry detection graphs in case all edges have the same color
218
219### Presolve
220- distinguish implicit integrality of variables into strong and weak type, depending on whether integrality is implied for all feasible or only at least one optimal solution
221- added a new presolver "implint", which detects implied integral variables by detecting (transposed) network submatrices in the problem; for now, this plugin is disabled by default
222- added support for (transposed) network matrix detection
223- allow multi-aggregation of unbounded slack variables, which may enable more bound tightening due to a reduction in the number of unbounded variables
224- resolve all fixings in xor constraints also for an available integer variable
225
226### Conflict Analysis
227- added generalized resolution conflict analysis that operates directly on linear constraints instead of conflict graphs
228- disabled dualsol and dualray conflict upgrades to maintain conflict store
229- apply general conflict upgrades in conflict store
230
231### Cutting Planes
232- added a new separator "flower" to generate flower cuts from AND constraints and nonlinear product expressions
233- added functionality to deal with hypergraphs by means of efficient access to vertices, edges, and intersections edges
234
235### Primal Heuristics
236- added decomposition kernel search (DKS) heuristic (disabled by default), which implements a kernel search framework;
237 it can be used both as a construction heuristic as well as an improvement heuristic; existing decomposition information can be utilized
238- reduced maximal fraction of diving LP iterations relative to total node LP iterations
239
240### Branching
241- added a dynamic max-lookahead criterion for strong branching; a probability distribution is fitted to the observed candidate gains and
242 evaluating further candidates stops when the expected tree-size reduction no longer justifies the LP evaluation cost
243- added new fields in history to store ancestral pseudo cost updates, used in the pseudo costs branching rule to compute discounted pseudo costs
244
245### Nonlinearity
246- added an interface to the NLP solver CONOPT
247- implemented columnwise Jacobian sparsity computation in the NLP oracle
251- added the possibility to search for irreducible infeasible subsystems (IIS)
252- added new plugin type for finding irreducible infeasible subsystems (IIS)
253- new iisfinder plugin "greedy", which implements a greedy addition and deletion based algorithm with dynamic batch sizing
254
255### Benders' Decomposition
256- when solving a problem with additional decomposition information (for example, when reading a DEC file) and enabling decomposition/applybenders,
257 the problem is now solved in a Benders' decomposition relaxator; instead of decomposing the original SCIP instance, the relaxator builds the decomposed problem in
258 sub-SCIPs and solves it via default Benders' Decomposition; a solution to the original (undecomposed) problem is now made available by the relaxator;
259 the SCIP shell dialog "display statistics" now also prints the statistics from solving the Benders' decomposition in the relaxator
260- adds objective types for Benders' decomposition; the choices are to sum the subproblems objectives (classical approach) and to use the maximum of the subproblems objectives
261- the linking master variables for each Benders' decomposition subproblem are now stored; these can be accessed for the generation of cuts and setting up the subproblems
262
263### Reading and Writing
264- added a new data structure SCIP_DATATREE that holds serializable data and a function to export to a JSON file
265- added ability to collect statistics from tables in a SCIP_DATATREE and write out as JSON file;
266 dialog write statistics now writes a JSON file if name of file to write ends with .json
267- added writing support for AMPL NL writer: currently only general and specialized linear and nonlinear constraints can be written
268- added support for AND-constraints to GAMS writer
269- simplify expressions of nonlinear constraints in MPS and LP writing to increase chance that they are recognized as quadratic
270
271### Applications
272- New application "PBSolver" to solve pseudoboolean instances in OPB and WBO format while complying with PB competition rules
273- Coloring: new parameter branching/coloring/strategy to choose the least/most fractional variable for branching
274
275### Miscellaneous
276- do not allow non-root restarts when no global fixings were found
277- reimplemented SCIPvarGetActiveRepresentatives() by using dense arrays to avoid repeated resorting
278- avoid unnecessary calls of constraint handlers components, benders, benderslp, propagator genvbounds, and heuristics ofins, subnlp, nlpdiving, indicator
279- inlined SCIPgetStatus() to reduce computational overhead
280- variable data pointer are now copied if no copy routine was supplied
281- add check that parameter value pointers are unique, i.e., no two are the same
282
283Interface changes
284-----------------
285
286### Deprecations
287
288- The variable type \ref SCIP_VARTYPE_IMPLINT is deprecated in favor of a new enum \ref SCIP_IMPLINTTYPE that indicates if a
289 variable is implied integral, independent of the variable type.
290 The problem variable arrays is still sorted as:
294 where the implied integral subsection is now subdivided into 3 parts (left to right):
295 ```
296 | binary implied integral | integer implied integral | continuous implied integral |
297 ```
298 SCIP 10 still supports using `SCIP_VARTYPE_IMPLINT` for backward compatibility, see SCIPcreateVar() and SCIPchgVarType() for more details.
299 SCIP 11 will remove `SCIP_VARTYPE_IMPLINT`.
300- SCIPsubversion() is deprecated and will be removed
301
302### New and changed callbacks
303
304- added SCIP_DECL_IISFINDERCOPY(), SCIP_DECL_IISFINDERFREE(), and SCIP_DECL_IISFINDEREXEC() for iisfinder implementations
305- added a new callback SCIP_DECL_TABLECOLLECT() for the table plugin that collects the data for the specific statistics table in a SCIP_DATATREE object
306- for a table plugin, only one of the callbacks SCIP_DECL_TABLECOLLECT() or SCIP_DECL_TABLEOUTPUT() needs to be implemented, but implementing both is preferred;
307 if SCIP_DECL_TABLEOUTPUT() is omitted, then SCIP tries to print a table from the data given by SCIP_DECL_TABLECOLLECT()
308- the callback SCIP_DECL_EXPRINTEGRALITY(), which returns the integrality of an expression, had its fourth argument changed from `SCIP_Bool*` to `SCIP_IMPLINTTYPE*` to represent implied integrality in nonlinear expressions,
309 that is, an implied integral type of an auxiliary variable if the expression were assigned to it
310- added argument `filename` to the SCIP_DECL_READERWRITE() callback in the 4th position
311- the callback SCIP_DECL_READERWRITE() is equipped with `objoffset`, `objscale`, `objoffsetexact`, and `objscaleexact` as arguments 9 through 12 to write the exact objective offset and scale in exact mode
312
313### Deleted and changed API functions
314
315- SCIPgetProbvarLinearSum(): remove parameter `mergemultiples`, which is now automatically true with the new implementation of SCIPvarGetActiveRepresentatives()
316- `SCIPcreateRow*()`, SCIPaddVarToRow(), SCIPaddVarsToRow(), SCIPaddVarsToRowSameCoef() can now only be called in the solving stage, because otherwise the LP is not yet available and the row data is invalid
317- SCIPcreateConsPseudobooleanWithConss(), SCIPcreateConsPseudoboolean(), and SCIPcreateConsBasicPseudoboolean(): removed `intvar` from arguments because the non-linear objective reformulation with pseudoboolean constraints did not work
318- SCIPcleanupConssLinear() and SCIPcleanupConssKnapsack(): added argument `ndelconss` to directly delete empty redundant constraints before creating problem matrix
322- SCIPpermuteProb(): argument `permuteimplvars` has been replaced by new arguments `permutebinimplvars`, `permuteintimplvars`, and `permutecontimplvars`
323- SCIPgetLPBranchCands(): implied integral variables with integrality constraints are included in `nlpcands` count and stored at the end of `lpcands`
324- SCIPgetNLPBranchCands(): implied integral variables with integrality constraints are included
325- SCIPgetSolVarsData(): argument `nimplvars` has been replaced by new arguments `nbinimplvars`, `nintimplvars`, and `ncontimplvars`
327- SCIPcreateVar() (temporarily for SCIP 10 only): attempting to create a variable with type \ref SCIP_VARTYPE_IMPLINT creates a variable of type \ref SCIP_VARTYPE_CONTINUOUS and implied integral type \ref SCIP_IMPLINTTYPE_WEAK
328- SCIPchgVarType() (temporarily for SCIP 10 only): attempting to change a variable type to \ref SCIP_VARTYPE_IMPLINT leads to a call of SCIPchgVarImplType() with type \ref SCIP_IMPLINTTYPE_WEAK
329- `SCIPapplyBendersDecomposition()` has been removed; this was originally used to apply Benders' decomposition from a supplied decomposition structure; the application of Benders' decomposition now occurs in relax_benders
330- SCIPcalcMIR(), SCIPcutGenerationHeuristicCMIR(), SCIPcalcStrongCG(): replaced boolean argument `usevbds` by an integer argument `vartypeusevbds`, which indicates for which variables variable bound substitution should be performed
331- `SCIPchgAndConsCheckFlagWhenUpgr()`, `SCIPchgAndConsRemovableFlagWhenUpgr()`: removed to keep upgrade flags consistent; use SCIPconsAddUpgradeLocks() to control upgrades instead
332- SCIPaddConflict(): argument `cons` changed to type `SCIP_CONS**` to release the conflict constraint in a clean way
333- SCIPprintOrigProblem() and SCIPprintTransProblem(): moved declaration moved from scip_solvingstats.h to scip_prob.h
334- `SCIPnlpiOracleGetJacobianSparsity()`: renamed to SCIPnlpiOracleGetJacobianRowSparsity() and added arguments `colnlflags` and `nnlnz`
348 `SCIPbendersApplyDecomposition()`, `SCIPgetExprsdataBilinear()`, `SCIPgetVarCoefChg()`, `SCIPvarGetOrigIndex()`, `SCIPallocateSymgraphConsnodeperm()`, `SCIPwriteSto()`: removed the declaration because there was no implementation
349
350### New API functions
351
352Exact Solving:
353- SCIPenableExactSolving(): enable and disable exact solving mode; see below for a list of many new API functions added to support exact solving
354- `SCIPrational*()`: create and compute with rational numbers
355- SCIPintervalSetRational(): compute interval of rational number
356- SCIPstrToRationalValue(), SCIPrationalStrLen(), SCIPrationalToString(): handle string conversion of a rational number
357- SCIPrationalChgInfinity(), SCIPrationalGetInfinity(): handle infinity threshold of rational numbers
358- `SCIPrationalarray*()`: create and handle rational arrays
359- SCIPisExact(): query whether exact solving is enabled
360- SCIPisCertified(): query whether certification is enabled
361- `SCIPcertify*()`, `SCIP*Certificate()`: support proof logging/certificate generation
362- `SCIP*MarkExact()`: mark plugins as safe to use in exact solving mode
363- `SCIP*IsExact()` : query whether objects are ready for exact solving
364- SCIPincludeConshdlrExactLinear(): include the constraint handler for exact linear constraints
365- `SCIP*ExactLinear()`: create, query, and modify an exact linear constraint
366- SCIPconsGetLhsExact()`, SCIPconsGetRhsExact(), SCIPgetConsValsExact(): query exact sides and coefficients of a linear constraint
367- `SCIPmatrix*Exact()`: query matrix information in rational arithmetic
368- SCIPaddVarExactData(): add exact data to an existing variable
369- `SCIPvarGet*Exact()`: query variable information in rational arithmetic
372- SCIPlpExactDiving(): query whether exact LP is in diving mode
373- SCIPlpExactIsSolved(): query whether the exact LP is solved
374- SCIPwriteLPexact(): write the exact LP
375- `SCIPcolExact*()`, `SCIProwExact*()`: handle the exact LP columns and rows
376- `SCIPlpiExact*()`: handle the exact LP interface
377- SCIPgetNExactLPs(): query the number of exact LP solves
378- SCIPgetLPExactSolstat(), SCIPgetLPExactObjval(): query solution status and objective value of the exact LP
379- SCIPaddOrigObjoffsetExact(), SCIPgetOrigObjoffsetExact(): add and query exact objective offset of the original problem
380- `SCIP*Sol*Exact()`: create and handle exact solutions
381- SCIPsolOrigAddObjvalExact(): add to exact objective of original solution
382- SCIPincludeConshdlrExactSol(): include the exact post-processing for solutions
383- `SCIP*Row*Exact*()`: create and handle exact LP rows
384- `SCIPaggrRow*Safely()`: compute safe real row aggregation
385- SCIPallowNegSlack(): query whether negative slacks are allowed
386- SCIPbranchLPExact(): branch exactly on the LP solution
387- SCIPeventGetOldboundExact(): query exact old bound for a bound change event
388- SCIPcalcIntegralScalarExact(): compute a scalar so that all given values become exactly integral
389- SCIPnodeGetLowerboundExact(): query the exact lower bound of a node
390- SCIPgetCutoffboundExact(), SCIPgetLowerboundExact(), SCIPgetUpperboundExact(), SCIPgetDualboundExact(), SCIPgetPrimalboundExact(): query exact best bounds on optimal value
391- SCIPvalidateSolveExact(): validate the exact solve
392
393Implicit Integrality:
394- SCIPincludePresolImplint(): include the new implied integral presolver
395- SCIPcreateVarImpl(), SCIPcreateObjVarImpl(): behave identically to SCIPcreateVar() and SCIPcreateObjVar(), respectively, but have an additional argument for the new implied integral type flag (8th position)
396- SCIPchgVarImplType(), SCIPvarGetImplType(), SCIPvarIsImpliedIntegral(), SCIPcolIsImpliedIntegral(): control and query implied integrality
397- SCIPvarIsNonimpliedIntegral(): query whether a variable is integral but not implied integral
398- SCIPgetNOrigBinImplVars(), SCIPgetNOrigIntImplVars(), SCIPgetNOrigContImplVars(): query the number of implied integral variables of each type in original problem;
399 note that SCIPgetNOrigBinVars(), SCIPgetNOrigIntVars(), and SCIPgetNOrigContVars() no longer include the implied integral variables in their counts
400- SCIPgetNBinImplVars(), SCIPgetNIntImplVars(), SCIPgetNContImplVars(): query the number of implied integral variables of each type in current problem;
401 note that SCIPgetNBinVars(), SCIPgetNIntVars(), and SCIPgetNContVars() no longer include the implied integral variables in their counts
402- SCIProwGetNumImpliedIntCols(): query number of implied integer columns in a row
403- SCIPvarsCountTypes(): determine the variable type count distribution for an array of variables
404- SCIPeventGetOldImplType(), SCIPeventGetNewImplType(): query implication type change for the new event \ref SCIP_EVENTTYPE_IMPLTYPECHANGED
405- SCIPexprGetIntegrality(): provides information about the presence of weakly implied integral variables, in addition to the existing function SCIPexprIsIntegral()
409- SCIPdisplaySymmetryGenerators(), SCIPdialogExecDisplaySymmetry(): display generators of symmetry group
410- SCIPclearSymgraph(), SCIPcopySymgraphAsSubgraph(): clear and copy a symmetry detection graph, respectively
411
412Conflict Analysis:
413- SCIPgetNResConflictConssApplied(): return the number of generalized resolution conflict constraints added to the problem
414- SCIPaddConsUpgrade(): add constraint upgrades while informing the conflict store
415
416Branching:
417- SCIPhistoryUpdateAncPseudocost(), SCIPvarUpdateAncPseudocost(): update the ancestral pseudo cost fields in variable history
418- SCIPhistoryGetAncPseudocost(), SCIPhistoryGetAncPseudocostCount(), SCIPhistoryIsAncPseudocostEmpty(), SCIPgetVarAncPseudocostVal(), SCIPvarGetAncPseudocost(): retrieve values related to ancestral pseudo cost fields in variable history
420- SCIPboundchgGetLPSolVal(): access LP solution value in the branching data of a bound change
421
422Cutting Planes:
423- SCIPincludeSepaFlower(): include the new flower cut separator
424- SCIPconsCreateRow(): to create and return the row of a linearly representable constraint
425- SCIPcreateRowKnapsack(), SCIPcreateRowLinear(), SCIPcreateRowLogicor(), SCIPcreateRowSetppc(), SCIPcreateRowVarbound(): create and get the row of linearly representable constraints
426
427Benders' Decomposition:
428- SCIPincludeRelaxBenders(): include the Benders' decomposition relaxator
429- SCIPgetMasterProblemRelaxBenders(): retrieve master problem SCIP instance from the Benders' decomposition relaxator
430- SCIPbendersGetSubproblemMasterVars(), SCIPbendersGetNSubproblemMasterVars(), SCIPbendersGetSubproblemMasterVarsData(): get the linking master variables for each subproblem and details about the number of binary and integer variables
431- SCIPsetBendersObjectiveType(), SCIPbendersGetObjectiveType(): set and get the objective type for the aggregation of the Benders' decompostion subproblems
432- SCIPbenderGetMasterAuxiliaryVar(): get master auxiliary variable
433- SCIPfreeReaderdataCor(), SCIPfreeReaderdataTim(), SCIPfreeReaderdataSto(): free the data for the COR, TIM, and STO readers, respectively; these readers are all used when reading an SMPS instance
446 SCIPhypergraphOverlapsEdgesGetAtIndex(), SCIPhypergraphVertexOverlapsFirst(), SCIPhypergraphVertexOverlapsBeyond(), SCIPhypergraphVertexOverlapsGetAtIndex(): query information about vertices, edges, and overlaps as well as their incidences
447
448Network Matrix:
449- SCIPnetmatdecCreate(), SCIPnetmatdecFree(): create and delete a network matrix decomposition
450- SCIPnetmatdecTryAddCol(), SCIPnetmatdecTryAddRow(): add columns and rows to a matrix decomposition
451- SCIPnetmatdecContainsRow(), SCIPnetmatdecContainsColumn(): check if a matrix decomposition contains the given row or columns
452- SCIPnetmatdecRemoveComponent(): remove connected components from a matrix decomposition
453- SCIPnetmatdecCreateDiGraph(): expose underlying digraph of matrix decomposition
454- SCIPnetmatdecIsMinimal(), SCIPnetmatdecVerifyCycle(): check whether certain invariants of a matrix decomposition are satisfied and used in tests
455
456Solve Statistics:
457- functions to create, modify, and free SCIP_DATATREE objects and to print as JSON or table (see pub_datatree.h and scip_datatree.h)
458- `SCIPcollect*Statistics()`: for every `SCIPprint*Statistics()` in scip_solvingstats.h
459- SCIPprintStatisticsJson(): output a JSON string of the table statistics data
460
461Nonlinearity:
462- SCIPincludeNlpSolverConopt(), SCIPsetLicenseConopt(), SCIPgetSolverNameConopt(), SCIPgetSolverDescConopt(), SCIPisConoptAvailableConopt(): interact with the new CONOPT interface
463- SCIPnlpiOracleGetConstraintLinearCoef(): get a linear coefficient of a variable in a given constraint in the NLP oracle
464- SCIPnlpiOracleGetJacobianColSparsity(): get the column-wise sparsity pattern of the Jacobian from the NLP oracle
465- SCIPnlpiOracleGetObjGradientNnz(): get indices of nonzeroes in the objective gradient
466- `src/objscip/objexprhdlr.h`: C++ interface for expression handlers
467
468Miscellaneous:
469- SCIPsortRealPtrPtr(), ..., SCIPsortDownIntIntIntReal(): new sorting functions
470- `SCIPdebugClearSol()`: clear the debug solution
471- SCIPdialogIsHidden(), SCIPdialogSetHidden(): determine whether a dialog should be hidden in help list
472- SCIPstatusName() to get a string representation of SCIP_STATUS
473- SCIPconshdlrSetNeedsCons(): set whether constraint handler callbacks should also be called if there are no constraints
474- SCIPpropSetTimingmask(): set timing mask of a propagator
476- SCIPvarGetMinAggrCoef(), SCIPvarGetMaxAggrCoef(): get bounds on absolute aggregation coefficients for a loose variable
477- SCIPisVarAggrCoefAcceptable(): check whether bounds on aggregation coefficients would exceed thresholds when using a loose variable in another aggregation
478- SCIPgetNRootIntFixings(): retrieve the number of integer fixings at the root node
479- SCIPcollectMemoryGarbage(): explicitly trigger garbage collection on block memory; before SCIP 10, this was done in SCIPtransformProb()
480
481### Data Structures
482
483\attention changed the numeric values in the \ref SCIP_STATUS enum
484
485- added struct \ref SCIP_RATIONAL for rational number arithmetic
486- added struct \ref SCIP_LPEXACT and many further data structures to support exact solving mode
488- added struct \ref SCIP_DATATREE to model generic serializable data; new enum \ref SCIP_DATATREE_VALUETYPE
489
490### Changes in Preprocessor Macros
491
492- `SCIP_EVENTTYPE_TYPECHANGED`: no longer generated if a variable becomes implied integral
493- `SCIP_EVENTTYPE_IMPLTYPECHANGED`: new event that is generated if a variable is declared implied integral, this event is included in the set \ref SCIP_EVENTTYPE_VARCHANGED
494- `SCIP_EVENTTYPE_DUALBOUNDIMPROVED`: new event that is generated whenever the global dual bound is improved
495- `SCIP_EVENTTYPE_GAPUPDATED`: new event mask for catching updates in primal or dual bound
496- `SCIP_PROPTIMING_NONE`: new propagator timing for never calling a propagator
497- `SCIP_HEURTIMING_NONE`: new heuristic timing for never call a primal heuristic
498- `strcasecmp`, `strncasecmp` (Windows builds): removed `#define` from scip/def.h; use SCIPstrcasecmp() and SCIPstrncasecmp() instead
505- `help <command>` now allows to display information on specific command
506- allow to hide certain commands in the help list
507- added the (hidden) command "exit" to exit the shell
508- added command `iis` to create an infeasible subsystem
509- added `write/iis` dialog to write out the infeasible subsystem to file
510- added `display/iis` dialog to write out the infeasible subsystem to console
511
512### Changed parameters
513
514- `heuristics/scheduler/heurtimelimit` removed to avoid indeterministic behavior of scheduler heuristic, uses main time limit instead
515- removed parameters `constraints/orbitope/checkpporbitope`, `constraints/orbitope/sepafullorbitope`, `constraints/orbitope/forceconscopy`, which became superfluous
516- removed `reading/gmsreader/signpower`
517- removed `benders/default/numthreads`: multi-threading support for Benders' decomposition has been temporarily disabled
518- restricted range of parameter `propagating/symmetry/sstleadervartype` to [1,7]; its new default value is 6
519- `propagating/∗/timingmask` extended by setting 0 to disable propagators completely
520- changed defaults of `constraints/components/propfreq` and `constraints/components/maxdepth` to -1 and 2147483647, respectively, to avoid unnecessary calls of components propagator by default
521- changed frequencies for the following heuristics: shifting, gins, crossover, rins, randrounding
522- changed default `maxlpiterquot` to 0.05 for all LP diving heuristics and feaspump, whereas adaptivediving uses 0.15 and rootsoldiving remains at 0.01
523- changed default of `presolving/restartminred` to 0.05
524- changed default of `presolving/immrestartfac` to 0.05
526- updated description of parameter `misc/usesymmetry`
527
528### New parameters
529
530- `exact/enable`: enable exact solving mode
531- `exact/improvingsols`: whether only improving exact solutions should be considered
532- `exact/safedbmethod`: method of safe dual bounding
533- `exact/interleavedbstrat`: interleaving strategy between safe dual bounding and exact LP solving
534- `exact/psdualcolselection`: project-and-shift strategy of dual column selection
535- `exact/cutapproxmaxboundval`: maximal absolute bound for which coefficients in exact cuts should be approximated
536- `exact/cutmaxdenom`: maximal denominator of coefficients in approximating exact cuts
537- `exact/allownegslack`: whether negative slack variables in exact Gomory cuts should be used
538- `exact/lpinfo`: whether the exact LP solver should display status messages
539- `constraints/exact{linear,sol}/{sepafreq,propfreq,proptiming,eagerfreq,maxprerounds,delaysepa,delayprop,presoltiming}`: functionality of constraint handlers exactlinear and exactsol
540- `constraints/exactlinear/sortvars`: whether binary variable coefficients should be sorted with decreasing absolute value in exactlinear constraints
541- `constraints/exactlinear/{tightenboundsfreq,propcont,limitdenom,boundmaxdenom}`: propagation of exactlinear constraints
542- `constraints/exactlinear/{maxrounds,maxroundsroot,maxsepacuts,maxsepacutsroot}`: separation of exactlinear constraints
543- `constraints/exactsol/solbufsize`: size of solution buffer in exactsol handler
544- `constraints/exactsol/{minimprove,checkfpfeasibility,checkcontimplint,abortfrac,unfixfrac}`: solution processing in exactsol handler
545- `constraints/exactsol/maxstalls`: maximal number of consecutive unsuccessful reparations in exactsol handler
547- `branching/pscost/discountfactor`, `branching/relpscost/discountfactor`: discount factor for ancestral pseudo costs in pscost and relpscost branching rules
548- `branching/collectancpscost`: enable/disable recording of ancestral pseudo costs
550 configure the dynamic max-lookahead criterion for strong branching: enable flag, fraction threshold, distribution choice, and minimum sample size
551- `constraints/cumulative/maxtime`: limit the time horizon and avoid integer overflow for unbounded variables
552- `constraints/orbitope_full/forceconscopy`, `constraints/orbitope_pp/forceconscopy`: whether non-model constraints of type full orbitope and packing/partitioning orbitope are copied to sub-SCIPs, respectively
553- `propagating/symmetry/handlesignedorbitopes`: whether to apply special symmetry handling techniques for orbitopes whose columns can be (partially) reflected
554- `propagating/symmetry/usesimplesgncomp:` whether symmetry components all of whose variables are simultaneously reflected by a symmetry shall be handled by a special inequality
555- `propagating/symmetry/dispsyminfo`: whether to print information about applied symmetry handling methods
556- `propagating/symmetry/nautymaxlevel`: limit on depth level of Nauty's search tree
557- `presolving/implint/convertintegers`: whether implied integrality should also be detected for enforced integral variables
558- `presolving/implint/columnrowratio`: ratio of rows/columns where the row-wise network matrix detection algorithm is used instead of the column-wise network matrix detection algorithm
559- `presolving/implint/numericslimit`: limit for absolute integral coefficients beyond which the corresponding rows and variables are excluded from implied integrality detection
560- `write/implintlevel`: whether integrality constraints should be written for implied integral variables (regarded by cip, mps, lp, rlp, pip, fzn, and gms writers)
561- `iis/∗`
562- `presolving/milp/enablecliquemerging`: whether to enable clique merging in PaPILO
563- `presolving/milp/maxedgesparallel`: maximal number of edges in the parallel clique merging graph
564- `presolving/milp/maxedgessequential`: maximal number of edges in the sequential clique merging graph
565- `presolving/milp/maxcliquesize`: maximal size of cliques considered for clique merging
566- `presolving/milp/maxgreedycalls`: maximal number of greedy max clique calls in a single thread
568- `relaxing/benders/continueorig`: whether original problem should continue solving after the completion of the Benders' decomposition algorithm in the Benders' relaxator, if the problem is not solved to optimality
569- `relaxing/benders/nodelimit`: node limit for the Benders' decomposition master problem in the Benders' relaxator; by default the limits from the original SCIP instance are copied
571- `lp/minsolvedepth`: lower bound on the depth at which LPs are solved
572- `reading/opbreader/maxintsize`: maximal intsize above which an OPB instance is rejected
573- `reading/nlreader/binary`, `reading/nlreader/comments`: adjust writing of `nl` files
574- `nlpi/conopt/priority`: priority of the CONOPT NLP solver
575- `randomization/randomseedshiftmultiplier`: multiplier for the shift set by `randomization/randomseedshift`;
576 the shift is multiplied by (6*`randomseedshiftmultiplier`+1), with the default value for `randomseedshiftmultiplier` set to 10 now;
577 this default value is expected to change with every major release; setting the parameter to 0 restores SCIP 9 behavior
578
579### Other Changes
580
581- removed LP solver interface `lpi_spx1`, which used the old SoPlex interface; renamed `lpi_spx2` to `lpi_spx`
582- removed `cons_abspower.{h,c}`, `cons_quadratic.{h,c}`, and `cons_soc.{h,c}`
583
584Build system
585------------
586
587- new option `SYM=dejavu` to choose Dejavu for computing symmetries
588- changed the default for `TPI` to `tny`
589- added build flag `CHECKSTAGE=auto` to control stage checks in API function calls
590- removed `LPS` options `spx1` and `spx2`, only `LPS=spx` is available to select SoPlex now
591- removed previously deprecated `PARASCIP` option, use `THREADSAFE=false` instead to disable thread-safety
592
593### Makefile
594
595- added build flag `EXACTSOLVE=<true|false|auto>` to turn exact solving mode on, off, or turn it on if all necessary dependencies are available
596- added build flag `MPFR` (default: false) to link with the multiprecision floating-point library, needed when SoPlex is also built with `MPFR=true` for precision boosting in rational solving mode
597- added build flag `CONOPT` (default: false) to link to the CONOPT NLP solver
598- link-time-optimization can be enabled on Linux and macOS with gcc and clang by setting `LTO=true`, default is false
599- revised `SANITIZE` options: removed `SANITIZE=full`, added `SANITIZE=thread`, `SANITIZE=address`, and `SANITIZE=memory` to enable thread, address, and memory sanitizers, respectively, in addition to undefined behavior sanitizer;
600 changed default to `SANITIZE=false`
601- default settings for makefile variables in `make.project` are now only used if variable hasn't been set already
602- the symlink `$(LIBDIR)/include/papilo` should now point to the `src` subdirectory of a PaPILO repository or the headers directory of a PaPILO installation without TBB; pointing to the directory of a PaPILO repository still works, but is deprecated
603- removed option to link TBB library, as this is not used by default when PaPILO has not been built via cmake (use `USRCXXFLAGS=-DPAPILO_TBB USRLDFLAGS=-ltbb` to enable TBB for PaPILO)
604- `LPS=spx` is no longer mapped to `LPS=spx2`, which changes the name of the generated LPI libraries and binaries when using SoPlex
605- removed `OPENSOURCE` flag
606
607### Cmake
608
609- added build flag `EXACTSOLVE=<on|off|auto>` to turn exact solving mode on, off, or turn it on if all necessary dependencies are available
610- added build flag CONOPT (default: off) to link to the CONOPT NLP solver and variable `CONOPT_DIR` to specify the path to CONOPT
611- link-time-optimization can be enabled if supported by compiler by using `-DLTO=on`, default is `off`
612- replaced `SANITIZE_XYZ=(on|off)` options by `SANITIZE=(on|off|thread|address|memory)`;
613 undefined behavior sanitizer is always enabled if not `SANITIZE=off` (the default)
614- increased minimal required cmake version to 3.11
615- scip-config.cmake now defines a variable `SCIP_COMPILE_FLAGS`, which could be used to compile code that builds against SCIP via cmake;
616 currently, this only passes on the sanitizer flags that were used to build `libscip`
617- removed automatic download and build of Bliss during cmake configuration when `-DSYM=(s)bliss`;
618 a Bliss installation from https://github.com/scipopt/bliss can be specified with `-DBLISS_DIR`
619- removed option `LEGACY`
620
621Fixed bugs
622----------
623
624- fixed bug related to unreleased data for the Benders' decomposition framework; when reading an SMPS file and applying
625 Benders' decomposition, data is created that was not correctly released; also, data within the Benders' decomposition
626 framework was not appropriately reset; the data is now released/reset as expected
627- to fix a bug where duplicate cuts from different constraint handlers were not recognized, `SCIPrealHash()` was changed
628 to be stable around shortly representable numbers, and a numerical tolerance for comparing cutting plane efficacy for the aggregation
629 separator is introduced
630- accept fractional continuous implied integral variables in heuristic "completesol"
631- invalidate activity with contradicting infinity contributions
632- avoid integer overflow in cumulative constraints triggered by unbounded variables, see new parameter `constraints/cumulative/maxtime`
633- allow negative update in SCIPconsAddUpgradeLocks() to unlock constraint upgrade
634- fixed memory leaks when LP, MPS, and OPB/WBO readers abort unsuccessfully
635- removed erroneous catching of objective-changed events in intobj separator; instead, the separator no longer executes within probing with changed objective function
636- propagator dualfix no longer fixes variables to infinity to avoid issues when transferring the solution to the original problem
637- track and check bounds on the coefficients that is used for a variable in aggregations of other variables to improve numerical stability
638- corrected the upgrade of full orbitopes to packing/partitioning orbitopes in case the orbitopal symmetries form a proper subgroup of a component's symmetry group
639- aggregate integer variable to not in clique variable in cliquePresolve() of xor constraints to avoid infeasible solutions
640- fixed memory leak in dynamic partition search primal heuristic
641- fixed issue with file existence check in XML parser when SCIP was build with ZLIB support on Windows
642- fixed thread-safety issue when using CppAD and user-defined expression handler
643- fixed typo in `#pragma` directive of redistributed nauty.h
644
645Miscellaneous
646-------------
647
648- removed 4th number in SCIP version; the new format is major.minor.patch
649- changed sassy to the version included in Dejavu
650- updated ampl/mp to v4.0.3
651- the CIP reader now sets an objective offset instead of adding a variable fixed to the objective offset
652- the solchecker tool has been extended for rational values
653- SCIPclassifyConstraintTypesLinear() classify a varbound only when a binary variable is present
654- the internal limit `MAXGENNUMERATOR` has been increased to allow more generators of symmetry groups, especially for problems with many variables
655
656@page RN9 Release notes for SCIP 9
657
658@section RN924 SCIP 9.2.4
659*************************
660
661Fixed bugs
662----------
663
664- fixed bugs with counting changes in presolving of nonlinear and setppc constraints, which resulted in negative values
665- cut off dead end node to correctly track dual bound update during solving
666- no longer construct and flush the LP in SCIPwriteLP() and SCIPwriteMIP() to avoid unexpected side effects
667- apply multi-aggregations before detecting redundancy in propagation of varbound constraints to keep bound implications
668- skip bound changes when cutting off a branch-and-bound subtree
669- correct detection of doublelex matrices and their handling via orbitope constraints
670- skip attempting to free transformed problem if SCIPtransformProb() failed with an error in SCIPpresolve(), since freeing
671 the transformed problem is likely to fail as well
672- fixed memory leak in primal heuristic "scheduler" when there is a restart
673- fixed stopping when there is a candidate with a change in the LP bound for both children in strong branching of branch_fullstrong
674- fixed detection of sinks in varbound detection from cumulative constraints
675- fixed memory allocation when adding strong SBCs for enclosing orbit of symmetric subgroups (disabled by default)
676- free paths of branch-and-bound tree iteratively instead of recursively to avoid stack overflow
677- fixed rare invalid memory access when collecting symmetry information for indicator constraints
678- recompute activity bounds before checking infeasibility and redundancy in linear constraint presolving
679- skip integer variables with fractional value in reference solution when finding additional variable fixings in ALNS heuristic
680- fix call of SCIPaddExprsViolScoreNonlinear() with constant expressions (no variables)
681- fixed bug with concurrent solve w.r.t. variable indices that led to segmentation faults and fix termination test
682- adjust further bounds before checking feasibility in SCIPvarAddVlb() and SCIPvarAddVub() to detect integrality cutoff
683- fixed that the last fixed binary variable was not set after binary variables were created for linking constraints
684- fixed that when a linking constraint with only one binary variable was added during solving, it was not disabled
685- fixed set_search_limits call when using SYM=sbliss with an old patched Bliss version
686
687Build system
688------------
689
690### CMake
691
692- added workaround for recent ctest versions rejecting -R -default as arguments
693
694### Makefile
695
696- added experimental target to run cppcheck
697
698
699@section RN923 SCIP 9.2.3
700*************************
701
702Fixed bugs
703----------
704
705- avoid hashmap key error in removal of doubletons and singletons in dual presolve of setppc constraints by skipping tripleton locks
706- when upgrading to xor constraint require parity variable to be enforced integral
707- provide the depth of the applied effective root with SCIPtreeGetEffectiveRootDepth() to avert invalid globalization of constraint set changes
708- disable objective limit during lexicographic dual minimization to preserve feasibility status
709- declare infinite bound inference infeasible in SCIPinferVarLbCons() and SCIPinferVarUbCons() to maintain correct loose LP values
710- fixed update of consssorted flags in a variable expressions data when adding an additional constraint using this variable
711- corrected computation of number of variables affected by symmetry
712- fixed computation of symmetry group size
713- correct comparison conditions in checkRedundancySide() of cons_varbound.c to ensure pair redundancy
714- also for the initial LP solve force acceptance of Farkas row in SCIPlpGetDualfarkas() if all other means for obtaining a reliable Farkas proof have failed
715- avoid overwriting the cutoff flag in tightenCoefs(), preprocessConstraintPairs(), and applyFixings() of cons_varbound.c to reject infeasible solutions
716- fix memory leak in CppAD interface w.r.t. user expressions
717- adjust bound before checking feasibility in SCIPvarAddVlb() and SCIPvarAddVub() to detect integrality cutoff
718- choose incumbent solution as reference in varFixingsRins() and varFixingsDins() of ALNS heuristic to ensure integrality
719- consider variable type in selectInitialVariableRandomly() of GINS heuristic to count integral variables
720- correct fractionality sign when standardizing bounds in simplifyInequalities() of cons_linear.c
721
722Build system
723------------
724
725### CMake
726
727- disable setting the boolean variable MACOSX_RPATH to a string value to actually enable @rpath usage
728- define SOPLEX_NEEDED and ZIMPL_NEEDED to avoid syntax error in configuration file
729
730Miscellaneous
731-------------
732
733- when writing a problem with non-generic names, warnings are printed if variable or constraint names are not unique
734
735@section RN922 SCIP 9.2.2
736*************************
737
738Fixed bugs
739----------
740
741- fixed definition of slack variables of >= constraints and ranged rows in LP interface to Gurobi
742- free memory leaking singleton arrays for ignored variables in SCIPapplyHeurDualval()
743- use epsilon tolerance for bound implications of dual substitutions in dualPresolve() of cons_linear
744- fixed timeouts due to race conditions when using TPI=omp
745- 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
746- respect fixing if variable is declared binary in bounds section of mps file
747- fixed reading mps files with short row and column names and some fixed-form mps files with spaces in row names
748- force local bounds to adjusted value when fixing variable
749- adds missing NULL check for Benders' subproblems in feasalt cut
750- apply objective scale to pseudoboolean non-linear terms
751- impose pseudoboolean cost bound without intermediate casting
752- flatten aggregation graph before finishing presolve to accelerate evaluating an empty solution
753- respect fixed resultants in binvarGetActiveProbindex() of branch_relpscost
754- drop fixed resultants when copying pseudoboolean constraint
755- correct matrix entry when resolving aggregated variables in checkSystemGF2() of cons_xor
756- corrected symmetry detection graph of cons_and, cons_or, cons_xor, and cons_indicator
757- correct redundancy filter in consdataCreateRedundant() of cons_bounddisjunction
758- replaced unreliable comparison of node pointers by node numbers in prop_genvbounds
759- allocate memory for all integral variables in applyCliqueFixings() of heur_clique
760- fix conflict resolution for one particular case in cons_indicator
761- make interface to nauty thread safe
762- use relative epsilon tolerance to check Farkas row in SCIPlpGetDualfarkas() to avoid invalid cutoff
763- fixed bug with SOS2 constraints of size that avoided a correct enforcing
764
765Build system
766------------
767
768### Cmake
769
770- allow to set HIGHS_DIR via -D flag as well
771- reenable building and testing of SCFLP example
772- fixed that compiler flags for sanitizers were not used for compiling objects of SCIP library
773- prioritize local includes for unittests, examples, and applications to link the intended SCIP version
774- fix detection of Gurobi 11 and 12 libs on Linux
775
776### Makefile
777
778- fix use of SANITIZE=full for debug builds with GCC on Linux: removed -fsanitize=leak because it cannot be used together with -fsanitize=address
779- fix that make install SHARED=true missed to install libscipbase
780
781@section RN921 SCIP 9.2.1
782*************************
783
784Fixed bugs
785----------
786
787- apply same feasibility definition in PaPILO as in SCIP to avoid numerical inconsistencies
788- check variable cancellation in SCIPvarAddVlb() and SCIPvarAddVub() to avert wrong infeasibility
789- SCIPfreeReoptSolve() now also clears partial solutions
790- fixed bug in calculation of "fractionality score" for spatial branching candidates in cons_nonlinear
791- fixed bug with installing symmetry dialog in sub-SCIPs
792- 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
793- respect maximal separation rounds setting by running remaining delayed separators in last round
794- replace terms consistently in applyFixings() of cons_linear to handle infinite aggregations
795
796Build system
797------------
798
799### Cmake
800
801- fix SCIP Optimization Suite build with -DSYM=(s)bliss and bliss being downloaded and built during configuration by cmake
802- fix use of a bliss cmake installation (from https://github.com/scipopt/bliss) specified via BLISS_DIR if -DSYM=(s)bliss
803
804### Makefile
805
806- the check/solchecker build can now use also GMP installations by Homebrew on macOS/arm64
807
808Miscellaneous
809-------------
810
811- the output precision for writing CIP/OPB files has been increased at several places for nonlinear constraints
812- the solchecker tool now also supports SCIP solutions without unknown or infinite values
813- generate an error if the same linear constraint is used by several indicator constraints
814
815@section RN920 SCIP 9.2.0
816*************************
817
818Features
819--------
820
821- added check for absolute and relative gap limits at end of synchronization in concurrent solving mode, in order to terminate earlier;
822 note that if the concurrent solve is stopped due to a gap limit, the "winner" solver will have an interrupted solution status and
823 its primal and dual bounds may not be the best possible ones (use SCIPgetConcurrentPrimalbound() and SCIPgetConcurrentDualbound() instead)
824- parse pseudoboolean constraint from CIP format (and add linear-"and"-reformulation)
825
826
827Performance improvements
828------------------------
829
830- reoptimization now also stores propagations from propagators if reoptimization/saveconsprop is enabled;
831 the parameter will be renamed to reoptimization/saveprop in a next major release
832- imposed stricter limits on the size of disconnected components which may be solved separately during presolve
833- use individual slack variables also for constraints indicated by a common binary variable to use tighter formulation by default
834- when computing symmetries using Nauty, iteration limits are now available to terminate Nauty early
835
836Fixed bugs
837----------
838
839- Benders' decomposition subproblems that are always infeasible are correctly handled and the complete problem is declared infeasible
840- skip linear constraint propagation if the residual activity bound cancels the side precision
841- correct bound tracking to make the evaluation of primal-dual-integrals work
842- skip aggregations on fixed variables in milp presolver to avoid errors for earlier versions of PaPILO
843- use indices of negation counterparts and accept fixings when ordering and-resultants of pseudoboolean constraints
844- update locks on model variables before removing pseudoboolean constraints in presolve
845- reformulate soft pseudoboolean constraints with linear constraints if the indicator decomposition is disabled
846- add workaround for recent HiGHS versions resetting the model status when changing the presolve option after a solve
847- 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
848
849Interface changes
850-----------------
851
852### New API functions
853
854- added SCIPtpiIsAvailable() to check whether a working task processing interface is available (TPI != none)
855- added SCIPtpiGetLibraryName() and SCIPtpiGetLibraryDesc()
856- SCIPdelCons() can now also be called in SCIP_STAGE_TRANSFORMED
857- added SCIPstrcasecmp() and SCIPstrncasecmp() for case-insensitive string comparison
858- added SCIPbendersSubproblemsAreInfeasible() to return if at least one subproblem has been identified as being
859 infeasible prior to performing any variable fixing
860
861### New parameters
862
863- presolving/milp/abortfacexhaustive to control the abort threshold for exhaustive presolving in PAPILO
864- presolving/milp/abortfacmedium to control the abort threshold for medium presolving in PAPILO
865- presolving/milp/abortfacfast to control the abort threshold for fast presolving in PAPILO
866- constraints/components/maxcompweight to determine the maximum weight for a disconnected component that is solved during presolve
867- constraints/components/contfactor counts the contributing factor of a single continuous variables with respect to the weight limit specified by constraints/components/maxcompweight
868- constraints/indicator/usesameslackvar to decide whether the same slack variable should be used for indicators constraints with common binary variable
869- propagating/symmetry/nautymaxncells and propagating/symmetry/nautymaxnnodes to set iteration limits in Nauty (only available if build with SYM=nauty or SYM=snauty)
870
871### Changed parameters
872
873- presolving/milp/threads is now only available if PaPILO is built with TBB
874- changed default of numerics/recomputefac to 1e+6 to aim at relative epsilon precision
875
876Build system
877------------
878
879### Cmake
880
881- attempted to fix detection of CPLEX library on macOS and Windows systems
882
883Testing
884-------
885
886- added parameter FILTER for tests/Makefile to run only tests with a specific pattern (ctest with -R FILTER)
887
888Miscellaneous
889-------------
890
891- adjusted Gurobi interface for Gurobi 12
892- reordered events: BESTSOLFOUND/NODE_FEASIBLE are now processed before the nodes are cut off and before NODE_DELETE events are processed
893- removed `#define` of `getcwd` (in case of Windows builds) in scip/def.h
894- the `#define` of `strcasecmp` and `strncasecmp` (in case of Windows builds) in scip/def.h will be removed with SCIP 10;
895 use `SCIPstr(n)casecmp()` (scip/pub_misc.h) instead
896
897@section RN911 SCIP 9.1.1
898*************************
899
900Fixed bugs
901----------
902
903- fix bug in separator aggregation that caused incorrect terminations when for an integral objective the objective limit was set to a fractional value
904- fix bug in memory management of doublelex matrices where indices were set beyond array bounds
905- store relevance flags in consdataTightenCoefs() of cons_linear.c to avoid dropping variables unintentionally due to numerical changes
906- fix possible segmentation fault when resetting local and global bounds of original variables after abnormal termination
907- compare coefficient scales to detect parallelism to avoid integral relaxations in detectRedundantConstraints() of cons_linear.c
908- remove coefficient information from linear constraint hashes in order to compare keys with tolerances
909- fixed NULL pointer dereference in SCIPtpiGetNumThreads() of TinyCThread interface if called before SCIPtpiInit(); now returns 0 in this case
910- calling SCIPsolveConcurrent() when SCIP was compiled without a TPI now results in a plugin-not-found error
911- fixed LPI status functions of lpi_cpx if the barrier is called
912- check cuts for redundancy after scaling in cutTightenCoefs() and cutTightenCoefsQuad() of cuts.c
913- maintain definition of artificial integral variables in xor constraints to avoid invalidation of conflict constraints
914- free childless nodes only after the deactivation of the old focus path in treeSwitchPath() of tree.c
915- only normalize rows for column norm evaluations in shift-and-propagate heuristic to avoid unscaled violations
916- 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
917- check for more data to be freed before modifying nonlinear constraints in SCIPaddExprNonlinear()
918- allow for terms with zero coefficients when checking sum in SCIPexprCheckQuadratic()
919- do not abort writing of constraints to lp/pip files (and forget to free buffer memory) when encountering unsupported nonlinear constraint
920- fixed that strings with names and descriptions of the LPI's were not null-terminated
921- fixed decision on when to enforce nonlinear constraints on relaxation solutions if integer variables are present
922- fixed reading of very long lines (>78000 characters) in FlatZinc reader
923- 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)
924- keep epsilon coefficients in applyFixings() of cons_linear.c until multiples are merged to avoid loss of relevant contributions
925- fixed that some variable type changes were not accounted correctly in presolve of linear constraints
926- fix constraint sorting in setpp-orbitope upgrade in symmetry code
927- fixed that SCIPnodeGetConsProps() also counted bound changes from propagators
928- use original and-constraints of an untransformed pseudoboolean constraint when copying original problems to avert segmentation faults
929- sort and-constraints of a pseudoboolean constraint with respect to the resultant problem indices to avoid shuffled copies
930- treat pseudoboolean constraints as nonlinear constraints in OPB reader to prevent duplication mistakes
931
932Examples and applications
933-------------------------
934
935- in example Binpacking implement Farkas pricing for packings because branching can actually lead to infeasible restricted master LPs
936
937Testing
938-------
939
940- allow unknown parameters to let tests pass if only optional dependencies are missing
941
942Build system
943------------
944
945### Cmake
946
947- 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`
948- extended identification of Ipopt library on Windows to also look for ipopt.dll.lib, as this is used since Ipopt 3.13.0 (2019)
949
950
951@section RN910 SCIP 9.1.0
952*************************
953
954Features
955--------
956
957- added constraint handler that checks and enforces bounds on original variables which have been fixed or aggregated in the transformed problem
958- allow for implicit integer variables in xor constraints
959- implemented symmetry detection callbacks for pseudoboolean constraints
960- added option to consider enforcement of nonlinear constraints (including spatial branching) before integrality has been enforced
961
962Fixed bugs
963----------
964
965- make sure that, in dual proof analysis, upgraded constraints can report their number of variables
966- check knapsack constraints as linear constraints to avoid violations based on implicit integrality
967- make sure that symmetry detection callbacks report success
968- make arithmetics in cuts.c more robust to avoid invalid scg cuts due to numerical rounding sensitivity
969- allow to copy pseudoboolean constraints even if no AND constraints are present in order to avoid a warning
970- set value for variable that is introduced to reformulate nonlinear objective function when reading .nl files with initial solution
971- fixed that multi-aggregations from PaPILO were accepted without ensuring that their bounds hold
972
973Examples and applications
974-------------------------
975
976- TSP: removed `gzstream.h/hpp` and parse gzipped files differently
977
978Interface changes
979-----------------
980
981### New callbacks
982
983- SCIP_DECL_NLHDLRENFO takes additional parameter branchcandonly to indicate whether only branching candidates should be registered,
984 without looking for cuts or boundchanges
985
986### New API functions
987
988- new function SCIPgetExprActivityNonlinear() to get activity of nonlinear constraint
989- new function SCIPincludeConshdlrFixedvar() to include new constraint handler that checks bounds on fixed original variables
990
991### New parameters
992
993- 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)
994- limits/dual to terminate the solve as soon as the dual bound is at least as good as this value
995- presolving/milp/internalmaxrounds to control the maximal rounds for each call of the milp presolver (PaPILO)
996- constraints/fixedvar/∗ to control the new constraint handler that checks bounds on fixed original variables
997- constraints/nonlinear/branching/mixfractional to specify minimal average pseudo cost count for discrete variables
998 at which to start considering spatial branching before branching on fractional integer variables
999 (default infinity means that integrality is always enforced before nonlinear constraints)
1000- constraints/nonlinear/branching/fracweight to specify weight of fractionality of integer variables in spatial branching
1001
1002### New data structures
1003
1004- enum SCIP_Status has been extended by SCIP_STATUS_PRIMALLIMIT and SCIP_STATUS_DUALLIMIT to indicate termination at limits/primal and limits/dual respectively
1005
1006Build system
1007------------
1008- changed the default symmetry computation package from sassy+bliss to sassy+nauty
1009- bliss source is no longer included in the source tree, but can be linked as external library (https://github.com/ds4dm/Bliss)
1010- cmake now automatically downloads and installs the latest release version of SoPlex from GitHub if it is not found directly
1011
1012Miscellaneous
1013-------------
1014
1015- updated nauty to version 2.8.8
1016
1017
1018@section RN901 SCIP 9.0.1
1019*************************
1020
1021Fixed bugs
1022----------
1023
1024- fixed bug in detection of double lex matrices due to wrong memory allocation
1025- fixed bug where parameter `limits/objectivestop` was copied to subscips in plugins which have different objectives
1026- in count mode respect empty solution when problem is solved in presolving
1027- fixed that SCIP may have tried to pass a negative random seed to an LP solver
1028- fixed bug where conflict analysis in strong branching tried to analyze an unsuccessful LP solve
1029- enable parameter limits/restarts by allowing to reach the restart limit in restartAllowed()
1030- handle normalizing linear constraints in presolving with more caution to avoid numerical difficulties for integer variables with large coefficients
1031- use quad precision to calculate residual activity bounds to reduce numerical errors for large variable bounds in cons_linear.c
1032- in SCIPsolveProbingLP() when objective has been changed do not return cutoff due to exceeding the cutoff bound
1033- set probing LP to be a relaxation only when objective has not been changed
1034- declare contradicting infinities in getMinActivity() and getMaxActivity() as non-tight
1035- reject farkas solution with large values to bound magnification of errors in SCIPgetFarkasProof()
1036- if all variables are fixed, apply relative feasibility tolerance to avoid invalid infeasibility in applyFixings() of cons_linear.c
1037- delete empty redundant knapsack and linear constraints after cleanup in SCIPmatrixCreate()
1038- cleanup first constraints in SCIPcleanupConssVarbound(), SCIPcleanupConssSetppc(), and SCIPcleanupConssLogicor()
1039- symmetry handling methods have not been added immediately after computing symmetries, which has been fixed
1040- delay checking node limits after presolving to correctly continue up to the exceeding main node
1041- simplified the objective sense assumption for the subproblems in the Lagromory separator
1042- update effective root depth iteratively to avoid trapping it at a single child node
1043- fixed that dualsparsify presolver did not always check do-not-multiaggregate variable flag
1044- fixed bug in computing elements of orbits in orbital reduction
1045
1046Miscellaneous
1047-------------
1048
1049- redefine isrelax to istight in cons_linear.c
1050
1051Build system
1052------------
1053
1054### Cmake
1055
1056- A file cmake.log containing the changed options is written to the cmake build directory.
1057- removed replacement of the settings of RelWithDebInfo
1058- add compile option -ffp-contract=off or /fp:precise to enhance reproducibility across different systems
1059
1060### Makefile
1061
1062- add flags -ffp-contract=off and /fp:precise to enhance reproducibility across different systems
1063
1064Interface changes
1065-----------------
1066
1067### New parameters
1068
1069- added parameter "propagating/symmetry/symtiming" to determine when symmetries are computed and handled
1070
1071### Changed parameters
1072
1073- Disabled "propagating/symmetry/addconsstiming" since it is not used anymore.
1074- Disabled "propagating/symmetry/ofsymcomptiming" since it is not used anymore.
1075
1076@section RN900 SCIP 9.0.0
1077*************************
1078
1079Features
1080--------
1081
1082- added simplification of abs(x)^n to x^n when n is even (simplify rule POW12)
1083- in expression simplification, added possibility to expand power of sum with exponents larger than 2 (simplify rule POW7)
1084- in expression simplification, added possibility to expand products with sums as factor when there are more than two factors (simplify rule SP12b)
1085- in expression simplification, added possibility to allow expanding power of products with fractional exponent (simplify rule POW5a)
1086- can now build with Lapack (used for solving nonlinear problems) explicitly; if IPOPT is used, then Lapack is accessed through it;
1087 an interface to Lapack is available in lapack_calls.h
1088- added support for logical constraints in binary variables and basic logical operators (and, or, not, equal) to AMPL .nl reader
1089- indicator constraints now use the same slack variable for the linear constraints if binary variables are used multiple times
1090 for indicator constraints
1091- new diving heuristic indicatordiving that focuses on indicator variables which control semicontinuous variables
1092- updated statistics on NLP relaxation; information on convexity of NLP has been added
1093- added new bandit method (EXP.3-IX) that is the new default of the ALNS heuristic
1094- added dialog to display recognized permutation symmetries ("display symmetry")
1095- The symmetry detection code has been completely restructured. Instead of completely encoding symmetry information in
1096 prop_symmetry.c, there is a new callback for constraint handlers, which returns symmetry relevant information by
1097 encoding a constraint as a node and edge colored graph. This way, also custom constraint handlers can provide
1098 symmetry information.
1099- added special presolving step for logicor and set covering/packing for constraints with two variables and one independent variable
1100- 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
1101- added new cut selector plugin called cutsel_ensemble. Performs a superset of hybrid cutsel. Implements new filtering methods and scoring options.
1102- added new branching rule based on Gomory mixed-integer cuts
1103- added new branching score to the reliability pseudo-cost branching rule
1104- added new cut selector plugin called cutsel_dynamic. Performs a superset of hybrid cutsel. Implements new filtering methods and scoring options.
1105- added monoidal strengthening to intersection cut generation of nlhdlr_quadratic
1106- extended heuristic dps to run after processing the node and to use strict limits for the reoptimization step
1107- extended obbt propagator to handle variables of the linear constraints corresponding to indicator constraints
1108- added new heuristic heur_scheduler that models the selection of LNS and diving heuristics as a multi-armed bandit problem
1109- added nonlinear handler for signomial expressions: adds cuts based on a difference of convex functions representation
1110- 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.
1111- added a new separator sepa_lagromory to generate Lagromory cuts in a relax-and-cut framework, i.e., GMI cuts generated
1112 at different bases that are explored in the process of solving the Lagrangian dual problem at a node. This separator
1113 is OFF by default.
1114- when parsing nonlinear constraints from CIP files, the * after the number in a term is now optional if followed by a variable,
1115 i.e., instead of 3*<x>*<y>, now also 3<x>*<y> can be read, but 3<x><y> is not supported;
1116 this allows to read some CIP files that were written with SCIP < 8
1117- when running bliss, we now limit the number of actually created generators and not the ones considered by bliss
1118
1119Performance improvements
1120------------------------
1121
1122- Variable conflict-based addition of Schreier-Sims cuts for symmetry handling in prop_symmetry.c does no longer use
1123 an expensive explicit conflict graph construction.
1124- Only run propagation of indicator constraints if relevant variables have changed.
1125- Propagation of indicator constraints propagates maximal activity of linear constraint to upper bound of slack variable.
1126- Added initialization of LP relaxation for SOC constraints.
1127- Avoided some numerical issues when separating SOC constraints.
1128- If differentation of convex expression fails in convex nlhdlr, then a perturbed point is tried.
1129- Use sassy/bliss as default symmetry computation package.
1130- No longer linearize indicator constraints in undercover heuristic by default.
1131- Deactivate pre-root heuristic zeroobj in undercover heuristic.
1132- Added new branching score tiebreaker for reliability pseudo-cost branching rule
1133- Try nearest bound if zero solution value is out of bounds in heuristic trivial.
1134
1135Interface changes
1136-----------------
1137
1138### New and changed callbacks
1139
1140- Added solution linearization callback for nonlinear handlers.
1141 The nonlinear handler may use this callback to add tight cuts that use the given solution as reference point to the cutpool.
1142 The callback is called if option constraints/nonlinear/linearizeheursol is enabled.
1143- The callback for copying problem data SCIP_DECL_PROBCOPY() now has a parameter "original" indicating whether the original
1144 or transformed problem should be copied. Similarly, SCIPprobCopy() in prob.h/c has such a parameter.
1145- Added CONSGETPERMSYMGRAPH and CONSGETSIGNEDPERMSYMGRAPH callback for constraint handlers, which provides symmetry information about constraints to SCIP.
1146
1147### Deleted and changed API functions
1148
1149- SCIPtpiInitLock(), SCIPtpiDestroyLock(), SCIPtpiInitCondition(), SCIPtpiDestroyCondition() now take a double
1150 pointer to SCIP_LOCK/SCIP_CONDITION, respectively.
1151- Renamed SCIPtpiSumbitJob() to SCIPtpiSubmitJob().
1152- SCIPcreateConsIndicatorLinCons(), SCIPcreateConsIndicatorGenericLinCons() do not allow binvar to be NULL anymore
1153- Replaced SCIPnlrowSetCurvature() by SCIPsetNlRowCurvature().
1154- SCIPsnprintf() now returns the required string length in case reallocation is necessary.
1155- SCIPcomputeCoverUndercover() receives three more arguments which nonlinearities to cover
1156- removed definition of SQRT
1157- SCIPincludeObjConshdlr(), SCIPincludeConshdlr(), SCIPconshdlrCreate() receive two more arguments for the
1158 conshdlr callbacks CONSGETPERMSYMGRAPH and CONSGETSIGNEDPERMSYMGRAPH
1160- new parameter issigned for SCIPcomputeOrbitsSym()
1161- new parameter symtype for SCIPcomputeComponentsSym()
1162- new parameter symtype and permvardomaincenter for SCIPlexicographicReductionAddPermutation()
1163- replaced parameters matrixdata and exprdata of SYMcomputeSymmetryGenerators() by graph
1164
1165### New API functions
1166
1167- new functions for interfacing with Lapack: SCIPlapackIsAvailable(), SCIPlapackIsAvailable(), SCIPlapackComputeEigenvalues(), and SCIPlapackSolveLinearEquations
1168 These functions should be used instead of SCIPisIpoptAvailableIpopt(), SCIPcallLapackDsyevIpopt(), and
1169 SCIPsolveLinearEquationsIpopt() in the context of computing eigenvalues or solving linear equations.
1170 If IPOPT is available, the calls will be passed on to Ipopt's interface to Lapack.
1193- SCIPincludeCutselEnsemble(), SCIPselectCutsEnsemble() to include cutsel_ensemble or use the selection algorithm
1194- SCIPincludeBranchruleGomory() includes new gomory cut based branching rule
1195- SCIPgetVarAvgGMIScore(), SCIPincVarGMISumScore(), SCIPgetVarLastGMIScore(), SCIPsetVarLastGMIScore() set historical values used by SCIP's default branching rule
1196- SCIPincludeNlhdlrSignomial() includes the signomial nonlinear handler
1197- SCIPgetExprMonomialData() returns a monomial representation of a product expression
1198- SCIPestimateRoot() computes estimators for roots with exponent in [0,1]
1199- SCIPincludeCutselDynamic(), SCIPselectCutsDynamic() to include cutsel_dynamic or use the selection algorithm
1200- SCIPincludeSepaLagromory() to include the new Lagromory separator
1201- SCIPconsCompCheck() to compare two constraints based on their check priority
1202- SCIPgetConsPermsymGraph() and SCIPgetConsSignedPermsymGraph() to access the (signed) permutation symmetry detection graph of a constraint
1203- SCIPsetConshdlrGetPermsymGraph() and SCIPsetConshdlrGetSignedPermsymGraph() to set the (signed) permutation symmetry detection graph of a constraint
1204- SCIPconshdlrSupportsPermsymDetection() and SCIPconshdlrSupportsSignedPermsymDetection() to access whether a conshdlr supports detection of (signed) permutation symmetries
1205- new API functions for creating and manipulating a symmetry detection graph: SCIPcreateSymgraph(), SCIPfreeSymgraph(), SCIPcopySymgraph(), SCIPextendPermsymDetectionGraphLinear(),
1237 String values should not be quoted and spaces in string values are not supported.
1238- sassy can be used now as preprocessor for nauty/traces
1239- The solution status codes written to AMPL solution files now match those from https://mp.ampl.com/details.html#_CPPv4N2mp3sol6StatusE.
1240
1241### Changed parameters
1242
1243- change default value of parameter separating/filtercutpoolrel to FALSE
1244- Shrunk range of parameter "propagating/symmetry/sstleaderrule" from [0,3] to [0,2], removed "MAXCONFLICTS"-option.
1245- 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).
1246- Disabled "propagating/symmetry/symfixnonbinaryvars" since it is not used in the new symmetry code.
1247- Replaced "propagating/symmetry/onlybinarysymmetry" with "propagating/symmetry/enforcecomputesymmetry" and set to FALSE by default.
1248- Disabled "propagating/symmetry/performpresolving" since running orbital reduction during presolving is not effective.
1249- Repurposed "propagating/symmetry/usedynamicprop" since it now also applies to lexicographic reduction.
1250- Changed default value of parameter "propagating/symmetry/addsymresacks" from FALSE to TRUE.
1251
1252### New parameters
1253
1254- separating/maxcutsgenfactor and separating/maxcutsrootgenfactor as factors (w.r.t. separating/maxcuts and
1255 separating/maxcutsroot) for limits on the number of cuts generated (which used to be constants '2')
1256- expr/pow/expandmaxexponent to specify limit on exponent when to expand power of sum
1257- expr/pow/distribfracexponent to enable expanding power of products with fractional exponents
1258- expr/product/expandalways to enable expanding any product with sums as factor (that is, also when more than two factors)
1259- nlhdlr/convex/maxperturb to specify maximal perturbation of non-differential reference points
1260- benders/default/nlpiterlimit to adjust iteration limit for NLP solver for Benders' decomposition NLP subproblems
1261- limits/objectivestop to interrupt the solve as soon as a primal solution is found
1262 that is at least as good as the given value
1263- heuristics/undercover/{coverand,coverind,covernl} to control which nonlinearities to consider (by default only "and" and nonlinear constraints)
1264- cutselection/ensemble/∗ all parameters for new ensemble cut selector
1265- cutselection/dynamic/∗ all parameters for new dynamic cut selector
1266- branching/relpscost/gmiavgeffweight specifies the weight in the relpscost branching score of the normalized efficacy of all generated GMI cuts (for a variable)
1267 branching/relpscost/gmilasteffweight specifies the weight in the elpscost branching score of the normalized efficacy of the last generated GMI cut (for a variable)
1268- nlhdlr/quadratic/usemonoidal to enable monoidal strengthening when separating quadratics with intersection cuts
1269- nlhdlr/quadratic/trackmore to collect more statistics for monoidal strengthening when separating quadratics with intersection cuts
1270- nlhdlr/quadratic/useminrep to use the minimal representation to compute cut coefficients when separating quadratics with intersection cuts
1271- nlhdlr/quadratic/sparsifycuts to enable sparsification of intersection cuts for quadratics
1272- heuristics/dps/reoptlimits to set strict limits for the reoptimization step in dps
1273- heuristics/dps/timing to run dps after processing the node
1274- heuristics/scheduler/∗ all parameters for new scheduler heuristic
1275- nlhdlr/signomial/enabled, nlhdlr/signomial/maxnundervars, nlhdlr/signomial/mincutscale: parameters for the signomial nonlinear handler
1276- separating/lagromory/freq to denote the frequency for calling Lagromory separator
1277- separating/lagromory/away to denote the minimal integrality violation of a basis variable to try separation
1278- separating/lagromory/dynamiccuts to denote whether the generated cuts be removed from LP if they are no longer tight
1279- separating/lagromory/maxroundsroot to denote the maximal number of separation rounds in the root node
1280- separating/lagromory/maxrounds to denote the maximal number of separation rounds in a non-root node
1281- separating/lagromory/nmaxcutsperlproot to denote, in the root node, the maximal number of Lagromory cuts that can be
1282 separated per explored basis of the Lagrangian dual
1283- separating/lagromory/nmaxcutsperlp to denote, in a non-root node, the maximal number of Lagromory cuts that can be
1284 separated per explored basis of the Lagrangian dual
1285- separating/lagromory/perroundnmaxlpiters to denote the maximal number of separating LP iterations that are allowed per
1286 separation round
1287- separating/lagromory/dualdegeneracyratethreshold to denote the minimum dual degeneracy rate for the separator execution
1288- separating/lagromory/varconsratiothreshold to denote the minimum variable-constraint ratio on the optimal face for the
1289 separator execution
1290- many other advanced parameters for the Lagromory separator, which are also mentioned under separating/lagromory/∗
1291
1292### Data structures
1293
1294- new data structure SYM_GRAPH to encode symmetry information from a constraint
1295- new data structure SYM_EXPRDATA to encode symmetry information from expressions
1296- replaced enum SYM_SYMTYPE by a complete new one; removed SYM_RHSSENSE, added SYM_NODETYPE and SYM_CONSOPTYPE
1297
1298Deleted files
1299-------------
1300
1301- 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
1302
1303Unit tests
1304----------
1305
1306- new unittests for nlhdlr_quadratic that test monoidal strengthening and the use of the minimal representation to compute cut coefficients
1307- unittests for nlhdlr_signomial
1308
1309Testing
1310-------
1311
1312- changed `set lim obj` to `set lim objective` in ctest since `obj` is no longer unambiguous
1313
1314Build system
1315------------
1316
1317### Cmake
1318
1319- New flag -DLAPACK=on for linking with Lapack (must be available in the system)
1320- added flag option "SYM=sbliss" for using sassy/bliss as a graph automorphism package
1321- use SYM=sbliss by default, since sassy and bliss are now shipped with SCIP.
1322- added flag option "SYM=snauty" for using sassy/nauty as a graph automorphism package
1323
1324### Makefile
1325
1326- added flag option "nauty" for SYM variable to specify which graph automorphism package should be used
1327- added flag option "sbliss" (sassy/bliss) for SYM variable to specify which graph automorphism package should be used
1328- added flag option "snauty" (sassy/nauty) for SYM variable to specify which graph automorphism package should be used
1329- use SYM=sbliss by default, since sassy and bliss are now shipped with SCIP
1330- New flag LAPACK for linking with Lapack (must be available in the system)
1331- A file scip/config.h is created in the build directory ($(OBJDIR)/include) now.
1332 Defining NO_CONFIG_HEADER is no longer necessary and has no effect anymore.
1333
1334Fixed bugs
1335----------
1336
1337- Number of runs in which separation is enabled will now be correct as per "separating/maxruns" parameter. Earlier,
1338 separation was enabled for "maxruns + 1" number of runs, i.e., separation was enabled even when "maxruns = 0" was set.
1339- add safeguard for number of selected cuts
1340- use double double precision for delta in activity updates of cons_linear.c
1341- sort constraints in checkSolOrig() to keep the logic of constraint handlers intact
1342- fixed make install when SHARED=no and make uninstall
1343- check absolute coefficients relative to extremal average to avoid invalid unifications in normalizeCons()
1344- enforce and check symmetry-based constraints to take their locks (in dual reductions) into account
1345- flush changes at the end of SCIPlpiSetBase() in lpi_grb.c to apply the newly set basis correctly
1346
1347Miscellaneous
1348-------------
1349
1350- The TPI has been changed to become mostly independent from the actual parallel interface during compile time.
1351 For this, the locks and conditions are now pointers to abstract structs.
1352- fixed that scip/def.h, the header for C preprocessor definition (`#define`'s), included headers for some SCIP type and function definitions
1364- fixed that scaling of rows in Gurobi interface (SCIPlpiScaleRow()) changed infinite sides to large finite ones (1e20) when scale factor is negative
1365- check whether objective limit is truly reached in SCIPlpiIsStable()
1366- if an objective limit is set and Mosek claims that it is exceeded, check that this is indeed the case in SCIPlpiIsStable()
1367- the .mps file reader was extended to additionally accept .mps files with the objective sense section on one line
1368- ensure that delayed cutpool separation does not happen if enough cuts have been found already
1369- 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
1370- 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
1371- fixed memory leak in branching rule "distribution"
1372- 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
1373- fixed two bugs in cons_varbound: avoid adding variable bounds if vbdcoef is infinite and unlock/lock variables if lhs/rhs/vbdcoef are changed
1374- 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
1375- fixed error when attempting to copy SCIP with activated pricers
1376- 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
1377- updated and, or, and pseudoboolean constraint handlers to better handle fractional implicit integer variables in enforcement
1378- 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
1379- add missing row links to columns in SCIPflushRowExtensions() required to maintain correct row norms
1380- restrict separator intobj to solutions for which there can be no better feasible integral objective values to avoid cutting them off
1381- delay removal of clique lists from SCIPvarRemoveCliquesImplicsVbs() into cliqueCleanup() to avoid segmentation faults by incomplete cleanups after variable conversions
1382- reject sub-solutions with invalid objectives in SCIPtranslateSubSols() due to contradicting infinite contributions
1383- correct column index in getMinMaxActivityResiduals() to make presolver dualinfer work
1384- copy quiet flag from main scip's message handler to the one of solverscip in concurrent optimization
1385- avoid bound tightening cycles towards huge redundancy bounds in fullDualPresolve() to avert fatal numerical trouble in representing vertices of linear relaxations with unbounded domains
1386- fix problem where debug solution did not work if branching constraints are present
1387- update index of dominating variable on coefficient deletion in dualPresolving() of constraint handler logicor
1388- pass on flags from a redundant to the implying varbound constraint in preprocessConstraintPairs() to avoid suboptimal fixings by model relaxations
1389- apply reductions of dualinfer only if a dual solution exists (primal is bounded)
1390- before presolving is finished check solutions before retransforming them including tiny values to keep check flags consistent
1391- 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
1392- correct local flag of singleton conflict constraints in tightenSingleVar() against invalid bound globalization
1393- respect unboundedness in the computation of activity bounds in conflict.c to avoid invalid huge bounds due to small coefficients on unbounded variables
1394- ensure positive sides of a linear constraint when recognizing a set partition in rangedRowSimplify() to account for redundancy issues
1395- relax numerical conditions for variable aggregations to avert invalid variable fixings
1396- fixed harmless read of uninitialized data when creating parameters
1397- fix call of SCIPnlpiOraclePrintProblem in nlpi_worhp
1398
1399Performance improvements
1400------------------------
1401
1402- Use sassy/bliss as default symmetry computation package.
1403
1404Interface changes
1405-----------------
1406
1407### Interfaces to external software
1408
1409- added interface to nauty/traces for symmetry computation
1410- added interface to sassy, a preprocessor for symmetry computation
1411- The directory src/sassy contains the source code of sassy.
1412
1413Build system
1414------------
1415
1416### Cmake
1417
1418- added flag option "SYM=sbliss" for using sassy/bliss as a graph automorphism package
1419
1420### Makefile
1421
1422- added flag option "nauty" for SYM variable to specify which graph automorphism package should be used
1423- added flag option "sbliss" for SYM variable to specify which graph automorphism package should be used
1424- use SYM=sbliss by default, since sassy and bliss are now shipped with SCIP
1425
1426Miscellaneous
1427-------------
1428
1429- the parameter change callback is no longer called at the moment a parameter is created
1430
1431@section RN804 SCIP 8.0.4
1432*************************
1433
1434Features
1435--------
1436
1437- use quad precision in cutsSubstituteMIR() for substituting slack variables into CMIR cuts
1438- use quad precision for activity computations in cons_linear.c
1439
1440### Deleted and changed API functions
1441
1442- SCIPshrinkDisjunctiveVarSet() no longer attempts to cutoff the current node if it finds the
1443 given disjunction to be infeasible; it is now in the responsibility of the caller to act accordingly
1444
1445### New API functions
1446
1447- added SCIPskipSpace
1448- added XML parser routines from src/xml/xml.h
1449
1450### Interfaces to external software
1451
1452- updated XPRESS interface to work with XPRESS 41 as well
1453- new interface to LP solver HiGHS (lpi_highs.cpp)
1454
1455### Changed parameters
1456
1457- changed integer parameter "propagating/symmetry/recomputrestart" from range {0, 1, 2} to being fixed at value 0
1458
1459Unit tests
1460----------
1461
1462- added new checks for objective, bounds and sides inside the scaling tests in lpi/change.c
1463
1464Fixed bugs
1465----------
1466
1467- relax condition of assert in lpSolve to hold only if lp/checkstability is true
1468- OPB reader: dynamically increase the size of the line buffer for reading in getMaxAndConsDim()
1469- Enabled the solution limit checks in SCIPsolveIsStopped in solve.c when in SCIP_STAGE_PRESOLVING
1470- fix quad precision comparison for the calculation of knapsackcover constraints.
1471- force copying of symmetry constraints for concurrent solve
1472- increase the precision of double multiplications in quad precision environments
1473- corrected handling of different variable types in symmetry
1474- orbitope detection: refine computation of overlap structure and fixed bug in finding orbitope generators
1475- ensure that winner is always determined in concurrent mode
1476- when a row with invalid index range is added to the global cutpool, update the indices instead of failing with an assert
1477- update of watched literals in cons_xor.c and ensure that fixed variables are counted in propacateCons()
1478- avoid some numerical issue in check for redundant variables in linear constraints (introduced with version 8.0.2)
1479- more rows are treated as being integral in cutsSubstituteMIR() for CMIR cuts
1480- fixed several relaxations of the rhs of cuts to 0 in cuts.c
1481- avoid aggregation into a single linear constraint if they should not be upgraded (needed for indicator constraints)
1482- apply effective root changes before fork is repropagated during treeSwitchPath() in tree.c
1483- avoid invalid objective value for solutions generated from an unbounded LP relaxation in case of a nonlinear objective function
1484- disable recomputing symmetries after a restart (constraint removal is not permitted)
1485- avoid cutting off optimal solutions for small feasibility tolerances in conflict analysis
1486- initialize variable in presol_dualsparsify.c
1487- fix in presolving of variable bound constraints to use absolute instead of relative difference
1488- free variable histories in reoptimization mode
1489- handle whitespaces in interactive shell history consistently
1490- check and enforce equalities on which the objective is projected in cons_linear.c
1491- ensure row feasibilities of solution shiftings in heur_oneopt.c and heur_twoopt.c
1578- new parameters to turn on more statistics: misc/showdivingstats (diving heuristics), heuristics/alns/shownbstats (ALNS), estimation/showstats (tree size estimation)
1579
1580### Data structures
1581
1582- added nrootcalls and ncutsadded to SCIP_Cutpool
1583- added fromcutpool flag to SCIP_Row and fixed 33 bit allocation
1734 Removed support for parameterized expressions.
1735- Added support for expression types sin, cos, and entropy. Added an expression type that stores a SCIP variable.
1736- Added handling of sin and cos expressions in OSiL reader.
1737- Added handling of sin, cos, and tan expressions in ZIMPL reader.
1738- Added expression handler plugin type, removed user expression type.
1739- Replaced expressions, expression trees, and expression graphs by a new implementation of expressions.
1740- Added differentiation methods (Gradients and Hessian directions) to expressions.
1741- Added integrality information to expressions.
1742- Added comparison and hashing of expressions.
1743- Improved simplification of expressions and identification of common subexpressions, in particular terms that appear
1744 equally in several quadratic functions are now identified.
1745- Expression simplification now expands powers also when the resulting exponents will be larger than 2.
1746- Added table to print statistics on expression handlers.
1747- Removed interval-arithmetic evaluation from expression interpreter (interfaces to automatic differentiation codes).
1748- Hessians for user-provided expression handlers are not available in the NLP solver interfaces for now.
1749- Sparse Hessians are now returned by expression interpreter. Removed dense Hessians.
1750
1751Constraint handlers for NLP:
1752- cons_nonlinear has been completely rewritten and now handles constraints of the form lhs <= expr <= rhs, where
1753 expr is an expression using the new expression type. A linear part of a nonlinear constraint is no longer distinguished.
1754- Methods that work on a particular nonlinear structure are now implemented via nonlinear handlers (nlhdlr).
1755 These handlers are plugins of cons_nonlinear and interact with cons_nonlinear by detecting structures in expressions and
1756 providing propagation and separation mechanisms.
1757- Added nlhdlr "default" as a mandatory nlhdlr: this is a nlhdlr that gets active on expressions that no other nlhdlr handles.
1758 It then uses the callbacks implemented in expression handlers to provide domain propagation and linear under/overestimates.
1759- Added nlhdlr for quadratic expressions: domain propagation that was previously part of cons_quadratic; separation via intersection cuts (currently disabled).
1760- Added nlhdlr for bilinear expressions: collects bilinear products and provides under/overestimation of a product over a 2D-projection of the LP.
1761- Added nlhdlr for convex and concave expressions: detection of convex/concave subexpressions and linear under/overestimation.
1762- Added nlhdlr for quotients: detects quotients, provides specialized linear under/overestimation and domain propagation for univariate quotients.
1763- Added nlhdlr for perspective reformulations: detects expressions in semi-continuous variables and tightens linear
1764 under/overestimates of these expressions by applying a perspective transformation.
1765- Added nlhdlr for second-order cones: detects second-order cone constraints (as ||x|| <= t or a quadratic that can written like that) and
1766 separates on a disaggregated reformulation (similar to cons_soc previously).
1767- Removed constraint handlers abspower, bivariate, quadratic, and soc.
1768- Removed simplification of duplicate abspower constraints for now.
1769 Removed simplification of abspower constraints with loose variables.
1770 Removed resolving of domain propagation (ConsResProp callback) and conflict analysis for abspower constraints.
1771 Removed propagation of varbounds for variables of abspower constraints.
1772 Removed reformulation of abs(x)^p * x into signpower expression for now.
1773- Removed reformulation of SOC constraints when adding to the NLP.
1774 Removed possibility to add linearizations a la Glineur or BenTal&Nemirovski for SOC constraints.
1775- Removed possibility to disaggregate quadratic constraints.
1776 Removed lifted tangent inequalities for bilinear terms in quadratic constraints.
1777 Removed option to project LP solution onto feasible region of a quadratic constraint via interior point or gauge function.
1778 Removed handling of unbounded LPs when enforcing quadratic constraints.
1779- Removed construction of cuts from interval gradients for nonlinear constraints.
1780 Removed possibility to pretend that all nonlinear constraints are convex.
1781 Removed possibility to create local or non-initial nonlinear constraints for now.
1782- Removed explicit reformulation of nonlinear constraints in presolve.
1783 An extended formulation is now generated implicitly and used to construct the LP relaxation,
1784 but the original formulation is used to check feasibility, propagate variable domains, etc.
1785 Variables that are added for the extended formulation are now marked as relaxation-only.
1786- Improved locking of nonlinear variables in nonlinear constraints by taking monotonicity into account.
1787- Improved mechanisms to detect and handle structures in nonlinear constraints, which allows for several algorithms
1788 to work simultaneously on equal or overlapping expressions.
1789- Improved linearization of (sums of) products of binary variables, e.g., clique information is now taken into account.
1790 Removed option to linearize products between a binary and a non-binary variable.
1791- Nonlinear constraints with the same function (but possibly different left- or right-hand-side) are now merged.
1792- 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.
1793- New branching rule for variables in nonlinear constraints (implemented in cons_nonlinear) that scores candidates
1794 based on constraint violation, variable type, and pseudo-costs simultaneously.
1795- Added tables to print statistics of nonlinear constraint handler and nonlinear handlers.
1796
1797Performance improvements
1798------------------------
1799
1800- Use the objective cutoff row as base row for separation in sepa_aggregation.c.
1801- Separate lifted cover cuts based on newer lifting function of Letchford and Souli (2019) in sepa_aggregation.c.
1802- In-tree restarts due to tree size estimation have been made compatible with orbital fixing.
1803- Improved upgrade of orbisacks to packing/partitioning orbitopes.
1804- Improved running time of symresack cover separation.
1805- Improved propagation algorithm for orbisack and symresack.
1806- Improved handling for expressions of type signpower in CppAD interface by making use of CppADs conditional expressions.
1807- Faster reevaluation of Hessian for quadratic expressions in CppAD interface.
1808- Enabled optimization of taped expressions in the CppAD interface.
1809- Sparse Hessian evaluation for expressions with sparse Hessian in the CppAD interface.
1810- Disabled branching on variables that are added for the extended formulation of a nonlinear constraint.
1811- 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.
1812- 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.
1813- Improved under/overestimation of multidimensional vertex-polyhedral (e.g., multilinear or concave) functions by use of scaling and keeping the cut-generating LP around.
1814- Products in nonlinear constraints are no longer disaggregated for the extended formulation.
1815- No longer relax bounds of integral variables when computing bounds on activity in nonlinear constraints.
1816- Revised and improved Ipopt interface.
1817- Revised and improved subNLP primal heuristic, in particular choice of iteration limit and starting condition and reuse of subSCIP.
1818- Merge strongcg into the gomory separator to avoid computing the same base equality twice. The files
1819 sepa_strongcg.{h|c} have been removed.
1820- The RENS neighborhood in ALNS now fixes fractional variables if necessary for reaching its target fixing rate.
1821- Use cpsolver emphasis in sepa_rapidlearning.
1822- If decomposition/maxgraphedge = 0, the computation of the block graph is completely turned off.
1823- Fixed a performance bug in cons_integral.c where rounding information was passed incorrectly to the generic diving algorithm.
1824
1825Examples and applications
1826-------------------------
1827
1828- Add c++ Sudoku example
1829- Removed circle.c and renamed string.c to spring.c in CallableLibrary example.
1830- SCIP-Jack (Steiner tree application):
1831 Most files have been modified and many new ones have been added (code base more than doubled).
1832 Two new problem classes are supported: maximum-weight connected subgraph problem with budget constraints, partial-terminal node-weighted Steiner tree problem.
1833 Major performance improvements accross all problem classes that are supported.
1834
1835Interface changes
1836-----------------
1837
1838### New and changed callbacks
1839
1840- extend SEPAEXEC{LP,SOL} callbacks by parameter "depth", which should be used within separation instead of SCIPgetCurrentDepth()
1841- extend SCIPseparateSolCutpool() by parameter "pretendroot", which is passed to SCIPcutpoolSeparate() instead of SCIPtreeGetCurrentDepth(scip->tree) == 0
1859- added SCIP_NLPIPROBLEM* problem to SCIP_DECL_NLPIGETSOLVERPOINTER
1860
1861### Deleted and changed API functions
1862
1863- When calling SCIPdelVar() in the SCIP_STAGE_PROBLEM stage, it is now documented as the user's responsibility to ensure
1864 the variable is not present in any constraints. Otherwise, SCIPsolve() now returns SCIP_INVALIDDATA.
1865- removed SCIPselectCuts(), replaced by SCIPselectCutsHybrid() of the hybrid cut selector plugin
1866- If SCIPvarMarkRelaxationOnly() is called for a variable, then this now need to happen before the
1867 variable is added to the transformed problem (SCIPaddVar()).
1868 SCIPvarMarkRelaxationOnly() will automatically call SCIPvarMarkDeletable().
1869- SCIPcomputeOrbitsFilterSym() and SCIPcomputeComponentsSym(): Type of argument componentblocked
1870 changed from SCIP_Shortbool* to unsigned*.
1871- removed SCIPsetParam()
1872- SCIPcreateConsOrbitope() and SCIPcreateConsBasicOrbitope() have two new arguments "usedynamicprop"
1873 and "mayinteract" to encode whether a dynamic reordering of the orbitope rows shall be used in
1874 full orbitope propagation and whether the orbitope might interact with other symmetry handling
1875 methods, respectively.
1876- internal function SCIPgetPropertiesPerm() has been replaced by SCIPisInvolutionPerm()
1877- internal function SCIPgenerateOrbitopeVarsMatrix() has new arguments "storelexorder", "lexorder",
1878 "nvarsorder", "maxnvarsorder" to compute and store the lexicographic order defined by an orbitope
1879- renamed SCIPcomputeArraysIntersection() and SCIPcomputeArraysSetminus() to
1880 SCIPcomputeArraysIntersectionInt() and SCIPcomputeArraysSetminusInt(), respectively, and changed
1881 their return type from SCIP_RETCODE (which _always_ was SCIP_OKAY) to void
1882- removed SCIPincludeDialogDefault(), use SCIPincludeDialogDefaultBasic() instead and check whether you also need SCIPincludeDialogDefaultSet() and SCIPincludeDialogDefaultFix()
1883- removed exprint argument from SCIPaddNlRowGradientBenderscutOpt()
1884- added copyexprhdlrs argument to SCIPcopyPlugins() (19th position)
1885- added copycutselectors argument to SCIPcopyPlugins() (10th position)
1886- removed refpoint argument from SCIPaddSquareSecant()
1887- added argument exprdata to SYMcomputeSymmetryGenerators()
1902- renamed SCIPsetNlRowExprtree() to SCIPsetNlRowExpr() and changed type of expr(tree) argument to SCIP_EXPR*
1903- SCIPenableNLP() is no longer allowed in stages INITSOLVE and SOLVING
1904- removed SCIPaddLinearConsToNlpHeurSubNlp()
1905- 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
1906- renamed SCIPsolveNLP() to SCIPsolveNLPParam() and added parameter SCIP_NLPPARAM param
1907- removed SCIPsolveDiveNLP(), use SCIPsolveNLPParam() instead
1955- removed SCIPnlpiOracleGetVarDegree() and SCIPnlpiOracleGetVarDegrees(), use SCIPnlpiOracleIsVarNonlinear() and SCIPnlpiOracleGetVarCounts(), respectively, instead
1956- removed SCIPnlpiOracleGetConstraintDegree(), use SCIPnlpiOracleIsConstraintNonlinear() instead
1957- removed argument messagehdlr from SCIPnlpiOraclePrintProblem() and SCIPnlpiOraclePrintProblemGams()
1958- removed SCIPcreateNlpiProb(), use SCIPcreateNlpiProblemFromNlRows() instead
1959- renamed SCIPupdateNlpiProb() to SCIPupdateNlpiProblem() and moved into scip_nlpi.{h,c}
1960- renamed SCIPaddNlpiProbRows() to SCIPaddNlpiProblemRows() and moved into scip_nlpi.{h,c}
1962- removed SCIPgetIpoptApplicationPointerIpopt(), use SCIPgetNlpiSolverPointer() instead
1963- removed SCIPnlpStatisticsCreate(), SCIPnlpStatisticsFree(), SCIPnlpStatisticsGetNIterations(), SCIPnlpStatisticsGetTotalTime(), SCIPnlpStatisticsSetNIterations(), SCIPnlpStatisticsSetTotalTime(), the struct is public now
1964- renamed LapackDsyev() to SCIPcallLapackDsyevIpopt()
1965- renamed SCIPsolveLinearProb() to SCIPsolveLinearEquationsIpopt()
1966
1967Expression interpreter:
1968- removed functions that operated with SCIPInterval
1969- changed first argument of SCIPexprintCreate() to SCIP*
1970- added SCIP* as first argument to SCIPexprintFree()
1971- added SCIP* as first argument to SCIPexprintCompile(), changed third argument to SCIP_EXPR*, added fourth argument SCIP_EXPRINTDATA**
1972- added arguments SCIP*, SCIP_EXPRINT*, and SCIP_EXPR* as first arguments to SCIPexprintFreeData()
1973- renamed SCIPexprintGetExprtreeCapability() to SCIPexprintGetExprCapability();
1974 added SCIP* as first argument, changed third argument to SCIP_EXPR*, added fourth argument SCIP_EXPRINTDATA*
1975- removed SCIPexprintNewParametrization()
1976- SCIPexprintEval(): added SCIP* as first argument, changed third argument to SCIP_EXPR*, added fourth argument SCIP_EXPRINTDATA*
1977- removed SCIPexprintEvalInt()
1978- SCIPexprintGrad(): added SCIP* as first argument, changed third argument to SCIP_EXPR*, added fourth argument SCIP_EXPRINTDATA*
1979- removed SCIPexprintGradInt()
1980- removed SCIPexprintHessianSparsityDense() and SCIPexprintHessianDense, use SCIPexprintHessianSparsity() and SCIPexprintHessian() instead
1981
1982Expressions:
1983- removed SCIPexpropGetName(), use SCIPexprhdlrGetName() instead
1984- removed SCIPexpropGetNChildren()
1985- removed SCIPexprGetOperator(), use SCIPexprGetHdlr() instead
1986- removed SCIPexprGetOpIndex(), SCIPexprGetOpReal(), SCIPexprGetOpData(), use SCIPexprGetData() instead
1987- removed SCIPexprGetRealPowerExponent(), SCIPexprGetIntPowerExponent(), SCIPexprGetSignPowerExponent(), use SCIPgetExponentExprPow() instead
1988- removed SCIPexprGetLinearCoefs(), SCIPexprGetLinearConstant(), use SCIPgetCoefsExprSum() and SCIPgetConstantExprSum() instead
2108- renamed SCIPgetNAllBilinearTermsQuadratic() to SCIPgetNBilinTermsNonlinear() and changed argument from SCIP* to SCIP_CONSHDLR*
2109- renamed SCIPgetAllBilinearTermsQuadratic() to SCIPgetBilinTermsNonlinear() and replaced arguments by SCIP_CONSHDLR* and changed return type to SCIP_CONSNONLINEAR_BILINTERM*
2110- removed SCIPaddBilinearIneqQuadratic(), use SCIPinsertBilinearTermImplicitNonlinear() instead
2111- renamed SCIPcreateConsQuadratic() to SCIPcreateConsQuadraticNonlinear() and removed argument stickingatnode
2112- removed SCIPincludeConshdlrSOC()
2113- replaced SCIPcreateConsBasicSOC() by SCIPcreateConsBasicSOCNonlinear()
2114- deprecated SCIPcreateConsSOC(), use SCIPcreateConsBasicSOCNonlinear() instead
2115- deprecated SCIPgetNlRowSOC(), use SCIPgetNlRowNonlinear() instead
2335- Removed parameters for strongcg separator: separating/strongcg/..., i.e.,
2336 maxrounds, maxroundsroot, maxsepacutsroot, maxsepacuts, dynamiccuts. One can control the
2337 strongcg behavior throught the parameters of sepa_gomory.
2338- renamed separating/{minortho,minorthoroot,objparalfac,intsupportfac} to cutselection/hybrid/{minortho,minorthoroot,objparalweight,intsupportweight}
2339
2340### New parameters
2341
2342- It is now possible to add orbitope constraints to handle symmetries even if not all variables
2343 in a component of the symmetry group are binary. This feature can be enabled using the
2402- new parameters "branching/inference/conflictprio" and "branching/inference/cutoffprio" that allow
2403 using the different score criteria in inference branching hierarchically
2404- new parameters "heuristics/alns/nodesquotmin", "heuristics/alns/maxcallssamesol" and "heuristics/alns/initduringroot"
2405 to control neighborhoods in ALNS
2406- new parameter "benders/default/benderscut/optimality/mir" to control whether mixed-integer rounding procedure is applied to Benders optimality cuts
2407- new parameter "misc/avoidmemout" to try to avoid running into memory limit
2523- added test projection:transitivity in prob/obbt.c
2524- added reader/nl.c
2525- added test intervalarith:sincos in scip/intervalarith.c
2526- added sepa/minor.c
2527- added sepa/rlt/cuts.c
2528- added sepa/rlt/product_detection.c
2529- added sepa/rlt/separation.c
2530- added tests test_compute_symmetry:expr{1,2,3,4} in symmetry/compute.c
2531
2532Build system
2533------------
2534
2535- the separate NLPI library has been integrated into the main SCIP library;
2536 uses of NLPILIBFILE or NLPILIBSRC in Makefiles that use make/make.project
2537 should be removed
2538
2539### Cmake
2540
2541- replace flag PARASCIP by THREADSAFE
2542- option AMPL is now ON by default
2543- add -D_XOPEN_SOURCE=600 cflag for compilation on systems other than windows
2544- add compile options directly instead of modifying CMAKE_C_FLAGS and CMAKE_CXX_FLAGS
2545
2546### Makefile
2547
2548- prefix PKG_CONFIG_PATH with Ipopt's pkgconfig dir instead of postfixing
2549- replace flag PARASCIP by THREADSAFE
2550- flag AMPL is now true by default
2551- libscip has been renamed to libscipbase and libscipsolver has been renamed to libscip
2552 in order to have the same library names for makefiles and cmake. For downward
2553 compatibility libscipsolver still exists (as a link).
2554
2555Fixed bugs
2556----------
2557
2558- fixed handling of multi-aggregation in cons_symresack and cons_orbisack
2559- SCIPgetLowerbound() now consistently returns infinity when status is infeasible
2560- improved the likelihood that a solution that satisfies the nonlinear constraints in the transformed (presolved) problem is also feasible for the original problem
2561- worked around a problem with derivatives of pow at 0 with non-integer exponents in CppAD
2562- fixed that setting of feasiblity and optimiality tolerance for NLP relaxation was overwritten with defaults when solving NLP
2563- fixed variance computation in t-value computation in hypothesis testing of reliability branching
2564- fixed potential overflow in cuts.c:evaluateLiftingFunctionKnapsack()
2565- do not transfer dual reductions to main SCIP in sepa_rapidlearning if strong dual reductions are forbidden
2566- fixed a bug in cons_setppc.c:removeDoubleAndSingletonsAndPerformDualpresolve() which led to wrong variable aggregations
2567- added missing redundancy check to coefficient tightening routine in cons_varbound that led to wrong variable locks
2568- added a check of numerics to avoid wrong reductions in cons_linear.c:simplifyInequalities()
2569- fixed a bug in cons_logicor.c regarding fixed variables that were not removed
2570- presol_milp.c handles variable fixings, suggested by PaPILO, more carefully to cover all cases that can appear
2571- fixed several reproducability bugs that led to different solving paths across multiple runs with one SCIP environment
2572- fixed check of limits/absgap, which was incorrectly applied to the scaled objective of the transformed problem
2573
2574Miscellaneous
2575-------------
2576
2577- in LP, use absolute instead of relative tolerances to check whether solutions from LP solver are primal feasible
2578- when a restart occurs, SCIP now asserts (during EXITSOLVE) that all relaxation-only variables are unlocked and
2579 only captured by the transformed problem.
2580- Avoid redundant calls to LP solver when LP is already flushed and solved
2581- In SCIPdebugMsg(), SCIPsetDebugMsg(), SCIPstatDebugMsg() strip directory from filename.
2582- Recompute activity of rows when checking LP solutions instead of trusting the value given by the LP solver
2583- The define NPARASCIP has been replaced by SCIP_THREADSAFE
2584- Parameters are not reset to their default values before activating an emphasis setting; this now allows to combine
2585 different emphasis settings.
2586- 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.
2587
2588@page RN7 Release notes for SCIP 7
2589
2590@section RN703 SCIP 7.0.3
2591*************************
2592
2593Interface changes
2594-----------------
2595
2596### New API functions
2597
2598- added function SCIPwithDebugSol() to determine whether SCIP was compiled with WITH_DEBUG_SOLUTION
2599
2600- New function SCIPcreateConsBounddisjunctionRedundant() and SCIPcreateConsBasicBounddisjunctionRedundant() that allow
2601 the input to contain redundant literals.
2602
2603### Changed API functions
2604
2605- added __attribute__((format(printf,,,))) to variadic SCIP message printing functions;
2606 this enables warnings about mismatches between format string and variadic function arguments if using GCC.
2607
2608### Interfaces to external software
2609
2610- removed MATLAB interface from interfaces/matlab
2611
2612Build system
2613------------
2614
2615- Compilation will now also work in a raw tarball of the scip git repository
2616
2617### Cmake
2618
2619- Make find_package more verbose and require packages to be found. Now enabled packages that are not found result in an error.
2620
2621Fixed bugs
2622----------
2623
2624- Fixed numerical bug by creating and checking the empty solution when problem vanishes in presolving.
2625- Fixed several bugs in reoptimization.
2626- Fixed bug in cons_bounddisjunction in which a constraint leads to a cutoff.
2627- Fixed bug in reoptimization by avoiding redundant literals for bound disjunctions.
2628- Replace wrong usage of CMAKE_BINARY_DIR by PROJECT_BINARY_DIR in CMake system
2629- Fixed lpi_glop to use absl flag instead of GFlags
2630- Fixed invalid initialization of limits/softtime parameter in cons_components
2631- Fixed MIN macro not defined in some cases.
2632- Safeguard some API functions for querying solving statistics against segmentation faults after SCIPpresolve()
2633- Fixed unfreed solution in concurrent solving
2634- Make sure that logicor constraints are enforced/separated if genlogicor is true in cons_indicator.
2635 Thus, do not change constraints/logicor/sepafreq anymore, but output warning.
2636- Fixed assert that assumed infeasibility cannot occur in presol_boundshift.
2637- Fixed sign bug during creation of conflict constraints with almost zero left-hand side.
2638- Disabled call of conflict handler for conflict sets that contain relaxation-only variables.
2639- Fixed bug in cons_symresack by initializing all constraint data in constrans
2640- Avoid allowing the upgrade of linear constraints corresponding to indicators in propagation of nodes.
2641- Fixed bug in computing lex. min/max faces in dynamic orbitope propagation.
2642- Limit vbounds propagator to one sweep through all bounds per call in order to avoid an infinite loop.
2643- Fixed mismatches between formatter strings and arguments in calls to SCIP message printing functions.
2644
2645Miscellaneous
2646-------------
2647
2648- To avoid performance variablity during reoptimization, the active constraints are now stored in the same order as in the
2649 original problem.
2650- Added workaround for bug in MSVS 2019 when compiling CppAD source.
2651- The original order of variables is now only restored after presolve if `randomization/permutevars` is set to FALSE.
2652
2653@section RN702 SCIP 7.0.2
2654*************************
2655
2656Features
2657--------
2658
2659- Extended check for valid variable and constraint names in PIP writer.
2660- Indicator constraints now write the name of the linear constraint in CIP format. This avoids a complicated
2661 name matching during parsing. The old format is still supported.
2662- The objective scale and offset are now taken into account when reading/writing problems in lp/mps/fzn/pip format.
2663 This often changes the behavior when writing transformed problems.
2664
2665Performance improvements
2666------------------------
2667
2668Examples and applications
2669-------------------------
2670
2671- Add c++ Sudoku example
2672
2673Interface changes
2674-----------------
2675
2676### Deleted and changed API functions
2677
2678- deprecated SCIPsetParam(); use SCIPsetIntParam(), SCIPsetRealParam(), etc, instead
2679
2680### New API functions
2681
2682- new function SCIPcolGetVarProbindex() for accessing the probindex of a variable corresponding to a column
2683- added new sorting functions SCIPsortPtrRealRealBoolBool()
2684
2685Fixed bugs
2686----------
2687
2688- Fixed a sign bug occuring for some cases in the computation of the directed cutoff distance
2689- Fixed overflow in inference information of cumulative constraint handler
2690- Fixed problem with propfreq == 0 in cons_linear.c
2691- Fixed aggregation heuristic in sepa_aggregation.c to not use local rows when that is requested nor modifiable rows
2692- Fixed problem with incompatibility of symmetry handling in Benders decomposition
2693- Fixed parsing of small number in CIP format of nonlinear constraint
2694- Fixed problem in upgrading full orbitopes to partitioning orbitopes
2695- Fixed treatment of negated variables in parsing orbitope constraints
2696- Fixed potential indexing error in prop_vbounds.c
2697- Fixed bug in writing fzn format
2698- Revert to old parameter value when parameter change is rejected in PARAMCHGD callback
2699- Fixed order of linker flags when building AMPL interface with cmake system.
2700- Fixed bug with ofsymcomptiming == 0: now symmetry is actually computed
2701- Improved separation for SOC constraint with multiaggregated variable on right-hand-side.
2702- Fixed bug in presol_boundshift: do not shift non-active variables
2703- Fixed bug in domain propagation for SOC constraints with negative coefficient for variable on right-hand-side.
2704- Fixed bug with multi-aggregated integer variables in cons_xor.
2705- Fixed bug with changed number of variables in storing relaxation solution in probing/diving.
2706- Fixed issues with scip statistics
2707- Fixed issue with multi-aggregated variables
2708- Fixed issue in with buffer memory in cons_cumulative
2709
2710@section RN701 SCIP 7.0.1
2711*************************
2712
2713Build system
2714------------
2715
2716### Cmake
2717
2718- Fixed cmake module for Ipopt to support Ipopt 3.13
2719- Added cmake variable BLISS_LIBRARY_DIR to pass a bliss library
2720- Added warning to require minimal GCC version 4.8
2721- Renamed FindCriterion cmake findmodule to FindCRITERION
2722
2723### Makefile
2724
2725- Updated make/make.project for macOS
2726- Add SANITZERFLAGS (only OPT=dbg) to LDFLAGS also if SHARED=true (and rename SANITZERFLAGS to SANITIZERFLAGS)
2727- Fixed GCC version check in make/make.linux.gnu.dbg
2728
2729Fixed bugs
2730----------
2731
2732- Fixed handling of constant term in quadratic objective of pip-reader
2733- Fixed incorrect value string for parameter estimation/completiontype
2734- Fixed initialization of first LP which led to wrong output about LPs not resolved correctly
2735- Fixed bug in SCIPcutpoolClear() function not clearing internal datastructures properly
2736- Fixed inability to set a value in a solution if it was within epsilon to the current value
2737- Fixed problems for linking optimized code with debug library of SCIP (and vice versa) by moving debug-only members
2738 to end of SCIP structs
2739
2740Miscellaneous
2741-------------
2742
2743- Variables that are marked as relaxation-only are no longer checked against debug solutions if
2744 they are captured by the transformed problem only.
2745
2746@section RN700 SCIP 7.0.0
2747*************************
2748
2749Features
2750--------
2751
2752- Using the parameter "propagating/symmetry/recomputerestart" one can now decide to recompute symmetries after a
2753 restart or not. Previously one could just turn off symmetry computation after a restart. If orbital fixing
2754 has found a reduction before the restart occurred, symmetries have to be updated to ensure correctness.
2755 To this end, the user can decide via "propagating/symmetry/disableofrestart" whether orbital fixing is disabled or
2756 whether symmetries are recomputed.
2757
2758- extended relaxators statistics in solve statistics about information on number of cutoffs, improved bounds, etc.
2759
2760- extends SMPS file reader for the stochastic information, the sto files, to read a lower bound for the discrete
2761 scenarios. The lower bound is used when creating the auxiliary variables for Benders' decomposition.
2762
2763- extended Benders framework to solve NLPs and generate optimality and feasibility cuts from their solution
2764 when the subproblem is convex nonlinear.
2765
2766- extended Benders framework to create copies of Benders decompositions that can be used in a multithreading environment
2767
2768- additional functionality has been added to enable the transfer of Benders' decomposition cuts between different SCIP
2769 instances, e.g., when used in UG
2770
2771- LP rows (SCIP_ROW) can now store pointer to a constraint from which the row originates
2772
2773- Trust region, a new LNS heuristic, has been added to SCIP as both a standalone primal heuristic heur_trustregion.c
2774 and as a neighborhood inside of Adaptive Large Neighborhood Search (heur_alns.c). This heuristic is designed to improve the
2775 heuristic performance of the Benders' decomposition algorithm. It builds upon the successful trust region approaches
2776 applied to Benders' decomposition.
2777
2778- Modularity of symmetry handling has been increased. It is now possible to use orbitopes (i.e., polyhedral symmetry
2779 handling techniques) and orbital fixing on the same instance.
2780
2781- cut strengthening enabled within the Benders' decomposition framework. This uses a mix of the Improved Magnanti-Wong
2782 method and Kelly's method. The cut strengthening is enabled by setting the paramemter
2783 "benders/<bendersname>/cutstrengthenenabled" to TRUE. The parameters "cutstrengthenmult", "noimprovelimit" and
2784 "corepointperturb" control the behavior of the cut strengthening method. Additionally, the parameter
2785 "cutstrengthenintpoint" allows the user to specify the solution that is used to initialize the core point. The options
2786 are the first LP solution, the first integer feasible solution, a relative interior point, a solution vector of all
2787 ones and a solution vector of all zeros. Also, the core point can be reinitialized after each update to the incumbent
2788 solution.
2789
2790- added option to adjust weights of different scores in relpscost (hybrid) branching rule based on degeneracy information
2791 and skip strong branching for very high degeneracy rates
2792
2793- added new SCIP_DECOMP* object to store user decompositions. The user can specify one or several decompositions by assigning variable
2794 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).
2795 This format specifies constraint labels, variable labels are inferred from that. The decomposition is transformed after presolving.
2796- statistics regarding the number of blocks, the largest and smallest blocks, the border, and the constraint graph are printed for the original decomposition,
2797 and for each decomposition after presolving.
2798- the decomposition can be used as initial decomposition for the Benders functionality of SCIP.
2799- new subsection "How to provide a problem decomposition" in the SCIP documentation
2800
2801- GINS heuristic can make use of a user-provided decomposition labels in two ways:
2802 1. by selecting a block of variables that maximizes the potential, and randomly selecting a start variable for the neighborhood and/or
2803 2. by selecting an interval of consecutive blocks as neighborhood, until fixing rate is reached. In this case, no variable is randomly selected.
2804
2805- extend potential parameter of GINS to allow computation based on local LP solution, as well
2806
2807- new primal heuristic Adaptive Diving, which registers all publicly available dive sets from other diving heuristics.
2808 At each call, it selects one of the available dive sets based on the user's score type choice (heuristics/adaptivediving/scoretype).
2809 During the solution process, the heuristics learns online which divesets reach the best score, and executes them more frequently.
2810 The statistic output for Diving heuristics has been extended to incorporate the statistics of each dive set within Adaptive diving.
2811
2812- Added new penalty alternating direction method (PADM) primal heuristic that splits the problem into several sub-SCIPs
2813 according to a user-provided decomposition. The sub-SCIPs are solved on an alternating basis until a feasible solution of
2814 the original problem is found.
2815
2816- Symmetry handling constraints (cons_orbisack, cons_orbitope, cons_symresack) now have an additional parameter to encode
2817 whether they are model constraints, i.e., define the problem, or whether they are only present to handle symmetries.
2818
2819- The symmetry code has been completely restructured. The presolvers presol_symbreak and presol_symmetry as well as the propagator
2820 prop_orbitalfixing have been merged into the single propagator prop_symmetry to avoid storing the same information
2821 multiple times. This propagator is now responsible for adding symmetry handling constraints as well as activating orbital
2822 fixing. Moreover, the new file symmetry.c contains general functions for symmetry computations like orbit computations.
2823
2824- Variables can now be marked as "relaxation-only". This flag should be used to introduce new variables that are required
2825 to define a relaxation, but that are not part of any checked constraints. Essentially, these variables should only be used
2826 in the current SCIP solve and disregarded after a restart or in SCIP copies. Hence, these variables are not copied by SCIPcopy and
2827 SCIPgetVarCopy, they are currently not used in conflict constraints, and cuts involving them are not upgraded to linear constraints.
2828 Relaxation-only variables cannot appear in the objective function.
2829
2830- The OSiL reader now supports nonlinear expressions of type "signpower".
2831
2832- Expressions of form abs(x)^p * x in a nonlinear constraint are now sometimes recognized and handled by abspower constraints.
2833
2834- If polyhedral symmetry handling methods are used (cons_orbisack, cons_orbitope, cons_symresack), it is now possible to
2835 recompute symmetries if a restart occurred.
2836
2837- upgrade some more quadratic constraints to second-order cone constraints, that is,
2838 handle linear binary variables as if squared in simple upgrade and
2839 do not require bounds for variables that have a zero entry in the computed eigenvectors in the non-simple upgrade
2840
2841- new variable event when changing the variable type
2842
2843- It is no longer necessary to provide a SCIP pointer for the subproblem in SCIPaddBendersSubproblem if custom solving
2844 methods are defined. A NULL pointer can be supplied to SCIPaddBendersSubproblem. In this case, no internal Benders'
2845 cut generation methods can be used.
2846
2847- Using the parameter "constraints/symresack/checkmonotonicity" one can now decide to upgrade to packing/partitioning
2848 symresacks even if the underlying permutation is not monotone.
2849
2850- New branching rule `vanillafullstrong`, mostly for scientific purpose, with the following features:
2851 1) no cutoff or domain reduction: only branching;
2852 2) idempotent (optional): leave SCIP, as much as possible, in the same state before / after the strong branching calls
2853 - basically, do not update any statistic;
2854 3) donotbranch (optional): do no perform branching. So that the brancher can be called as an oracle only
2855 (on which variable would you branch ? But do not branch please);
2856 4) scoreall (optional): keep scoring variables, even if infeasibility is detected;
2857 5) collectscores (optional): store the candidate scores from the last call, which can then be retrieved by calling SCIPgetVanillafullstrongData();
2858 6) integralcands (optional): consider integral candidates for branching,
2859 i.e., get candidates from SCIPgetPseudoBranchCands() instead of SCIPgetLPBranchCands().
2860
2861- If a reference value (misc/referencevalue) is given, the primal-reference and reference-dual integrals are calculated automatically and printed within the SCIP statistics.
2862
2863- Locally valid cuts / rows are now considered for dual proof analysis when `conflict/uselocalrows` is set to TRUE.
2864
2865- 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.
2866
2867- To save memory, it is now possible to remove all variables from the internal symmetry data structures that are
2868 not affected by any symmetry.
2869
2870- Allow to filter first variables from orbits and transfer pseudo cost information to variables in orbit
2871
2872- Add integration of external MILP presolve library as a SCIP presolver plugin that runs on MILP problems
2873
2874- Parallelisation can be used when applying Benders' decomposition. There are two different forms of parallelisation
2875 available. The first is applying Benders' decomposition within a parallel branch-and-bound. This is achieved through
2876 the integration with the UG framework. The second is the use of shared memory parallelisation for solving the Benders'
2877 decomposition subproblems. A priority queue has been added to help with load balancing.
2878
2879- The Benders' decomposition framework can handle MINLPs. If a convex relaxation of the MINLP exists, then this is
2880 solved to generate optimality and feasibility cuts. The extensions to the framework are:
2881 - New generic solving methods to solve convex NLP subproblems.
2882 - Modification to benderscut_opt and benderscut_feas to enable the generation of cuts from convex NLPs.
2883 - Addition of benderscut_feasalt to generate feasibility cuts from an alternative subproblem that minimises the
2884 violation of infeasible problems.
2885 - Better handling of subproblem solution results
2886
2887- Adds a feasibility phase to the Benders' decomposition subproblem solving methods. The feasibility phase adds slack
2888 variables to each of the constraints to ensure feasibility of the subproblem. A large coefficient is given to these
2889 slack variables in the objective function to penalise constraint violations. The coefficients are progressively
2890 increased until all slack variables take the value 0.0.
2891
2892- Improved convexity check for Benders' decomposition subproblems. The constraints of the subproblem are now checked for
2893 convexity in the initialisation of the Benders' decomposition algorithm. This enables the solving of convex NLPs as
2894 Benders' decomposition subproblems.
2895
2896- Benders' decomposition can be applied using decomposition supplied in the DEC format. To apply Benders' decomposition
2897 the parameters decomposition/benderslabels and decomposition/applybenders must be set to TRUE.
2898
2899- new event handler event_estim.c/h that approximates search tree completion and estimates tree size
2900 to trigger restarts; many approximations of search tree completion and estimation, including WBE, SSG, and tree profile method
2901- new display column that reports approx. search tree completion during the search, and an overview in the statistics table
2902- added resources (script, tutorial, test data) to adapt tree size estimation to user instances.
2903
2904- Orbital Fixing uses a list of variables that have been fixed globally since the computation of symmetries to filter
2905 symmetries. Previously, some plugins were disabled, which is not necessary anymore.
2906
2907- A new presolver "dualsparsify" was added. It tries to combine columns (i.e. variables) to cancel nonzero coefficients in the constraint matrix.
2908
2909- The presolver "tworowbnd" was implemented with better performance.
2910
2911- 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.
2912
2913- allow disabling of pricers during solving process
2914
2915- added emphasis setting for numerically challenging instances
2916
2917Performance improvements
2918------------------------
2919
2920- Extended cut presolving by removing variables that been fixed at their bounds
2921
2922- Improved branching point selection when branching on externals branching candidates. Instead of using exactly the
2923 LP solution, a point closer to the middle of the variables domain is chosen.
2924
2925- Matrix presolvers that do not work on incomplete matrices now skip matrix creation if unsupported constraint types are detected.
2926
2927- consLockBenders callback implemented to add down locks on the Benders' decomposition auxiliary variables and
2928 up and down locks per subproblem for all master problem variables. This allows the use of presolving and propagation
2929 with Benders' decomposition.
2930
2931- improved performance of orbital fixing in several ways:
2932 store permutations in transposed form to improve cache efficency;
2933 reverse order to speed up filtering of permutations;
2934 handle variables globally fixed to 1 in list;
2935 use event handler to catch global fixings;
2936 speed up orbit computations;
2937 change handling of restarts;
2938 use only permutations that can contribute to a variable's orbit;
2939
2940- allow rapid learning at local nodes
2941
2942- allow to recompute cut without using fractional values for sepa_cgmip
2943
2944- restrict the number of the clique table nonzeros relative to the number of problem nonzeros, which could be a performance bottleneck.
2945
2946- variable fixings of LP face heuristic are now computed earlier; subproblem creation is skipped if not enough variables are fixed.
2947
2948- Improved domcol presolver to not require a complete representation of all constraints in the matrix
2949
2950- performance improvement of adaptive large neighborhood search heuristic on merely continuous problems. The heuristic
2951 stops if presolving in the sub-SCIP fixes less than 50 % of the current target fixing rate over all variables
2952 (including continuous).
2953
2954- reduce memory usage in symmetry detection by a staggered allocation with decreasing overhead for larger instances
2955
2956- improved full orbitope propagation using a static implementation or a dynamic reordering of orbitope rows by a global rank function
2957
2958- improved detection of packing/partitioning orbitopes
2959
2960- enable an in-tree restart if after a reasonable initialization, the estimated size of the remaining tree is large.
2961
2962
2963Examples and applications
2964-------------------------
2965
2966- added functions to set and get hmin and hmax for optcumulative constraints
2967
2968Interface changes
2969-----------------
2970
2971### New and changed callbacks
2972
2973- new optional callback `SCIP_DECL_DIVESETAVAILABLE` to check preconditions for this dive set, e.g., if an incumbent solution is available,
2974 which is passed as new argument to SCIPcreateDiveset(). SCIPcreateDiveset() has another new parameter "ispublic".
2975
2976- new callback `SCIP_DECL_CONSHDLRCOPY` and `SCIP_DECL_CONSCOPY` in cons_orbisack and cons_symresack
2977
2978- new `idempotent` argument to SCIPgetVarStrongbranchInt() and SCIPgetVarStrongbranchFrac(),
2979 so that statistics are not updated during the call. Likewise, new `updatecol` and `updatestat` arguments to SCIPcolGetStrongbranch().
2980
2981- callback `SCIP_DECL_CONSHDLRENFOLP` can now also return SCIP_SOLVELP as *result, which indicates to the SCIP core that the LP relaxation
2982 should be solved again because the primal feasibility tolerance of the LP has been tightened (using SCIPsetLPFeastol())
2983
2984- 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.
2985
2986### Deleted and changed API functions
2987
2988- LPI:
2989 + now for all lp interfaces consistent requirements on SCIP_LPPAR:
2990 LPITLIM and BARRIERCONVTOL positive or zero; FEASTOL, DUALFEASTOL, LPTILIM strictly positive
2991 + now projecting SCIP_LPPAR values on feasible values for each lp interface
2992 + add interface to Glop
2993 + fixed mapping between scaling parameter values in Gurobi LPI lpi_grb
2994- Symmetry:
2995 + removed function SCIPseparateCoversOrbisack() in cons_orbisack.h since the orbitope constraint
2996 handler has its own implementation of this routine with advanced features now
2997 + renamed SCIPgetGeneratorsSymmetry() to SCIPgetSymmetry() and removed two arguments
2998 + extended function SCIPgetSymmetry(): It is possible to access both the original and
2999 transposed permutations matrix as well as the (independent symmetry) components of a permutation group now.
3000 + arguments of functions SCIPcreateConsOrbisack(), SCIPcreateConsBasicOrbisack(), SCIPcreateConsOrbitope(),
3001 SCIPcreateConsBasicOrbitope(), SCIPcreateConsSymresack(), SCIPcreateConsBasicSymresack(), and SCIPcreateSymbreakCons() extended
3002 by "ismodelcons" to encode whether the constraints are model constraints or not
3003 + the function SCIPgetSymmetry() no longer accepts the parameter recompute, but has parameter permvarmap as new input
3007 + add function SCIPcomputeOrbitsComponentsSym() to compute orbits without filtering permutations and indices of orbits for each variable
3008- SCIPallowObjProp() and SCIPallowDualReds() are deprecated and replaced by SCIPallowWeakDualReds() and SCIPallowStrongDualReds(), respectively
3009- Benders' decomposition
3010 + changed SCIPstoreBenderscutCut() in scip_benders.c to SCIPstoreBendersCut(). Where this function used to take a
3011 SCIP_BENDERSCUT pointer, it now accepts a SCIP_BENDERS pointer.
3012 + the functions SCIPsolveBendersSubproblem() no longer accepts the parameter type. The type is not a necessary
3013 argument for the subproblem solving method.
3014 + arguments of functions SCIPbendersSolveSubproblemLP(), SCIPbendersSolveSubproblemCIP(), and SCIPbendersOnlyCheckConvexRelax() changed
3015 - removed SCIPbenderscutGetNAddedCuts() and SCIPbenderscutGetAddedCutData()
3016
3017
3018### New API functions
3019
3020- new argument "onlyifcomplete" in SCIPmatrixCreate() to skip matrix creation right after detecting unsupported constraint types
3021 and new arguments to count statistics when doing a clean-up of inactive variables in the constraints before building the matrix
3022
3023- new argument "threadsafe" in SCIPcopy(), SCIPcopyConsCompression(), SCIPcopyOrig(), SCIPcopyOrigConsCompression and
3024 SCIPcopyBenders(). This argument must only be set to TRUE if the source and target SCIP instances are to be solved in
3025 parallel. Setting this argument to TRUE has a performance cost.
3026
3027- new argument "append" in SCIPsetModifiedDefaultSettingsIpopt()
3028- functions SCIPclearRelaxSolVals(), SCIPsetRelaxSolVal(), SCIPsetRelaxSolVals(), SCIPsetRelaxSolValsSol(), and SCIPmarkRelaxSolValid()
3029 receive an additional argument "relax" to store the relaxation handler as creator of the relaxation solution.
3030
3031- LP:
3032 - SCIProwGetOriginCons() now returns a SCIP_CONS* instead of a SCIP_CONSHDLR*, use SCIProwGetOriginConshdlr() for the previous behavior
3033 - SCIPcreateRowCons() and SCIPcreateEmptyRowCons() now expect a SCIP_CONS* instead of a SCIP_CONSHDLR*,
3034 use SCIPcreateRowConshdlr() and SCIPcreateEmptyRowConshdlr(), respectively, for the previous behavior
3035 - deprecated SCIPlpfeastol() and SCIPchgLpfeastol(), use SCIPgetLPFeastol() and SCIPsetLPFeastol()
3036
3037- new parameter "divecontext" for every function that queries statistics for a diveset. The context can be used to distinguish between the dive set
3038 as single (standalone) heuristic or within Adaptive Diving.
3039- new parameters "divecontext" and "iterlim" to SCIPperformGenericDivingAlgorithm() to control in which context (single,adaptive) statistics are updated.
3040
3041- SCIPcopyVars, SCIPcopy, SCIPcopyConsCompression, and SCIPgetVarCopy do not copy variables that are marked as relaxation-only,
3042 thus it cannot be assumed anymore that each active variable from the master SCIP also has a counterpart in the copy.
3043 SCIPcopy, SCIPcopyConsCompression, and SCIPcopyConss can now return *valid=TRUE if some non-checked and non-enforced constraints were not copied, e.g.,
3044 because they involved relaxation-only variables. Thus, a copy is already regarded as valid if all checked or enforced constraints were copied successfully.
3045
3046- linking constraint handler:
3047 - changed type of vals argument from int* to SCIP_Real* in SCIPcreateConsLinking() and SCIPcreateConsBasicLinking()
3048 - SCIPgetIntvarLinking() has been renamed to SCIPgetLinkvarLinking().
3049 - changed return value of SCIPgetValsLinking() from int* to SCIP_Real*.
3050 - new function SCIPgetBinvarsDataLinking().
3051
3052- SCIPbendersCheckSubproblemOptimality() now returns a boolean indicating whether the subproblem is optimal or not.
3053 Previously this result was returned through a parameter. The change was required to facilitate the integration with
3054 the UG framework.
3055
3056- deleted SCIPcombineTwoInt(), SCIPcombineThreeInt(), SCIPcombineFourInt(); use the appropriate SCIPhashTwo(), ..., SCIPhashSeven() function instead
3057
3058- SCIPsetupBendersSubproblem takes a parameter of the enforcement type.
3059
3060- SCIPcreateNlpiProb takes a hashmap to store the map between the nlrows and the index in the nlrow array.
3061
3062### New API functions
3063
3064- SCIPallowWeakDualReds() and SCIPallowStrongDualReds() replace the deprecated SCIPallowObjProp() and SCIPallowDualReds(), respectively
3065- functions have been added to facilitate the transfer of Benders' decomposition cuts between solvers in UG. These include
3066 SCIPapplyBendersStoredCuts(), SCIPbendersGetNStoredCuts(), SCIPbendersGetStoredCutData() and
3067 SCIPbendersGetStoredCutOrigData().
3068- added SCIPisConvexAbspower()
3069- new functions SCIPsolGetType(), SCIPsolGetRelax(), SCIPsolSetRelax(), SCIPsolSetLPRelaxation(), SCIPsolSetStrongbranch(),
3070 SCIPsolSetPseudo to set or query the new type attribute of a primal solution. The type attribute gives information
3071 about the origin of the solution, ie, whether it was created by a relaxation handler,
3072 by the LP relaxation, by strong branching, by the current pseudo solution, or by a primal heuristic.
3073 The meaning of the argument 'heur' in all creation methods for primal solutions such as SCIPcreateSol() stays unchanged.
3075- new API functions SCIPsetCommonSubscipParams(), SCIPtranslateSubSol(), and SCIPtranslateSubSols() shared by several Large Neighborhood Search heuristics.
3076- new API function SCIPgetLPDualDegeneracy() to get two measures for the dual degeneracy of the current LP
3077- new API functions SCIPdivesetIsAvailable() to check preconditions of a dive set and SCIPdivesetIsPublic() to check if the dive set can be used
3078 by other primal heuristics.
3079- new API functions SCIPcomputeOrbitsSym(), SCIPcomputeOrbitsFilterSym(), SCIPgetPropertiesPerm(), SCIPdetermineBinvarAffectedSym(),
3080 SCIPdetermineNVarsAffectedSym(), SCIPcomputeComponentsSym(), and SCIPextendSubOrbitope(), SCIPgenerateOrbitopeVarsMatrix() for symmetry computations
3081- new API functions SCIPvarIsRelaxationOnly() and SCIPvarMarkRelaxationOnly() to query and set, resp., whether a variable is marked as relaxation-only
3082- new API functions SCIPconshdlrGetNUpdateConss() and SCIPconshdlrGetUpdateConss(), for expert users only
3083- new API function SCIPgetNConflictDualproofsApplied()
3084- new API functions SCIPeventGetOldtype() and SCIPeventGetNewtype() for the new event when changing the variable type
3085- new API function SCIPisConvexConsQuadratic() to check whether a quadratic constraint is convex when a given set of variables would be fixed
3086- new API functions SCIPgetLPFeastol(), SCIPsetLPFeastol(), and SCIPresetLPFeastol() to get, set, and reset (to the default), respectively, the primal
3087 feasibility tolerance for the LP relaxation
3088- new API functions SCIPcleanupConss{Linear,Varbound,Setppc,Logicor,Knapsack}() to clean up inactive variables from those types of linear constraints
3089- new API function SCIPsetBendersSubproblemComp() used to add a custom comparison method for ordering the Benders'
3090 decomposition subproblem solves. The comparison method is used to help with load balancing.
3091- new API function SCIPgetRowObjParallelism to get the objective parallelism of a row
3092- new API function SCIPcolGetAge to get the age of a column
3093- added SCIPhashThree(), SCIPhashFive(), SCIPhashSix(), and SCIPhashSeven() that complement SCIPhashTwo(), SCIPhashFour() to combine 32bit integers to
3094 a 32bit hash value
3095- new API function SCIPgenerateAndApplyBendersOptCut is used to generate a Benders' optimality cut using the dual
3096 solutions. This function can be supplied vectors for the primal and dual solution for generating an optimality cut.
3097 This avoids the need for a SCIP instance to solve the Benders' decomposition subproblem and generating cuts.
3098- new API function SCIPconsAddCoef used for adding a coefficient to a linear-type constraint.
3099- new API functions SCIPconsNonlinearGetRhs, SCIPconsNonlinearGetLhs and SCIPconsNonlinearAddLinearCoef for getting the
3100 RHS and LHS from a nonlinear-type constraint and adding a linear coefficient to the constraint.
3101- new API function SCIPbendersSolSlackVarsActive for checking whether any slack variables from the feasibility phase are
3102 active in the subproblem solution.
3103- new API functions SCIPbendersSetSubproblemType and SCIPbendersGetSubproblemType sets and gets the subproblem type.
3104 This is either:
3105 - Convex constraints with continuous variables
3106 - Convex constraints with discrete variables
3107 - Non-convex constraints with continuous variables
3108 - Non-convex constraints with discrete variables
3109- new API functions SCIPbendersSetSubproblemIsNonlinear() and SCIPbendersSubproblemIsNonlinear() for setting and
3110 identifying whether the Benders' decomposition subproblems contain nonlinear constraints. Similarly, the functions
3111 SCIPbendersSetMasterIsNonlinear() and SCIPbendersMasterIsNonlinear() sets and identifies whether the Benders'
3112 decomposition master problem contains nonlinear constraints.
3113- new API function SCIPapplyBendersDecomposition for applying Benders' decomposition given a decomposition in the DEC
3114 format
3115- new API function SCIPwasNodeLastBranchParent to query if a node has been the parent of the most recent branching in the tree
3116- new API functions SCIPtreemodelInit(), SCIPtreemodelFree(), SCIPtreemodelIsEnabled(), SCIPtreemodelSelectCandidate() related to the new
3117 treemodel way of comparing branching candidates. These functions are only currently used for reliability pscost branching, but they can be used
3118 in other parts of the code.
3119- New function SCIPcalcChildEstimateIncrease() to compute the increase in the child estimation
3120- new API functions SCIPisOrbitalfixingEnabled() and SCIPgetSymmetryNGenerators() to check whether orbital fixing is
3121 enabled and to get the number of generators of the current symmetry group, respectively
3122- new API function SCIPdelNlRow() to remove a row from the NLP
3123
3124### Event system
3125
3126- new event type SCIP_EVENTTYPE_NODEDELETE to react on nodes that are about to be deleted from the tree
3127
3128### Changed parameters
3129
3130- renamed parameter "propagating/orbitalfixing/enableafterrestart" to ".../symmetry/recomputerestart"
3131- Parameter "misc/allowdualreds" is now called "misc/allowstrongdualreds"
3132- Parameter "misc/allowobjprop" is now called "misc/allowweakdualreds"
3133- changed default values of propagation (new value: 1, old value: 5) and separation frequency (new value: -1, old value: 5) in cons_orbitope.c
3134- all primal heuristics that use sub-SCIPs are disabled within the heuristics fast emphasis setting
3135- deleted parameter heuristics/localbranching/useuct, use heuristics/useuctsubscip instead
3136- changed default value of "presolving/symbreak/detectorbitopes" (new value: TRUE, old value: FALSE)
3137- extended range of "misc/usesymmetry" (new range: [0,3], old range: [0,2])
3152- changed default value of "heuristics/coefdiving/freq" (old: 10, new: -1)
3153- changed default value of "heuristics/conflictdiving/freq" (old: -1, new: 10)
3154- changed default value of "heuristics/conflictdiving/lockweight" (old: 1.0, new: 0.75)
3155- replaced parameter "numerics/lpfeastol" by "numerics/lpfeastolfactor" to specify which factor should be applied to the SCIP feasibility
3156 tolerance to initialize the primal feasibility tolerance of the LP solver
3157- enabling aggressive presolving now activates all available presolving plugins,
3158 and decreases the presolving/restartfac parameter correctly with respect to default.
3159- changed default value of heuristics/rins/nodesquot to 0.3 (was 0.1), to compensate
3160 the removal of a hard coded factor of 3.0 in the code without affecting the default behavior
3161 of the RINS heuristic.
3162- changed default value of "constraints/quadratic/empathy4and" (old: 0, new: 2)
3163- changed default value of "propagating/redcost/useimplics" (old: TRUE, new: FALSE)
3164
3165### New parameters
3166
3167- the possibility to define the Benders' decomposition auxiliary variables as implicit integer is provided. This
3168 behavior is controlled with an additional parameter in the Benders' decomposition framework.
3169- added parameter benders/<bendersname>/cutcheck to enable the generation of Benders' decomposition cuts during solution
3170 checking.
3171- constraints/orbitope/usedynamicprop: the possibility to propagate orbitope constraints by reordering the rows based on the
3172 branching strategy is provided (only possible for non-model constraints)
3173
3174- new parameters heuristics/shiftandpropagate/minfixingratelp and heuristics/locks/minfixingratelp to stop the
3175 heuristics after propagating integer fixings if no sufficient fixing of the all variables (including continuous)
3176 could be achieved. These parameters help to avoid solving LP's that are comparable in hardness to the main root LP.
3177
3178- Added parameters branching/midpull and branching/midpullreldomtrig to control by how much to move
3179 the branching point for an external branching candidate closer to the middle of the candidates domain. The
3180 default of 0.75 and 0.5, respectively, uses a point that is 75*alpha% closer to the middle of the domain, where
3181 alpha is the relative width of the candidates domain (width of local domain divided by width of global domain),
3182 if the latter is below 0.5, and alpha=1.0 otherwise. That is, with the default settings, a branching point is
3183 chosen closer to the middle of the candidates domain if the variables local domain is still similar to its
3184 global domain, but is chosen closer to the LP solution if the local domain is much smaller than the global
3185 domain.
3186
3187- Added parameter lp/minmarkowitz to set the Markowitz stability threshold (range 0.0001 to 0.9999).
3188 High values sacrifice performance for stability.
3189
3190- Added parameters benders/<bendersname>/lnsmaxcalls and benders/<bendersname>/lnsmaxcallsroot to the Benders'
3191 decomposition core. These parameters limit the number of Benders' decomposition subproblem checks, for the full
3192 branch-and-bound tree and root node respective, when solving the auxiliary problem of LNS hueristics. These
3193 parameters only have effect if the lnscheck parameter is set to TRUE.
3194
3195- Added parameter cons/linear/maxmultaggrquot to limit the maximum coefficient dynamism of an equation on which
3196 multiaggregation is performed. This replaces a compiler define of the same name.
3197 Default value is 1000, smaller values make multiaggregations numerically more stable.
3198- new global parameter heuristics/useuctsubscip that affects all LNS heuristics using common sub-SCIP parameters
3199
3200- new parameter branching/relpscost/degeneracyaware to switch degeneracy-aware hybrid branching
3201
3202- new parameter separation/rapidlearning/checkexec to check whether rapid learning is allowed to run locally
3203- new parameters separation/rapidlearning/check{degeneracy,dualbound,leaves,nsols,obj} to enable checking the respective feature for local rapid learning
3204- new parameter separation/rapidlearning/maxcalls to limit the number of rapid learning executions
3205- new parameter separation/rapidlearning/nwaitingnodes to set the number of waiting nodes before the dual bound is checked
3206- new parameter separation/rapidlearning/mindegeneracy to set the minimal threshold of degenerate basic-variables
3207- new parameters separation/rapidlearning/minvarconsratio to set the minimal ratio of unfixed variables in relation to basis size
3208
3209- new parameters to control the Benders' decomposition two-phase method.
3210 - constraints/benderslp/depthfreq: after the maxdepth is reached, then the two-phase method will only be called at
3211 nodes at a depth divisible by depthfreq.
3212 - constraints/benderslp/stalllimit: after the maxdepth is reached, if there has been no improvement in the dual bound
3213 for stalllimit number of nodes, then the two-phase method is executed for the next fractional LP solution that is
3214 encountered.
3215 - constraints/benderslp/iterlimit: after the root node, only iterlimit fractional LP solutions are used at each node
3216 to generate Benders' decomposition cuts.
3217
3218- new parameters for symmetry handling
3219 - new parameter "propagating/symmetry/maxgenerators"
3220 - new parameter "propagating/symmetry/checksymmetries"
3221 - new parameter "propagating/symmetry/displaynorbitvars"
3222 - new parameter "propagating/symmetry/conssaddlp"
3223 - new parameter "propagating/symmetry/addsymresacks"
3224 - new parameter "propagating/symmetry/detectorbitopes"
3225 - new parameter "propagating/symmetry/addconsstiming"
3226 - new parameter "propagating/symmetry/ofsymcomptiming"
3227 - new parameter "propagating/symmetry/performpresolving"
3228 - new parameter "propagating/symmetry/recomputerestart"
3229 - new parameter "constraints/symresack/checkmonotonicity"
3230 - new parameter "propagating/symmetry/compresssymmetries"
3231 - new parameter "propagating/symmetry/compressthreshold"
3232 - new parameter "propagating/symmetry/disableofrestart"
3233 - new parameter "propagating/symmetry/symfixnonbinaryvars"
3234
3235- new parameter for enabling shared memory parallelisation for solving Benders' decomposition subproblems. The parameter
3236 benders/<bendersname>/numthreads sets the number of threads used for parallel subproblem solving.
3237
3238- new parameters to control enhancements for solving MINLPs by Benders' decomposition
3239 - benders/<bendersname>/execfeasphase: enables the feasibility phase for solving the Benders' decomposition
3240 subproblems
3241 - benders/<bendersname>/slackvarcoef: the initial coefficient of the slack variable for the feasibility phase
3242 - benders/<bendersname>/checkconsconvexity: should the constraints be checked for convexity. This can be set to FALSE
3243 if you are certain that the NLP subproblem is convex.
3244
3245- new parameter presolving/clqtablefac (default value 2.0) as limit on number of entries in clique table relative to number of problem nonzeros
3246
3247- new parameter conflict/uselocalrows (default: TRUE) to incorporate locally valid cuts / rows for dual proof analysis
3248
3249- new return code SCIP_NOTIMPLEMENTED for functions, e.g., in the LPI that have not been implemented (yet)
3250
3251- new parameter separating/cgmip/genprimalsols that allows to generate initial primal solutions from Gomory cuts
3252
3253- new parameter branching/relpscost/filtercandssym to allow filtering from orbits
3254
3255- new parameter branching/relpscost/transsympscost to transfer pseudo cost information to orbit
3256
3257- new parameters for tree size estimation and restarts:
3258 - estimation/restarts/restartpolicy (default value n)
3259 - estimation/method (default value c)
3260 - estimation/restarts/restartlimit (default value 1)
3261 - estimation/restarts/minnodes (default value 1000)
3262 - estimation/restarts/countonlyleaves (default value FALSE)
3263 - estimation/restarts/restartfactor (default value 2)
3264 - estimation/coefmonoprog (default value 0.3667)
3265 - estimation/coefmonossg (default value 0.6333)
3266 - estimation/restarts/hitcounterlim (default value 50)
3267 - estimation/reportfreq (default value -1)
3268 - estimation/regforestfilename (default value "-")
3269 - estimation/completiontype (default value a)
3270 - estimation/treeprofile/enabled (default value FALSE)
3271 - estimation/treeprofile/minnodesperdepth (default value 20)
3272 - estimation/useleafts (default value TRUE)
3273 - estimation/ssg/nmaxsubtrees (default value -1)
3274 - estimation/ssg/nminnodeslastsplit (default value 0)
3275
3276- new parameter constraints/linear/extractcliques to turn clique extraction off
3277
3278- new emphasis setting emphasis/numerics to increase numerical stability of (mostly) presolving operations such as (multi-)aggregations at the cost of performance.
3279
3280- new parameters for treemodel:
3281 - new parameter branching/treemodel/enable to enable the treemodel in reliability pscost branching and possible
3282 future parts of the code where it could be used.
3283 - new parameter branching/treemodel/highrule to specify which branching rule to use when treemodel thinks the node
3284 is high in the tree.
3285 - new parameter branching/treemodel/lowrule to specify which branching rule to use when treemodel thinks the node
3286 is low in the tree.
3287 - new parameter branching/treemodel/height to specify at which (estimated) height a node is high or low in the tree.
3288 - new parameter branching/treemodel/filterhigh to specify whether to filter dominated candidates in nodes which are
3289 high in the tree.
3290 - new parameter branching/treemodel/filterlow to specify whether to filter dominated candidates in nodes which are
3291 low in the tree.
3292 - new parameter branching/treemodel/maxfpiter to specify the maximum number of fixed-point iterations to use when
3293 computing the ratio of a variable using the fixed-point method.
3294 - new parameter branching/treemodel/maxsvtsheight to specify the maximum height to compute the SVTS score exactly
3295 before approximating it using the ratio.
3296 - new parameter branching/treemodel/fallbackinf defines the fallback strategy to use when the tree size estimates
3297 obtained by SVTS are infinite.
3298 - new parameter branching/treemodel/fallbacknoprim defines the fallback strategy to use when no primal bound is known
3299 and thus SVTS would not be able to compute a tree size (it would be infinite).
3300 - new parameter branching/treemodel/smallpscost defines the value under which pscosts are considered too small to be
3301 the deciding factor for branching, in which case it may be better not to use the treemodel.
3302
3303- new parameters for symmetry handling constraint handlers to enforce that also non-model constraint are copied:
3304 - new parameter "constraints/orbisack/forceconscopy"
3305 - new parameter "constraints/orbitope/forceconscopy"
3306 - new parameter "constraints/symresack/forceconscopy"
3307
3308
3309### Data structures
3310
3311- small changes in constants of hash functions
3312- added fast 2-universal hash functions for two to seven 32bit elements with 32bit output
3313- extended SCIPpqueueCreate() by additional callback argument SCIP_DECL_PQUEUEELEMCHGPOS to catch position changes
3314- new methods SCIPpqueueDelPos() to delete elements at a specific position in the priority queue and SCIPpqueueFind() to
3315 find a specific position. It is recommended to track position changes using the new callback SCIP_DECL_PQUEUEELEMCHGPOS.
3316 In contrast, using SCIPpqueueFind() can be slow because it needs to compare the element it searches for
3317 with each slot in the queue.
3318
3319### Build system
3320
3321- The default value for DFLAGS in the non-cmake buildsystem has changed from -MM to -MMD. This will break the
3322 generation of depend.* files if that was done by a compiler call that relied on -MM. The new preferred way
3323 to handle compilation dependencies is to additionally use $(DFLAGS) when compiling the object files (.o) and
3324 to include the generated .d files in the Makefile, see also "Build system / Makefile" below.
3325
3326Unit tests
3327----------
3328 - new unit test for treemodel.
3329
3330Testing
3331-------
3332
3333 - fixed an issue that may have lead to wrong status reports in the evaluation scripts
3334
3335Build system
3336------------
3337
3338### Cmake
3339
3340- avoid problem with doubly defined object together with CPLEX
3341
3342### Makefile
3343
3344- Removed static object compilation dependency files (depend.*). If using a GCC compatible compiler, then dependency
3345 files are now dynamically created and updated during build. The new dependency files (*.d) reside next to each object
3346 file (.o) in the corresponding obj subdirectory.
3347- added support for building against Ipopt >= 3.13
3348- unify compiler switches for Intel compiler and avoid problem with doubly defined object together with CPLEX
3349
3350Fixed bugs
3351----------
3352
3353- fix and improve memory handling in symmetry computation
3354- fix shown number of applied conflicts in solving statistics
3355- fix wrongly skipping strong branching call and using old information if LP was solved with 0 iterations
3356- fix minor bug in cut score calculation
3357- fixed several bugs related to rounding locks of variables not being updated correctly
3358- small fix in cons_varbound.c to skip changing bounds of multi-aggregated variables in separation callback
3359- fixed issue in SCIPtightenVar* and SCIPinferVar* that occurs for small bound changes
3360- fixed rejecting minimal boundchange that changed sign of variable, even though SCIPisLb/UbBetter approved it
3361- fixed issue in generateCutNonConvex() which is triggered when adding quadratic constraints during the solving process
3362- fixed bug in freeing the reoptimization data if no problem exists
3363- fixed bug in SCIPreoptReleaseData() when freeing all stored constraints
3364- fixed bug when freeing the transformed problem via interactive shell if reoptimization is enabled
3365- fixed two issues related to (near-)redundant logicor constraints in presolving
3366- fixed counting of aggregations in XOR constraint handler
3367- fixed handling of unbounded solutions
3368- fixed update of LP size information when an LP error occurred during probing
3369- handle special case of variable bound constraints during aggregating variables
3370- tighten sides of linear constraints before trying to upgrade them to more specialized constraints (knapsack, logic-or etc.) when calling SCIPupgradeConsLinear()
3371- fixed an issue in repair heuristic in the case of loose (noncolumn) variables
3372- allow user to correctly set heuristics/alns/(un)fixtol
3373- fixed an issue in heur_completesol which is triggered during bound widening of unbounded continuous variables
3374- fixed bug in cons_indicator if addopposite is true
3375- fixed bug in sepa_disjunctive: treat case that conflictgraph is empty
3376- added safety check in conversion to rational number to avoid overflow
3377- fixed bug in interval evaluation with power-operator in certain situations
3378- fixed behavior of SCIPmatrixCreate() regarding memory management and column generation
3379- SCIPmatrixCreate() returns complete=FALSE when locks do not add up
3380- fixed bug in sepa_oddcylce when variables are fixed
3381- fixed numerical issues related to tighter constraint sides in varbound constraint handler
3382- fixed update of watchedvars in logicor constraint handler in case of a restart during the tree
3383- fixed treatment of multi-aggregated variables in logicor constraint handler
3384- handle special case of redundant implications
3385- fixed numerical issue related to almost-0-values in pseudosolution conflict analysis
3386- fixed numerical issue related to very large greatest common dividers in linear constraint handler
3387- avoid using implications on multiaggregated variables when propagating implications
3388- fixed creation of (Lagrangian) variable bounds in the OBBT propagator
3389- fixed sorting of primal solutions
3390- fixed cleaning of clean buffer in conflict analysis
3391- avoid probing on variables with huge bounds in shift and propagate heuristic
3392- fix issue in printing solutions for variables that have been added by the dual sparsify presolver
3393- fix issue related to fixing redundant logic-or constraints after presolving
3394- fixed bug when parsing logic-or and and-constraints
3395- fixed wrong assert in updateLazyBounds()
3396- fixed bug in pricestore, which resulted in too many problem variables being added
3397- fixed bug in cons_knapsack where weight of clique was not reset after an infeasibility was detected
3398- fixed bug in presol_inttobinary which did not take into account that the aggregation could be rejected due to numerics
3399- fixed bug in debug solution mechanism in connection to variables created by presol_inttobinary
3400- fixed wrong indexing while undoing the implications from a redundant variable in SCIPshrinkDisjunctiveVarSet
3401- redundancy checks in SCIPnodeAddBoundinfer now take a possible change to an active variable into account
3402- fixed adding already added quadratic rows to NLP relaxation during solve
3403- fixed issue related to variable locks in the varbound constraint handler
3404- fixed bug in the quadratic constraint handler when changing infinite constraint sides
3405- fixed sorting of variables in linear constraint handler
3406- added additional checks to ensure numerical stability of dual proofs
3407- fixed a case when activities of a linear constraint got unreliable but where still used for reductions
3408- ensure that lhs <= rhs for linear constraints (without tolerances)
3409- make handling of read errors in SCIPfread() consistent between version with and without ZLIB
3410- correctly drop variable events in cons_indicator in restart
3411- fixed bug in cons_orbitope with upgrading of orbitope constraints
3412- additional checks in some presolvers for time limit being exceeded
3413- fixed bug in presolving of cons_varbound with multi-aggregated variables
3414- improve numerics in conflict analysis by using double-double arithmetic
3415- fixed bound acceptance condition to avoid inconsistencies
3416- fixed numerics in pseudoobj propagator by using double-double arithmetic
3417
3418Miscellaneous
3419-------------
3420
3421- modified display column for memory usage ("mem"), which reports the memory usage most of the time, but shows the creator name
3422 (heuristic, relaxation handler, LP relaxation, strong branching, pseudo solution) of every new incumbent solution. Together with this change,
3423 heuristic display characters have been unified to represent the type of the heuristic
3424 (diving, Large neighborhood search, propagation, etc.), see also type_heur.h.
3425- added assert that ensures that the locks of a variable have been decreased to 0 when it is freed
3426- added more output for completing a partial solution
3427- checks in debug mode that clean buffer memory is really clean when being freed are now disabled by default
3428- don't compute symmetries if reoptimization is enabled
3429- prefer integral values when fixing an almost-fixed continuous variable in the trivial presolver
3430- changed the name of the variable that is added by the OSiL reader to represent the quadratic or nonlinear parts of the objective function
3431- SCIP_EXPORT is now defined as __attribute__((__visibility__("default"))) if GCC and no SCIP config header is used
3432
3433@page RN6 Release notes for SCIP 6
3434
3435@section RN602 SCIP 6.0.2
3436*************************
3437
3438Features
3439--------
3440
3441- The abspower constraint handler now passes more accurate convexity
3442 information to the NLP relaxation.
3443
3444Examples and applications
3445-------------------------
3446
3447- added parsing functionality for optcumulative constraints in CIP format
3448
3449Interface changes
3450-----------------
3451
3452### Interfaces to external software
3453
3454- Updated the Mosek LP solver interface to support Mosek 9.0.
3455
3456Build system
3457------------
3458
3459### Cmake
3460
3461- new target to 'doc' to build documentation
3462- ctests now fail if parameter file not found
3463- add flag STATIC_GMP and improve GMP find module
3464- remove non-API functions from library (API functions use new macro SCIP_EXPORT)
3465- increase minimal required CMake version to 3.3
3466- correct paths and dependency information when installing SCIP
3467
3468Fixed bugs
3469----------
3470- fixed SCIP-Jack presolving bug that could lead to wrong results for Steiner arborescence problems
3471- fixed wrong unboundedness result in case not all constraints were already in the LP and enforcement was
3472 skipped because an optimal solution was found
3473- fixed wrong enforcement of constraints in the disjunction constraint handler
3474- fixed wrong behavior of concurrent solve ignoring initial solutions
3475- fixed bug in concurrent solve when problem was already solved in presolving
3476- aggregate non-artificial integer variable for XOR constraints with two binary variables and delete constraint
3477- copy the objective offset when copying the original problem
3478- fixed bug in SCIPlpiGetBInvARow in lpi_cpx using wrong size of resulting vector
3479- fixed quadratic runtime behavior in sepa_aggregation
3480- fixed statistics of separators
3481- improve numerical stability in varbound constraint handler by using double-double arithmetic
3482- fixed bug in propagation of dual proofs
3483- fixed bugs that arise for multiaggregated indicator variables by disallowing multiaggregation for them
3484- improve numerical stability in SCIPcomputeBilinEnvelope* by using double-double arithmetic
3485- fixed bug related to releasing pending bound changes in tree.c
3486- set STD FENV_ACCESS pragma to on in code that changes floating-point rounding mode
3487- disable GCC optimizations in main interval arithmetic code to prevent wrong optimizations
3488- fixed wrong assert in cons_xor concerning the variable type
3489- fixed different behavior of SCIPisLbBetter and SCIPisUbBetter between having NDEBUG defined or not
3490- correctly handle bound disjunctions in symmetry detection
3491- fixed issue in reliability branching related to the LP error flag not being reset
3492- fixed treatment of near-infinite bounds in shiftandpropagate's problem transformation
3493- fixed handling of infinite values in SCIPcomputeHyperplaneThreePoints()
3494- fixed comparisons of infinite values in heur_intshifting.c and heur_shifting.c
3495- fixed bug related to updating unprocessed cuts in the cutpool
3496- fixed bug related to enabling quadratic constraints during `CONSINITLP`
3497- add missing SCIP_EXPORT for functions used by GCG
3498- fixed memory leak and wrong initialization for trival cases in cons_symresack.c
3499- fixed bug with upgrading to packing/partitioning orbitopes
3500- fixed bug with the status while upgrading in presol_symbreak.c
3501- fixed wrong stage while clearing the conflict store
3502- fixed behavior of SCIPfixVar() by setting infeasible pointer to TRUE if fixval lies outside variable domain
3503- allow tightenVar() in SCIP_STAGE_PROBLEM stage
3504- fixed bug in cumulative constraint handler when separating the LP solution
3505- fixed issues with integer overflow in cumulative constraint handler
3506- fixed bug where the convexity of Benders' decomposition subproblems was checked even when users defined subproblem
3507 solving methods. Now, as per the documentation, the user must explicitly state whether the subproblem is convex
3508- fixed wrong indexing in heur_dualval
3509- fixed issue with basis status in SoPlex LPi
3510
3511Miscellaneous
3512-------------
3513
3514- statistics now output primal/dual bounds if objective limit is reached
3515- memory check in debug mode is now disabled by default
3516- message is now provided to the user to inform that automatic Benders' auxiliary variable lower bound computations are
3517 not activated when user defined subproblem solving methods are present
3518- corrected documentation of the primalgap in SCIP; describe when it will be infinite
3519
3520@section RN601 SCIP 6.0.1
3521*************************
3522
3523Features
3524--------
3525
3526- when using a debug solution every (multi-)aggregation will be checked w.r.t. this solution
3527
3528Performance improvements
3529------------------------
3530
3531- try greedy solution first before solving knapsack exactly using dynamic programming in SCIPsolveKnapsackExactly,
3532 compute greedy solution by weighted median selection.
3533- don't consider implied redcost by default in the reduced cost propagator
3534
3535Interface changes
3536-----------------
3537
3538### Deleted and changed API functions and macros
3539
3540- The preprocessor macro NO_CONFIG_HEADER now needs to be defined when
3541 including SCIP header files from a SCIP build or installation that
3542 has been build via the Makefile-only build system.
3543
3544- The following preprocessor macros have been renamed:
3545 WITH_ZLIB to SCIP_WITH_ZLIB, WITH_GMP to SCIP_WITH_GMP, WITH_READLINE
3546 to SCIP_WITH_READLINE, NO_SIGACTION to SCIP_NO_SIGACTION, NO_STRTOK_R
3547 to SCIP_NO_STRTOK_R, ROUNDING_FE to SCIP_ROUNDING_FE, ROUNDING_FP to
3548 SCIP_ROUNDING_FP, ROUNDING_MS to SCIP_ROUNDING_MS. Note, however, that
3549 the names of macros NO_RAND_R and NO_STRERROR_R have not been changed
3550 so far.
3551
3552### New API functions
3553
3554- SCIPhashmapInsertInt(), SCIPhashmapSetImageInt(), and SCIPhashmapGetImageInt() to use integer values as images in hashmaps
3555
3556### Command line interface
3557
3558- warn about coefficients in MPS files with absolute value larger than SCIP's value for infinity
3559
3560### Changed parameters
3561
3562- default clock type for timing is now wallclock
3563
3564Unit tests
3565----------
3566
3567- added unit tests for exact knapsack solving and (weighted) median selection algorithms
3568
3569Build system
3570------------
3571
3572### Cmake
3573
3574- add missing GMP dependency when compiling with SYM=bliss
3575- add DL library when linking to CPLEX to avoid linker errors
3576- new config.h header defining the current build configuration, e.g. SCIP_WITH_GMP
3577
3578Fixed bugs
3579----------
3580
3581- fixed handling of weights in cons_sos1 and cons_sos2 (NULL pointer to weights)
3582- fixed handling of unbounded LPs in SCIP and in several LPIs; added heuristic method to guess solution
3583- the STO reader is capable of handling scenarios defined using lower case "rhs"
3584- fixed OPB reader for instances without explicit plus signs
3585- correct dual solution values for bound constraints
3586- fixed recognition of variable with only one lock in cons_bivariate, cons_quadratic, and cons_nonlinear
3587- fixed update of constraint violations in solution repair in cons_bivariate, cons_quadratic, and cons_nonlinear
3588- print error message and terminate if matrix entries of a column are not consecutive in mps format
3589- fixed incorrect handling of fixed variables when transfer of cuts from LNS heuristic for Benders' decomposition
3590- fix returning local infeasible status by Ipopt interface if Ipopt finds problem locally infeasible
3591- skip attempt to apply fixings in linear constraint handler during solving stage as LP rows cannot change anymore
3592- fixed bug when reading >= indicator constraints in MPS format
3593- fix issue with nodes without domain changes if we ran into solution limit in prop_orbitalfixing
3594- fixed unresolved reference to CppAD's microsoft_timer() function on builds with MS/Intel compilers on Windows
3595- ignore implications added through SCIPaddVarImplication() that are redundant to global bounds also in the
3596 special case of an implication between two binary variables; also, use implications instead of cliques in the case
3597 of a binary implied variable with nonbinary active representative
3598- fixed bug with aggregated variables that are aggregated in propagation of cons_sos1
3599- fixed some special cases in SCIPselect/SCIPselectWeighted methods
3600- relaxed too strict assertion in Zirounding heuristic
3601- fixed the upgrade routine to XOR constraints: aggregate integer variable if its coefficient has the wrong sign
3602- fixed handling of nonartificial parity variables when deleting redundant XOR constraints
3603- earlier deletion of trivial XOR constraints (at most 1 operator left)
3604- fixed wrong hashmap accesses and added sanity check for the correct hashmap type
3605- avoid copying of unbounded solutions from sub-SCIPs as those cannot be checked completely
3606- corrected the output of the first LP value in case of branch-and-price
3607- fixed possible integer overflow, which led to wrong conclusion of infeasibility, in energetic reasoning of cons_cumulative.c
3608
3609Miscellaneous
3610-------------
3611
3612- do not scale linear constraints to integral coefficients
3613
3614@section RN600 SCIP 6.0.0
3615*************************
3616
3617Features
3618--------
3619
3620- new diving heuristic farkasdiving that dives into the direction of the pseudosolution and tries to construct Farkas-proofs
3621- new diving heuristic conflictdiving that considers locks from conflict constraints
3622- restructuring of timing of symmetry computation that allows to add symmetry handling components within presolving
3623- `lp/checkstability` is properly implemented for SoPlex LPI (spx2)
3624- new branching rule lookahead that evaluates potential child and grandchild nodes to determine a branching decision
3625- limits on the number of presolving rounds a presolver (maxrounds) or propagator/constraint handler (maxprerounds)
3626 participates in are now compared to the number of calls of the particular presolving method, not the number of
3627 presolving rounds in general, anymore
3628- new miscellaneous methods for constraints that have a one-row linear representation in pub_misc_linear.h
3629- a Benders' decomposition framework has been added. This framework provides the functionality for a user to solve a
3630 decomposed problem using Benders' decomposition. The framework includes classical optimality and feasibility cuts,
3631 integer optimality cuts and no-good cuts.
3632- add statistic that presents the number of resolves for instable LPs
3633- new readers for stochastic programming problems in SMPS format (reader_sto.h, reader_smps.h)
3634
3635Performance improvements
3636------------------------
3637
3638- cuts generated from certain quadratic constraints with convex feasible region are now global
3639- performance improvements for Adaptive Large Neighborhood Search heur_alns.c
3640 + all neighborhoods now start conservatively from maximum fixing rate
3641 + new default parameter settings for bandit selection parameters
3642 + no adjustment of minimum improvement by default
3643- improved bound tightening for some quadratic equations
3644- constraint handler checking order for original solutions has been modified to check those with negative check priority
3645 that don't need constraints after all other constraint handlers and constraints have been checked
3646- deactivate gauge cuts
3647
3648Examples and applications
3649-------------------------
3650
3651- new example `brachistochrone` in CallableLibrary examples collection; this example implements a discretized model to
3652 obtain the trajectory associated with the shortest time to go from point A to B for a particle under gravity only
3653- new example `circlepacking` in CallableLibrary examples collection; this example models two problems about packing
3654 circles of given radii into a rectangle
3655- new price-and-branch application for the ringpacking problem
3656- new stochastic capacitated facility location example demonstrating the use of the Benders' decomposition framework
3657
3658Interface changes
3659-----------------
3660
3661### New and changed callbacks
3662
3663- added parameter locktype to `SCIP_DECL_CONSLOCK` callback to indicate the type of variable locks
3664
3665### Deleted and changed API functions
3666
3667- Symmetry:
3668 + removed function SCIPgetTimingSymmetry() in presol_symmetry.h since this presolver does not compute symmetries independent
3669 of other components anymore
3670 + additional argument `recompute` to SCIPgetGeneratorsSymmetry() to allow recomputation of symmetries
3671
3672- Random generators:
3673 + the seed of SCIPinitializeRandomSeed() is now an unsigned int
3674 + the seed of SCIPsetInitializeRandomSeed() is now an unsigned int and it returns an unsigned int
3675 + new parameter for SCIPcreateRandom() to specify whether the global random seed shift should be used in the creation of
3676 the random number generator
3677
3678- Miscellaneous:
3679 + additional arguments `preferrecent`, `decayfactor` and `avglim` to SCIPcreateBanditEpsgreedy() to choose between
3680 weights that are simple averages or higher weights for more recent observations (the previous default).
3681 The last two parameters are used for a finer control of the exponential decay.
3682 + functions SCIPintervalSolveUnivariateQuadExpression(), SCIPintervalSolveUnivariateQuadExpressionPositive(), and
3683 SCIPintervalSolveUnivariateQuadExpressionPositiveAllScalar() now take an additional argument to specify already
3684 existing bounds on x, providing an entire interval ([-infinity,infinity]) gives previous behavior
6779 - added writing for pip files (linear, quadratic, polynomial nonlinear, polynomial abspower, polynomial bivariate, and
6780 and constraints)
6781 - CIP format variable characters defined, e.g. `SCIP_VARTYPE_INTEGER_CHAR`
6782 - Improved support for wbo format for weighted PBO problems, IBM's xml-solution
6783 format and pip and zimpl format for polynomial mixed-integer programs
6784 - New reader for (standard) bounds on variables
6785 - Extended reader for CIP models to handle various new constraints, including all types of linear constraints
6786 - flatzinc reader is now capable to read cumulative constraints
6787 - changed opb(/wbo) reader which now creates pseudoboolean constraints instead of linear- and and-constraints, only a
6788 non-linear objective will create and-constraints inside the reader and while reading a wbo file the topcost constraint
6789 is created as well
6790 - added clock for determine the time for reading
6791 - added reader for variable bounds (reader_bnd.{c,h})
6792 - Removed method SCIPreadSol(); call solution reading via SCIPreadProb() which calls the solution reader for .sol files.
6793
6794- Nonlinear:
6795 - Major extensions for nonlinear CIP, new option for n-ary branching on nonlinear variables (within pseudocost branching rule)
6796 - added BETA version of constraint handler for nonlinear constraints (cons_nonlinear.{c,h}) to handle nonlinear
6797 equations given by algebraic expressions using operands like addition, multiplication, power, exp, log, bivariate
6798 nonlinear constraints; currently no trigonometric functions
6799 - added BETA version of constraint handler for bivariate nonlinear constraints (cons_bivariate.{c,h}) to compute tight
6800 estimators for 1-convex and convex-concave bivariate nonlinear functions (given as expression tree)
6801 - the gams writer can now write nonlinear, abspower and bivariate constraints
6802 - Extended writer for GAMS and pip format to write more types of nonlinear constraints
6803 - the pip and zimpl reader now create nonlinear constraints for polynomials of degree > 2
6804
6805- Presolving:
6806 - new dual presolving methods in cons_setppc and cons_logicor
6807 - new presolving step `removeConstraintsDueToNegCliques` in locigor constraint handler which updates logicor constraints
6808 to setppc constraints if a negated clique inside this constraint exist, by default is off
6809 - new presolving step in cons_knapsack (detectRedundantVars, deleteRedundantVars) which determines redundant variables
6810 in knapsack constraint with or without using clique information
6811 - cons_logicor is now able to replace all aggregated variables in presolving by there active or negation of an active
6812 variable counterpart
6813 - prop_pseudoobj is now working in presolving as well
6814 - implement presolving in exitpre() in cons_orbitope and cons_indicator
6815
6816- Propagators:
6817 - added counter for number calls and timing for resolve propagation calls for constraint handler and propagators
6818 - Propagators are now also called in node presolving
6819 - the probing presolver presol_probing.{c.h} is now a propagator prop_probing.{c,h}, all corresponding parameters moved as well
6820 - the redcost separator sepa_redcost.{c.h} is now a propagator prop_redcost.{c,h}, all corresponding parameters moved as well
6821 - outsourced propAndSolve() method in solve.c which calls domain propagation and solving of the lp and relaxation
6822
6823- Statistic:
6824 - solutions which are given by the user from the outside are now marked by `#` in the output
6825 - the `Solving Time` is now spitted into presolving, solving and reading time
6826 - Presolvers section has new column `AddCons` which states the number of added constraint
6827 - Constraints section has new column named \#ResProp which show the number of resolve propagation calls of certain
6828 constraint handler
6829 - Constraint Timing section has a new column \#ResProp which states the time spend in resolve propagation method of the
6830 constraint handler
6831 - improved output of propagators in display statistics
6832 - new section `Propagator Timing` which shows the time spend in different callbacks of the propagator
6833 - rearranged first two columns of Propagators section; \#Propagate and \#ResProp stating the number of call for
6834 propagation and resolve propagation; the Time column is moved into the new section Propagator Timings
6835 - Constraints section has new column named `MaxNumber` which the maximum number of active constraint of a certain
6836 constraint handler
6837 - 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
6838 solving LPs with zero iterations (only refactorization)
6839 - The display of statistics for presolvers, propagators, constraints and LP solving has changed.
6840
6841Performance improvements
6842------------------------
6843
6844- Reorganized filtering process of separation storage (allows adding cuts for different solutions)
6845- Improved presolving for various constraint handlers
6846- Improved propagation methods for variable bound constraints
6847- Improved performance for quadratic constraints
6848- performance improvements in prop_vbounds
6849- child selection rules now get also applied when the relaxation value is equal to the bound changed in branching
6850- added dual reduction to cons_cumulative.c
6851- for continuous variables, the pseudo costs update and the pscost branching rule now use the same strategies for
6852 updating the pseudo costs and estimating the improvement in the LP bound
6853- only perform probing if the variables are locked
6854- performance and memory consumption improvements in xmlparse.c
6855- Improved knapsack cover cuts
6856- avoid very long separation times of LEWIs in cons_knapsack for very large minimal covers
6857- used SCIPallocMemoryArray() instead of SCIPallocBlockMemoryArray() which leads to fewer memory consumption in
6858 getLiftingSequence() in cons_knapsack, also improved cache use bei using an extra array instead blockmemory chunks
6859- switched FASTMIP from 1 to 2 for CPLEX and changed default pricing rule back to steepest edge pricing instead of
6860 quickstart steepest edge pricing
6861- made sorting method more robust
6862- LNS heuristics now use SCIPcopy() by default
6863- considering inactive variables in undercover heuristic; limiting effort for solving covering problem
6864- if during probing mode the LP relaxation is solved from scratch, e.g., when calling the shiftandpropagate heuristic
6865 before root node solving, then we clear the resulting LP state, since it might be a bad starting basis for the next
6866 solve of the LP relaxation (controlled by new parameter `lp/clearinitialprobinglp`)
6867- included LP simplifier into SoPlex LP interface, applied when solving from scratch (lpi_spx.cpp)
6868- new presolving steps in varbound constraint handler, tightening bounds, coefficients, sides and pairwise presolving
6869
6870Interface changes
6871-----------------
6872
6873- Miscellaneous:
6874 - The emphasis setting types now distinguish between plugin-type specific parameter settings (default, aggressive, fast, off),
6875 which are changed by SCIPsetHeuristics/Presolving/Separating(), and global emphasis settings (default, cpsolver, easycip,
6876 feasibility, hardlp, optimality, counter), which can be set using SCIPsetEmphasis().
6877
6878### New and changed callbacks
6879
6880- added propagator timings `SCIP_PROPTIMING_BEFORELP`, `SCIP_PROPTIMING_DURINGLPLOOP` and `SCIP_PROPTIMING_AFTERLPLOOP` for
6881 all propagation callbacks (see propagators and constraint handlers) which lead to calling the propagation methods of a
6882 propagator before the lp is solved, during the lp loop and after the lp solving loop
6883
6884- Conflict Analysis:
6885 - Added parameter `separate` to conflict handler callback method SCIP_DECL_CONFLICTEXEC() that defines whether the conflict
6886 constraint should be separated or not.
6887
6888- Constraint Handler:
6889 - The new constraint handler callback SCIP_DECL_CONSDELVARS() is called after variables were marked for deletion.
6890 This method is optional and only of interest if you are using SCIP as a branch-and-price framework. That means,
6891 you are generating new variables during the search. If you are not doing that just define the function pointer
6892 to be `NULL`.
6893 If this method gets implemented you should iterate over all constraints of the constraint handler and delete all
6894 variables that were marked for deletion by SCIPdelVar().
6895
6896- NLP Solver Interface:
6897 - The callbacks SCIP_DECL_NLPIGETSOLUTION() and SCIP_DECL_NLPISETINITIALGUESS() got new parameters to get/set values of
6898 dual variables.
6899 - The callback SCIP_DECL_NLPICOPY() now passes the block memory of the target SCIP as an additional parameter.
6900
6901- Presolving:
6902 - New parameters `isunbounded` and `isinfeasible` for presolving initialization (SCIP_DECL_CONSINITPRE(),
6903 SCIP_DECL_PRESOLINITPRE(), SCIP_DECL_PROPINITPRE()) and presolving deinitialization (SCIP_DECL_CONSEXITPRE(),
6904 SCIP_DECL_PRESOLEXITPRE(), SCIP_DECL_PROPEXITPRE()) callbacks of presolvers,
6905 constraint handlers and propagators, telling the callback whether the problem was already declared to be
6906 unbounded or infeasible. This allows to avoid expensive steps in these methods in case the problem is already
6907 solved, anyway.
6908
6909 Note, that the C++ methods
6910 - scip::ObjConshdlr::scip_presol() corresponding to SCIP_DECL_CONSPRESOL()
6911 - scip::ObjConshdlr::scip_initpre() corresponding to SCIP_DECL_CONSINITPRE()
6912 - scip::ObjPresol::scip_initpre() corresponding to SCIP_DECL_PRESOLINITPRE()
6913 - scip::ObjProp::scip_initpre() corresponding to SCIP_DECL_PROPINITPRE()
6914 - scip::ObjConshdlr::scip_exitpre() corresponding to SCIP_DECL_CONSEXITPRE()
6915 - scip::ObjPresol::scip_exitpre() corresponding to SCIP_DECL_PRESOLEXITPRE()
6916 - scip::ObjProp::scip_exitpre() corresponding to and SCIP_DECL_PROPEXITPRE()
6917 are virtual functions. That means, if you are not adding the new parameters, your code will still compile, but these methods are not executed.
6918 - Propagators are now also called in during presolving, this is supported by the new callback methods SCIP_DECL_PROPINITPRE(),
6919 SCIP_DECL_PROPEXITPRE(), and SCIP_DECL_PROPPRESOL().
6920 - The new parameters `nnewaddconss` and `naddconss` were added to the constraint handler callback method SCIP_DECL_CONSPRESOL()
6921 and the presolver callback method SCIP_DECL_PRESOLEXEC(). These parameters were also added to corresponding C++ wrapper
6922 class methods (scip_presol() in objconshdlr.h and scip_exec() in objpresol.h)
6923
6924- Problem Data:
6925 - The callback SCIP_DECL_PROBCOPY() got a new parameter `global` to indicate whether the global problem or a local version is copied.
6926
6927### Deleted and changed API functions
6928
6929- implemented SCIPlpiGetPrimalRay() in SoPlex interface that has become available with SoPlex version 1.5.0.2
6930- allowed calling SCIPgetRowSolActivity() in `SCIP_STAGE_SOLVED`, since LP is still available
6931- various extensions and modifications for expressions and expression trees (too much to state here)
6932- The result value `SCIP_NEWROUND` has been added, it allows a separator/constraint handler to start a new separation round
6933 (without previous calls to other separators/conshdlrs).
6934- SCIPcalcNodeselPriority() got a new parameter `branchdir`, which defines the type of branching that was performed: upwards, downwards, or fixed.
6935
6936- Constraint Handlers:
6937 - Method SCIPincludeQuadconsUpgrade() of quadratic constraint handler got new parameter `active` to indicate whether the upgrading method is active by default.
6938 - Method SCIPseparateRelaxedKnapsack() in knapsack constraint handler got new parameter `cutoff`, which is a pointer to store whether a cutoff was found.
6939
6940- Nonlinear expressions, relaxation, and solver interface:
6941 - SCIPcreateNLPSol() now creates a `SCIP_SOL` that is linked to the solution of the current NLP relaxation
6942 - Various types and functions dealing with polynomial expressions have been renamed to use the proper terms `monomial` and
6943 `polynomial` in nonlinear expressions (nlpi/∗expr*); results in many renamings of types, structs and methods.
6944 - The methods SCIPnlpGetObjective(), SCIPnlpGetSolVals(), and SCIPnlpGetVarSolVal() have been removed, use SCIPgetNLPObjval(),
6945 SCIPvarGetNLPSol() and SCIPcreateNLPSol() to retrieve NLP solution values instead.
6946 SCIPcreateNLPSol() now returns an error if NLP or NLP solution is not available
6947 - Removed methods SCIPmarkRequireNLP() and SCIPisNLPRequired(), because the NLP is now always constructed if nonlinearities
6948 are present.
6949 - SCIPgetNLP() has been removed and NLP-methods from pub_nlp.h have been moved to scip.h, which resulted in some renamings, too.
6950 - renamed SCIPexprtreeEvalSol() to SCIPevalExprtreeSol() and now located in scip.h.
6951 - renamed SCIPexprtreeEvalIntLocalBounds() to SCIPevalExprtreeLocalBounds() and now located in scip.h.
6952 - renamed SCIPexprtreeEvalIntGlobalBounds() to SCIPevalExprtreeGlobalBounds() and now located in scip.h.
6953 - The functions SCIPnlpiGetSolution() and SCIPnlpiSetInitialGuess() got additional arguments to get/set dual values.
6954 - The method SCIPgetNLPI() got a new parameter `nlpiproblem`, which is a pointer to store the NLP solver interface problem.
6955
6956- Timing:
6957 - SCIPincludeProp() got additional parameters to set the timing mask of the propagator and the new callbacks and parameters
6958 related to calling the propagator in presolving.
6959 - SCIPincludeConshdlr() got additional parameters to set the variable deletion callback function and the timing mask for
6960 propagation.
6961 - removed parameters timelimit and memorylimit from SCIPapplyRens()
6962 - The parameters `timelimit` and `memorylimit` were removed from SCIPapplyRens().
6963
6964- Problem Data:
6965 - The method SCIPcopyProb() got a new parameter `global` to indicate whether the global problem or a local version is copied.
6966
6967- Writing and Parsing Constraints:
6968 - The methods SCIPwriteVarName(), SCIPwriteVarsList(), and SCIPwriteVarsLinearsum() got a new boolean parameter `type`
6969 that indicates whether the variable type should be written or not.
6970 - The methods SCIPparseVarName() and SCIPparseVarsList() got a new output parameter `endptr` that is filled with the position
6971 where the parsing stopped.
6972 - The method SCIPwriteVarsList() got additionally a new parameter `delimiter` that defines the character which is used for delimitation.
6973
6974- Variables:
6975 - SCIPmarkDoNotMultaggrVar()/SCIPvarMarkDoNotMultaggr() now allow to mark negated and aggregated variables
6976 - SCIPgetVarCopy() got a new parameter `success` that will be FALSE if method is called after problem creation stage and no hash map is
6977 given or no image for the given variable is contained in the given hash map.
6978 - SCIPchgVarType() got an extra boolean parameter to store if infeasibility is recognized while upgrading a variable from continuous
6979 type to an integer type.
6980 - SCIPdelVar() got a new parameter `deleted`, which stores whether the variable was successfully marked to be deleted.
6981
6982### New API functions
6983
6984- information about the quality of the solution of an LP (currently the condition number of the basis matrix) can now be:
6985 + requested from the LPI (currently only available for CPLEX): methods SCIPlpiGetRealSolQuality() and
6986 + SCIPprintLPSolutionQuality() command display lpsolquality in interactive shell display column lpcond to show
6987 + estimate on condition number, if available
6988- SCIPround() and SCIPfeasRound() to round to nearest integer
6989- SCIPsortRealRealIntInt() and corresponding sorting/inserting/deleting methods in pub_misc.h and necessary defines in misc.c
6990- SCIPsortRealIntLong(), SCIPsortPtrPtrRealInt() and corresponding sorting/inserting/deleting methods in
6991 pub_misc.h and necessary defines in misc.c
6992- SCIPcomputeLPRelIntPoint() to compute relative interior point of the current LP
6993- SCIPstartSolvingTime() and SCIPstopSolvingTime() which can be used to start or stop the solving time clock
6994- SCIPstrToRealValue() and SCIPstrCopySection() in pub_misc.h; these methods can be used to convert a string
6995 into a `SCIP_Real` value and to copy a substring.
6996- SCIPgetBinvarRepresentatives() which gets binary variables that are equal to some given binary variables,
6997 and which are either active, fixed, or multi-aggregated, or the negated variables of active, fixed, or multi-aggregated variables
6998- SCIPhasPrimalRay() and SCIPgetPrimalRayVal() that return whether a primal ray is stored and which value a
6999 given variable has in the primal ray, respectively
7000- SCIPsetConsModifiable()
7001- SCIPsetParam() which is a generic parameter setter method, independent of the parameter type
7002- SCIPpropInitpre(), SCIPpropExitpre(), SCIPpropPresol() which initializes, exists and executes the presolving phase
7003- SCIProwGetAge() to access the age of a row (pub_lp.h/lp.c)
7004- SCIPsolGetOrigObj() in pub_sol.h which returns for a solution in the original problem space the objective value
7005- SCIPretransformSol() in scip.h that allows to retransform a solution to the original space
7006- SCIPlpiClearState() to LP interfaces for clearing basis information in the LP solver
7007- SCIPgetSubscipDepth() to access the depth of the current SCIP as a copied subproblem
7008- SCIPdebugAddSolVal() and SCIPdebugGetSolVal() to add/get values to/from a debug solution
7009- SCIPsepastoreRemoveInefficaciousCuts() to remove non-efficious cuts from the separation storage
7010
7011- Nodes:
7012 - SCIPnodeGetParent() to get parent node of a node
7013 - SCIPnodesSharePath() in pub_tree.h that determines whether two nodes are on the same leaf-root path
7014 - SCIPnodesGetCommonAncestor() in pub_tree.h that finds the common ancestor node for two given nodes
7015
7016- Read and Write:
7017 - SCIPgetReadingTime() which returns the time for reading in seconds
7018 - SCIPparseVarsLinearsum(), SCIPparseVarsPolynomial() and SCIPwriteVarsPolynomial() and for writing and
7019 parsing polynomials in constraint handler writing/parsing methods
7020
7021- Memory:
7022 - SCIPcreateMesshdlrPThreads() and SCIPfreeMesshdlrPThreads() for allocating and deleting necessary memory
7023 for message handlers for parallel pthread version
7024 - SCIPallocClearMemoryArray() and BMSallocClearMemoryArray() for allocating cleared memory arrays in scip.h and memory.h
7025
7026- Intervals:
7027 - SCIPintervalPowerScalarInverse() to solve an equation y = x^p for given bounds on y and scalar exponent p
7028 - SCIPintervalQuadBivar() to compute tight bounds on a bivariate quadratic form
7029 - SCIPintervalSolveBivariateQuadExpressionAllScalar() to compute tight bounds on the solutions of a bivariate quadratic equation
7030
7031- Variables:
7032 - SCIPcomputeVarCurrent{L,U}b{Local,Global}() to compute local or global lower or upper bounds of a
7033 multiaggregated variable from the bounds of the aggregation variables
7034 - SCIPbranchVarValNary() for n-ary variable branching
7035 - SCIPgetNegatedVars() which returns all negated variables for a given array of variables, if the negated
7036 variables are not existing yet, they will be created
7037 - SCIPgetNTotalVars() that returns the total number of created vars, icluding variables that were deleted in the meantime
7038 - SCIPvarGetHashkey(), SCIPvarIsHashkeyEq(), SCIPvarGetHashkeyVal() in pub_var.h which can be used for `SCIP_HASHTABLE` of variables
7039 - SCIPvarGetNBdchgInfosLb() and SCIPvarGetNBdchgInfosUb() in pub_var.h returning the number of lower or upper bound changes on the active path
7040 - SCIPvarGetBdchgInfoLb() and SCIPvarGetBdchgInfoUb() returning the bound change information at the given position
7041 - SCIPvarMarkDeletable() to mark a variable to be deletable completely from the problem (for
7042 branch-and-price); can only be called before the variable is added to the problem
7043 - SCIPvarMarkNotDeletable() that marks a variable to be non-deleteable (used within SCIP for forbidding
7044 deletion of variables contained in solution, LP bases, (multi)aggregation, ...)
7045 - SCIPvarIsDeletable() that returns whether a variable is marked to be deletable (each variable is per default non-deletable)
7046
7047- NLP:
7048 - SCIPgetNLPVarsNonlinearity() to get for each variable in the NLP the number of NLP rows in which this variable appears in a nonlinear way
7049 - SCIPnlrowGetDualsol(), SCIPgetNLPVarsLbDualsol(), SCIPgetNLPVarsUbDualsol() to retrieve dual values from an NLP solution
7050 - SCIPgetNLPFracVars() to get the fractional variables in an NLP solution
7051
7052- Propagator:
7053 - SCIPpropSetPresolPriority() which changes the presolving priority of a given propagator