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