9- fixed that scaling of rows in Gurobi interface (SCIPlpiScaleRow()) changed infinite sides to large finite ones (1e20) when scale factor is negative
10- check whether objective limit is truly reached in SCIPlpiIsStable()
11- if an objective limit is set and Mosek claims that it is exceeded, check that this is indeed the case in SCIPlpiIsStable()
12- the .mps file reader was extended to additionally accept .mps files with the objective sense section on one line
13- ensure that delayed cutpool separation does not happen if enough cuts have been found already
14- 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
15- 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
16- fixed memory leak in branching rule "distribution"
17- 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
18- fixed two bugs in cons_varbound: avoid adding variable bounds if vbdcoef is infinite and unlock/lock variables if lhs/rhs/vbdcoef are changed
19- 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
20- fixed error when attempting to copy SCIP with activated pricers
21- 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
22- updated and, or, and pseudoboolean constraint handlers to better handle fractional implicit integer variables in enforcement
23- 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
24- add missing row links to columns in SCIPflushRowExtensions() required to maintain correct row norms
25- restrict separator intobj to solutions for which there can be no better feasible integral objective values to avoid cutting them off
26- delay removal of clique lists from SCIPvarRemoveCliquesImplicsVbs() into cliqueCleanup() to avoid segmentation faults by incomplete cleanups after variable conversions
27- reject sub-solutions with invalid objectives in SCIPtranslateSubSols() due to contradicting infinite contributions
28- correct column index in getMinMaxActivityResiduals() to make presolver dualinfer work
29- copy quiet flag from main scip's message handler to the one of solverscip in concurrent optimization
30- avoid bound tightening cycles towards huge redundancy bounds in fullDualPresolve() to avert fatal numerical trouble in representing vertices of linear relaxations with unbounded domains
31- fix problem where debug solution did not work if branching constraints are present
32- update index of dominating variable on coefficient deletion in dualPresolving() of constraint handler logicor
33- pass on flags from a redundant to the implying varbound constraint in preprocessConstraintPairs() to avoid suboptimal fixings by model relaxations
34- apply reductions of dualinfer only if a dual solution exists (primal is bounded)
35- before presolving is finished check solutions before retransforming them including tiny values to keep check flags consistent
36- 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
37- correct local flag of singleton conflict constraints in tightenSingleVar() against invalid bound globalization
38- respect unboundedness in the computation of activity bounds in conflict.c to avoid invalid huge bounds due to small coefficients on unbounded variables
39- ensure positive sides of a linear constraint when recognizing a set partition in rangedRowSimplify() to account for redundancy issues
40- relax numerical conditions for variable aggregations to avert invalid variable fixings
41- fixed harmless read of uninitialized data when creating parameters
42
43Performance improvements
44------------------------
45
46- Use sassy/bliss as default symmetry computation package.
47
48Interface changes
49-----------------
50
51### Interfaces to external software
52
53- added interface to nauty/traces for symmetry computation
54- added interface to sassy, a preprocessor for symmetry computation
55- The directory src/sassy contains the source code of sassy.
56
57Build system
58------------
59
60### Cmake
61
62- added flag option "SYM=sbliss" for using sassy/bliss as a graph automorphism package
63
64### Makefile
65
66- added flag option "nauty" for SYM variable to specify which graph automorphism package should be used
67- added flag option "sbliss" for SYM variable to specify which graph automorphism package should be used
68- use SYM=sbliss by default, since sassy and bliss are now shipped with SCIP
69
70Miscellaneous
71-------------
72
73- the parameter change callback is no longer called at the moment a parameter is created
74
75@section RN804 SCIP 8.0.4
76*************************
77
78Features
79--------
80
81- use quad precision in cutsSubstituteMIR() for substituting slack variables into CMIR cuts
82- use quad precision for activity computations in cons_linear.c
83
84### Deleted and changed API methods
85
86- SCIPshrinkDisjunctiveVarSet() no longer attempts to cutoff the current node if it finds the
87 given disjunction to be infeasible; it is now in the responsibility of the caller to act accordingly
88
89### New API functions
90
91- added SCIPskipSpace
92- added XML parser routines from src/xml/xml.h
93
94### Interfaces to external software
95
96- updated XPRESS interface to work with XPRESS 41 as well
97
98### Changed parameters
99
100- changed integer parameter "propagating/symmetry/recomputrestart" from range {0, 1, 2} to being fixed at value 0
101
102Unit tests
103----------
104
105- added new checks for objective, bounds and sides inside the scaling tests in lpi/change.c
106
107Fixed bugs
108----------
109
110- relax condition of assert in lpSolve to hold only if lp/checkstability is true
111- OPB reader: dynamically increase the size of the line buffer for reading in getMaxAndConsDim()
112- Enabled the solution limit checks in SCIPsolveIsStopped in solve.c when in SCIP_STAGE_PRESOLVING
113- fix quad precision comparison for the calculation of knapsackcover constraints.
114- force copying of symmetry constraints for concurrent solve
115- increase the precision of double multiplications in quad precision environments
116- corrected handling of different variable types in symmetry
117- orbitope detection: refine computation of overlap structure and fixed bug in finding orbitope generators
118- ensure that winner is always determined in concurrent mode
119- when a row with invalid index range is added to the global cutpool, update the indices instead of failing with an assert
120- update of watched literals in cons_xor.c and ensure that fixed variables are counted in propacateCons()
121- avoid some numerical issue in check for redundant variables in linear constraints (introduced with version 8.0.2)
122- more rows are treated as being integral in cutsSubstituteMIR() for CMIR cuts
123- fixed several relaxations of the rhs of cuts to 0 in cuts.c
124- avoid aggregation into a single linear constraint if they should not be upgraded (needed for indicator constraints)
125- apply effective root changes before fork is repropagated during treeSwitchPath() in tree.c
126- avoid invalid objective value for solutions generated from an unbounded LP relaxation in case of a nonlinear objective function
127- disable recomputing symmetries after a restart (constraint removal is not permitted)
128- avoid cutting off optimal solutions for small feasibility tolerances in conflict analysis
129- initialize variable in presol_dualsparsify.c
130- fix in presolving of variable bound constraints to use absolute instead of relative difference
131- free variable histories in reoptimization mode
132- handle whitespaces in interactive shell history consistently
133- check and enforce equalities on which the objective is projected in cons_linear.c
134- ensure row feasibilities of solution shiftings in heur_oneopt.c and heur_twoopt.c
224- new parameters to turn on more statistics: misc/showdivingstats (diving heuristics), heuristics/alns/shownbstats (ALNS), estimation/showstats (tree size estimation)
225
226### Data structures
227
228- added nrootcalls and ncutsadded to SCIP_Cutpool
229- added fromcutpool flag to SCIP_Row and fixed 33 bit allocation
379 Removed support for parameterized expressions.
380- Added support for expression types sin, cos, and entropy. Added an expression type that stores a SCIP variable.
381- Added handling of sin and cos expressions in OSiL reader.
382- Added handling of sin, cos, and tan expressions in ZIMPL reader.
383- Added expression handler plugin type, removed user expression type.
384- Replaced expressions, expression trees, and expression graphs by a new implementation of expressions.
385- Added differentiation methods (Gradients and Hessian directions) to expressions.
386- Added integrality information to expressions.
387- Added comparison and hashing of expressions.
388- Improved simplification of expressions and identification of common subexpressions, in particular terms that appear
389 equally in several quadratic functions are now identified.
390- Expression simplification now expands powers also when the resulting exponents will be larger than 2.
391- Added table to print statistics on expression handlers.
392- Removed interval-arithmetic evaluation from expression interpreter (interfaces to automatic differentiation codes).
393- Hessians for user-provided expression handlers are not available in the NLP solver interfaces for now.
394- Sparse Hessians are now returned by expression interpreter. Removed dense Hessians.
395
396Constraint handlers for NLP:
397- cons_nonlinear has been completely rewritten and now handles constraints of the form lhs <= expr <= rhs, where
398 expr is an expression using the new expression type. A linear part of a nonlinear constraint is no longer distinguished.
399- Methods that work on a particular nonlinear structure are now implemented via nonlinear handlers (nlhdlr).
400 These handlers are plugins of cons_nonlinear and interact with cons_nonlinear by detecting structures in expressions and
401 providing propagation and separation mechanisms.
402- Added nlhdlr "default" as a mandatory nlhdlr: this is a nlhdlr that gets active on expressions that no other nlhdlr handles.
403 It then uses the callbacks implemented in expression handlers to provide domain propagation and linear under/overestimates.
404- Added nlhdlr for quadratic expressions: domain propagation that was previously part of cons_quadratic; separation via intersection cuts (currently disabled).
405- Added nlhdlr for bilinear expressions: collects bilinear products and provides under/overestimation of a product over a 2D-projection of the LP.
406- Added nlhdlr for convex and concave expressions: detection of convex/concave subexpressions and linear under/overestimation.
407- Added nlhdlr for quotients: detects quotients, provides specialized linear under/overestimation and domain propagation for univariate quotients.
408- Added nlhdlr for perspective reformulations: detects expressions in semi-continuous variables and tightens linear
409 under/overestimates of these expressions by applying a perspective transformation.
410- Added nlhdlr for second-order cones: detects second-order cone constraints (as ||x|| <= t or a quadratic that can written like that) and
411 separates on a disaggregated reformulation (similar to cons_soc previously).
412- Removed constraint handlers abspower, bivariate, quadratic, and soc.
413- Removed simplification of duplicate abspower constraints for now.
414 Removed simplification of abspower constraints with loose variables.
415 Removed resolving of domain propagation (ConsResProp callback) and conflict analysis for abspower constraints.
416 Removed propagation of varbounds for variables of abspower constraints.
417 Removed reformulation of abs(x)^p * x into signpower expression for now.
418- Removed reformulation of SOC constraints when adding to the NLP.
419 Removed possibility to add linearizations a la Glineur or BenTal&Nemirovski for SOC constraints.
420- Removed possibility to disaggregate quadratic constraints.
421 Removed lifted tangent inequalities for bilinear terms in quadratic constraints.
422 Removed option to project LP solution onto feasible region of a quadratic constraint via interior point or gauge function.
423 Removed handling of unbounded LPs when enforcing quadratic constraints.
424- Removed construction of cuts from interval gradients for nonlinear constraints.
425 Removed possibility to pretend that all nonlinear constraints are convex.
426 Removed possibility to create local or non-initial nonlinear constraints for now.
427- Removed explicit reformulation of nonlinear constraints in presolve.
428 An extended formulation is now generated implicitly and used to construct the LP relaxation,
429 but the original formulation is used to check feasibility, propagate variable domains, etc.
430 Variables that are added for the extended formulation are now marked as relaxation-only.
431- Improved locking of nonlinear variables in nonlinear constraints by taking monotonicity into account.
432- Improved mechanisms to detect and handle structures in nonlinear constraints, which allows for several algorithms
433 to work simultaneously on equal or overlapping expressions.
434- Improved linearization of (sums of) products of binary variables, e.g., clique information is now taken into account.
435 Removed option to linearize products between a binary and a non-binary variable.
436- Nonlinear constraints with the same function (but possibly different left- or right-hand-side) are now merged.
437- 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.
438- New branching rule for variables in nonlinear constraints (implemented in cons_nonlinear) that scores candidates
439 based on constraint violation, variable type, and pseudo-costs simultaneously.
440- Added tables to print statistics of nonlinear constraint handler and nonlinear handlers.
441
442Performance improvements
443------------------------
444
445- Use the objective cutoff row as base row for separation in sepa_aggregation.c.
446- Separate lifted cover cuts based on newer lifting function of Letchford and Souli (2019) in sepa_aggregation.c.
447- In-tree restarts due to tree size estimation have been made compatible with orbital fixing.
448- Improved upgrade of orbisacks to packing/partitioning orbitopes.
449- Improved running time of symresack cover separation.
450- Improved propagation algorithm for orbisack and symresack.
451- Improved handling for expressions of type signpower in CppAD interface by making use of CppADs conditional expressions.
452- Faster reevaluation of Hessian for quadratic expressions in CppAD interface.
453- Enabled optimization of taped expressions in the CppAD interface.
454- Sparse Hessian evaluation for expressions with sparse Hessian in the CppAD interface.
455- Disabled branching on variables that are added for the extended formulation of a nonlinear constraint.
456- 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.
457- 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.
458- Improved under/overestimation of multidimensional vertex-polyhedral (e.g., multilinear or concave) functions by use of scaling and keeping the cut-generating LP around.
459- Products in nonlinear constraints are no longer disaggregated for the extended formulation.
460- No longer relax bounds of integral variables when computing bounds on activity in nonlinear constraints.
461- Revised and improved Ipopt interface.
462- Revised and improved subNLP primal heuristic, in particular choice of iteration limit and starting condition and reuse of subSCIP.
463- Merge strongcg into the gomory separator to avoid computing the same base equality twice. The files
464 sepa_strongcg.{h|c} have been removed.
465- The RENS neighborhood in ALNS now fixes fractional variables if necessary for reaching its target fixing rate.
466- Use cpsolver emphasis in sepa_rapidlearning.
467- If decomposition/maxgraphedge = 0, the computation of the block graph is completely turned off.
468- Fixed a performance bug in cons_integral.c where rounding information was passed incorrectly to the generic diving algorithm.
469
470Examples and applications
471-------------------------
472
473- Add c++ Sudoku example
474- Removed circle.c and renamed string.c to spring.c in CallableLibrary example.
475- SCIP-Jack (Steiner tree application):
476 Most files have been modified and many new ones have been added (code base more than doubled).
477 Two new problem classes are supported: maximum-weight connected subgraph problem with budget constraints, partial-terminal node-weighted Steiner tree problem.
478 Major performance improvements accross all problem classes that are supported.
479
480Interface changes
481-----------------
482
483### New and changed callbacks
484
485- extend SEPAEXEC{LP,SOL} callbacks by parameter "depth", which should be used within separation instead of SCIPgetCurrentDepth()
486- extend SCIPseparateSolCutpool() by parameter "pretendroot", which is passed to SCIPcutpoolSeparate() instead of SCIPtreeGetCurrentDepth(scip->tree) == 0
504- added SCIP_NLPIPROBLEM* problem to SCIP_DECL_NLPIGETSOLVERPOINTER
505
506### Deleted and changed API methods
507
508- When calling SCIPdelVar() in the SCIP_STAGE_PROBLEM stage, it is now documented as the user's responsibility to ensure
509 the variable is not present in any constraints. Otherwise, SCIPsolve() now returns SCIP_INVALIDDATA.
510- removed SCIPselectCuts(), replaced by SCIPselectCutsHybrid() of the hybrid cut selector plugin
511- If SCIPvarMarkRelaxationOnly() is called for a variable, then this now need to happen before the
512 variable is added to the transformed problem (SCIPaddVar()).
513 SCIPvarMarkRelaxationOnly() will automatically call SCIPvarMarkDeletable().
514- SCIPcomputeOrbitsFilterSym() and SCIPcomputeComponentsSym(): Type of argument componentblocked
515 changed from SCIP_Shortbool* to unsigned*.
516- removed SCIPsetParam()
517- SCIPcreateConsOrbitope() and SCIPcreateConsBasicOrbitope() have two new arguments "usedynamicprop"
518 and "mayinteract" to encode whether a dynamic reordering of the orbitope rows shall be used in
519 full orbitope propagation and whether the orbitope might interact with other symmetry handling
520 methods, respectively.
521- internal function SCIPgetPropertiesPerm() has been replaced by SCIPisInvolutionPerm()
522- internal function SCIPgenerateOrbitopeVarsMatrix() has new arguments "storelexorder", "lexorder",
523 "nvarsorder", "maxnvarsorder" to compute and store the lexicographic order defined by an orbitope
524- renamed SCIPcomputeArraysIntersection() and SCIPcomputeArraysSetminus() to
525 SCIPcomputeArraysIntersectionInt() and SCIPcomputeArraysSetminusInt(), respectively, and changed
526 their return type from SCIP_RETCODE (which _always_ was SCIP_OKAY) to void
527- removed SCIPincludeDialogDefault(), use SCIPincludeDialogDefaultBasic() instead and check whether you also need SCIPincludeDialogDefaultSet() and SCIPincludeDialogDefaultFix()
528- removed exprint argument from SCIPaddNlRowGradientBenderscutOpt()
529- added copyexprhdlrs argument to SCIPcopyPlugins() (19th position)
530- added copycutselectors argument to SCIPcopyPlugins() (10th position)
531- removed refpoint argument from SCIPaddSquareSecant()
532- added argument exprdata to SYMcomputeSymmetryGenerators()
547- renamed SCIPsetNlRowExprtree() to SCIPsetNlRowExpr() and changed type of expr(tree) argument to SCIP_EXPR*
548- SCIPenableNLP() is no longer allowed in stages INITSOLVE and SOLVING
549- removed SCIPaddLinearConsToNlpHeurSubNlp()
550- 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
551- renamed SCIPsolveNLP() to SCIPsolveNLPParam() and added parameter SCIP_NLPPARAM param
552- removed SCIPsolveDiveNLP(), use SCIPsolveNLPParam() instead
600- removed SCIPnlpiOracleGetVarDegree() and SCIPnlpiOracleGetVarDegrees(), use SCIPnlpiOracleIsVarNonlinear() and SCIPnlpiOracleGetVarCounts(), respectively, instead
601- removed SCIPnlpiOracleGetConstraintDegree(), use SCIPnlpiOracleIsConstraintNonlinear() instead
602- removed argument messagehdlr from SCIPnlpiOraclePrintProblem() and SCIPnlpiOraclePrintProblemGams()
603- removed SCIPcreateNlpiProb(), use SCIPcreateNlpiProblemFromNlRows() instead
604- renamed SCIPupdateNlpiProb() to SCIPupdateNlpiProblem() and moved into scip_nlpi.{h,c}
605- renamed SCIPaddNlpiProbRows() to SCIPaddNlpiProblemRows() and moved into scip_nlpi.{h,c}
607- removed SCIPgetIpoptApplicationPointerIpopt(), use SCIPgetNlpiSolverPointer() instead
608- removed SCIPnlpStatisticsCreate(), SCIPnlpStatisticsFree(), SCIPnlpStatisticsGetNIterations(), SCIPnlpStatisticsGetTotalTime(), SCIPnlpStatisticsSetNIterations(), SCIPnlpStatisticsSetTotalTime(), the struct is public now
609- renamed LapackDsyev() to SCIPcallLapackDsyevIpopt()
610- renamed SCIPsolveLinearProb() to SCIPsolveLinearEquationsIpopt()
611
612Expression interpreter:
613- removed functions that operated with SCIPInterval
614- changed first argument of SCIPexprintCreate() to SCIP*
615- added SCIP* as first argument to SCIPexprintFree()
616- added SCIP* as first argument to SCIPexprintCompile(), changed third argument to SCIP_EXPR*, added fourth argument SCIP_EXPRINTDATA**
617- added arguments SCIP*, SCIP_EXPRINT*, and SCIP_EXPR* as first arguments to SCIPexprintFreeData()
618- renamed SCIPexprintGetExprtreeCapability() to SCIPexprintGetExprCapability();
619 added SCIP* as first argument, changed third argument to SCIP_EXPR*, added fourth argument SCIP_EXPRINTDATA*
620- removed SCIPexprintNewParametrization()
621- SCIPexprintEval(): added SCIP* as first argument, changed third argument to SCIP_EXPR*, added fourth argument SCIP_EXPRINTDATA*
622- removed SCIPexprintEvalInt()
623- SCIPexprintGrad(): added SCIP* as first argument, changed third argument to SCIP_EXPR*, added fourth argument SCIP_EXPRINTDATA*
624- removed SCIPexprintGradInt()
625- removed SCIPexprintHessianSparsityDense() and SCIPexprintHessianDense, use SCIPexprintHessianSparsity() and SCIPexprintHessian() instead
626
627Expressions:
628- removed SCIPexpropGetName(), use SCIPexprhdlrGetName() instead
629- removed SCIPexpropGetNChildren()
630- removed SCIPexprGetOperator(), use SCIPexprGetHdlr() instead
631- removed SCIPexprGetOpIndex(), SCIPexprGetOpReal(), SCIPexprGetOpData(), use SCIPexprGetData() instead
632- removed SCIPexprGetRealPowerExponent(), SCIPexprGetIntPowerExponent(), SCIPexprGetSignPowerExponent(), use SCIPgetExponentExprPow() instead
633- removed SCIPexprGetLinearCoefs(), SCIPexprGetLinearConstant(), use SCIPgetCoefsExprSum() and SCIPgetConstantExprSum() instead
753- renamed SCIPgetNAllBilinearTermsQuadratic() to SCIPgetNBilinTermsNonlinear() and changed argument from SCIP* to SCIP_CONSHDLR*
754- renamed SCIPgetAllBilinearTermsQuadratic() to SCIPgetBilinTermsNonlinear() and replaced arguments by SCIP_CONSHDLR* and changed return type to SCIP_CONSNONLINEAR_BILINTERM*
755- removed SCIPaddBilinearIneqQuadratic(), use SCIPinsertBilinearTermImplicitNonlinear() instead
756- renamed SCIPcreateConsQuadratic() to SCIPcreateConsQuadraticNonlinear() and removed argument stickingatnode
757- removed SCIPincludeConshdlrSOC()
758- replaced SCIPcreateConsBasicSOC() by SCIPcreateConsBasicSOCNonlinear()
759- deprecated SCIPcreateConsSOC(), use SCIPcreateConsBasicSOCNonlinear() instead
760- deprecated SCIPgetNlRowSOC(), use SCIPgetNlRowNonlinear() instead
980- Removed parameters for strongcg separator: separating/strongcg/..., i.e.,
981 maxrounds, maxroundsroot, maxsepacutsroot, maxsepacuts, dynamiccuts. One can control the
982 strongcg behavior throught the parameters of sepa_gomory.
983- renamed separating/{minortho,minorthoroot,objparalfac,intsupportfac} to cutselection/hybrid/{minortho,minorthoroot,objparalweight,intsupportweight}
984
985### New parameters
986
987- It is now possible to add orbitope constraints to handle symmetries even if not all variables
988 in a component of the symmetry group are binary. This feature can be enabled using the
1047- new parameters "branching/inference/conflictprio" and "branching/inference/cutoffprio" that allow
1048 using the different score criteria in inference branching hierarchically
1049- new parameters "heuristics/alns/nodesquotmin", "heuristics/alns/maxcallssamesol" and "heuristics/alns/initduringroot"
1050 to control neighborhoods in ALNS
1051- new parameter "benders/default/benderscut/optimality/mir" to control whether mixed-integer rounding procedure is applied to Benders optimality cuts
1052- new parameter "misc/avoidmemout" to try to avoid running into memory limit
1168- added test projection:transitivity in prob/obbt.c
1169- added reader/nl.c
1170- added test intervalarith:sincos in scip/intervalarith.c
1171- added sepa/minor.c
1172- added sepa/rlt/cuts.c
1173- added sepa/rlt/product_detection.c
1174- added sepa/rlt/separation.c
1175- added tests test_compute_symmetry:expr{1,2,3,4} in symmetry/compute.c
1176
1177Testing
1178-------
1179
1180Build system
1181------------
1182
1183- the separate NLPI library has been integrated into the main SCIP library;
1184 uses of NLPILIBFILE or NLPILIBSRC in Makefiles that use make/make.project
1185 should be removed
1186
1187### Cmake
1188
1189- replace flag PARASCIP by THREADSAFE
1190- option AMPL is now ON by default
1191- add -D_XOPEN_SOURCE=600 cflag for compilation on systems other than windows
1192- add compile options directly instead of modifying CMAKE_C_FLAGS and CMAKE_CXX_FLAGS
1193
1194### Makefile
1195
1196- prefix PKG_CONFIG_PATH with Ipopt's pkgconfig dir instead of postfixing
1197- replace flag PARASCIP by THREADSAFE
1198- flag AMPL is now true by default
1199- libscip has been renamed to libscipbase and libscipsolver has been renamed to libscip
1200 in order to have the same library names for makefiles and cmake. For downward
1201 compatibility libscipsolver still exists (as a link).
1202
1203Fixed bugs
1204----------
1205
1206- fixed handling of multi-aggregation in cons_symresack and cons_orbisack
1207- SCIPgetLowerbound() now consistently returns infinity when status is infeasible
1208- improved the likelihood that a solution that satisfies the nonlinear constraints in the transformed (presolved) problem is also feasible for the original problem
1209- worked around a problem with derivatives of pow at 0 with non-integer exponents in CppAD
1210- fixed that setting of feasiblity and optimiality tolerance for NLP relaxation was overwritten with defaults when solving NLP
1211- fixed variance computation in t-value computation in hypothesis testing of reliability branching
1212- fixed potential overflow in cuts.c:evaluateLiftingFunctionKnapsack()
1213- do not transfer dual reductions to main SCIP in sepa_rapidlearning if strong dual reductions are forbidden
1214- fixed a bug in cons_setppc.c:removeDoubleAndSingletonsAndPerformDualpresolve() which led to wrong variable aggregations
1215- added missing redundancy check to coefficient tightening routine in cons_varbound that led to wrong variable locks
1216- added a check of numerics to avoid wrong reductions in cons_linear.c:simplifyInequalities()
1217- fixed a bug in cons_logicor.c regarding fixed variables that were not removed
1218- presol_milp.c handles variable fixings, suggested by PaPILO, more carefully to cover all cases that can appear
1219- fixed several reproducability bugs that led to different solving paths across multiple runs with one SCIP environment
1220- fixed check of limits/absgap, which was incorrectly applied to the scaled objective of the transformed problem
1221
1222Miscellaneous
1223-------------
1224
1225- in LP, use absolute instead of relative tolerances to check whether solutions from LP solver are primal feasible
1226- when a restart occurs, SCIP now asserts (during EXITSOLVE) that all relaxation-only variables are unlocked and
1227 only captured by the transformed problem.
1228- Avoid redundant calls to LP solver when LP is already flushed and solved
1229- In SCIPdebugMsg(), SCIPsetDebugMsg(), SCIPstatDebugMsg() strip directory from filename.
1230- Recompute activity of rows when checking LP solutions instead of trusting the value given by the LP solver
1231- The define NPARASCIP has been replaced by SCIP_THREADSAFE
1232- Parameters are not reset to their default values before activating an emphasis setting; this now allows to combine
1233 different emphasis settings.
1234- 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.
1235
1236Known bugs
1237----------
1238
1239@page RN70 Release notes for SCIP 7.0
1240
1241@section RN703 SCIP 7.0.3
1242*************************
1243
1244Interface changes
1245-----------------
1246
1247### New API functions
1248
1249- added function SCIPwithDebugSol() to determine whether SCIP was compiled with WITH_DEBUG_SOLUTION
1250
1251- New function SCIPcreateConsBounddisjunctionRedundant() and SCIPcreateConsBasicBounddisjunctionRedundant() that allow
1252 the input to contain redundant literals.
1253
1254### Changed API functions
1255
1256- added __attribute__((format(printf,,,))) to variadic SCIP message printing functions;
1257 this enables warnings about mismatches between format string and variadic function arguments if using GCC.
1258
1259### Interfaces to external software
1260
1261- removed MATLAB interface from interfaces/matlab
1262
1263Build system
1264------------
1265
1266- Compilation will now also work in a raw tarball of the scip git repository
1267
1268### Cmake
1269
1270- Make find_package more verbose and require packages to be found. Now enabled packages that are not found result in an error.
1271
1272Fixed bugs
1273----------
1274
1275- Fixed numerical bug by creating and checking the empty solution when problem vanishes in presolving.
1276- Fixed several bugs in reoptimization.
1277- Fixed bug in cons_bounddisjunction in which a constraint leads to a cutoff.
1278- Fixed bug in reoptimization by avoiding redundant literals for bound disjunctions.
1279- Replace wrong usage of CMAKE_BINARY_DIR by PROJECT_BINARY_DIR in CMake system
1280- Fixed lpi_glop to use absl flag instead of GFlags
1281- Fixed invalid initialization of limits/softtime parameter in cons_components
1282- Fixed MIN macro not defined in some cases.
1283- Safeguard some API methods for querying solving statistics against segmentation faults after SCIPpresolve()
1284- Fixed unfreed solution in concurrent solving
1285- Make sure that logicor constraints are enforced/separated if genlogicor is true in cons_indicator.
1286 Thus, do not change constraints/logicor/sepafreq anymore, but output warning.
1287- Fixed assert that assumed infeasibility cannot occur in presol_boundshift.
1288- Fixed sign bug during creation of conflict constraints with almost zero left-hand side.
1289- Disabled call of conflict handler for conflict sets that contain relaxation-only variables.
1290- Fixed bug in cons_symresack by initializing all constraint data in constrans
1291- Avoid allowing the upgrade of linear constraints corresponding to indicators in propagation of nodes.
1292- Fixed bug in computing lex. min/max faces in dynamic orbitope propagation.
1293- Limit vbounds propagator to one sweep through all bounds per call in order to avoid an infinite loop.
1294- Fixed mismatches between formatter strings and arguments in calls to SCIP message printing functions.
1295
1296Miscellaneous
1297-------------
1298
1299- To avoid performance variablity during reoptimization, the active constraints are now stored in the same order as in the
1300 original problem.
1301- Added workaround for bug in MSVS 2019 when compiling CppAD source.
1302- The original order of variables is now only restored after presolve if `randomization/permutevars` is set to FALSE.
1303
1304@section RN702 SCIP 7.0.2
1305*************************
1306
1307Features
1308--------
1309
1310- Extended check for valid variable and constraint names in PIP writer.
1311- Indicator constraints now write the name of the linear constraint in CIP format. This avoids a complicated
1312 name matching during parsing. The old format is still supported.
1313- The objective scale and offset are now taken into account when reading/writing problems in lp/mps/fzn/pip format.
1314 This often changes the behavior when writing transformed problems.
1315
1316Performance improvements
1317------------------------
1318
1319Examples and applications
1320-------------------------
1321
1322- Add c++ Sudoku example
1323
1324Interface changes
1325-----------------
1326
1327### New and changed callbacks
1328
1329### Deleted and changed API methods
1330
1331- deprecated SCIPsetParam(); use SCIPsetIntParam(), SCIPsetRealParam(), etc, instead
1332
1333### New API functions
1334
1335- new function SCIPcolGetVarProbindex() for accessing the probindex of a variable corresponding to a column
1336- added new sorting functions SCIPsortPtrRealRealBoolBool()
1337
1338### Command line interface
1339
1340### Interfaces to external software
1341
1342### Changed parameters
1343
1344### New parameters
1345
1346### Data structures
1347
1348Deleted files
1349-------------
1350
1351Unit tests
1352----------
1353
1354Testing
1355-------
1356
1357Build system
1358------------
1359
1360### Cmake
1361
1362### Makefile
1363
1364Fixed bugs
1365----------
1366
1367- Fixed a sign bug occuring for some cases in the computation of the directed cutoff distance
1368- Fixed overflow in inference information of cumulative constraint handler
1369- Fixed problem with propfreq == 0 in cons_linear.c
1370- Fixed aggregation heuristic in sepa_aggregation.c to not use local rows when that is requested nor modifiable rows
1371- Fixed problem with incompatibility of symmetry handling in Benders decomposition
1372- Fixed parsing of small number in CIP format of nonlinear constraint
1373- Fixed problem in upgrading full orbitopes to partitioning orbitopes
1374- Fixed treatment of negated variables in parsing orbitope constraints
1375- Fixed potential indexing error in prop_vbounds.c
1376- Fixed bug in writing fzn format
1377- Revert to old parameter value when parameter change is rejected in PARAMCHGD callback
1378- Fixed order of linker flags when building AMPL interface with cmake system.
1379- Fixed bug with ofsymcomptiming == 0: now symmetry is actually computed
1380- Improved separation for SOC constraint with multiaggregated variable on right-hand-side.
1381- Fixed bug in presol_boundshift: do not shift non-active variables
1382- Fixed bug in domain propagation for SOC constraints with negative coefficient for variable on right-hand-side.
1383- Fixed bug with multi-aggregated integer variables in cons_xor.
1384- Fixed bug with changed number of variables in storing relaxation solution in probing/diving.
1385- Fixed issues with scip statistics
1386- Fixed issue with multi-aggregated variables
1387- Fixed issue in with buffer memory in cons_cumulative
1388
1389Miscellaneous
1390-------------
1391
1392Known bugs
1393----------
1394
1395@section RN701 SCIP 7.0.1
1396*************************
1397
1398Build system
1399------------
1400
1401### Cmake
1402
1403- Fixed cmake module for Ipopt to support Ipopt 3.13
1404- Added cmake variable BLISS_LIBRARY_DIR to pass a bliss library
1405- Added warning to require minimal GCC version 4.8
1406- Renamed FindCriterion cmake findmodule to FindCRITERION
1407
1408### Makefile
1409
1410- Updated make/make.project for macOS
1411- Add SANITZERFLAGS (only OPT=dbg) to LDFLAGS also if SHARED=true (and rename SANITZERFLAGS to SANITIZERFLAGS)
1412- Fixed GCC version check in make/make.linux.gnu.dbg
1413
1414Fixed bugs
1415----------
1416
1417- Fixed handling of constant term in quadratic objective of pip-reader
1418- Fixed incorrect value string for parameter estimation/completiontype
1419- Fixed initialization of first LP which led to wrong output about LPs not resolved correctly
1420- Fixed bug in SCIPcutpoolClear() function not clearing internal datastructures properly
1421- Fixed inability to set a value in a solution if it was within epsilon to the current value
1422- Fixed problems for linking optimized code with debug library of SCIP (and vice versa) by moving debug-only members
1423 to end of SCIP structs
1424
1425Miscellaneous
1426-------------
1427
1428- Variables that are marked as relaxation-only are no longer checked against debug solutions if
1429 they are captured by the transformed problem only.
1430
1431@section RN700 SCIP 7.0.0
1432*************************
1433
1434Features
1435--------
1436
1437- Using the parameter "propagating/symmetry/recomputerestart" one can now decide to recompute symmetries after a
1438 restart or not. Previously one could just turn off symmetry computation after a restart. If orbital fixing
1439 has found a reduction before the restart occured, symmetries have to be updated to ensure correctness.
1440 To this end, the user can decide via "propagating/symmetry/disableofrestart" whether orbital fixing is disabled or
1441 whether symmetries are recomputed.
1442
1443- extended relaxators statistics in solve statistics about information on number of cutoffs, improved bounds, etc.
1444
1445- extends SMPS file reader for the stochastic information, the sto files, to read a lower bound for the discrete
1446 scenarios. The lower bound is used when creating the auxiliary variables for Benders' decomposition.
1447
1448- extended Benders framework to solve NLPs and generate optimality and feasibility cuts from their solution
1449 when the subproblem is convex nonlinear.
1450
1451- extended Benders framework to create copies of Benders decompositions that can be used in a multithreading environment
1452
1453- additional functionality has been added to enable the transfer of Benders' decomposition cuts between different SCIP
1454 instances, e.g., when used in UG
1455
1456- LP rows (SCIP_ROW) can now store pointer to a constraint from which the row originates
1457
1458- Trust region, a new LNS heuristic, has been added to SCIP as both a standalone primal heuristic heur_trustregion.c
1459 and as a neighborhood inside of Adaptive Large Neighborhood Search (heur_alns.c). This heuristic is designed to improve the
1460 heuristic performance of the Benders' decomposition algorithm. It builds upon the successful trust region approaches
1461 applied to Benders' decomposition.
1462
1463- Modularity of symmetry handling has been increased. It is now possible to use orbitopes (i.e., polyhedral symmetry
1464 handling techniques) and orbital fixing on the same instance.
1465
1466- cut strengthening enabled within the Benders' decomposition framework. This uses a mix of the Improved Magnanti-Wong
1467 method and Kelly's method. The cut strengthening is enabled by setting the paramemter
1468 "benders/<bendersname>/cutstrengthenenabled" to TRUE. The parameters "cutstrengthenmult", "noimprovelimit" and
1469 "corepointperturb" control the behavior of the cut strengthening method. Additionally, the parameter
1470 "cutstrengthenintpoint" allows the user to specify the solution that is used to initialize the core point. The options
1471 are the first LP solution, the first integer feasible solution, a relative interior point, a solution vector of all
1472 ones and a solution vector of all zeros. Also, the core point can be reinitialized after each update to the incumbent
1473 solution.
1474
1475- added option to adjust weights of different scores in relpscost (hybrid) branching rule based on degeneracy information
1476 and skip strong branching for very high degeneracy rates
1477
1478- added new SCIP_DECOMP* object to store user decompositions. The user can specify one or several decompositions by assigning variable
1479 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).
1480 This format specifies constraint labels, variable labels are inferred from that. The decomposition is transformed after presolving.
1481- statistics regarding the number of blocks, the largest and smallest blocks, the border, and the constraint graph are printed for the original decomposition,
1482 and for each decomposition after presolving.
1483- the decomposition can be used as initial decomposition for the Benders functionality of SCIP.
1484- new subsection "How to provide a problem decomposition" in the SCIP documentation
1485
1486- GINS heuristic can make use of a user-provided decomposition labels in two ways:
1487 1. by selecting a block of variables that maximizes the potential, and randomly selecting a start variable for the neighborhood and/or
1488 2. by selecting an interval of consecutive blocks as neighborhood, until fixing rate is reached. In this case, no variable is randomly selected.
1489
1490- extend potential parameter of GINS to allow computation based on local LP solution, as well
1491
1492- new primal heuristic Adaptive Diving, which registers all publicly available dive sets from other diving heuristics.
1493 At each call, it selects one of the available dive sets based on the user's score type choice (heuristics/adaptivediving/scoretype).
1494 During the solution process, the heuristics learns online which divesets reach the best score, and executes them more frequently.
1495 The statistic output for Diving heuristics has been extended to incorporate the statistics of each dive set within Adaptive diving.
1496
1497- Added new penalty alternating direction method (PADM) primal heuristic that splits the problem into several sub-SCIPs
1498 according to a user-provided decomposition. The sub-SCIPs are solved on an alternating basis until a feasible solution of
1499 the original problem is found.
1500
1501- Symmetry handling constraints (cons_orbisack, cons_orbitope, cons_symresack) now have an additional parameter to encode
1502 whether they are model constraints, i.e., define the problem, or whether they are only present to handle symmetries.
1503
1504- The symmetry code has been completely restructured. The presolvers presol_symbreak and presol_symmetry as well as the propagator
1505 prop_orbitalfixing have been merged into the single propagator prop_symmetry to avoid storing the same information
1506 multiple times. This propagator is now responsible for adding symmetry handling constraints as well as activating orbital
1507 fixing. Moreover, the new file symmetry.c contains general functions for symmetry computations like orbit computations.
1508
1509- Variables can now be marked as "relaxation-only". This flag should be used to introduce new variables that are required
1510 to define a relaxation, but that are not part of any checked constraints. Essentially, these variables should only be used
1511 in the current SCIP solve and disregarded after a restart or in SCIP copies. Hence, these variables are not copied by SCIPcopy and
1512 SCIPgetVarCopy, they are currently not used in conflict constraints, and cuts involving them are not upgraded to linear constraints.
1513 Relaxation-only variables cannot appear in the objective function.
1514
1515- The OSiL reader now supports nonlinear expressions of type "signpower".
1516
1517- Expressions of form abs(x)^p * x in a nonlinear constraint are now sometimes recognized and handled by abspower constraints.
1518
1519- If polyhedral symmetry handling methods are used (cons_orbisack, cons_orbitope, cons_symresack), it is now possible to
1520 recompute symmetries if a restart occured.
1521
1522- upgrade some more quadratic constraints to second-order cone constraints, that is,
1523 handle linear binary variables as if squared in simple upgrade and
1524 do not require bounds for variables that have a zero entry in the computed eigenvectors in the non-simple upgrade
1525
1526- new variable event when changing the variable type
1527
1528- It is no longer necessary to provide a SCIP pointer for the subproblem in SCIPaddBendersSubproblem if custom solving
1529 methods are defined. A NULL pointer can be supplied to SCIPaddBendersSubproblem. In this case, no internal Benders'
1530 cut generation methods can be used.
1531
1532- Using the parameter "constraints/symresack/checkmonotonicity" one can now decide to upgrade to packing/partitioning
1533 symresacks even if the underlying permutation is not monotone.
1534
1535- New branching rule `vanillafullstrong`, mostly for scientific purpose, with the following features:
1536 1) no cutoff or domain reduction: only branching;
1537 2) idempotent (optional): leave SCIP, as much as possible, in the same state before / after the strong branching calls
1538 - basically, do not update any statistic;
1539 3) donotbranch (optional): do no perform branching. So that the brancher can be called as an oracle only
1540 (on which variable would you branch ? But do not branch please);
1541 4) scoreall (optional): keep scoring variables, even if infeasibility is detected;
1542 5) collectscores (optional): store the candidate scores from the last call, which can then be retrieved by calling SCIPgetVanillafullstrongData();
1543 6) integralcands (optional): consider integral candidates for branching,
1544 i.e., get candidates from SCIPgetPseudoBranchCands() instead of SCIPgetLPBranchCands().
1545
1546- If a reference value (misc/referencevalue) is given, the primal-reference and reference-dual integrals are calculated automatically and printed within the SCIP statistics.
1547
1548- Locally valid cuts / rows are now considered for dual proof analysis when `conflict/uselocalrows` is set to TRUE.
1549
1550- 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.
1551
1552- To save memory, it is now possible to remove all variables from the internal symmetry data structures that are
1553 not affected by any symmetry.
1554
1555- Allow to filter first variables from orbits and transfer pseudo cost information to variables in orbit
1556
1557- Add integration of external MILP presolve library as a SCIP presolver plugin that runs on MILP problems
1558
1559- Parallelisation can be used when applying Benders' decomposition. There are two different forms of parallelisation
1560 available. The first is applying Benders' decomposition within a parallel branch-and-bound. This is achieved through
1561 the integration with the UG framework. The second is the use of shared memory parallelisation for solving the Benders'
1562 decomposition subproblems. A priority queue has been added to help with load balancing.
1563
1564- The Benders' decomposition framework can handle MINLPs. If a convex relaxation of the MINLP exists, then this is
1565 solved to generate optimality and feasibility cuts. The extensions to the framework are:
1566 - New generic solving methods to solve convex NLP subproblems.
1567 - Modification to benderscut_opt and benderscut_feas to enable the generation of cuts from convex NLPs.
1568 - Addition of benderscut_feasalt to generate feasibility cuts from an alternative subproblem that minimises the
1569 violation of infeasible problems.
1570 - Better handling of subproblem solution results
1571
1572- Adds a feasibility phase to the Benders' decomposition subproblem solving methods. The feasibility phase adds slack
1573 variables to each of the constraints to ensure feasibility of the subproblem. A large coefficient is given to these
1574 slack variables in the objective function to penalise constraint violations. The coefficients are progressively
1575 increased until all slack variables take the value 0.0.
1576
1577- Improved convexity check for Benders' decomposition subproblems. The constraints of the subproblem are now checked for
1578 convexity in the initialisation of the Benders' decomposition algorithm. This enables the solving of convex NLPs as
1579 Benders' decomposition subproblems.
1580
1581- Benders' decomposition can be applied using decomposition supplied in the DEC format. To apply Benders' decomposition
1582 the parameters decomposition/benderslabels and decomposition/applybenders must be set to TRUE.
1583
1584- new event handler event_estim.c/h that approximates search tree completion and estimates tree size
1585 to trigger restarts; many approximations of search tree completion and estimation, including WBE, SSG, and tree profile method
1586- new display column that reports approx. search tree completion during the search, and an overview in the statistics table
1587- added resources (script, tutorial, test data) to adapt tree size estimation to user instances.
1588
1589- Orbital Fixing uses a list of variables that have been fixed globally since the computation of symmetries to filter
1590 symmetries. Previously, some plugins were disabled, which is not necessary anymore.
1591
1592- A new presolver "dualsparsify" was added. It tries to combine columns (i.e. variables) to cancel nonzero coefficients in the constraint matrix.
1593
1594- The presolver "tworowbnd" was implemented with better performance.
1595
1596- 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.
1597
1598- allow disabling of pricers during solving process
1599
1600- added emphasis setting for numerically challenging instances
1601
1602Performance improvements
1603------------------------
1604
1605- Extended cut presolving by removing variables that been fixed at their bounds
1606
1607- Improved branching point selection when branching on externals branching candidates. Instead of using exactly the
1608 LP solution, a point closer to the middle of the variables domain is chosen.
1609
1610- Matrix presolvers that do not work on incomplete matrices now skip matrix creation if unsupported constraint types are detected.
1611
1612- consLockBenders callback implemented to add down locks on the Benders' decomposition auxiliary variables and
1613 up and down locks per subproblem for all master problem variables. This allows the use of presolving and propagation
1614 with Benders' decomposition.
1615
1616- improved performance of orbital fixing in several ways:
1617 store permutations in transposed form to improve cache efficency;
1618 reverse order to speed up filtering of permutations;
1619 handle variables globally fixed to 1 in list;
1620 use event handler to catch global fixings;
1621 speed up orbit computations;
1622 change handling of restarts;
1623 use only permutations that can contribute to a variable's orbit;
1624
1625- allow rapid learning at local nodes
1626
1627- allow to recompute cut without using fractional values for sepa_cgmip
1628
1629- restrict the number of the clique table nonzeros relative to the number of problem nonzeros, which could be a performance bottleneck.
1630
1631- variable fixings of LP face heuristic are now computed earlier; subproblem creation is skipped if not enough variables are fixed.
1632
1633- Improved domcol presolver to not require a complete representation of all constraints in the matrix
1634
1635- performance improvement of adaptive large neighborhood search heuristic on merely continuous problems. The heuristic
1636 stops if presolving in the sub-SCIP fixes less than 50 % of the current target fixing rate over all variables
1637 (including continuous).
1638
1639- reduce memory usage in symmetry detection by a staggered allocation with decreasing overhead for larger instances
1640
1641- improved full orbitope propagation using a static implementation or a dynamic reordering of orbitope rows by a global rank function
1642
1643- improved detection of packing/partitioning orbitopes
1644
1645- enable an in-tree restart if after a reasonable initialization, the estimated size of the remaining tree is large.
1646
1647
1648Examples and applications
1649-------------------------
1650
1651- added methods to set and get hmin and hmax for optcumulative constraints
1652
1653Interface changes
1654-----------------
1655
1656### New and changed callbacks
1657
1658- new optional callback `SCIP_DECL_DIVESETAVAILABLE` to check preconditions for this dive set, e.g., if an incumbent solution is available,
1659 which is passed as new argument to SCIPcreateDiveset(). SCIPcreateDiveset() has another new parameter "ispublic".
1660
1661- new callback `SCIP_DECL_CONSHDLRCOPY` and `SCIP_DECL_CONSCOPY` in cons_orbisack and cons_symresack
1662
1663- new `idempotent` argument to SCIPgetVarStrongbranchInt() and SCIPgetVarStrongbranchFrac(),
1664 so that statistics are not updated during the call. Likewise, new `updatecol` and `updatestat` arguments to SCIPcolGetStrongbranch().
1665
1666- callback `SCIP_DECL_CONSHDLRENFOLP` can now also return SCIP_SOLVELP as *result, which indicates to the SCIP core that the LP relaxation
1667 should be solved again because the primal feasibility tolerance of the LP has been tightened (using SCIPsetLPFeastol())
1668
1669- 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.
1670
1671### Deleted and changed API methods
1672
1673- LPI:
1674 + now for all lp interfaces consistent requirements on SCIP_LPPAR:
1675 LPITLIM and BARRIERCONVTOL positive or zero; FEASTOL, DUALFEASTOL, LPTILIM strictly positive
1676 + now projecting SCIP_LPPAR values on feasible values for each lp interface
1677 + add interface to Glop
1678 + fixed mapping between scaling parameter values in Gurobi LPI lpi_grb
1679- Symmetry:
1680 + removed method SCIPseparateCoversOrbisack() in cons_orbisack.h since the orbitope constraint
1681 handler has its own implementation of this routine with advanced features now
1682 + renamed SCIPgetGeneratorsSymmetry() to SCIPgetSymmetry() and removed two arguments
1683 + extended method SCIPgetSymmetry(): It is possible to access both the original and
1684 transposed permutations matrix as well as the (independent symmetry) components of a permutation group now.
1685 + arguments of functions SCIPcreateConsOrbisack(), SCIPcreateConsBasicOrbisack(), SCIPcreateConsOrbitope(),
1686 SCIPcreateConsBasicOrbitope(), SCIPcreateConsSymresack(), SCIPcreateConsBasicSymresack(), and SCIPcreateSymbreakCons() extended
1687 by "ismodelcons" to encode whether the constraints are model constraints or not
1688 + the function SCIPgetSymmetry() no longer accepts the parameter recompute, but has parameter permvarmap as new input
1692 + add function SCIPcomputeOrbitsComponentsSym() to compute orbits without filtering permutations and indices of orbits for each variable
1693- SCIPallowObjProp() and SCIPallowDualReds() are deprecated and replaced by SCIPallowWeakDualReds() and SCIPallowStrongDualReds(), respectively
1694- Benders' decomposition
1695 + changed SCIPstoreBenderscutCut() in scip_benders.c to SCIPstoreBendersCut(). Where this function used to take a
1696 SCIP_BENDERSCUT pointer, it now accepts a SCIP_BENDERS pointer.
1697 + the functions SCIPsolveBendersSubproblem() no longer accepts the parameter type. The type is not a necessary
1698 argument for the subproblem solving method.
1699 + arguments of functions SCIPbendersSolveSubproblemLP(), SCIPbendersSolveSubproblemCIP(), and SCIPbendersOnlyCheckConvexRelax() changed
1700 - removed SCIPbenderscutGetNAddedCuts() and SCIPbenderscutGetAddedCutData()
1701
1702
1703### New API functions
1704
1705- new argument "onlyifcomplete" in SCIPmatrixCreate() to skip matrix creation right after detecting unsupported constraint types
1706 and new arguments to count statistics when doing a clean-up of inactive variables in the constraints before building the matrix
1707
1708- new argument "threadsafe" in SCIPcopy(), SCIPcopyConsCompression(), SCIPcopyOrig(), SCIPcopyOrigConsCompression and
1709 SCIPcopyBenders(). This argument must only be set to TRUE if the source and target SCIP instances are to be solved in
1710 parallel. Setting this argument to TRUE has a performance cost.
1711
1712- new argument "append" in SCIPsetModifiedDefaultSettingsIpopt()
1713- functions SCIPclearRelaxSolVals(), SCIPsetRelaxSolVal(), SCIPsetRelaxSolVals(), SCIPsetRelaxSolValsSol(), and SCIPmarkRelaxSolValid()
1714 receive an additional argument "relax" to store the relaxation handler as creator of the relaxation solution.
1715
1716- LP:
1717 - SCIProwGetOriginCons() now returns a SCIP_CONS* instead of a SCIP_CONSHDLR*, use SCIProwGetOriginConshdlr() for the previous behavior
1718 - SCIPcreateRowCons() and SCIPcreateEmptyRowCons() now expect a SCIP_CONS* instead of a SCIP_CONSHDLR*,
1719 use SCIPcreateRowConshdlr() and SCIPcreateEmptyRowConshdlr(), respectively, for the previous behavior
1720 - deprecated SCIPlpfeastol() and SCIPchgLpfeastol(), use SCIPgetLPFeastol() and SCIPsetLPFeastol()
1721
1722- new parameter "divecontext" for every method that queries statistics for a diveset. The context can be used to distinguish between the dive set
1723 as single (standalone) heuristic or within Adaptive Diving.
1724- new parameters "divecontext" and "iterlim" to SCIPperformGenericDivingAlgorithm() to control in which context (single,adaptive) statistics are updated.
1725
1726- SCIPcopyVars, SCIPcopy, SCIPcopyConsCompression, and SCIPgetVarCopy do not copy variables that are marked as relaxation-only,
1727 thus it cannot be assumed anymore that each active variable from the master SCIP also has a counterpart in the copy.
1728 SCIPcopy, SCIPcopyConsCompression, and SCIPcopyConss can now return *valid=TRUE if some non-checked and non-enforced constraints were not copied, e.g.,
1729 because they involved relaxation-only variables. Thus, a copy is already regarded as valid if all checked or enforced constraints were copied successfully.
1730
1731- linking constraint handler:
1732 - changed type of vals argument from int* to SCIP_Real* in SCIPcreateConsLinking() and SCIPcreateConsBasicLinking()
1733 - SCIPgetIntvarLinking() has been renamed to SCIPgetLinkvarLinking().
1734 - changed return value of SCIPgetValsLinking() from int* to SCIP_Real*.
1735 - new method SCIPgetBinvarsDataLinking().
1736
1737- SCIPbendersCheckSubproblemOptimality() now returns a boolean indicating whether the subproblem is optimal or not.
1738 Previously this result was returned through a parameter. The change was required to facilitate the integration with
1739 the UG framework.
1740
1741- deleted SCIPcombineTwoInt(), SCIPcombineThreeInt(), SCIPcombineFourInt(); use the appropriate SCIPhashTwo(), ..., SCIPhashSeven() method instead
1742
1743- SCIPsetupBendersSubproblem takes a parameter of the enforcement type.
1744
1745- SCIPcreateNlpiProb takes a hashmap to store the map between the nlrows and the index in the nlrow array.
1746
1747### New API functions
1748
1749- SCIPallowWeakDualReds() and SCIPallowStrongDualReds() replace the deprecated SCIPallowObjProp() and SCIPallowDualReds(), respectively
1750- methods have been added to facilitate the transfer of Benders' decomposition cuts between solvers in UG. These include
1751 SCIPapplyBendersStoredCuts(), SCIPbendersGetNStoredCuts(), SCIPbendersGetStoredCutData() and
1752 SCIPbendersGetStoredCutOrigData().
1753- added SCIPisConvexAbspower()
1754- new functions SCIPsolGetType(), SCIPsolGetRelax(), SCIPsolSetRelax(), SCIPsolSetLPRelaxation(), SCIPsolSetStrongbranch(),
1755 SCIPsolSetPseudo to set or query the new type attribute of a primal solution. The type attribute gives information
1756 about the origin of the solution, ie, whether it was created by a relaxation handler,
1757 by the LP relaxation, by strong branching, by the current pseudo solution, or by a primal heuristic.
1758 The meaning of the argument 'heur' in all creation methods for primal solutions such as SCIPcreateSol() stays unchanged.
1760- new API functions SCIPsetCommonSubscipParams(), SCIPtranslateSubSol(), and SCIPtranslateSubSols() shared by several Large Neighborhood Search heuristics.
1761- new API function SCIPgetLPDualDegeneracy() to get two measures for the dual degeneracy of the current LP
1762- new API functions SCIPdivesetIsAvailable() to check preconditions of a dive set and SCIPdivesetIsPublic() to check if the dive set can be used
1763 by other primal heuristics.
1764- new API functions SCIPcomputeOrbitsSym(), SCIPcomputeOrbitsFilterSym(), SCIPgetPropertiesPerm(), SCIPdetermineBinvarAffectedSym(),
1765 SCIPdetermineNVarsAffectedSym(), SCIPcomputeComponentsSym(), and SCIPextendSubOrbitope(), SCIPgenerateOrbitopeVarsMatrix() for symmetry computations
1766- new API functions SCIPvarIsRelaxationOnly() and SCIPvarMarkRelaxationOnly() to query and set, resp., whether a variable is marked as relaxation-only
1767- new API functions SCIPconshdlrGetNUpdateConss() and SCIPconshdlrGetUpdateConss(), for expert users only
1768- new API function SCIPgetNConflictDualproofsApplied()
1769- new API functions SCIPeventGetOldtype() and SCIPeventGetNewtype() for the new event when changing the variable type
1770- new API function SCIPisConvexConsQuadratic() to check whether a quadratic constraint is convex when a given set of variables would be fixed
1771- new API functions SCIPgetLPFeastol(), SCIPsetLPFeastol(), and SCIPresetLPFeastol() to get, set, and reset (to the default), respectively, the primal
1772 feasibility tolerance for the LP relaxation
1773- new API functions SCIPcleanupConss{Linear,Varbound,Setppc,Logicor,Knapsack}() to clean up inactive variables from those types of linear constraints
1774- new API function SCIPsetBendersSubproblemComp() used to add a custom comparison method for ordering the Benders'
1775 decomposition subproblem solves. The comparison method is used to help with load balancing.
1776- new API function SCIPgetRowObjParallelism to get the objective parallelism of a row
1777- new API function SCIPcolGetAge to get the age of a column
1778- added SCIPhashThree(), SCIPhashFive(), SCIPhashSix(), and SCIPhashSeven() that complement SCIPhashTwo(), SCIPhashFour() to combine 32bit integers to
1779 a 32bit hash value
1780- new API function SCIPgenerateAndApplyBendersOptCut is used to generate a Benders' optimality cut using the dual
1781 solutions. This function can be supplied vectors for the primal and dual solution for generating an optimality cut.
1782 This avoids the need for a SCIP instance to solve the Benders' decomposition subproblem and generating cuts.
1783- new API function SCIPconsAddCoef used for adding a coefficient to a linear-type constraint.
1784- new API functions SCIPconsNonlinearGetRhs, SCIPconsNonlinearGetLhs and SCIPconsNonlinearAddLinearCoef for getting the
1785 RHS and LHS from a nonlinear-type constraint and adding a linear coefficient to the constraint.
1786- new API function SCIPbendersSolSlackVarsActive for checking whether any slack variables from the feasibility phase are
1787 active in the subproblem solution.
1788- new API functions SCIPbendersSetSubproblemType and SCIPbendersGetSubproblemType sets and gets the subproblem type.
1789 This is either:
1790 - Convex constraints with continuous variables
1791 - Convex constraints with discrete variables
1792 - Non-convex constraints with continuous variables
1793 - Non-convex constraints with discrete variables
1794- new API functions SCIPbendersSetSubproblemIsNonlinear() and SCIPbendersSubproblemIsNonlinear() for setting and
1795 identifying whether the Benders' decomposition subproblems contain nonlinear constraints. Similarly, the functions
1796 SCIPbendersSetMasterIsNonlinear() and SCIPbendersMasterIsNonlinear() sets and identifies whether the Benders'
1797 decomposition master problem contains nonlinear constraints.
1798- new API function SCIPapplyBendersDecomposition for applying Benders' decomposition given a decomposition in the DEC
1799 format
1800- new API function SCIPwasNodeLastBranchParent to query if a node has been the parent of the most recent branching in the tree
1801- new API functions SCIPtreemodelInit(), SCIPtreemodelFree(), SCIPtreemodelIsEnabled(), SCIPtreemodelSelectCandidate() related to the new
1802 treemodel way of comparing branching candidates. These functions are only currently used for reliability pscost branching, but they can be used
1803 in other parts of the code.
1804- New function SCIPcalcChildEstimateIncrease() to compute the increase in the child estimation
1805- new API functions SCIPisOrbitalfixingEnabled() and SCIPgetSymmetryNGenerators() to check whether orbital fixing is
1806 enabled and to get the number of generators of the current symmetry group, respectively
1807- new API function SCIPdelNlRow() to remove a row from the NLP
1808
1809### Event system
1810
1811- new event type SCIP_EVENTTYPE_NODEDELETE to react on nodes that are about to be deleted from the tree
1812
1813### Changed parameters
1814
1815- renamed parameter "propagating/orbitalfixing/enableafterrestart" to ".../symmetry/recomputerestart"
1816- Parameter "misc/allowdualreds" is now called "misc/allowstrongdualreds"
1817- Parameter "misc/allowobjprop" is now called "misc/allowweakdualreds"
1818- changed default values of propagation (new value: 1, old value: 5) and separation frequency (new value: -1, old value: 5) in cons_orbitope.c
1819- all primal heuristics that use sub-SCIPs are disabled within the heuristics fast emphasis setting
1820- deleted parameter heuristics/localbranching/useuct, use heuristics/useuctsubscip instead
1821- changed default value of "presolving/symbreak/detectorbitopes" (new value: TRUE, old value: FALSE)
1822- extended range of "misc/usesymmetry" (new range: [0,3], old range: [0,2])
1837- changed default value of "heuristics/coefdiving/freq" (old: 10, new: -1)
1838- changed default value of "heuristics/conflictdiving/freq" (old: -1, new: 10)
1839- changed default value of "heuristics/conflictdiving/lockweight" (old: 1.0, new: 0.75)
1840- replaced parameter "numerics/lpfeastol" by "numerics/lpfeastolfactor" to specify which factor should be applied to the SCIP feasibility
1841 tolerance to initialize the primal feasibility tolerance of the LP solver
1842- enabling aggressive presolving now activates all available presolving plugins,
1843 and decreases the presolving/restartfac parameter correctly with respect to default.
1844- changed default value of heuristics/rins/nodesquot to 0.3 (was 0.1), to compensate
1845 the removal of a hard coded factor of 3.0 in the code without affecting the default behavior
1846 of the RINS heuristic.
1847- changed default value of "constraints/quadratic/empathy4and" (old: 0, new: 2)
1848- changed default value of "propagating/redcost/useimplics" (old: TRUE, new: FALSE)
1849
1850### New parameters
1851
1852- the possibility to define the Benders' decomposition auxiliary variables as implicit integer is provided. This
1853 behavior is controlled with an additional parameter in the Benders' decomposition framework.
1854- added parameter benders/<bendersname>/cutcheck to enable the generation of Benders' decomposition cuts during solution
1855 checking.
1856- constraints/orbitope/usedynamicprop: the possibility to propagate orbitope constraints by reordering the rows based on the
1857 branching strategy is provided (only possible for non-model constraints)
1858
1859- new parameters heuristics/shiftandpropagate/minfixingratelp and heuristics/locks/minfixingratelp to stop the
1860 heuristics after propagating integer fixings if no sufficient fixing of the all variables (including continuous)
1861 could be achieved. These parameters help to avoid solving LP's that are comparable in hardness to the main root LP.
1862
1863- Added parameters branching/midpull and branching/midpullreldomtrig to control by how much to move
1864 the branching point for an external branching candidate closer to the middle of the candidates domain. The
1865 default of 0.75 and 0.5, respectively, uses a point that is 75*alpha% closer to the middle of the domain, where
1866 alpha is the relative width of the candidates domain (width of local domain divided by width of global domain),
1867 if the latter is below 0.5, and alpha=1.0 otherwise. That is, with the default settings, a branching point is
1868 chosen closer to the middle of the candidates domain if the variables local domain is still similar to its
1869 global domain, but is chosen closer to the LP solution if the local domain is much smaller than the global
1870 domain.
1871
1872- Added parameter lp/minmarkowitz to set the Markowitz stability threshold (range 0.0001 to 0.9999).
1873 High values sacrifice performance for stability.
1874
1875- Added parameters benders/<bendersname>/lnsmaxcalls and benders/<bendersname>/lnsmaxcallsroot to the Benders'
1876 decomposition core. These parameters limit the number of Benders' decomposition subproblem checks, for the full
1877 branch-and-bound tree and root node respective, when solving the auxiliary problem of LNS hueristics. These
1878 parameters only have effect if the lnscheck parameter is set to TRUE.
1879
1880- Added parameter cons/linear/maxmultaggrquot to limit the maximum coefficient dynamism of an equation on which
1881 multiaggregation is performed. This replaces a compiler define of the same name.
1882 Default value is 1000, smaller values make multiaggregations numerically more stable.
1883- new global parameter heuristics/useuctsubscip that affects all LNS heuristics using common sub-SCIP parameters
1884
1885- new parameter branching/relpscost/degeneracyaware to switch degeneracy-aware hybrid branching
1886
1887- new parameter separation/rapidlearning/checkexec to check whether rapid learning is allowed to run locally
1888- new parameters separation/rapidlearning/check{degeneracy,dualbound,leaves,nsols,obj} to enable checking the respective feature for local rapid learning
1889- new parameter separation/rapidlearning/maxcalls to limit the number of rapid learning executions
1890- new parameter separation/rapidlearning/nwaitingnodes to set the number of waiting nodes before the dual bound is checked
1891- new parameter separation/rapidlearning/mindegeneracy to set the minimal threshold of degenerate basic-variables
1892- new parameters separation/rapidlearning/minvarconsratio to set the minimal ratio of unfixed variables in relation to basis size
1893
1894- new parameters to control the Benders' decomposition two-phase method.
1895 - constraints/benderslp/depthfreq: after the maxdepth is reached, then the two-phase method will only be called at
1896 nodes at a depth divisible by depthfreq.
1897 - constraints/benderslp/stalllimit: after the maxdepth is reached, if there has been no improvement in the dual bound
1898 for stalllimit number of nodes, then the two-phase method is executed for the next fractional LP solution that is
1899 encountered.
1900 - constraints/benderslp/iterlimit: after the root node, only iterlimit fractional LP solutions are used at each node
1901 to generate Benders' decomposition cuts.
1902
1903- new parameters for symmetry handling
1904 - new parameter "propagating/symmetry/maxgenerators"
1905 - new parameter "propagating/symmetry/checksymmetries"
1906 - new parameter "propagating/symmetry/displaynorbitvars"
1907 - new parameter "propagating/symmetry/conssaddlp"
1908 - new parameter "propagating/symmetry/addsymresacks"
1909 - new parameter "propagating/symmetry/detectorbitopes"
1910 - new parameter "propagating/symmetry/addconsstiming"
1911 - new parameter "propagating/symmetry/ofsymcomptiming"
1912 - new parameter "propagating/symmetry/performpresolving"
1913 - new parameter "propagating/symmetry/recomputerestart"
1914 - new parameter "constraints/symresack/checkmonotonicity"
1915 - new parameter "propagating/symmetry/compresssymmetries"
1916 - new parameter "propagating/symmetry/compressthreshold"
1917 - new parameter "propagating/symmetry/disableofrestart"
1918 - new parameter "propagating/symmetry/symfixnonbinaryvars"
1919
1920- new parameter for enabling shared memory parallelisation for solving Benders' decomposition subproblems. The parameter
1921 benders/<bendersname>/numthreads sets the number of threads used for parallel subproblem solving.
1922
1923- new parameters to control enhancements for solving MINLPs by Benders' decomposition
1924 - benders/<bendersname>/execfeasphase: enables the feasibility phase for solving the Benders' decomposition
1925 subproblems
1926 - benders/<bendersname>/slackvarcoef: the initial coefficient of the slack variable for the feasibility phase
1927 - benders/<bendersname>/checkconsconvexity: should the constraints be checked for convexity. This can be set to FALSE
1928 if you are certain that the NLP subproblem is convex.
1929
1930- new parameter presolving/clqtablefac (default value 2.0) as limit on number of entries in clique table relative to number of problem nonzeros
1931
1932- new parameter conflict/uselocalrows (default: TRUE) to incorporate locally valid cuts / rows for dual proof analysis
1933
1934- new return code SCIP_NOTIMPLEMENTED for functions, e.g., in the LPI that have not been implemented (yet)
1935
1936- new parameter separating/cgmip/genprimalsols that allows to generate initial primal solutions from Gomory cuts
1937
1938- new parameter branching/relpscost/filtercandssym to allow filtering from orbits
1939
1940- new parameter branching/relpscost/transsympscost to transfer pseudo cost information to orbit
1941
1942- new parameters for tree size estimation and restarts:
1943 - estimation/restarts/restartpolicy (default value n)
1944 - estimation/method (default value c)
1945 - estimation/restarts/restartlimit (default value 1)
1946 - estimation/restarts/minnodes (default value 1000)
1947 - estimation/restarts/countonlyleaves (default value FALSE)
1948 - estimation/restarts/restartfactor (default value 2)
1949 - estimation/coefmonoprog (default value 0.3667)
1950 - estimation/coefmonossg (default value 0.6333)
1951 - estimation/restarts/hitcounterlim (default value 50)
1952 - estimation/reportfreq (default value -1)
1953 - estimation/regforestfilename (default value "-")
1954 - estimation/completiontype (default value a)
1955 - estimation/treeprofile/enabled (default value FALSE)
1956 - estimation/treeprofile/minnodesperdepth (default value 20)
1957 - estimation/useleafts (default value TRUE)
1958 - estimation/ssg/nmaxsubtrees (default value -1)
1959 - estimation/ssg/nminnodeslastsplit (default value 0)
1960
1961- new parameter constraints/linear/extractcliques to turn clique extraction off
1962
1963- new emphasis setting emphasis/numerics to increase numerical stability of (mostly) presolving operations such as (multi-)aggregations at the cost of performance.
1964
1965- new parameters for treemodel:
1966 - new parameter branching/treemodel/enable to enable the treemodel in reliability pscost branching and possible
1967 future parts of the code where it could be used.
1968 - new parameter branching/treemodel/highrule to specify which branching rule to use when treemodel thinks the node
1969 is high in the tree.
1970 - new parameter branching/treemodel/lowrule to specify which branching rule to use when treemodel thinks the node
1971 is low in the tree.
1972 - new parameter branching/treemodel/height to specify at which (estimated) height a node is high or low in the tree.
1973 - new parameter branching/treemodel/filterhigh to specify whether to filter dominated candidates in nodes which are
1974 high in the tree.
1975 - new parameter branching/treemodel/filterlow to specify whether to filter dominated candidates in nodes which are
1976 low in the tree.
1977 - new parameter branching/treemodel/maxfpiter to specify the maximum number of fixed-point iterations to use when
1978 computing the ratio of a variable using the fixed-point method.
1979 - new parameter branching/treemodel/maxsvtsheight to specify the maximum height to compute the SVTS score exactly
1980 before approximating it using the ratio.
1981 - new parameter branching/treemodel/fallbackinf defines the fallback strategy to use when the tree size estimates
1982 obtained by SVTS are infinite.
1983 - new parameter branching/treemodel/fallbacknoprim defines the fallback strategy to use when no primal bound is known
1984 and thus SVTS would not be able to compute a tree size (it would be infinite).
1985 - new parameter branching/treemodel/smallpscost defines the value under which pscosts are considered too small to be
1986 the deciding factor for branching, in which case it may be better not to use the treemodel.
1987
1988- new parameters for symmetry handling constraint handlers to enforce that also non-model constraint are copied:
1989 - new parameter "constraints/orbisack/forceconscopy"
1990 - new parameter "constraints/orbitope/forceconscopy"
1991 - new parameter "constraints/symresack/forceconscopy"
1992
1993
1994### Data structures
1995
1996- small changes in constants of hash functions
1997- added fast 2-universal hash functions for two to seven 32bit elements with 32bit output
1998- extended SCIPpqueueCreate() by additional callback argument SCIP_DECL_PQUEUEELEMCHGPOS to catch position changes
1999- new methods SCIPpqueueDelPos() to delete elements at a specific position in the priority queue and SCIPpqueueFind() to
2000 find a specific position. It is recommended to track position changes using the new callback SCIP_DECL_PQUEUEELEMCHGPOS.
2001 In contrast, using SCIPpqueueFind() can be slow because it needs to compare the element it searches for
2002 with each slot in the queue.
2003
2004### Build system
2005
2006- The default value for DFLAGS in the non-cmake buildsystem has changed from -MM to -MMD. This will break the
2007 generation of depend.* files if that was done by a compiler call that relied on -MM. The new preferred way
2008 to handle compilation dependencies is to additionally use $(DFLAGS) when compiling the object files (.o) and
2009 to include the generated .d files in the Makefile, see also "Build system / Makefile" below.
2010
2011Unit tests
2012----------
2013 - new unit test for treemodel.
2014
2015Testing
2016-------
2017
2018 - fixed an issue that may have lead to wrong status reports in the evaluation scripts
2019
2020Build system
2021------------
2022
2023### Cmake
2024
2025- avoid problem with doubly defined object together with CPLEX
2026
2027### Makefile
2028
2029- Removed static object compilation dependency files (depend.*). If using a GCC compatible compiler, then dependency
2030 files are now dynamically created and updated during build. The new dependency files (*.d) reside next to each object
2031 file (.o) in the corresponding obj subdirectory.
2032- added support for building against Ipopt >= 3.13
2033- unify compiler switches for Intel compiler and avoid problem with doubly defined object together with CPLEX
2034
2035Fixed bugs
2036----------
2037
2038- fix and improve memory handling in symmetry computation
2039- fix shown number of applied conflicts in solving statistics
2040- fix wrongly skipping strong branching call and using old information if LP was solved with 0 iterations
2041- fix minor bug in cut score calculation
2042- fixed several bugs related to rounding locks of variables not being updated correctly
2043- small fix in cons_varbound.c to skip changing bounds of multi-aggregated variables in separation callback
2044- fixed issue in SCIPtightenVar* and SCIPinferVar* that occurs for small bound changes
2045- fixed rejecting minimal boundchange that changed sign of variable, even though SCIPisLb/UbBetter approved it
2046- fixed issue in generateCutNonConvex() which is triggered when adding quadratic constraints during the solving process
2047- fixed bug in freeing the reoptimization data if no problem exists
2048- fixed bug in SCIPreoptReleaseData() when freeing all stored constraints
2049- fixed bug when freeing the transformed problem via interactive shell if reoptimization is enabled
2050- fixed two issues related to (near-)redundant logicor constraints in presolving
2051- fixed counting of aggregations in XOR constraint handler
2052- fixed handling of unbounded solutions
2053- fixed update of LP size information when an LP error occured during probing
2054- handle special case of variable bound constraints during aggregating variables
2055- tighten sides of linear constraints before trying to upgrade them to more specialized constraints (knapsack, logic-or etc.) when calling SCIPupgradeConsLinear()
2056- fixed an issue in repair heuristic in the case of loose (noncolumn) variables
2057- allow user to correctly set heuristics/alns/(un)fixtol
2058- fixed an issue in heur_completesol which is triggered during bound widening of unbounded continuous variables
2059- fixed bug in cons_indicator if addopposite is true
2060- fixed bug in sepa_disjunctive: treat case that conflictgraph is empty
2061- added safety check in conversion to rational number to avoid overflow
2062- fixed bug in interval evaluation with power-operator in certain situations
2063- fixed behavior of SCIPmatrixCreate() regarding memory management and column generation
2064- SCIPmatrixCreate() returns complete=FALSE when locks do not add up
2065- fixed bug in sepa_oddcylce when variables are fixed
2066- fixed numerical issues related to tighter constraint sides in varbound constraint handler
2067- fixed update of watchedvars in logicor constraint handler in case of a restart during the tree
2068- fixed treatment of multi-aggregated variables in logicor constraint handler
2069- handle special case of redundant implications
2070- fixed numerical issue related to almost-0-values in pseudosolution conflict analysis
2071- fixed numerical issue related to very large greatest common dividers in linear constraint handler
2072- avoid using implications on multiaggregated variables when propagating implications
2073- fixed creation of (Lagrangian) variable bounds in the OBBT propagator
2074- fixed sorting of primal solutions
2075- fixed cleaning of clean buffer in conflict analysis
2076- avoid probing on variables with huge bounds in shift and propagate heuristic
2077- fix issue in printing solutions for variables that have been added by the dual sparsify presolver
2078- fix issue related to fixing redundant logic-or constraints after presolving
2079- fixed bug when parsing logic-or and and-constraints
2080- fixed wrong assert in updateLazyBounds()
2081- fixed bug in pricestore, which resulted in too many problem variables being added
2082- fixed bug in cons_knapsack where weight of clique was not reset after an infeasibility was detected
2083- fixed bug in presol_inttobinary which did not take into account that the aggregation could be rejected due to numerics
2084- fixed bug in debug solution mechanism in connection to variables created by presol_inttobinary
2085- fixed wrong indexing while undoing the implications from a redundant variable in SCIPshrinkDisjunctiveVarSet
2086- redundancy checks in SCIPnodeAddBoundinfer now take a possible change to an active variable into account
2087- fixed adding already added quadratic rows to NLP relaxation during solve
2088- fixed issue related to variable locks in the varbound constraint handler
2089- fixed bug in the quadratic constraint handler when changing infinite constraint sides
2090- fixed sorting of variables in linear constraint handler
2091- added additional checks to ensure numerical stability of dual proofs
2092- fixed a case when activities of a linear constraint got unreliable but where still used for reductions
2093- ensure that lhs <= rhs for linear constraints (without tolerances)
2094- make handling of read errors in SCIPfread() consistent between version with and without ZLIB
2095- correctly drop variable events in cons_indicator in restart
2096- fixed bug in cons_orbitope with upgrading of orbitope constraints
2097- additional checks in some presolvers for time limit being exceeded
2098- fixed bug in presolving of cons_varbound with multi-aggregated variables
2099- improve numerics in conflict analysis by using double-double arithmetic
2100- fixed bound acceptance condition to avoid inconsistencies
2101- fixed numerics in pseudoobj propagator by using double-double arithmetic
2102
2103Miscellaneous
2104-------------
2105
2106- modified display column for memory usage ("mem"), which reports the memory usage most of the time, but shows the creator name
2107 (heuristic, relaxation handler, LP relaxation, strong branching, pseudo solution) of every new incumbent solution. Together with this change,
2108 heuristic display characters have been unified to represent the type of the heuristic
2109 (diving, Large neighborhood search, propagation, etc.), see also type_heur.h.
2110- added assert that ensures that the locks of a variable have been decreased to 0 when it is freed
2111- added more output for completing a partial solution
2112- checks in debug mode that clean buffer memory is really clean when being freed are now disabled by default
2113- don't compute symmetries if reoptimization is enabled
2114- prefer integral values when fixing an almost-fixed continuous variable in the trivial presolver
2115- changed the name of the variable that is added by the OSiL reader to represent the quadratic or nonlinear parts of the objective function
2116- SCIP_EXPORT is now defined as __attribute__((__visibility__("default"))) if GCC and no SCIP config header is used
2117
2118@page RN60 Release notes for SCIP 6.0
2119
2120@section RN602 SCIP 6.0.2
2121*************************
2122
2123Features
2124--------
2125
2126- The abspower constraint handler now passes more accurate convexity
2127 information to the NLP relaxation.
2128
2129Examples and applications
2130-------------------------
2131
2132- added parsing functionality for optcumulative constraints in CIP format
2133
2134Interface changes
2135-----------------
2136
2137### Interfaces to external software
2138
2139- Updated the Mosek LP solver interface to support Mosek 9.0.
2140
2141Build system
2142------------
2143
2144### Cmake
2145
2146- new target to 'doc' to build documentation
2147- ctests now fail if parameter file not found
2148- add flag STATIC_GMP and improve GMP find module
2149- remove non-API methods from library (API methods use new macro SCIP_EXPORT)
2150- increase minimal required CMake version to 3.3
2151- correct paths and dependency information when installing SCIP
2152
2153Fixed bugs
2154----------
2155- fixed SCIP-Jack presolving bug that could lead to wrong results for Steiner arborescence problems
2156- fixed wrong unboundedness result in case not all constraints were already in the LP and enforcement was
2157 skipped because an optimal solution was found
2158- fixed wrong enforcement of constraints in the disjunction constraint handler
2159- fixed wrong behavior of concurrent solve ignoring initial solutions
2160- fixed bug in concurrent solve when problem was already solved in presolving
2161- aggregate non-artificial integer variable for XOR constraints with two binary variables and delete constraint
2162- copy the objective offset when copying the original problem
2163- fixed bug in SCIPlpiGetBInvARow in lpi_cpx using wrong size of resulting vector
2164- fixed quadratic runtime behavior in sepa_aggregation
2165- fixed statistics of separators
2166- improve numerical stability in varbound constraint handler by using double-double arithmetic
2167- fixed bug in propagation of dual proofs
2168- fixed bugs that arise for multiaggregated indicator variables by disallowing multiaggregation for them
2169- improve numerical stability in SCIPcomputeBilinEnvelope* by using double-double arithmetic
2170- fixed bug related to releasing pending bound changes in tree.c
2171- set STD FENV_ACCESS pragma to on in code that changes floating-point rounding mode
2172- disable GCC optimizations in main interval arithmetic code to prevent wrong optimizations
2173- fixed wrong assert in cons_xor concerning the variable type
2174- fixed different behavior of SCIPisLbBetter and SCIPisUbBetter between having NDEBUG defined or not
2175- correctly handle bound disjunctions in symmetry detection
2176- fixed issue in reliability branching related to the LP error flag not being reset
2177- fixed treatment of near-infinite bounds in shiftandpropagate's problem transformation
2178- fixed handling of infinite values in SCIPcomputeHyperplaneThreePoints()
2179- fixed comparisons of infinite values in heur_intshifting.c and heur_shifting.c
2180- fixed bug related to updating unprocessed cuts in the cutpool
2181- fixed bug related to enabling quadratic constraints during `CONSINITLP`
2182- add missing SCIP_EXPORT for functions used by GCG
2183- fixed memory leak and wrong initialization for trival cases in cons_symresack.c
2184- fixed bug with upgrading to packing/partitioning orbitopes
2185- fixed bug with the status while upgrading in presol_symbreak.c
2186- fixed wrong stage while clearing the conflict store
2187- fixed behavior of SCIPfixVar() by setting infeasible pointer to TRUE if fixval lies outside variable domain
2188- allow tightenVar() in SCIP_STAGE_PROBLEM stage
2189- fixed bug in cumulative constraint handler when separating the LP solution
2190- fixed issues with integer overflow in cumulative constraint handler
2191- fixed bug where the convexity of Benders' decomposition subproblems was checked even when users defined subproblem
2192 solving methods. Now, as per the documentation, the user must explicitly state whether the subproblem is convex
2193- fixed wrong indexing in heur_dualval
2194- fixed issue with basis status in SoPlex LPi
2195
2196Miscellaneous
2197-------------
2198
2199- statistics now output primal/dual bounds if objective limit is reached
2200- memory check in debug mode is now disabled by default
2201- message is now provided to the user to inform that automatic Benders' auxiliary variable lower bound computations are
2202 not activated when user defined subproblem solving methods are present
2203- corrected documentation of the primalgap in SCIP; describe when it will be infinite
2204
2205@section RN601 SCIP 6.0.1
2206*************************
2207
2208Features
2209--------
2210
2211- when using a debug solution every (multi-)aggregation will be checked w.r.t. this solution
2212
2213Performance improvements
2214------------------------
2215
2216- try greedy solution first before solving knapsack exactly using dynamic programming in SCIPsolveKnapsackExactly,
2217 compute greedy solution by weighted median selection.
2218- don't consider implied redcost by default in the reduced cost propagator
2219
2220Interface changes
2221-----------------
2222
2223### Deleted and changed API methods and macros
2224
2225- The preprocessor macro NO_CONFIG_HEADER now needs to be defined when
2226 including SCIP header files from a SCIP build or installation that
2227 has been build via the Makefile-only build system.
2228
2229- The following preprocessor macros have been renamed:
2230 WITH_ZLIB to SCIP_WITH_ZLIB, WITH_GMP to SCIP_WITH_GMP, WITH_READLINE
2231 to SCIP_WITH_READLINE, NO_SIGACTION to SCIP_NO_SIGACTION, NO_STRTOK_R
2232 to SCIP_NO_STRTOK_R, ROUNDING_FE to SCIP_ROUNDING_FE, ROUNDING_FP to
2233 SCIP_ROUNDING_FP, ROUNDING_MS to SCIP_ROUNDING_MS. Note, however, that
2234 the names of macros NO_RAND_R and NO_STRERROR_R have not been changed
2235 so far.
2236
2237### New API functions
2238
2239- SCIPhashmapInsertInt(), SCIPhashmapSetImageInt(), and SCIPhashmapGetImageInt() to use integer values as images in hashmaps
2240
2241### Command line interface
2242
2243- warn about coefficients in MPS files with absolute value larger than SCIP's value for infinity
2244
2245### Changed parameters
2246
2247- default clock type for timing is now wallclock
2248
2249Unit tests
2250----------
2251
2252- added unit tests for exact knapsack solving and (weighted) median selection algorithms
2253
2254Build system
2255------------
2256
2257### Cmake
2258
2259- add missing GMP dependency when compiling with SYM=bliss
2260- add DL library when linking to CPLEX to avoid linker errors
2261- new config.h header defining the current build configuration, e.g. SCIP_WITH_GMP
2262
2263Fixed bugs
2264----------
2265
2266- fixed handling of weights in cons_sos1 and cons_sos2 (NULL pointer to weights)
2267- fixed handling of unbounded LPs in SCIP and in several LPIs; added heuristic method to guess solution
2268- the STO reader is capable of handling scenarios defined using lower case "rhs"
2269- fixed OPB reader for instances without explicit plus signs
2270- correct dual solution values for bound constraints
2271- fixed recognition of variable with only one lock in cons_bivariate, cons_quadratic, and cons_nonlinear
2272- fixed update of constraint violations in solution repair in cons_bivariate, cons_quadratic, and cons_nonlinear
2273- print error message and terminate if matrix entries of a column are not consecutive in mps format
2274- fixed incorrect handling of fixed variables when transfer of cuts from LNS heuristic for Benders' decomposition
2275- fix returning local infeasible status by Ipopt interface if Ipopt finds problem locally infeasible
2276- skip attempt to apply fixings in linear constraint handler during solving stage as LP rows cannot change anymore
2277- fixed bug when reading >= indicator constraints in MPS format
2278- fix issue with nodes without domain changes if we ran into solution limit in prop_orbitalfixing
2279- fixed unresolved reference to CppAD's microsoft_timer() function on builds with MS/Intel compilers on Windows
2280- ignore implications added through SCIPaddVarImplication() that are redundant to global bounds also in the
2281 special case of an implication between two binary variables; also, use implications instead of cliques in the case
2282 of a binary implied variable with nonbinary active representative
2283- fixed bug with aggregated variables that are aggregated in propagation of cons_sos1
2284- fixed some special cases in SCIPselect/SCIPselectWeighted methods
2285- relaxed too strict assertion in Zirounding heuristic
2286- fixed the upgrade routine to XOR constraints: aggregate integer variable if its coefficient has the wrong sign
2287- fixed handling of nonartificial parity variables when deleting redundant XOR constraints
2288- earlier deletion of trivial XOR constraints (at most 1 operator left)
2289- fixed wrong hashmap accesses and added sanity check for the correct hashmap type
2290- avoid copying of unbounded solutions from sub-SCIPs as those cannot be checked completely
2291- corrected the output of the first LP value in case of branch-and-price
2292- fixed possible integer overflow, which led to wrong conclusion of infeasibility, in energetic reasoning of cons_cumulative.c
2293
2294Miscellaneous
2295-------------
2296- do not scale linear constraints to integral coefficients
2297
2298@section RN600 SCIP 6.0.0
2299*************************
2300
2301Features
2302--------
2303
2304- new diving heuristic farkasdiving that dives into the direction of the pseudosolution and tries to construct Farkas-proofs
2305- new diving heuristic conflictdiving that considers locks from conflict constraints
2306- restructuring of timing of symmetry computation that allows to add symmetry handling components within presolving
2307- `lp/checkstability` is properly implemented for SoPlex LPI (spx2)
2308- new branching rule lookahead that evaluates potential child and grandchild nodes to determine a branching decision
2309- limits on the number of presolving rounds a presolver (maxrounds) or propagator/constraint handler (maxprerounds)
2310 participates in are now compared to the number of calls of the particular presolving method, not the number of
2311 presolving rounds in general, anymore
2312- new miscellaneous methods for constraints that have a one-row linear representation in pub_misc_linear.h
2313- a Benders' decomposition framework has been added. This framework provides the functionality for a user to solve a
2314 decomposed problem using Benders' decomposition. The framework includes classical optimality and feasibility cuts,
2315 integer optimality cuts and no-good cuts.
2316- add statistic that presents the number of resolves for instable LPs
2317- new readers for stochastic programming problems in SMPS format (reader_sto.h, reader_smps.h)
2318
2319Performance improvements
2320------------------------
2321
2322- cuts generated from certain quadratic constraints with convex feasible region are now global
2323- performance improvements for Adaptive Large Neighborhood Search heur_alns.c
2324 + all neighborhoods now start conservatively from maximum fixing rate
2325 + new default parameter settings for bandit selection parameters
2326 + no adjustment of minimum improvement by default
2327- improved bound tightening for some quadratic equations
2328- constraint handler checking order for original solutions has been modified to check those with negative check priority
2329 that don't need constraints after all other constraint handlers and constraints have been checked
2330- deactivate gauge cuts
2331
2332Examples and applications
2333-------------------------
2334
2335- new example `brachistochrone` in CallableLibrary examples collection; this example implements a discretized model to
2336 obtain the trajectory associated with the shortest time to go from point A to B for a particle under gravity only
2337- new example `circlepacking` in CallableLibrary examples collection; this example models two problems about packing
2338 circles of given radii into a rectangle
2339- new price-and-branch application for the ringpacking problem
2340- new stochastic capacitated facility location example demonstrating the use of the Benders' decomposition framework
2341
2342Interface changes
2343-----------------
2344
2345### New and changed callbacks
2346
2347- added parameter locktype to `SCIP_DECL_CONSLOCK` callback to indicate the type of variable locks
2348
2349### Deleted and changed API methods
2350
2351- Symmetry:
2352 + removed function SCIPgetTimingSymmetry() in presol_symmetry.h since this presolver does not compute symmetries independent
2353 of other components anymore
2354 + additional argument `recompute` to SCIPgetGeneratorsSymmetry() to allow recomputation of symmetries
2355
2356- Random generators:
2357 + the seed of SCIPinitializeRandomSeed() is now an unsigned int
2358 + the seed of SCIPsetInitializeRandomSeed() is now an unsigned int and it returns an unsigned int
2359 + new parameter for SCIPcreateRandom() to specify whether the global random seed shift should be used in the creation of
2360 the random number generator
2361
2362- Miscellaneous:
2363 + additional arguments `preferrecent`, `decayfactor` and `avglim` to SCIPcreateBanditEpsgreedy() to choose between
2364 weights that are simple averages or higher weights for more recent observations (the previous default).
2365 The last two parameters are used for a finer control of the exponential decay.
2366 + functions SCIPintervalSolveUnivariateQuadExpression(), SCIPintervalSolveUnivariateQuadExpressionPositive(), and
2367 SCIPintervalSolveUnivariateQuadExpressionPositiveAllScalar() now take an additional argument to specify already
2368 existing bounds on x, providing an entire interval ([-infinity,infinity]) gives previous behavior
5464 - added writing for pip files (linear, quadratic, polynomial nonlinear, polynomial abspower, polynomial bivariate, and
5465 and constraints)
5466 - CIP format variable characters defined, e.g. `SCIP_VARTYPE_INTEGER_CHAR`
5467 - Improved support for wbo format for weighted PBO problems, IBM's xml-solution
5468 format and pip and zimpl format for polynomial mixed-integer programs
5469 - New reader for (standard) bounds on variables
5470 - Extended reader for CIP models to handle various new constraints, including all types of linear constraints
5471 - flatzinc reader is now capable to read cumulative constraints
5472 - changed opb(/wbo) reader which now creates pseudoboolean constraints instead of linear- and and-constraints, only a
5473 non-linear objective will create and-constraints inside the reader and while reading a wbo file the topcost constraint
5474 is created as well
5475 - added clock for determine the time for reading
5476 - added reader for variable bounds (reader_bnd.{c,h})
5477 - Removed method SCIPreadSol(); call solution reading via SCIPreadProb() which calls the solution reader for .sol files.
5478
5479- Nonlinear:
5480 - Major extensions for nonlinear CIP, new option for n-ary branching on nonlinear variables (within pseudocost branching rule)
5481 - added BETA version of constraint handler for nonlinear constraints (cons_nonlinear.{c,h}) to handle nonlinear
5482 equations given by algebraic expressions using operands like addition, multiplication, power, exp, log, bivariate
5483 nonlinear constraints; currently no trigonometric functions
5484 - added BETA version of constraint handler for bivariate nonlinear constraints (cons_bivariate.{c,h}) to compute tight
5485 estimators for 1-convex and convex-concave bivariate nonlinear functions (given as expression tree)
5486 - the gams writer can now write nonlinear, abspower and bivariate constraints
5487 - Extended writer for GAMS and pip format to write more types of nonlinear constraints
5488 - the pip and zimpl reader now create nonlinear constraints for polynomials of degree > 2
5489
5490- Presolving:
5491 - new dual presolving methods in cons_setppc and cons_logicor
5492 - new presolving step `removeConstraintsDueToNegCliques` in locigor constraint handler which updates logicor constraints
5493 to setppc constraints if a negated clique inside this constraint exist, by default is off
5494 - new presolving step in cons_knapsack (detectRedundantVars, deleteRedundantVars) which determines redundant variables
5495 in knapsack constraint with or without using clique information
5496 - cons_logicor is now able to replace all aggregated variables in presolving by there active or negation of an active
5497 variable counterpart
5498 - prop_pseudoobj is now working in presolving as well
5499 - implement presolving in exitpre() in cons_orbitope and cons_indicator
5500
5501- Propagators:
5502 - added counter for number calls and timing for resolve propagation calls for constraint handler and propagators
5503 - Propagators are now also called in node presolving
5504 - the probing presolver presol_probing.{c.h} is now a propagator prop_probing.{c,h}, all corresponding parameters moved as well
5505 - the redcost separator sepa_redcost.{c.h} is now a propagator prop_redcost.{c,h}, all corresponding parameters moved as well
5506 - outsourced propAndSolve() method in solve.c which calls domain propagation and solving of the lp and relaxation
5507
5508- Statistic:
5509 - solutions which are given by the user from the outside are now marked by `#` in the output
5510 - the `Solving Time` is now spitted into presolving, solving and reading time
5511 - Presolvers section has new column `AddCons` which states the number of added constraint
5512 - Constraints section has new column named \#ResProp which show the number of resolve propagation calls of certain
5513 constraint handler
5514 - Constraint Timing section has a new column \#ResProp which states the time spend in resolve propagation method of the
5515 constraint handler
5516 - improved output of propagators in display statistics
5517 - new section `Propagator Timing` which shows the time spend in different callbacks of the propagator
5518 - rearranged first two columns of Propagators section; \#Propagate and \#ResProp stating the number of call for
5519 propagation and resolve propagation; the Time column is moved into the new section Propagator Timings
5520 - Constraints section has new column named `MaxNumber` which the maximum number of active constraint of a certain
5521 constraint handler
5522 - 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
5523 solving LPs with zero iterations (only refactorization)
5524 - The display of statistics for presolvers, propagators, constraints and LP solving has changed.
5525
5526Performance improvements
5527------------------------
5528
5529- Reorganized filtering process of separation storage (allows adding cuts for different solutions)
5530- Improved presolving for various constraint handlers
5531- Improved propagation methods for variable bound constraints
5532- Improved performance for quadratic constraints
5533- performance improvements in prop_vbounds
5534- child selection rules now get also applied when the relaxation value is equal to the bound changed in branching
5535- added dual reduction to cons_cumulative.c
5536- for continuous variables, the pseudo costs update and the pscost branching rule now use the same strategies for
5537 updating the pseudo costs and estimating the improvement in the LP bound
5538- only perform probing if the variables are locked
5539- performance and memory consumption improvements in xmlparse.c
5540- Improved knapsack cover cuts
5541- avoid very long separation times of LEWIs in cons_knapsack for very large minimal covers
5542- used SCIPallocMemoryArray() instead of SCIPallocBlockMemoryArray() which leads to fewer memory consumption in
5543 getLiftingSequence() in cons_knapsack, also improved cache use bei using an extra array instead blockmemory chunks
5544- switched FASTMIP from 1 to 2 for CPLEX and changed default pricing rule back to steepest edge pricing instead of
5545 quickstart steepest edge pricing
5546- made sorting method more robust
5547- LNS heuristics now use SCIPcopy() by default
5548- considering inactive variables in undercover heuristic; limiting effort for solving covering problem
5549- if during probing mode the LP relaxation is solved from scratch, e.g., when calling the shiftandpropagate heuristic
5550 before root node solving, then we clear the resulting LP state, since it might be a bad starting basis for the next
5551 solve of the LP relaxation (controlled by new parameter `lp/clearinitialprobinglp`)
5552- included LP simplifier into SoPlex LP interface, applied when solving from scratch (lpi_spx.cpp)
5553- new presolving steps in varbound constraint handler, tightening bounds, coefficients, sides and pairwise presolving
5554
5555Interface changes
5556-----------------
5557
5558- Miscellaneous:
5559 - The emphasis setting types now distinguish between plugin-type specific parameter settings (default, aggressive, fast, off),
5560 which are changed by SCIPsetHeuristics/Presolving/Separating(), and global emphasis settings (default, cpsolver, easycip,
5561 feasibility, hardlp, optimality, counter), which can be set using SCIPsetEmphasis().
5562
5563### New and changed callbacks
5564
5565- added propagator timings `SCIP_PROPTIMING_BEFORELP`, `SCIP_PROPTIMING_DURINGLPLOOP` and `SCIP_PROPTIMING_AFTERLPLOOP` for
5566 all propagation callbacks (see propagators and constraint handlers) which lead to calling the propagation methods of a
5567 propagator before the lp is solved, during the lp loop and after the lp solving loop
5568
5569- Conflict Analysis:
5570 - Added parameter `separate` to conflict handler callback method SCIP_DECL_CONFLICTEXEC() that defines whether the conflict
5571 constraint should be separated or not.
5572
5573- Constraint Handler:
5574 - The new constraint handler callback SCIP_DECL_CONSDELVARS() is called after variables were marked for deletion.
5575 This method is optional and only of interest if you are using SCIP as a branch-and-price framework. That means,
5576 you are generating new variables during the search. If you are not doing that just define the function pointer
5577 to be `NULL`.
5578 If this method gets implemented you should iterate over all constraints of the constraint handler and delete all
5579 variables that were marked for deletion by SCIPdelVar().
5580
5581- NLP Solver Interface:
5582 - The callbacks SCIP_DECL_NLPIGETSOLUTION() and SCIP_DECL_NLPISETINITIALGUESS() got new parameters to get/set values of
5583 dual variables.
5584 - The callback SCIP_DECL_NLPICOPY() now passes the block memory of the target SCIP as an additional parameter.
5585
5586- Presolving:
5587 - New parameters `isunbounded` and `isinfeasible` for presolving initialization (SCIP_DECL_CONSINITPRE(),
5588 SCIP_DECL_PRESOLINITPRE(), SCIP_DECL_PROPINITPRE()) and presolving deinitialization (SCIP_DECL_CONSEXITPRE(),
5589 SCIP_DECL_PRESOLEXITPRE(), SCIP_DECL_PROPEXITPRE()) callbacks of presolvers,
5590 constraint handlers and propagators, telling the callback whether the problem was already declared to be
5591 unbounded or infeasible. This allows to avoid expensive steps in these methods in case the problem is already
5592 solved, anyway.
5593
5594 Note, that the C++ methods
5595 - scip::ObjConshdlr::scip_presol() corresponding to SCIP_DECL_CONSPRESOL()
5596 - scip::ObjConshdlr::scip_initpre() corresponding to SCIP_DECL_CONSINITPRE()
5597 - scip::ObjPresol::scip_initpre() corresponding to SCIP_DECL_PRESOLINITPRE()
5598 - scip::ObjProp::scip_initpre() corresponding to SCIP_DECL_PROPINITPRE()
5599 - scip::ObjConshdlr::scip_exitpre() corresponding to SCIP_DECL_CONSEXITPRE()
5600 - scip::ObjPresol::scip_exitpre() corresponding to SCIP_DECL_PRESOLEXITPRE()
5601 - scip::ObjProp::scip_exitpre() corresponding to and SCIP_DECL_PROPEXITPRE()
5602 are virtual functions. That means, if you are not adding the new parameters, your code will still compile, but these methods are not executed.
5603 - Propagators are now also called in during presolving, this is supported by the new callback methods SCIP_DECL_PROPINITPRE(),
5604 SCIP_DECL_PROPEXITPRE(), and SCIP_DECL_PROPPRESOL().
5605 - The new parameters `nnewaddconss` and `naddconss` were added to the constraint handler callback method SCIP_DECL_CONSPRESOL()
5606 and the presolver callback method SCIP_DECL_PRESOLEXEC(). These parameters were also added to corresponding C++ wrapper
5607 class methods (scip_presol() in objconshdlr.h and scip_exec() in objpresol.h)
5608
5609- Problem Data:
5610 - The callback SCIP_DECL_PROBCOPY() got a new parameter `global` to indicate whether the global problem or a local version is copied.
5611
5612### Deleted and changed API methods
5613
5614- implemented SCIPlpiGetPrimalRay() in SoPlex interface that has become available with SoPlex version 1.5.0.2
5615- allowed calling SCIPgetRowSolActivity() in `SCIP_STAGE_SOLVED`, since LP is still available
5616- various extensions and modifications for expressions and expression trees (too much to state here)
5617- The result value `SCIP_NEWROUND` has been added, it allows a separator/constraint handler to start a new separation round
5618 (without previous calls to other separators/conshdlrs).
5619- SCIPcalcNodeselPriority() got a new parameter `branchdir`, which defines the type of branching that was performed: upwards, downwards, or fixed.
5620
5621- Constraint Handlers:
5622 - Method SCIPincludeQuadconsUpgrade() of quadratic constraint handler got new parameter `active` to indicate whether the upgrading method is active by default.
5623 - Method SCIPseparateRelaxedKnapsack() in knapsack constraint handler got new parameter `cutoff`, which is a pointer to store whether a cutoff was found.
5624
5625- Nonlinear expressions, relaxation, and solver interface:
5626 - SCIPcreateNLPSol() now creates a `SCIP_SOL` that is linked to the solution of the current NLP relaxation
5627 - Various types and functions dealing with polynomial expressions have been renamed to use the proper terms `monomial` and
5628 `polynomial` in nonlinear expressions (nlpi/∗expr*); results in many renamings of types, structs and methods.
5629 - The methods SCIPnlpGetObjective(), SCIPnlpGetSolVals(), and SCIPnlpGetVarSolVal() have been removed, use SCIPgetNLPObjval(),
5630 SCIPvarGetNLPSol() and SCIPcreateNLPSol() to retrieve NLP solution values instead.
5631 SCIPcreateNLPSol() now returns an error if NLP or NLP solution is not available
5632 - Removed methods SCIPmarkRequireNLP() and SCIPisNLPRequired(), because the NLP is now always constructed if nonlinearities
5633 are present.
5634 - SCIPgetNLP() has been removed and NLP-methods from pub_nlp.h have been moved to scip.h, which resulted in some renamings, too.
5635 - renamed SCIPexprtreeEvalSol() to SCIPevalExprtreeSol() and now located in scip.h.
5636 - renamed SCIPexprtreeEvalIntLocalBounds() to SCIPevalExprtreeLocalBounds() and now located in scip.h.
5637 - renamed SCIPexprtreeEvalIntGlobalBounds() to SCIPevalExprtreeGlobalBounds() and now located in scip.h.
5638 - The functions SCIPnlpiGetSolution() and SCIPnlpiSetInitialGuess() got additional arguments to get/set dual values.
5639 - The method SCIPgetNLPI() got a new parameter `nlpiproblem`, which is a pointer to store the NLP solver interface problem.
5640
5641- Timing:
5642 - SCIPincludeProp() got additional parameters to set the timing mask of the propagator and the new callbacks and parameters
5643 related to calling the propagator in presolving.
5644 - SCIPincludeConshdlr() got additional parameters to set the variable deletion callback function and the timing mask for
5645 propagation.
5646 - removed parameters timelimit and memorylimit from SCIPapplyRens()
5647 - The parameters `timelimit` and `memorylimit` were removed from SCIPapplyRens().
5648
5649- Problem Data:
5650 - The method SCIPcopyProb() got a new parameter `global` to indicate whether the global problem or a local version is copied.
5651
5652- Writing and Parsing Constraints:
5653 - The methods SCIPwriteVarName(), SCIPwriteVarsList(), and SCIPwriteVarsLinearsum() got a new boolean parameter `type`
5654 that indicates whether the variable type should be written or not.
5655 - The methods SCIPparseVarName() and SCIPparseVarsList() got a new output parameter `endptr` that is filled with the position
5656 where the parsing stopped.
5657 - The method SCIPwriteVarsList() got additionally a new parameter `delimiter` that defines the character which is used for delimitation.
5658
5659- Variables:
5660 - SCIPmarkDoNotMultaggrVar()/SCIPvarMarkDoNotMultaggr() now allow to mark negated and aggregated variables
5661 - SCIPgetVarCopy() got a new parameter `success` that will be FALSE if method is called after problem creation stage and no hash map is
5662 given or no image for the given variable is contained in the given hash map.
5663 - SCIPchgVarType() got an extra boolean parameter to store if infeasibility is recognized while upgrading a variable from continuous
5664 type to an integer type.
5665 - SCIPdelVar() got a new parameter `deleted`, which stores whether the variable was successfully marked to be deleted.
5666
5667### New API functions
5668
5669- information about the quality of the solution of an LP (currently the condition number of the basis matrix) can now be:
5670 + requested from the LPI (currently only available for CPLEX): methods SCIPlpiGetRealSolQuality() and
5671 + SCIPprintLPSolutionQuality() command display lpsolquality in interactive shell display column lpcond to show
5672 + estimate on condition number, if available
5673- SCIPround() and SCIPfeasRound() to round to nearest integer
5674- SCIPsortRealRealIntInt() and corresponding sorting/inserting/deleting methods in pub_misc.h and necessary defines in misc.c
5675- SCIPsortRealIntLong(), SCIPsortPtrPtrRealInt() and corresponding sorting/inserting/deleting methods in
5676 pub_misc.h and necessary defines in misc.c
5677- SCIPcomputeLPRelIntPoint() to compute relative interior point of the current LP
5678- SCIPstartSolvingTime() and SCIPstopSolvingTime() which can be used to start or stop the solving time clock
5679- SCIPstrToRealValue() and SCIPstrCopySection() in pub_misc.h; these methods can be used to convert a string
5680 into a `SCIP_Real` value and to copy a substring.
5681- SCIPgetBinvarRepresentatives() which gets binary variables that are equal to some given binary variables,
5682 and which are either active, fixed, or multi-aggregated, or the negated variables of active, fixed, or multi-aggregated variables
5683- SCIPhasPrimalRay() and SCIPgetPrimalRayVal() that return whether a primal ray is stored and which value a
5684 given variable has in the primal ray, respectively
5685- SCIPsetConsModifiable()
5686- SCIPsetParam() which is a generic parameter setter method, independent of the parameter type
5687- SCIPpropInitpre(), SCIPpropExitpre(), SCIPpropPresol() which initializes, exists and executes the presolving phase
5688- SCIProwGetAge() to access the age of a row (pub_lp.h/lp.c)
5689- SCIPsolGetOrigObj() in pub_sol.h which returns for a solution in the original problem space the objective value
5690- SCIPretransformSol() in scip.h that allows to retransform a solution to the original space
5691- SCIPlpiClearState() to LP interfaces for clearing basis information in the LP solver
5692- SCIPgetSubscipDepth() to access the depth of the current SCIP as a copied subproblem
5693- SCIPdebugAddSolVal() and SCIPdebugGetSolVal() to add/get values to/from a debug solution
5694- SCIPsepastoreRemoveInefficaciousCuts() to remove non-efficious cuts from the separation storage
5695
5696- Nodes:
5697 - SCIPnodeGetParent() to get parent node of a node
5698 - SCIPnodesSharePath() in pub_tree.h that determines whether two nodes are on the same leaf-root path
5699 - SCIPnodesGetCommonAncestor() in pub_tree.h that finds the common ancestor node for two given nodes
5700
5701- Read and Write:
5702 - SCIPgetReadingTime() which returns the time for reading in seconds
5703 - SCIPparseVarsLinearsum(), SCIPparseVarsPolynomial() and SCIPwriteVarsPolynomial() and for writing and
5704 parsing polynomials in constraint handler writing/parsing methods
5705
5706- Memory:
5707 - SCIPcreateMesshdlrPThreads() and SCIPfreeMesshdlrPThreads() for allocating and deleting necessary memory
5708 for message handlers for parallel pthread version
5709 - SCIPallocClearMemoryArray() and BMSallocClearMemoryArray() for allocating cleared memory arrays in scip.h and memory.h
5710
5711- Intervals:
5712 - SCIPintervalPowerScalarInverse() to solve an equation y = x^p for given bounds on y and scalar exponent p
5713 - SCIPintervalQuadBivar() to compute tight bounds on a bivariate quadratic form
5714 - SCIPintervalSolveBivariateQuadExpressionAllScalar() to compute tight bounds on the solutions of a bivariate quadratic equation
5715
5716- Variables:
5717 - SCIPcomputeVarCurrent{L,U}b{Local,Global}() to compute local or global lower or upper bounds of a
5718 multiaggregated variable from the bounds of the aggregation variables
5719 - SCIPbranchVarValNary() for n-ary variable branching
5720 - SCIPgetNegatedVars() which returns all negated variables for a given array of variables, if the negated
5721 variables are not existing yet, they will be created
5722 - SCIPgetNTotalVars() that returns the total number of created vars, icluding variables that were deleted in the meantime
5723 - SCIPvarGetHashkey(), SCIPvarIsHashkeyEq(), SCIPvarGetHashkeyVal() in pub_var.h which can be used for `SCIP_HASHTABLE` of variables
5724 - SCIPvarGetNBdchgInfosLb() and SCIPvarGetNBdchgInfosUb() in pub_var.h returning the number of lower or upper bound changes on the active path
5725 - SCIPvarGetBdchgInfoLb() and SCIPvarGetBdchgInfoUb() returning the bound change information at the given position
5726 - SCIPvarMarkDeletable() to mark a variable to be deletable completely from the problem (for
5727 branch-and-price); can only be called before the variable is added to the problem
5728 - SCIPvarMarkNotDeletable() that marks a variable to be non-deleteable (used within SCIP for forbidding
5729 deletion of variables contained in solution, LP bases, (multi)aggregation, ...)
5730 - SCIPvarIsDeletable() that returns whether a variable is marked to be deletable (each variable is per default non-deletable)
5731
5732- NLP:
5733 - SCIPgetNLPVarsNonlinearity() to get for each variable in the NLP the number of NLP rows in which this variable appears in a nonlinear way
5734 - SCIPnlrowGetDualsol(), SCIPgetNLPVarsLbDualsol(), SCIPgetNLPVarsUbDualsol() to retrieve dual values from an NLP solution
5735 - SCIPgetNLPFracVars() to get the fractional variables in an NLP solution
5736
5737- Propagator:
5738 - SCIPpropSetPresolPriority() which changes the presolving priority of a given propagator